diff --git a/.coverage b/.coverage index e2758f37f6bcf08868366c562b868f1470273da6..06432f86388c65b4c3bdddac27e4a7c2d317413d 100644 Binary files a/.coverage and b/.coverage differ diff --git a/cov_html/coverage_html.js b/cov_html/coverage_html.js new file mode 100644 index 0000000000000000000000000000000000000000..3bf04bf927c190753dcc3dcb28e80b3c2ac545ba --- /dev/null +++ b/cov_html/coverage_html.js @@ -0,0 +1,589 @@ +// Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +// For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +// Coverage.py HTML report browser code. +/*jslint browser: true, sloppy: true, vars: true, plusplus: true, maxerr: 50, indent: 4 */ +/*global coverage: true, document, window, $ */ + +coverage = {}; + +// Find all the elements with shortkey_* class, and use them to assign a shortcut key. +coverage.assign_shortkeys = function () { + $("*[class*='shortkey_']").each(function (i, e) { + $.each($(e).attr("class").split(" "), function (i, c) { + if (/^shortkey_/.test(c)) { + $(document).bind('keydown', c.substr(9), function () { + $(e).click(); + }); + } + }); + }); +}; + +// Create the events for the help panel. +coverage.wire_up_help_panel = function () { + $("#keyboard_icon").click(function () { + // Show the help panel, and position it so the keyboard icon in the + // panel is in the same place as the keyboard icon in the header. + $(".help_panel").show(); + var koff = $("#keyboard_icon").offset(); + var poff = $("#panel_icon").position(); + $(".help_panel").offset({ + top: koff.top-poff.top, + left: koff.left-poff.left + }); + }); + $("#panel_icon").click(function () { + $(".help_panel").hide(); + }); +}; + +// Create the events for the filter box. +coverage.wire_up_filter = function () { + // Cache elements. + var table = $("table.index"); + var table_rows = table.find("tbody tr"); + var table_row_names = table_rows.find("td.name a"); + var no_rows = $("#no_rows"); + + // Create a duplicate table footer that we can modify with dynamic summed values. + var table_footer = $("table.index tfoot tr"); + var table_dynamic_footer = table_footer.clone(); + table_dynamic_footer.attr('class', 'total_dynamic hidden'); + table_footer.after(table_dynamic_footer); + + // Observe filter keyevents. + $("#filter").on("keyup change", $.debounce(150, function (event) { + var filter_value = $(this).val(); + + if (filter_value === "") { + // Filter box is empty, remove all filtering. + table_rows.removeClass("hidden"); + + // Show standard footer, hide dynamic footer. + table_footer.removeClass("hidden"); + table_dynamic_footer.addClass("hidden"); + + // Hide placeholder, show table. + if (no_rows.length > 0) { + no_rows.hide(); + } + table.show(); + + } + else { + // Filter table items by value. + var hidden = 0; + var shown = 0; + + // Hide / show elements. + $.each(table_row_names, function () { + var element = $(this).parents("tr"); + + if ($(this).text().indexOf(filter_value) === -1) { + // hide + element.addClass("hidden"); + hidden++; + } + else { + // show + element.removeClass("hidden"); + shown++; + } + }); + + // Show placeholder if no rows will be displayed. + if (no_rows.length > 0) { + if (shown === 0) { + // Show placeholder, hide table. + no_rows.show(); + table.hide(); + } + else { + // Hide placeholder, show table. + no_rows.hide(); + table.show(); + } + } + + // Manage dynamic header: + if (hidden > 0) { + // Calculate new dynamic sum values based on visible rows. + for (var column = 2; column < 20; column++) { + // Calculate summed value. + var cells = table_rows.find('td:nth-child(' + column + ')'); + if (!cells.length) { + // No more columns...! + break; + } + + var sum = 0, numer = 0, denom = 0; + $.each(cells.filter(':visible'), function () { + var ratio = $(this).data("ratio"); + if (ratio) { + var splitted = ratio.split(" "); + numer += parseInt(splitted[0], 10); + denom += parseInt(splitted[1], 10); + } + else { + sum += parseInt(this.innerHTML, 10); + } + }); + + // Get footer cell element. + var footer_cell = table_dynamic_footer.find('td:nth-child(' + column + ')'); + + // Set value into dynamic footer cell element. + if (cells[0].innerHTML.indexOf('%') > -1) { + // Percentage columns use the numerator and denominator, + // and adapt to the number of decimal places. + var match = /\.([0-9]+)/.exec(cells[0].innerHTML); + var places = 0; + if (match) { + places = match[1].length; + } + var pct = numer * 100 / denom; + footer_cell.text(pct.toFixed(places) + '%'); + } + else { + footer_cell.text(sum); + } + } + + // Hide standard footer, show dynamic footer. + table_footer.addClass("hidden"); + table_dynamic_footer.removeClass("hidden"); + } + else { + // Show standard footer, hide dynamic footer. + table_footer.removeClass("hidden"); + table_dynamic_footer.addClass("hidden"); + } + } + })); + + // Trigger change event on setup, to force filter on page refresh + // (filter value may still be present). + $("#filter").trigger("change"); +}; + +// Loaded on index.html +coverage.index_ready = function ($) { + // Look for a localStorage item containing previous sort settings: + var sort_list = []; + var storage_name = "COVERAGE_INDEX_SORT"; + var stored_list = undefined; + try { + stored_list = localStorage.getItem(storage_name); + } catch(err) {} + + if (stored_list) { + sort_list = JSON.parse('[[' + stored_list + ']]'); + } + + // Create a new widget which exists only to save and restore + // the sort order: + $.tablesorter.addWidget({ + id: "persistentSort", + + // Format is called by the widget before displaying: + format: function (table) { + if (table.config.sortList.length === 0 && sort_list.length > 0) { + // This table hasn't been sorted before - we'll use + // our stored settings: + $(table).trigger('sorton', [sort_list]); + } + else { + // This is not the first load - something has + // already defined sorting so we'll just update + // our stored value to match: + sort_list = table.config.sortList; + } + } + }); + + // Configure our tablesorter to handle the variable number of + // columns produced depending on report options: + var headers = []; + var col_count = $("table.index > thead > tr > th").length; + + headers[0] = { sorter: 'text' }; + for (i = 1; i < col_count-1; i++) { + headers[i] = { sorter: 'digit' }; + } + headers[col_count-1] = { sorter: 'percent' }; + + // Enable the table sorter: + $("table.index").tablesorter({ + widgets: ['persistentSort'], + headers: headers + }); + + coverage.assign_shortkeys(); + coverage.wire_up_help_panel(); + coverage.wire_up_filter(); + + // Watch for page unload events so we can save the final sort settings: + $(window).unload(function () { + try { + localStorage.setItem(storage_name, sort_list.toString()) + } catch(err) {} + }); +}; + +// -- pyfile stuff -- + +coverage.pyfile_ready = function ($) { + // If we're directed to a particular line number, highlight the line. + var frag = location.hash; + if (frag.length > 2 && frag[1] === 't') { + $(frag).addClass('highlight'); + coverage.set_sel(parseInt(frag.substr(2), 10)); + } + else { + coverage.set_sel(0); + } + + $(document) + .bind('keydown', 'j', coverage.to_next_chunk_nicely) + .bind('keydown', 'k', coverage.to_prev_chunk_nicely) + .bind('keydown', '0', coverage.to_top) + .bind('keydown', '1', coverage.to_first_chunk) + ; + + $(".button_toggle_run").click(function (evt) {coverage.toggle_lines(evt.target, "run");}); + $(".button_toggle_exc").click(function (evt) {coverage.toggle_lines(evt.target, "exc");}); + $(".button_toggle_mis").click(function (evt) {coverage.toggle_lines(evt.target, "mis");}); + $(".button_toggle_par").click(function (evt) {coverage.toggle_lines(evt.target, "par");}); + + coverage.assign_shortkeys(); + coverage.wire_up_help_panel(); + + coverage.init_scroll_markers(); + + // Rebuild scroll markers when the window height changes. + $(window).resize(coverage.build_scroll_markers); +}; + +coverage.toggle_lines = function (btn, cls) { + btn = $(btn); + var show = "show_"+cls; + if (btn.hasClass(show)) { + $("#source ." + cls).removeClass(show); + btn.removeClass(show); + } + else { + $("#source ." + cls).addClass(show); + btn.addClass(show); + } + coverage.build_scroll_markers(); +}; + +// Return the nth line div. +coverage.line_elt = function (n) { + return $("#t" + n); +}; + +// Return the nth line number div. +coverage.num_elt = function (n) { + return $("#n" + n); +}; + +// Set the selection. b and e are line numbers. +coverage.set_sel = function (b, e) { + // The first line selected. + coverage.sel_begin = b; + // The next line not selected. + coverage.sel_end = (e === undefined) ? b+1 : e; +}; + +coverage.to_top = function () { + coverage.set_sel(0, 1); + coverage.scroll_window(0); +}; + +coverage.to_first_chunk = function () { + coverage.set_sel(0, 1); + coverage.to_next_chunk(); +}; + +// Return a string indicating what kind of chunk this line belongs to, +// or null if not a chunk. +coverage.chunk_indicator = function (line_elt) { + var klass = line_elt.attr('class'); + if (klass) { + var m = klass.match(/\bshow_\w+\b/); + if (m) { + return m[0]; + } + } + return null; +}; + +coverage.to_next_chunk = function () { + var c = coverage; + + // Find the start of the next colored chunk. + var probe = c.sel_end; + var chunk_indicator, probe_line; + while (true) { + probe_line = c.line_elt(probe); + if (probe_line.length === 0) { + return; + } + chunk_indicator = c.chunk_indicator(probe_line); + if (chunk_indicator) { + break; + } + probe++; + } + + // There's a next chunk, `probe` points to it. + var begin = probe; + + // Find the end of this chunk. + var next_indicator = chunk_indicator; + while (next_indicator === chunk_indicator) { + probe++; + probe_line = c.line_elt(probe); + next_indicator = c.chunk_indicator(probe_line); + } + c.set_sel(begin, probe); + c.show_selection(); +}; + +coverage.to_prev_chunk = function () { + var c = coverage; + + // Find the end of the prev colored chunk. + var probe = c.sel_begin-1; + var probe_line = c.line_elt(probe); + if (probe_line.length === 0) { + return; + } + var chunk_indicator = c.chunk_indicator(probe_line); + while (probe > 0 && !chunk_indicator) { + probe--; + probe_line = c.line_elt(probe); + if (probe_line.length === 0) { + return; + } + chunk_indicator = c.chunk_indicator(probe_line); + } + + // There's a prev chunk, `probe` points to its last line. + var end = probe+1; + + // Find the beginning of this chunk. + var prev_indicator = chunk_indicator; + while (prev_indicator === chunk_indicator) { + probe--; + probe_line = c.line_elt(probe); + prev_indicator = c.chunk_indicator(probe_line); + } + c.set_sel(probe+1, end); + c.show_selection(); +}; + +// Return the line number of the line nearest pixel position pos +coverage.line_at_pos = function (pos) { + var l1 = coverage.line_elt(1), + l2 = coverage.line_elt(2), + result; + if (l1.length && l2.length) { + var l1_top = l1.offset().top, + line_height = l2.offset().top - l1_top, + nlines = (pos - l1_top) / line_height; + if (nlines < 1) { + result = 1; + } + else { + result = Math.ceil(nlines); + } + } + else { + result = 1; + } + return result; +}; + +// Returns 0, 1, or 2: how many of the two ends of the selection are on +// the screen right now? +coverage.selection_ends_on_screen = function () { + if (coverage.sel_begin === 0) { + return 0; + } + + var top = coverage.line_elt(coverage.sel_begin); + var next = coverage.line_elt(coverage.sel_end-1); + + return ( + (top.isOnScreen() ? 1 : 0) + + (next.isOnScreen() ? 1 : 0) + ); +}; + +coverage.to_next_chunk_nicely = function () { + coverage.finish_scrolling(); + if (coverage.selection_ends_on_screen() === 0) { + // The selection is entirely off the screen: select the top line on + // the screen. + var win = $(window); + coverage.select_line_or_chunk(coverage.line_at_pos(win.scrollTop())); + } + coverage.to_next_chunk(); +}; + +coverage.to_prev_chunk_nicely = function () { + coverage.finish_scrolling(); + if (coverage.selection_ends_on_screen() === 0) { + var win = $(window); + coverage.select_line_or_chunk(coverage.line_at_pos(win.scrollTop() + win.height())); + } + coverage.to_prev_chunk(); +}; + +// Select line number lineno, or if it is in a colored chunk, select the +// entire chunk +coverage.select_line_or_chunk = function (lineno) { + var c = coverage; + var probe_line = c.line_elt(lineno); + if (probe_line.length === 0) { + return; + } + var the_indicator = c.chunk_indicator(probe_line); + if (the_indicator) { + // The line is in a highlighted chunk. + // Search backward for the first line. + var probe = lineno; + var indicator = the_indicator; + while (probe > 0 && indicator === the_indicator) { + probe--; + probe_line = c.line_elt(probe); + if (probe_line.length === 0) { + break; + } + indicator = c.chunk_indicator(probe_line); + } + var begin = probe + 1; + + // Search forward for the last line. + probe = lineno; + indicator = the_indicator; + while (indicator === the_indicator) { + probe++; + probe_line = c.line_elt(probe); + indicator = c.chunk_indicator(probe_line); + } + + coverage.set_sel(begin, probe); + } + else { + coverage.set_sel(lineno); + } +}; + +coverage.show_selection = function () { + var c = coverage; + + // Highlight the lines in the chunk + $(".linenos .highlight").removeClass("highlight"); + for (var probe = c.sel_begin; probe > 0 && probe < c.sel_end; probe++) { + c.num_elt(probe).addClass("highlight"); + } + + c.scroll_to_selection(); +}; + +coverage.scroll_to_selection = function () { + // Scroll the page if the chunk isn't fully visible. + if (coverage.selection_ends_on_screen() < 2) { + // Need to move the page. The html,body trick makes it scroll in all + // browsers, got it from http://stackoverflow.com/questions/3042651 + var top = coverage.line_elt(coverage.sel_begin); + var top_pos = parseInt(top.offset().top, 10); + coverage.scroll_window(top_pos - 30); + } +}; + +coverage.scroll_window = function (to_pos) { + $("html,body").animate({scrollTop: to_pos}, 200); +}; + +coverage.finish_scrolling = function () { + $("html,body").stop(true, true); +}; + +coverage.init_scroll_markers = function () { + var c = coverage; + // Init some variables + c.lines_len = $('#source p').length; + c.body_h = $('body').height(); + c.header_h = $('div#header').height(); + + // Build html + c.build_scroll_markers(); +}; + +coverage.build_scroll_markers = function () { + var c = coverage, + min_line_height = 3, + max_line_height = 10, + visible_window_h = $(window).height(); + + c.lines_to_mark = $('#source').find('p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par'); + $('#scroll_marker').remove(); + // Don't build markers if the window has no scroll bar. + if (c.body_h <= visible_window_h) { + return; + } + + $("body").append("<div id='scroll_marker'> </div>"); + var scroll_marker = $('#scroll_marker'), + marker_scale = scroll_marker.height() / c.body_h, + line_height = scroll_marker.height() / c.lines_len; + + // Line height must be between the extremes. + if (line_height > min_line_height) { + if (line_height > max_line_height) { + line_height = max_line_height; + } + } + else { + line_height = min_line_height; + } + + var previous_line = -99, + last_mark, + last_top, + offsets = {}; + + // Calculate line offsets outside loop to prevent relayouts + c.lines_to_mark.each(function() { + offsets[this.id] = $(this).offset().top; + }); + c.lines_to_mark.each(function () { + var id_name = $(this).attr('id'), + line_top = Math.round(offsets[id_name] * marker_scale), + line_number = parseInt(id_name.substring(1, id_name.length)); + + if (line_number === previous_line + 1) { + // If this solid missed block just make previous mark higher. + last_mark.css({ + 'height': line_top + line_height - last_top + }); + } + else { + // Add colored line in scroll_marker block. + scroll_marker.append('<div id="m' + line_number + '" class="marker"></div>'); + last_mark = $('#m' + line_number); + last_mark.css({ + 'height': line_height, + 'top': line_top + }); + last_top = line_top; + } + + previous_line = line_number; + }); +}; diff --git a/cov_html/droplet_growth___init___py.html b/cov_html/droplet_growth___init___py.html new file mode 100644 index 0000000000000000000000000000000000000000..4f9f9652e48a660b261a1fba44eb98ffcad0859d --- /dev/null +++ b/cov_html/droplet_growth___init___py.html @@ -0,0 +1,65 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for droplet_growth/__init__.py: 100%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>droplet_growth/__init__.py</b> : + <span class="pc_cov">100%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 1 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">1 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">0 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">droplet_growth</span> <span class="key">import</span> <span class="nam">register</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/droplet_growth_count_py.html b/cov_html/droplet_growth_count_py.html new file mode 100644 index 0000000000000000000000000000000000000000..685652a47cbd9469488d97acfb0c33aacd528b55 --- /dev/null +++ b/cov_html/droplet_growth_count_py.html @@ -0,0 +1,326 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for droplet_growth/count.py: 15%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>droplet_growth/count.py</b> : + <span class="pc_cov">15%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 88 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">13 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">75 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">functools</span> <span class="key">import</span> <span class="nam">partial</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">feature</span> <span class="key">import</span> <span class="nam">peak_local_max</span> </span><span class="r"></span></p> + <p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">feature</span> <span class="key">import</span> <span class="nam">peak</span> </span><span class="r"></span></p> + <p id="t6" class="run"><span class="n"><a href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">scipy</span> <span class="key">import</span> <span class="nam">ndimage</span> <span class="key">as</span> <span class="nam">ndi</span> </span><span class="r"></span></p> + <p id="t7" class="pln"><span class="n"><a href="#t7">7</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t8" class="run"><span class="n"><a href="#t8">8</a></span><span class="t"><span class="key">def</span> <span class="nam">peak_local_max_labels</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">min_distance</span><span class="op">=</span><span class="num">1</span><span class="op">,</span> <span class="nam">threshold_abs</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t9" class="pln"><span class="n"><a href="#t9">9</a></span><span class="t"> <span class="nam">threshold_rel</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">exclude_border</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">indices</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t10" class="pln"><span class="n"><a href="#t10">10</a></span><span class="t"> <span class="nam">num_peaks</span><span class="op">=</span><span class="nam">np</span><span class="op">.</span><span class="nam">inf</span><span class="op">,</span> <span class="nam">footprint</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">labels</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t11" class="pln"><span class="n"><a href="#t11">11</a></span><span class="t"> <span class="nam">num_peaks_per_label</span><span class="op">=</span><span class="nam">np</span><span class="op">.</span><span class="nam">inf</span><span class="op">,</span> <span class="nam">p_norm</span><span class="op">=</span><span class="nam">np</span><span class="op">.</span><span class="nam">inf</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t12" class="pln"><span class="n"><a href="#t12">12</a></span><span class="t"> <span class="str">"""Find peaks in an image as coordinate list or boolean mask.</span> </span><span class="r"></span></p> + <p id="t13" class="pln"><span class="n"><a href="#t13">13</a></span><span class="t"><span class="str"> Peaks are the local maxima in a region of `2 * min_distance + 1`</span> </span><span class="r"></span></p> + <p id="t14" class="pln"><span class="n"><a href="#t14">14</a></span><span class="t"><span class="str"> (i.e. peaks are separated by at least `min_distance`).</span> </span><span class="r"></span></p> + <p id="t15" class="pln"><span class="n"><a href="#t15">15</a></span><span class="t"><span class="str"> If both `threshold_abs` and `threshold_rel` are provided, the maximum</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"><span class="str"> of the two is chosen as the minimum intensity threshold of peaks.</span> </span><span class="r"></span></p> + <p id="t17" class="pln"><span class="n"><a href="#t17">17</a></span><span class="t"><span class="str"> .. versionchanged:: 0.18</span> </span><span class="r"></span></p> + <p id="t18" class="pln"><span class="n"><a href="#t18">18</a></span><span class="t"><span class="str"> Prior to version 0.18, peaks of the same height within a radius of</span> </span><span class="r"></span></p> + <p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"><span class="str"> `min_distance` were all returned, but this could cause unexpected</span> </span><span class="r"></span></p> + <p id="t20" class="pln"><span class="n"><a href="#t20">20</a></span><span class="t"><span class="str"> behaviour. From 0.18 onwards, an arbitrary peak within the region is</span> </span><span class="r"></span></p> + <p id="t21" class="pln"><span class="n"><a href="#t21">21</a></span><span class="t"><span class="str"> returned. See issue gh-2592.</span> </span><span class="r"></span></p> + <p id="t22" class="pln"><span class="n"><a href="#t22">22</a></span><span class="t"><span class="str"> Parameters</span> </span><span class="r"></span></p> + <p id="t23" class="pln"><span class="n"><a href="#t23">23</a></span><span class="t"><span class="str"> ----------</span> </span><span class="r"></span></p> + <p id="t24" class="pln"><span class="n"><a href="#t24">24</a></span><span class="t"><span class="str"> image : ndarray</span> </span><span class="r"></span></p> + <p id="t25" class="pln"><span class="n"><a href="#t25">25</a></span><span class="t"><span class="str"> Input image.</span> </span><span class="r"></span></p> + <p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"><span class="str"> min_distance : int, optional</span> </span><span class="r"></span></p> + <p id="t27" class="pln"><span class="n"><a href="#t27">27</a></span><span class="t"><span class="str"> The minimal allowed distance separating peaks. To find the</span> </span><span class="r"></span></p> + <p id="t28" class="pln"><span class="n"><a href="#t28">28</a></span><span class="t"><span class="str"> maximum number of peaks, use `min_distance=1`.</span> </span><span class="r"></span></p> + <p id="t29" class="pln"><span class="n"><a href="#t29">29</a></span><span class="t"><span class="str"> threshold_abs : float or None, optional</span> </span><span class="r"></span></p> + <p id="t30" class="pln"><span class="n"><a href="#t30">30</a></span><span class="t"><span class="str"> Minimum intensity of peaks. By default, the absolute threshold is</span> </span><span class="r"></span></p> + <p id="t31" class="pln"><span class="n"><a href="#t31">31</a></span><span class="t"><span class="str"> the minimum intensity of the image.</span> </span><span class="r"></span></p> + <p id="t32" class="pln"><span class="n"><a href="#t32">32</a></span><span class="t"><span class="str"> threshold_rel : float or None, optional</span> </span><span class="r"></span></p> + <p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"><span class="str"> Minimum intensity of peaks, calculated as</span> </span><span class="r"></span></p> + <p id="t34" class="pln"><span class="n"><a href="#t34">34</a></span><span class="t"><span class="str"> ``max(image) * threshold_rel``.</span> </span><span class="r"></span></p> + <p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"><span class="str"> exclude_border : int, tuple of ints, or bool, optional</span> </span><span class="r"></span></p> + <p id="t36" class="pln"><span class="n"><a href="#t36">36</a></span><span class="t"><span class="str"> If positive integer, `exclude_border` excludes peaks from within</span> </span><span class="r"></span></p> + <p id="t37" class="pln"><span class="n"><a href="#t37">37</a></span><span class="t"><span class="str"> `exclude_border`-pixels of the border of the image.</span> </span><span class="r"></span></p> + <p id="t38" class="pln"><span class="n"><a href="#t38">38</a></span><span class="t"><span class="str"> If tuple of non-negative ints, the length of the tuple must match the</span> </span><span class="r"></span></p> + <p id="t39" class="pln"><span class="n"><a href="#t39">39</a></span><span class="t"><span class="str"> input array's dimensionality. Each element of the tuple will exclude</span> </span><span class="r"></span></p> + <p id="t40" class="pln"><span class="n"><a href="#t40">40</a></span><span class="t"><span class="str"> peaks from within `exclude_border`-pixels of the border of the image</span> </span><span class="r"></span></p> + <p id="t41" class="pln"><span class="n"><a href="#t41">41</a></span><span class="t"><span class="str"> along that dimension.</span> </span><span class="r"></span></p> + <p id="t42" class="pln"><span class="n"><a href="#t42">42</a></span><span class="t"><span class="str"> If True, takes the `min_distance` parameter as value.</span> </span><span class="r"></span></p> + <p id="t43" class="pln"><span class="n"><a href="#t43">43</a></span><span class="t"><span class="str"> If zero or False, peaks are identified regardless of their distance</span> </span><span class="r"></span></p> + <p id="t44" class="pln"><span class="n"><a href="#t44">44</a></span><span class="t"><span class="str"> from the border.</span> </span><span class="r"></span></p> + <p id="t45" class="pln"><span class="n"><a href="#t45">45</a></span><span class="t"><span class="str"> indices : bool, optional</span> </span><span class="r"></span></p> + <p id="t46" class="pln"><span class="n"><a href="#t46">46</a></span><span class="t"><span class="str"> If True, the output will be an array representing peak</span> </span><span class="r"></span></p> + <p id="t47" class="pln"><span class="n"><a href="#t47">47</a></span><span class="t"><span class="str"> coordinates. The coordinates are sorted according to peaks</span> </span><span class="r"></span></p> + <p id="t48" class="pln"><span class="n"><a href="#t48">48</a></span><span class="t"><span class="str"> values (Larger first). If False, the output will be a boolean</span> </span><span class="r"></span></p> + <p id="t49" class="pln"><span class="n"><a href="#t49">49</a></span><span class="t"><span class="str"> array shaped as `image.shape` with peaks present at True</span> </span><span class="r"></span></p> + <p id="t50" class="pln"><span class="n"><a href="#t50">50</a></span><span class="t"><span class="str"> elements. ``indices`` is deprecated and will be removed in</span> </span><span class="r"></span></p> + <p id="t51" class="pln"><span class="n"><a href="#t51">51</a></span><span class="t"><span class="str"> version 0.20. Default behavior will be to always return peak</span> </span><span class="r"></span></p> + <p id="t52" class="pln"><span class="n"><a href="#t52">52</a></span><span class="t"><span class="str"> coordinates. You can obtain a mask as shown in the example</span> </span><span class="r"></span></p> + <p id="t53" class="pln"><span class="n"><a href="#t53">53</a></span><span class="t"><span class="str"> below.</span> </span><span class="r"></span></p> + <p id="t54" class="pln"><span class="n"><a href="#t54">54</a></span><span class="t"><span class="str"> num_peaks : int, optional</span> </span><span class="r"></span></p> + <p id="t55" class="pln"><span class="n"><a href="#t55">55</a></span><span class="t"><span class="str"> Maximum number of peaks. When the number of peaks exceeds `num_peaks`,</span> </span><span class="r"></span></p> + <p id="t56" class="pln"><span class="n"><a href="#t56">56</a></span><span class="t"><span class="str"> return `num_peaks` peaks based on highest peak intensity.</span> </span><span class="r"></span></p> + <p id="t57" class="pln"><span class="n"><a href="#t57">57</a></span><span class="t"><span class="str"> footprint : ndarray of bools, optional</span> </span><span class="r"></span></p> + <p id="t58" class="pln"><span class="n"><a href="#t58">58</a></span><span class="t"><span class="str"> If provided, `footprint == 1` represents the local region within which</span> </span><span class="r"></span></p> + <p id="t59" class="pln"><span class="n"><a href="#t59">59</a></span><span class="t"><span class="str"> to search for peaks at every point in `image`.</span> </span><span class="r"></span></p> + <p id="t60" class="pln"><span class="n"><a href="#t60">60</a></span><span class="t"><span class="str"> labels : ndarray of ints, optional</span> </span><span class="r"></span></p> + <p id="t61" class="pln"><span class="n"><a href="#t61">61</a></span><span class="t"><span class="str"> If provided, each unique region `labels == value` represents a unique</span> </span><span class="r"></span></p> + <p id="t62" class="pln"><span class="n"><a href="#t62">62</a></span><span class="t"><span class="str"> region to search for peaks. Zero is reserved for background. The labels are returned a s a third column.</span> </span><span class="r"></span></p> + <p id="t63" class="pln"><span class="n"><a href="#t63">63</a></span><span class="t"><span class="str"> num_peaks_per_label : int, optional</span> </span><span class="r"></span></p> + <p id="t64" class="pln"><span class="n"><a href="#t64">64</a></span><span class="t"><span class="str"> Maximum number of peaks for each label.</span> </span><span class="r"></span></p> + <p id="t65" class="pln"><span class="n"><a href="#t65">65</a></span><span class="t"><span class="str"> p_norm : float</span> </span><span class="r"></span></p> + <p id="t66" class="pln"><span class="n"><a href="#t66">66</a></span><span class="t"><span class="str"> Which Minkowski p-norm to use. Should be in the range [1, inf].</span> </span><span class="r"></span></p> + <p id="t67" class="pln"><span class="n"><a href="#t67">67</a></span><span class="t"><span class="str"> A finite large p may cause a ValueError if overflow can occur.</span> </span><span class="r"></span></p> + <p id="t68" class="pln"><span class="n"><a href="#t68">68</a></span><span class="t"><span class="str"> ``inf`` corresponds to the Chebyshev distance and 2 to the</span> </span><span class="r"></span></p> + <p id="t69" class="pln"><span class="n"><a href="#t69">69</a></span><span class="t"><span class="str"> Euclidean distance.</span> </span><span class="r"></span></p> + <p id="t70" class="pln"><span class="n"><a href="#t70">70</a></span><span class="t"><span class="str"> Returns</span> </span><span class="r"></span></p> + <p id="t71" class="pln"><span class="n"><a href="#t71">71</a></span><span class="t"><span class="str"> -------</span> </span><span class="r"></span></p> + <p id="t72" class="pln"><span class="n"><a href="#t72">72</a></span><span class="t"><span class="str"> output : ndarray or ndarray of bools</span> </span><span class="r"></span></p> + <p id="t73" class="pln"><span class="n"><a href="#t73">73</a></span><span class="t"><span class="str"> * If `indices = True` : (row, column, ...) coordinates of peaks.</span> </span><span class="r"></span></p> + <p id="t74" class="pln"><span class="n"><a href="#t74">74</a></span><span class="t"><span class="str"> * If `indices = False` : Boolean array shaped like `image`, with peaks</span> </span><span class="r"></span></p> + <p id="t75" class="pln"><span class="n"><a href="#t75">75</a></span><span class="t"><span class="str"> represented by True values.</span> </span><span class="r"></span></p> + <p id="t76" class="pln"><span class="n"><a href="#t76">76</a></span><span class="t"><span class="str"> Notes</span> </span><span class="r"></span></p> + <p id="t77" class="pln"><span class="n"><a href="#t77">77</a></span><span class="t"><span class="str"> -----</span> </span><span class="r"></span></p> + <p id="t78" class="pln"><span class="n"><a href="#t78">78</a></span><span class="t"><span class="str"> The peak local maximum function returns the coordinates of local peaks</span> </span><span class="r"></span></p> + <p id="t79" class="pln"><span class="n"><a href="#t79">79</a></span><span class="t"><span class="str"> (maxima) in an image. Internally, a maximum filter is used for finding local</span> </span><span class="r"></span></p> + <p id="t80" class="pln"><span class="n"><a href="#t80">80</a></span><span class="t"><span class="str"> maxima. This operation dilates the original image. After comparison of the</span> </span><span class="r"></span></p> + <p id="t81" class="pln"><span class="n"><a href="#t81">81</a></span><span class="t"><span class="str"> dilated and original image, this function returns the coordinates or a mask</span> </span><span class="r"></span></p> + <p id="t82" class="pln"><span class="n"><a href="#t82">82</a></span><span class="t"><span class="str"> of the peaks where the dilated image equals the original image.</span> </span><span class="r"></span></p> + <p id="t83" class="pln"><span class="n"><a href="#t83">83</a></span><span class="t"><span class="str"> See also</span> </span><span class="r"></span></p> + <p id="t84" class="pln"><span class="n"><a href="#t84">84</a></span><span class="t"><span class="str"> --------</span> </span><span class="r"></span></p> + <p id="t85" class="pln"><span class="n"><a href="#t85">85</a></span><span class="t"><span class="str"> skimage.feature.corner_peaks</span> </span><span class="r"></span></p> + <p id="t86" class="pln"><span class="n"><a href="#t86">86</a></span><span class="t"><span class="str"> Examples</span> </span><span class="r"></span></p> + <p id="t87" class="pln"><span class="n"><a href="#t87">87</a></span><span class="t"><span class="str"> --------</span> </span><span class="r"></span></p> + <p id="t88" class="pln"><span class="n"><a href="#t88">88</a></span><span class="t"><span class="str"> >>> img1 = np.zeros((7, 7))</span> </span><span class="r"></span></p> + <p id="t89" class="pln"><span class="n"><a href="#t89">89</a></span><span class="t"><span class="str"> >>> img1[3, 4] = 1</span> </span><span class="r"></span></p> + <p id="t90" class="pln"><span class="n"><a href="#t90">90</a></span><span class="t"><span class="str"> >>> img1[3, 2] = 1.5</span> </span><span class="r"></span></p> + <p id="t91" class="pln"><span class="n"><a href="#t91">91</a></span><span class="t"><span class="str"> >>> img1</span> </span><span class="r"></span></p> + <p id="t92" class="pln"><span class="n"><a href="#t92">92</a></span><span class="t"><span class="str"> array([[0. , 0. , 0. , 0. , 0. , 0. , 0. ],</span> </span><span class="r"></span></p> + <p id="t93" class="pln"><span class="n"><a href="#t93">93</a></span><span class="t"><span class="str"> [0. , 0. , 0. , 0. , 0. , 0. , 0. ],</span> </span><span class="r"></span></p> + <p id="t94" class="pln"><span class="n"><a href="#t94">94</a></span><span class="t"><span class="str"> [0. , 0. , 0. , 0. , 0. , 0. , 0. ],</span> </span><span class="r"></span></p> + <p id="t95" class="pln"><span class="n"><a href="#t95">95</a></span><span class="t"><span class="str"> [0. , 0. , 1.5, 0. , 1. , 0. , 0. ],</span> </span><span class="r"></span></p> + <p id="t96" class="pln"><span class="n"><a href="#t96">96</a></span><span class="t"><span class="str"> [0. , 0. , 0. , 0. , 0. , 0. , 0. ],</span> </span><span class="r"></span></p> + <p id="t97" class="pln"><span class="n"><a href="#t97">97</a></span><span class="t"><span class="str"> [0. , 0. , 0. , 0. , 0. , 0. , 0. ],</span> </span><span class="r"></span></p> + <p id="t98" class="pln"><span class="n"><a href="#t98">98</a></span><span class="t"><span class="str"> [0. , 0. , 0. , 0. , 0. , 0. , 0. ]])</span> </span><span class="r"></span></p> + <p id="t99" class="pln"><span class="n"><a href="#t99">99</a></span><span class="t"><span class="str"> >>> peak_local_max(img1, min_distance=1)</span> </span><span class="r"></span></p> + <p id="t100" class="pln"><span class="n"><a href="#t100">100</a></span><span class="t"><span class="str"> array([[3, 2],</span> </span><span class="r"></span></p> + <p id="t101" class="pln"><span class="n"><a href="#t101">101</a></span><span class="t"><span class="str"> [3, 4]])</span> </span><span class="r"></span></p> + <p id="t102" class="pln"><span class="n"><a href="#t102">102</a></span><span class="t"><span class="str"> >>> peak_local_max(img1, min_distance=2)</span> </span><span class="r"></span></p> + <p id="t103" class="pln"><span class="n"><a href="#t103">103</a></span><span class="t"><span class="str"> array([[3, 2]])</span> </span><span class="r"></span></p> + <p id="t104" class="pln"><span class="n"><a href="#t104">104</a></span><span class="t"><span class="str"> >>> img2 = np.zeros((20, 20, 20))</span> </span><span class="r"></span></p> + <p id="t105" class="pln"><span class="n"><a href="#t105">105</a></span><span class="t"><span class="str"> >>> img2[10, 10, 10] = 1</span> </span><span class="r"></span></p> + <p id="t106" class="pln"><span class="n"><a href="#t106">106</a></span><span class="t"><span class="str"> >>> img2[15, 15, 15] = 1</span> </span><span class="r"></span></p> + <p id="t107" class="pln"><span class="n"><a href="#t107">107</a></span><span class="t"><span class="str"> >>> peak_idx = peak_local_max(img2, exclude_border=0)</span> </span><span class="r"></span></p> + <p id="t108" class="pln"><span class="n"><a href="#t108">108</a></span><span class="t"><span class="str"> >>> peak_idx</span> </span><span class="r"></span></p> + <p id="t109" class="pln"><span class="n"><a href="#t109">109</a></span><span class="t"><span class="str"> array([[10, 10, 10],</span> </span><span class="r"></span></p> + <p id="t110" class="pln"><span class="n"><a href="#t110">110</a></span><span class="t"><span class="str"> [15, 15, 15]])</span> </span><span class="r"></span></p> + <p id="t111" class="pln"><span class="n"><a href="#t111">111</a></span><span class="t"><span class="str"> >>> peak_mask = np.zeros_like(img2, dtype=bool)</span> </span><span class="r"></span></p> + <p id="t112" class="pln"><span class="n"><a href="#t112">112</a></span><span class="t"><span class="str"> >>> peak_mask[tuple(peak_idx.T)] = True</span> </span><span class="r"></span></p> + <p id="t113" class="pln"><span class="n"><a href="#t113">113</a></span><span class="t"><span class="str"> >>> np.argwhere(peak_mask)</span> </span><span class="r"></span></p> + <p id="t114" class="pln"><span class="n"><a href="#t114">114</a></span><span class="t"><span class="str"> array([[10, 10, 10],</span> </span><span class="r"></span></p> + <p id="t115" class="pln"><span class="n"><a href="#t115">115</a></span><span class="t"><span class="str"> [15, 15, 15]])</span> </span><span class="r"></span></p> + <p id="t116" class="pln"><span class="n"><a href="#t116">116</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p id="t117" class="mis show_mis"><span class="n"><a href="#t117">117</a></span><span class="t"> <span class="key">if</span> <span class="op">(</span><span class="nam">footprint</span> <span class="key">is</span> <span class="key">None</span> <span class="key">or</span> <span class="nam">footprint</span><span class="op">.</span><span class="nam">size</span> <span class="op">==</span> <span class="num">1</span><span class="op">)</span> <span class="key">and</span> <span class="nam">min_distance</span> <span class="op"><</span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t118" class="mis show_mis"><span class="n"><a href="#t118">118</a></span><span class="t"> <span class="nam">warn</span><span class="op">(</span><span class="str">"When min_distance < 1, peak_local_max acts as finding "</span> </span><span class="r"></span></p> + <p id="t119" class="pln"><span class="n"><a href="#t119">119</a></span><span class="t"> <span class="str">"image > max(threshold_abs, threshold_rel * max(image))."</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t120" class="pln"><span class="n"><a href="#t120">120</a></span><span class="t"> <span class="nam">RuntimeWarning</span><span class="op">,</span> <span class="nam">stacklevel</span><span class="op">=</span><span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t121" class="pln"><span class="n"><a href="#t121">121</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t122" class="mis show_mis"><span class="n"><a href="#t122">122</a></span><span class="t"> <span class="nam">border_width</span> <span class="op">=</span> <span class="nam">peak</span><span class="op">.</span><span class="nam">_get_excluded_border_width</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">min_distance</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t123" class="pln"><span class="n"><a href="#t123">123</a></span><span class="t"> <span class="nam">exclude_border</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t124" class="pln"><span class="n"><a href="#t124">124</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t125" class="mis show_mis"><span class="n"><a href="#t125">125</a></span><span class="t"> <span class="nam">threshold</span> <span class="op">=</span> <span class="nam">peak</span><span class="op">.</span><span class="nam">_get_threshold</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">threshold_abs</span><span class="op">,</span> <span class="nam">threshold_rel</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t126" class="pln"><span class="n"><a href="#t126">126</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t127" class="mis show_mis"><span class="n"><a href="#t127">127</a></span><span class="t"> <span class="key">if</span> <span class="nam">footprint</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t128" class="mis show_mis"><span class="n"><a href="#t128">128</a></span><span class="t"> <span class="nam">size</span> <span class="op">=</span> <span class="num">2</span> <span class="op">*</span> <span class="nam">min_distance</span> <span class="op">+</span> <span class="num">1</span> </span><span class="r"></span></p> + <p id="t129" class="mis show_mis"><span class="n"><a href="#t129">129</a></span><span class="t"> <span class="nam">footprint</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ones</span><span class="op">(</span><span class="op">(</span><span class="nam">size</span><span class="op">,</span> <span class="op">)</span> <span class="op">*</span> <span class="nam">image</span><span class="op">.</span><span class="nam">ndim</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="nam">bool</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t130" class="pln"><span class="n"><a href="#t130">130</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t131" class="mis show_mis"><span class="n"><a href="#t131">131</a></span><span class="t"> <span class="nam">footprint</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">asarray</span><span class="op">(</span><span class="nam">footprint</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t132" class="pln"><span class="n"><a href="#t132">132</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t133" class="mis show_mis"><span class="n"><a href="#t133">133</a></span><span class="t"> <span class="key">if</span> <span class="nam">labels</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t134" class="pln"><span class="n"><a href="#t134">134</a></span><span class="t"> <span class="com"># Non maximum filter</span> </span><span class="r"></span></p> + <p id="t135" class="mis show_mis"><span class="n"><a href="#t135">135</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">peak</span><span class="op">.</span><span class="nam">_get_peak_mask</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">footprint</span><span class="op">,</span> <span class="nam">threshold</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t136" class="pln"><span class="n"><a href="#t136">136</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t137" class="mis show_mis"><span class="n"><a href="#t137">137</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">peak</span><span class="op">.</span><span class="nam">_exclude_border</span><span class="op">(</span><span class="nam">mask</span><span class="op">,</span> <span class="nam">border_width</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t138" class="pln"><span class="n"><a href="#t138">138</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t139" class="pln"><span class="n"><a href="#t139">139</a></span><span class="t"> <span class="com"># Select highest intensities (num_peaks)</span> </span><span class="r"></span></p> + <p id="t140" class="mis show_mis"><span class="n"><a href="#t140">140</a></span><span class="t"> <span class="nam">coordinates</span> <span class="op">=</span> <span class="nam">peak</span><span class="op">.</span><span class="nam">_get_high_intensity_peaks</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">mask</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t141" class="pln"><span class="n"><a href="#t141">141</a></span><span class="t"> <span class="nam">num_peaks</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t142" class="pln"><span class="n"><a href="#t142">142</a></span><span class="t"> <span class="nam">min_distance</span><span class="op">,</span> <span class="nam">p_norm</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t143" class="pln"><span class="n"><a href="#t143">143</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t144" class="pln"><span class="n"><a href="#t144">144</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t145" class="mis show_mis"><span class="n"><a href="#t145">145</a></span><span class="t"> <span class="nam">_labels</span> <span class="op">=</span> <span class="nam">peak</span><span class="op">.</span><span class="nam">_exclude_border</span><span class="op">(</span><span class="nam">labels</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="nam">int</span><span class="op">,</span> <span class="nam">casting</span><span class="op">=</span><span class="str">"safe"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t146" class="pln"><span class="n"><a href="#t146">146</a></span><span class="t"> <span class="nam">border_width</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t147" class="pln"><span class="n"><a href="#t147">147</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t148" class="mis show_mis"><span class="n"><a href="#t148">148</a></span><span class="t"> <span class="key">if</span> <span class="nam">np</span><span class="op">.</span><span class="nam">issubdtype</span><span class="op">(</span><span class="nam">image</span><span class="op">.</span><span class="nam">dtype</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">floating</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t149" class="mis show_mis"><span class="n"><a href="#t149">149</a></span><span class="t"> <span class="nam">bg_val</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">finfo</span><span class="op">(</span><span class="nam">image</span><span class="op">.</span><span class="nam">dtype</span><span class="op">)</span><span class="op">.</span><span class="nam">min</span> </span><span class="r"></span></p> + <p id="t150" class="pln"><span class="n"><a href="#t150">150</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t151" class="mis show_mis"><span class="n"><a href="#t151">151</a></span><span class="t"> <span class="nam">bg_val</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">iinfo</span><span class="op">(</span><span class="nam">image</span><span class="op">.</span><span class="nam">dtype</span><span class="op">)</span><span class="op">.</span><span class="nam">min</span> </span><span class="r"></span></p> + <p id="t152" class="pln"><span class="n"><a href="#t152">152</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t153" class="pln"><span class="n"><a href="#t153">153</a></span><span class="t"> <span class="com"># For each label, extract a smaller image enclosing the object of</span> </span><span class="r"></span></p> + <p id="t154" class="pln"><span class="n"><a href="#t154">154</a></span><span class="t"> <span class="com"># interest, identify num_peaks_per_label peaks</span> </span><span class="r"></span></p> + <p id="t155" class="mis show_mis"><span class="n"><a href="#t155">155</a></span><span class="t"> <span class="nam">labels_peak_coord</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t156" class="pln"><span class="n"><a href="#t156">156</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t157" class="mis show_mis"><span class="n"><a href="#t157">157</a></span><span class="t"> <span class="key">for</span> <span class="nam">label_idx</span><span class="op">,</span> <span class="nam">roi</span> <span class="key">in</span> <span class="nam">enumerate</span><span class="op">(</span><span class="nam">ndi</span><span class="op">.</span><span class="nam">find_objects</span><span class="op">(</span><span class="nam">_labels</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t158" class="pln"><span class="n"><a href="#t158">158</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t159" class="mis show_mis"><span class="n"><a href="#t159">159</a></span><span class="t"> <span class="key">if</span> <span class="nam">roi</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t160" class="mis show_mis"><span class="n"><a href="#t160">160</a></span><span class="t"> <span class="key">continue</span> </span><span class="r"></span></p> + <p id="t161" class="pln"><span class="n"><a href="#t161">161</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t162" class="pln"><span class="n"><a href="#t162">162</a></span><span class="t"> <span class="com"># Get roi mask</span> </span><span class="r"></span></p> + <p id="t163" class="mis show_mis"><span class="n"><a href="#t163">163</a></span><span class="t"> <span class="nam">label_mask</span> <span class="op">=</span> <span class="nam">labels</span><span class="op">[</span><span class="nam">roi</span><span class="op">]</span> <span class="op">==</span> <span class="nam">label_idx</span> <span class="op">+</span> <span class="num">1</span> </span><span class="r"></span></p> + <p id="t164" class="pln"><span class="n"><a href="#t164">164</a></span><span class="t"> <span class="com"># Extract image roi</span> </span><span class="r"></span></p> + <p id="t165" class="mis show_mis"><span class="n"><a href="#t165">165</a></span><span class="t"> <span class="nam">img_object</span> <span class="op">=</span> <span class="nam">image</span><span class="op">[</span><span class="nam">roi</span><span class="op">]</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t166" class="pln"><span class="n"><a href="#t166">166</a></span><span class="t"> <span class="com"># Ensure masked values don't affect roi's local peaks</span> </span><span class="r"></span></p> + <p id="t167" class="mis show_mis"><span class="n"><a href="#t167">167</a></span><span class="t"> <span class="nam">img_object</span><span class="op">[</span><span class="nam">np</span><span class="op">.</span><span class="nam">logical_not</span><span class="op">(</span><span class="nam">label_mask</span><span class="op">)</span><span class="op">]</span> <span class="op">=</span> <span class="nam">bg_val</span> </span><span class="r"></span></p> + <p id="t168" class="pln"><span class="n"><a href="#t168">168</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t169" class="mis show_mis"><span class="n"><a href="#t169">169</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">peak</span><span class="op">.</span><span class="nam">_get_peak_mask</span><span class="op">(</span><span class="nam">img_object</span><span class="op">,</span> <span class="nam">footprint</span><span class="op">,</span> <span class="nam">threshold</span><span class="op">,</span> <span class="nam">label_mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t170" class="pln"><span class="n"><a href="#t170">170</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t171" class="mis show_mis"><span class="n"><a href="#t171">171</a></span><span class="t"> <span class="nam">coordinates</span> <span class="op">=</span> <span class="nam">peak</span><span class="op">.</span><span class="nam">_get_high_intensity_peaks</span><span class="op">(</span><span class="nam">img_object</span><span class="op">,</span> <span class="nam">mask</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t172" class="pln"><span class="n"><a href="#t172">172</a></span><span class="t"> <span class="nam">num_peaks_per_label</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t173" class="pln"><span class="n"><a href="#t173">173</a></span><span class="t"> <span class="nam">min_distance</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t174" class="pln"><span class="n"><a href="#t174">174</a></span><span class="t"> <span class="nam">p_norm</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t175" class="pln"><span class="n"><a href="#t175">175</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t176" class="pln"><span class="n"><a href="#t176">176</a></span><span class="t"> <span class="com"># transform coordinates in global image indices space</span> </span><span class="r"></span></p> + <p id="t177" class="mis show_mis"><span class="n"><a href="#t177">177</a></span><span class="t"> <span class="key">for</span> <span class="nam">idx</span><span class="op">,</span> <span class="nam">s</span> <span class="key">in</span> <span class="nam">enumerate</span><span class="op">(</span><span class="nam">roi</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t178" class="mis show_mis"><span class="n"><a href="#t178">178</a></span><span class="t"> <span class="nam">coordinates</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="nam">idx</span><span class="op">]</span> <span class="op">+=</span> <span class="nam">s</span><span class="op">.</span><span class="nam">start</span> </span><span class="r"></span></p> + <p id="t179" class="pln"><span class="n"><a href="#t179">179</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t180" class="mis show_mis"><span class="n"><a href="#t180">180</a></span><span class="t"> <span class="nam">coordinates</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">hstack</span><span class="op">(</span><span class="op">(</span><span class="nam">coordinates</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ones</span><span class="op">(</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">coordinates</span><span class="op">)</span><span class="op">,</span><span class="num">1</span><span class="op">)</span><span class="op">)</span> <span class="op">*</span> <span class="op">(</span><span class="nam">label_idx</span> <span class="op">+</span> <span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t181" class="pln"><span class="n"><a href="#t181">181</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t182" class="mis show_mis"><span class="n"><a href="#t182">182</a></span><span class="t"> <span class="nam">labels_peak_coord</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">coordinates</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t183" class="pln"><span class="n"><a href="#t183">183</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t184" class="mis show_mis"><span class="n"><a href="#t184">184</a></span><span class="t"> <span class="key">if</span> <span class="nam">labels_peak_coord</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t185" class="mis show_mis"><span class="n"><a href="#t185">185</a></span><span class="t"> <span class="nam">coordinates</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">vstack</span><span class="op">(</span><span class="nam">labels_peak_coord</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t186" class="pln"><span class="n"><a href="#t186">186</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t187" class="mis show_mis"><span class="n"><a href="#t187">187</a></span><span class="t"> <span class="nam">coordinates</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">empty</span><span class="op">(</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="num">2</span><span class="op">)</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="nam">int</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t188" class="pln"><span class="n"><a href="#t188">188</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t189" class="mis show_mis"><span class="n"><a href="#t189">189</a></span><span class="t"> <span class="key">if</span> <span class="nam">len</span><span class="op">(</span><span class="nam">coordinates</span><span class="op">)</span> <span class="op">></span> <span class="nam">num_peaks</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t190" class="mis show_mis"><span class="n"><a href="#t190">190</a></span><span class="t"> <span class="nam">out</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">zeros_like</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="nam">bool</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t191" class="mis show_mis"><span class="n"><a href="#t191">191</a></span><span class="t"> <span class="nam">out</span><span class="op">[</span><span class="nam">tuple</span><span class="op">(</span><span class="nam">coordinates</span><span class="op">.</span><span class="nam">T</span><span class="op">)</span><span class="op">]</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p id="t192" class="mis show_mis"><span class="n"><a href="#t192">192</a></span><span class="t"> <span class="nam">coordinates</span> <span class="op">=</span> <span class="nam">peak</span><span class="op">.</span><span class="nam">_get_high_intensity_peaks</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">out</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t193" class="pln"><span class="n"><a href="#t193">193</a></span><span class="t"> <span class="nam">num_peaks</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t194" class="pln"><span class="n"><a href="#t194">194</a></span><span class="t"> <span class="nam">min_distance</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t195" class="pln"><span class="n"><a href="#t195">195</a></span><span class="t"> <span class="nam">p_norm</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t196" class="pln"><span class="n"><a href="#t196">196</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t197" class="mis show_mis"><span class="n"><a href="#t197">197</a></span><span class="t"> <span class="key">if</span> <span class="nam">indices</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t198" class="mis show_mis"><span class="n"><a href="#t198">198</a></span><span class="t"> <span class="key">return</span> <span class="nam">coordinates</span> </span><span class="r"></span></p> + <p id="t199" class="pln"><span class="n"><a href="#t199">199</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t200" class="pln"><span class="n"><a href="#t200">200</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t201" class="pln"><span class="n"><a href="#t201">201</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t202" class="run"><span class="n"><a href="#t202">202</a></span><span class="t"><span class="key">def</span> <span class="nam">crop</span><span class="op">(</span><span class="nam">stack</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">center</span><span class="op">:</span><span class="nam">tuple</span><span class="op">,</span> <span class="nam">size</span><span class="op">:</span><span class="nam">int</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t203" class="mis show_mis"><span class="n"><a href="#t203">203</a></span><span class="t"> <span class="nam">im</span> <span class="op">=</span> <span class="nam">stack</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="nam">int</span><span class="op">(</span><span class="nam">center</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> <span class="op">-</span> <span class="nam">size</span><span class="op">//</span><span class="num">2</span><span class="op">:</span><span class="nam">int</span><span class="op">(</span><span class="nam">center</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> <span class="op">+</span> <span class="nam">size</span><span class="op">//</span><span class="num">2</span><span class="op">,</span> <span class="nam">int</span><span class="op">(</span><span class="nam">center</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">)</span> <span class="op">-</span> <span class="nam">size</span><span class="op">//</span><span class="num">2</span><span class="op">:</span><span class="nam">int</span><span class="op">(</span><span class="nam">center</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">)</span> <span class="op">+</span> <span class="nam">size</span><span class="op">//</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t204" class="mis show_mis"><span class="n"><a href="#t204">204</a></span><span class="t"> <span class="key">return</span> <span class="nam">im</span> </span><span class="r"></span></p> + <p id="t205" class="pln"><span class="n"><a href="#t205">205</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t206" class="pln"><span class="n"><a href="#t206">206</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t207" class="run"><span class="n"><a href="#t207">207</a></span><span class="t"><span class="key">def</span> <span class="nam">gdif</span><span class="op">(</span><span class="nam">array2d</span><span class="op">,</span> <span class="nam">dif_gauss_sigma</span><span class="op">=</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">3</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t208" class="mis show_mis"><span class="n"><a href="#t208">208</a></span><span class="t"> <span class="nam">array2d</span> <span class="op">=</span> <span class="nam">array2d</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'f'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t209" class="mis show_mis"><span class="n"><a href="#t209">209</a></span><span class="t"> <span class="key">return</span> <span class="nam">ndi</span><span class="op">.</span><span class="nam">gaussian_filter</span><span class="op">(</span><span class="nam">array2d</span><span class="op">,</span> <span class="nam">sigma</span><span class="op">=</span><span class="nam">dif_gauss_sigma</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> <span class="op">-</span> <span class="nam">ndi</span><span class="op">.</span><span class="nam">gaussian_filter</span><span class="op">(</span><span class="nam">array2d</span><span class="op">,</span> <span class="nam">sigma</span><span class="op">=</span><span class="nam">dif_gauss_sigma</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t210" class="pln"><span class="n"><a href="#t210">210</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t211" class="pln"><span class="n"><a href="#t211">211</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t212" class="run"><span class="n"><a href="#t212">212</a></span><span class="t"><span class="key">def</span> <span class="nam">get_peak_number</span><span class="op">(</span><span class="nam">crop2d</span><span class="op">,</span> <span class="nam">dif_gauss_sigma</span><span class="op">=</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">3</span><span class="op">)</span><span class="op">,</span> <span class="nam">min_distance</span><span class="op">=</span><span class="num">3</span><span class="op">,</span> <span class="nam">threshold_abs</span><span class="op">=</span><span class="num">5</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t213" class="pln"><span class="n"><a href="#t213">213</a></span><span class="t"> <span class="nam">title</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="nam">bf_crop</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">return_std</span><span class="op">=</span><span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t214" class="mis show_mis"><span class="n"><a href="#t214">214</a></span><span class="t"> <span class="nam">image_max</span> <span class="op">=</span> <span class="nam">gdif</span><span class="op">(</span><span class="nam">crop2d</span><span class="op">,</span> <span class="nam">dif_gauss_sigma</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t215" class="mis show_mis"><span class="n"><a href="#t215">215</a></span><span class="t"> <span class="nam">peaks</span> <span class="op">=</span> <span class="nam">peak_local_max</span><span class="op">(</span><span class="nam">image_max</span><span class="op">,</span> <span class="nam">min_distance</span><span class="op">=</span><span class="nam">min_distance</span><span class="op">,</span> <span class="nam">threshold_abs</span> <span class="op">=</span> <span class="nam">threshold_abs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t216" class="pln"><span class="n"><a href="#t216">216</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t217" class="mis show_mis"><span class="n"><a href="#t217">217</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t218" class="mis show_mis"><span class="n"><a href="#t218">218</a></span><span class="t"> <span class="key">if</span> <span class="nam">bf_crop</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t219" class="mis show_mis"><span class="n"><a href="#t219">219</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">2</span><span class="op">,</span> <span class="nam">sharey</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t220" class="mis show_mis"><span class="n"><a href="#t220">220</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">crop2d</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t221" class="mis show_mis"><span class="n"><a href="#t221">221</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">f'raw image {title}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t222" class="mis show_mis"><span class="n"><a href="#t222">222</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">image_max</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t223" class="mis show_mis"><span class="n"><a href="#t223">223</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">'Filtered + peak detection'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t224" class="mis show_mis"><span class="n"><a href="#t224">224</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">peaks</span><span class="op">[</span><span class="op">:</span><span class="op">,</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">peaks</span><span class="op">[</span><span class="op">:</span><span class="op">,</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="str">'r.'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t225" class="mis show_mis"><span class="n"><a href="#t225">225</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t226" class="pln"><span class="n"><a href="#t226">226</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t227" class="mis show_mis"><span class="n"><a href="#t227">227</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">3</span><span class="op">,</span> <span class="nam">sharey</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t228" class="pln"><span class="n"><a href="#t228">228</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t229" class="mis show_mis"><span class="n"><a href="#t229">229</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">bf_crop</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t230" class="mis show_mis"><span class="n"><a href="#t230">230</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">f'BF {title}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t231" class="pln"><span class="n"><a href="#t231">231</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t232" class="mis show_mis"><span class="n"><a href="#t232">232</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">crop2d</span><span class="op">,</span> <span class="nam">vmax</span><span class="op">=</span><span class="nam">crop2d</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span> <span class="op">+</span> <span class="num">2</span> <span class="op">*</span> <span class="nam">crop2d</span><span class="op">.</span><span class="nam">std</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t233" class="mis show_mis"><span class="n"><a href="#t233">233</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">f'raw image {title}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t234" class="pln"><span class="n"><a href="#t234">234</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t235" class="mis show_mis"><span class="n"><a href="#t235">235</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">image_max</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t236" class="mis show_mis"><span class="n"><a href="#t236">236</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">f'Filtered + {len(peaks)} peaks (std {image_max.std():.2f})'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t237" class="mis show_mis"><span class="n"><a href="#t237">237</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">peaks</span><span class="op">[</span><span class="op">:</span><span class="op">,</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">peaks</span><span class="op">[</span><span class="op">:</span><span class="op">,</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="str">'r.'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t238" class="mis show_mis"><span class="n"><a href="#t238">238</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t239" class="pln"><span class="n"><a href="#t239">239</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t240" class="mis show_mis"><span class="n"><a href="#t240">240</a></span><span class="t"> <span class="key">if</span> <span class="nam">return_std</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t241" class="mis show_mis"><span class="n"><a href="#t241">241</a></span><span class="t"> <span class="key">return</span> <span class="nam">len</span><span class="op">(</span><span class="nam">peaks</span><span class="op">)</span><span class="op">,</span> <span class="nam">crop2d</span><span class="op">.</span><span class="nam">std</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t242" class="pln"><span class="n"><a href="#t242">242</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t243" class="mis show_mis"><span class="n"><a href="#t243">243</a></span><span class="t"> <span class="key">return</span> <span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">peaks</span><span class="op">)</span><span class="op">,</span> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t244" class="pln"><span class="n"><a href="#t244">244</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t245" class="pln"><span class="n"><a href="#t245">245</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t246" class="run"><span class="n"><a href="#t246">246</a></span><span class="t"><span class="key">def</span> <span class="nam">get_peaks_per_frame</span><span class="op">(</span><span class="nam">stack3d</span><span class="op">,</span> <span class="nam">dif_gauss_sigma</span><span class="op">=</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">3</span><span class="op">)</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t247" class="mis show_mis"><span class="n"><a href="#t247">247</a></span><span class="t"> <span class="nam">image_ref</span> <span class="op">=</span> <span class="nam">gdif</span><span class="op">(</span><span class="nam">stack3d</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">dif_gauss_sigma</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t248" class="mis show_mis"><span class="n"><a href="#t248">248</a></span><span class="t"> <span class="nam">thr</span> <span class="op">=</span> <span class="num">5</span> <span class="op">*</span> <span class="nam">image_ref</span><span class="op">.</span><span class="nam">std</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t249" class="mis show_mis"><span class="n"><a href="#t249">249</a></span><span class="t"> <span class="key">return</span> <span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="nam">partial</span><span class="op">(</span><span class="nam">get_peak_number</span><span class="op">,</span> <span class="nam">threshold_abs</span><span class="op">=</span><span class="nam">thr</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">,</span> <span class="nam">stack3d</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t250" class="pln"><span class="n"><a href="#t250">250</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t251" class="pln"><span class="n"><a href="#t251">251</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t252" class="run"><span class="n"><a href="#t252">252</a></span><span class="t"><span class="key">def</span> <span class="nam">get_peaks_all_wells</span><span class="op">(</span><span class="nam">stack</span><span class="op">,</span> <span class="nam">centers</span><span class="op">,</span> <span class="nam">size</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t253" class="mis show_mis"><span class="n"><a href="#t253">253</a></span><span class="t"> <span class="nam">n_peaks</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t254" class="mis show_mis"><span class="n"><a href="#t254">254</a></span><span class="t"> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="nam">centers</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t255" class="mis show_mis"><span class="n"><a href="#t255">255</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'.'</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t256" class="mis show_mis"><span class="n"><a href="#t256">256</a></span><span class="t"> <span class="nam">well</span> <span class="op">=</span> <span class="nam">crop</span><span class="op">(</span><span class="nam">stack</span><span class="op">,</span> <span class="nam">c</span><span class="op">[</span><span class="str">'center'</span><span class="op">]</span><span class="op">,</span> <span class="nam">size</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t257" class="mis show_mis"><span class="n"><a href="#t257">257</a></span><span class="t"> <span class="nam">n_peaks</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">get_peaks_per_frame</span><span class="op">(</span><span class="nam">well</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t258" class="mis show_mis"><span class="n"><a href="#t258">258</a></span><span class="t"> <span class="key">return</span> <span class="nam">n_peaks</span> </span><span class="r"></span></p> + <p id="t259" class="pln"><span class="n"><a href="#t259">259</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t260" class="pln"><span class="n"><a href="#t260">260</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t261" class="run"><span class="n"><a href="#t261">261</a></span><span class="t"><span class="key">def</span> <span class="nam">get_n_cells</span><span class="op">(</span><span class="nam">peaks</span><span class="op">:</span><span class="nam">list</span><span class="op">,</span> <span class="nam">n_frames</span><span class="op">=</span><span class="num">6</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t262" class="mis show_mis"><span class="n"><a href="#t262">262</a></span><span class="t"> <span class="key">return</span> <span class="nam">np</span><span class="op">.</span><span class="nam">round</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="nam">peaks</span><span class="op">[</span><span class="op">:</span><span class="nam">n_frames</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="num">0</span><span class="op">)</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="nam">int</span><span class="op">)</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/droplet_growth_fit_py.html b/cov_html/droplet_growth_fit_py.html new file mode 100644 index 0000000000000000000000000000000000000000..9a2e3e2ec03bd3d288557bd04996331c8632df5a --- /dev/null +++ b/cov_html/droplet_growth_fit_py.html @@ -0,0 +1,410 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for droplet_growth/fit.py: 16%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>droplet_growth/fit.py</b> : + <span class="pc_cov">16%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 166 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">26 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">140 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">scipy</span><span class="op">.</span><span class="nam">optimize</span> <span class="key">import</span> <span class="nam">curve_fit</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">scipy</span><span class="op">.</span><span class="nam">special</span> <span class="key">import</span> <span class="nam">erf</span> </span><span class="r"></span></p> + <p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span> </span><span class="r"></span></p> + <p id="t6" class="run"><span class="n"><a href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">seaborn</span> <span class="key">as</span> <span class="nam">sns</span> </span><span class="r"></span></p> + <p id="t7" class="pln"><span class="n"><a href="#t7">7</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t8" class="pln"><span class="n"><a href="#t8">8</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t9" class="pln"><span class="n"><a href="#t9">9</a></span><span class="t"><span class="com"># class Exponent:</span> </span><span class="r"></span></p> + <p id="t10" class="pln"><span class="n"><a href="#t10">10</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t11" class="pln"><span class="n"><a href="#t11">11</a></span><span class="t"><span class="com"># def __call__(self, x, b, c):</span> </span><span class="r"></span></p> + <p id="t12" class="pln"><span class="n"><a href="#t12">12</a></span><span class="t"><span class="com"># return b * np.exp(x / c)</span> </span><span class="r"></span></p> + <p id="t13" class="pln"><span class="n"><a href="#t13">13</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t14" class="pln"><span class="n"><a href="#t14">14</a></span><span class="t"><span class="com"># def fmt(self, b, c):</span> </span><span class="r"></span></p> + <p id="t15" class="pln"><span class="n"><a href="#t15">15</a></span><span class="t"><span class="com"># return f'{b} * np.exp(x / {c})'</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t17" class="run"><span class="n"><a href="#t17">17</a></span><span class="t"><span class="key">def</span> <span class="nam">prob_survive</span><span class="op">(</span><span class="nam">n_cells_range</span><span class="op">:</span><span class="nam">list</span><span class="op">,</span> <span class="nam">single_cell_prob</span><span class="op">:</span><span class="nam">float</span><span class="op">,</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t18" class="mis show_mis"><span class="n"><a href="#t18">18</a></span><span class="t"> <span class="key">return</span> <span class="op">[</span><span class="num">1</span> <span class="op">-</span> <span class="op">(</span><span class="num">1</span> <span class="op">-</span> <span class="nam">single_cell_prob</span><span class="op">)</span> <span class="op">**</span> <span class="nam">n</span> <span class="key">for</span> <span class="nam">n</span> <span class="key">in</span> <span class="nam">n_cells_range</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t20" class="pln"><span class="n"><a href="#t20">20</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t21" class="run"><span class="n"><a href="#t21">21</a></span><span class="t"><span class="key">def</span> <span class="nam">single_prob_to_final_states</span><span class="op">(</span><span class="nam">dft</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">concentration_col</span><span class="op">=</span><span class="str">'ng'</span><span class="op">,</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t22" class="pln"><span class="n"><a href="#t22">22</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t23" class="pln"><span class="n"><a href="#t23">23</a></span><span class="t"><span class="str"> For every concentration, fits `prob_survive(n_cells)` curve to final_state counts</span> </span><span class="r"></span></p> + <p id="t24" class="pln"><span class="n"><a href="#t24">24</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t25" class="pln"><span class="n"><a href="#t25">25</a></span><span class="t"><span class="str"> Params:</span> </span><span class="r"></span></p> + <p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"><span class="str"> -------</span> </span><span class="r"></span></p> + <p id="t27" class="pln"><span class="n"><a href="#t27">27</a></span><span class="t"><span class="str"> dft: pandas.DataFrame </span> </span><span class="r"></span></p> + <p id="t28" class="pln"><span class="n"><a href="#t28">28</a></span><span class="t"><span class="str"> with coluns ['n_cells', 'concentration, ng', 'final_state']</span> </span><span class="r"></span></p> + <p id="t29" class="pln"><span class="n"><a href="#t29">29</a></span><span class="t"><span class="str"> plot : bool</span> </span><span class="r"></span></p> + <p id="t30" class="pln"><span class="n"><a href="#t30">30</a></span><span class="t"><span class="str"> if true, shows the lineplot of data and optimised fit</span> </span><span class="r"></span></p> + <p id="t31" class="pln"><span class="n"><a href="#t31">31</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t32" class="pln"><span class="n"><a href="#t32">32</a></span><span class="t"><span class="str"> -------</span> </span><span class="r"></span></p> + <p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"><span class="str"> pandas.DataFrame</span> </span><span class="r"></span></p> + <p id="t34" class="pln"><span class="n"><a href="#t34">34</a></span><span class="t"><span class="str"> with [Concentration, single_prob, precision, q(prob to die)]</span> </span><span class="r"></span></p> + <p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"><span class="str"> Raises:</span> </span><span class="r"></span></p> + <p id="t36" class="pln"><span class="n"><a href="#t36">36</a></span><span class="t"><span class="str"> -------</span> </span><span class="r"></span></p> + <p id="t37" class="pln"><span class="n"><a href="#t37">37</a></span><span class="t"><span class="str"> AssertionError if input columns missing</span> </span><span class="r"></span></p> + <p id="t38" class="pln"><span class="n"><a href="#t38">38</a></span><span class="t"><span class="str"> scipy.optimize.curve_fit exceptions</span> </span><span class="r"></span></p> + <p id="t39" class="pln"><span class="n"><a href="#t39">39</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t40" class="pln"><span class="n"><a href="#t40">40</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t41" class="mis show_mis"><span class="n"><a href="#t41">41</a></span><span class="t"> <span class="key">assert</span> <span class="nam">all</span><span class="op">(</span><span class="op">[</span><span class="nam">c</span> <span class="key">in</span> <span class="nam">dft</span><span class="op">.</span><span class="nam">columns</span> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="op">[</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="nam">concentration_col</span><span class="op">,</span> <span class="str">'final_state'</span><span class="op">]</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t42" class="mis show_mis"><span class="n"><a href="#t42">42</a></span><span class="t"> <span class="nam">concentrations</span> <span class="op">=</span> <span class="nam">sorted</span><span class="op">(</span><span class="nam">dft</span><span class="op">[</span><span class="nam">concentration_col</span><span class="op">]</span><span class="op">.</span><span class="nam">unique</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t43" class="mis show_mis"><span class="n"><a href="#t43">43</a></span><span class="t"> <span class="key">def</span> <span class="nam">fit_concentration</span><span class="op">(</span><span class="nam">c</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t44" class="mis show_mis"><span class="n"><a href="#t44">44</a></span><span class="t"> <span class="nam">n_f</span> <span class="op">=</span> <span class="op">(</span><span class="nam">single_c</span> <span class="op">:=</span> <span class="nam">dft</span><span class="op">.</span><span class="nam">query</span><span class="op">(</span><span class="str">f'`{concentration_col}` == {c}'</span><span class="op">)</span><span class="op">[</span><span class="op">[</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="str">'final_state'</span><span class="op">]</span><span class="op">]</span><span class="op">)</span><span class="op">.</span><span class="nam">values</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'int'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t45" class="mis show_mis"><span class="n"><a href="#t45">45</a></span><span class="t"> <span class="nam">n_cells</span> <span class="op">=</span> <span class="nam">n_f</span><span class="op">[</span><span class="op">:</span><span class="op">,</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t46" class="mis show_mis"><span class="n"><a href="#t46">46</a></span><span class="t"> <span class="nam">final_states</span> <span class="op">=</span> <span class="nam">n_f</span><span class="op">[</span><span class="op">:</span><span class="op">,</span><span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t47" class="mis show_mis"><span class="n"><a href="#t47">47</a></span><span class="t"> <span class="nam">popt</span><span class="op">,</span> <span class="nam">pcov</span> <span class="op">=</span> <span class="nam">curve_fit</span><span class="op">(</span><span class="nam">prob_survive</span><span class="op">,</span> <span class="nam">n_cells</span><span class="op">,</span> <span class="nam">final_states</span><span class="op">,</span> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t48" class="mis show_mis"><span class="n"><a href="#t48">48</a></span><span class="t"> <span class="nam">N</span> <span class="op">=</span> <span class="nam">sorted</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">unique</span><span class="op">(</span><span class="nam">n_cells</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t49" class="mis show_mis"><span class="n"><a href="#t49">49</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t50" class="mis show_mis"><span class="n"><a href="#t50">50</a></span><span class="t"> <span class="nam">sns</span><span class="op">.</span><span class="nam">lineplot</span><span class="op">(</span><span class="nam">x</span><span class="op">=</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">'final_state'</span><span class="op">,</span> <span class="nam">data</span><span class="op">=</span><span class="nam">single_c</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t51" class="mis show_mis"><span class="n"><a href="#t51">51</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">N</span><span class="op">,</span> <span class="nam">prob_survive</span><span class="op">(</span><span class="nam">N</span><span class="op">,</span> <span class="nam">popt</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">f'fit q={(1-popt[0]):.2f} +- {np.sqrt(pcov[0][0]):.4f}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t52" class="mis show_mis"><span class="n"><a href="#t52">52</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t53" class="mis show_mis"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">f'[AB] = {c} ng'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t54" class="mis show_mis"><span class="n"><a href="#t54">54</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t55" class="mis show_mis"><span class="n"><a href="#t55">55</a></span><span class="t"> <span class="key">return</span> <span class="op">{</span> </span><span class="r"></span></p> + <p id="t56" class="pln"><span class="n"><a href="#t56">56</a></span><span class="t"> <span class="nam">concentration_col</span><span class="op">:</span> <span class="nam">c</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t57" class="pln"><span class="n"><a href="#t57">57</a></span><span class="t"> <span class="str">'single_prob'</span><span class="op">:</span> <span class="nam">popt</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t58" class="pln"><span class="n"><a href="#t58">58</a></span><span class="t"> <span class="str">'precision'</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">sqrt</span><span class="op">(</span><span class="nam">pcov</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t59" class="pln"><span class="n"><a href="#t59">59</a></span><span class="t"> <span class="str">'q'</span><span class="op">:</span> <span class="num">1</span> <span class="op">-</span> <span class="nam">popt</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t60" class="pln"><span class="n"><a href="#t60">60</a></span><span class="t"> <span class="str">'MSE'</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">(</span><span class="nam">final_states</span> <span class="op">-</span> <span class="nam">prob_survive</span><span class="op">(</span><span class="nam">n_cells</span><span class="op">,</span> <span class="nam">popt</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span><span class="op">)</span> <span class="op">**</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t61" class="pln"><span class="n"><a href="#t61">61</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p id="t62" class="pln"><span class="n"><a href="#t62">62</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t63" class="mis show_mis"><span class="n"><a href="#t63">63</a></span><span class="t"> <span class="key">return</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="nam">fit_concentration</span><span class="op">,</span> <span class="nam">concentrations</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t64" class="pln"><span class="n"><a href="#t64">64</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t65" class="run"><span class="n"><a href="#t65">65</a></span><span class="t"><span class="key">def</span> <span class="nam">show_probs</span><span class="op">(</span><span class="nam">probs</span><span class="op">,</span> <span class="op">*</span><span class="nam">args</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t66" class="mis show_mis"><span class="n"><a href="#t66">66</a></span><span class="t"> <span class="key">if</span> <span class="nam">ax</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t67" class="mis show_mis"><span class="n"><a href="#t67">67</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="op">*</span><span class="nam">args</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t68" class="mis show_mis"><span class="n"><a href="#t68">68</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t69" class="mis show_mis"><span class="n"><a href="#t69">69</a></span><span class="t"> <span class="nam">probs</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">'concentration, ng'</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">'q'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t70" class="mis show_mis"><span class="n"><a href="#t70">70</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">fill_between</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t71" class="pln"><span class="n"><a href="#t71">71</a></span><span class="t"> <span class="nam">probs</span><span class="op">[</span><span class="str">'concentration, ng'</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t72" class="pln"><span class="n"><a href="#t72">72</a></span><span class="t"> <span class="nam">probs</span><span class="op">.</span><span class="nam">q</span> <span class="op">-</span> <span class="num">1</span> <span class="op">*</span> <span class="nam">probs</span><span class="op">.</span><span class="nam">precision</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t73" class="pln"><span class="n"><a href="#t73">73</a></span><span class="t"> <span class="nam">probs</span><span class="op">.</span><span class="nam">q</span> <span class="op">+</span> <span class="num">1</span> <span class="op">*</span> <span class="nam">probs</span><span class="op">.</span><span class="nam">precision</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t74" class="pln"><span class="n"><a href="#t74">74</a></span><span class="t"> <span class="com"># color='tab:blue', </span> </span><span class="r"></span></p> + <p id="t75" class="pln"><span class="n"><a href="#t75">75</a></span><span class="t"> <span class="nam">alpha</span><span class="op">=</span><span class="num">0.2</span> </span><span class="r"></span></p> + <p id="t76" class="pln"><span class="n"><a href="#t76">76</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t77" class="mis show_mis"><span class="n"><a href="#t77">77</a></span><span class="t"> <span class="key">except</span> <span class="nam">KeyError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t78" class="mis show_mis"><span class="n"><a href="#t78">78</a></span><span class="t"> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">probs</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">'concentration, ng'</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">'q'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t79" class="pln"><span class="n"><a href="#t79">79</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t80" class="mis show_mis"><span class="n"><a href="#t80">80</a></span><span class="t"> <span class="key">return</span> <span class="nam">ax</span> </span><span class="r"></span></p> + <p id="t81" class="pln"><span class="n"><a href="#t81">81</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t82" class="run"><span class="n"><a href="#t82">82</a></span><span class="t"><span class="key">def</span> <span class="nam">single_prob</span><span class="op">(</span><span class="nam">stats</span><span class="op">:</span><span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">show_individual_fits</span><span class="op">=</span><span class="key">False</span><span class="op">)</span> <span class="op">-></span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t83" class="pln"><span class="n"><a href="#t83">83</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t84" class="pln"><span class="n"><a href="#t84">84</a></span><span class="t"><span class="str"> Fits probability of single cell to survive to the curve of probabilities for range of cells numbers</span> </span><span class="r"></span></p> + <p id="t85" class="pln"><span class="n"><a href="#t85">85</a></span><span class="t"><span class="str"> Input:</span> </span><span class="r"></span></p> + <p id="t86" class="pln"><span class="n"><a href="#t86">86</a></span><span class="t"><span class="str"> stats: DataFrame with 'n_cells', 'prob_survive', 'concentration' columns.</span> </span><span class="r"></span></p> + <p id="t87" class="pln"><span class="n"><a href="#t87">87</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t88" class="pln"><span class="n"><a href="#t88">88</a></span><span class="t"><span class="str"> DataFrame with 'concentration', prob_survive and q (prob to die)</span> </span><span class="r"></span></p> + <p id="t89" class="pln"><span class="n"><a href="#t89">89</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t90" class="mis show_mis"><span class="n"><a href="#t90">90</a></span><span class="t"> <span class="key">assert</span> <span class="nam">all</span><span class="op">(</span><span class="op">[</span><span class="nam">c</span> <span class="key">in</span> <span class="nam">stats</span><span class="op">.</span><span class="nam">columns</span> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="op">[</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="str">'prob_survive'</span><span class="op">,</span> <span class="str">'ng'</span><span class="op">,</span><span class="op">]</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t91" class="mis show_mis"><span class="n"><a href="#t91">91</a></span><span class="t"> <span class="nam">dfs_table</span> <span class="op">=</span> <span class="nam">stats</span><span class="op">.</span><span class="nam">pivot</span><span class="op">(</span><span class="nam">index</span><span class="op">=</span><span class="str">'ng'</span><span class="op">,</span> <span class="nam">columns</span><span class="op">=</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="nam">values</span><span class="op">=</span><span class="str">'prob_survive'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t92" class="mis show_mis"><span class="n"><a href="#t92">92</a></span><span class="t"> <span class="nam">vector</span> <span class="op">=</span> <span class="nam">dfs_table</span><span class="op">.</span><span class="nam">columns</span><span class="op">.</span><span class="nam">values</span> </span><span class="r"></span></p> + <p id="t93" class="mis show_mis"><span class="n"><a href="#t93">93</a></span><span class="t"> <span class="nam">probs</span> <span class="op">=</span> <span class="op">[</span> </span><span class="r"></span></p> + <p id="t94" class="pln"><span class="n"><a href="#t94">94</a></span><span class="t"> <span class="op">{</span> </span><span class="r"></span></p> + <p id="t95" class="pln"><span class="n"><a href="#t95">95</a></span><span class="t"> <span class="str">'ng'</span><span class="op">:</span> <span class="nam">i</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t96" class="pln"><span class="n"><a href="#t96">96</a></span><span class="t"> <span class="str">'prob_survive'</span><span class="op">:</span> <span class="op">(</span><span class="nam">p</span> <span class="op">:=</span> <span class="op">(</span><span class="nam">fit</span> <span class="op">:=</span> <span class="nam">curve_fit</span><span class="op">(</span><span class="nam">prob_survive</span><span class="op">,</span> <span class="nam">vector</span><span class="op">,</span> <span class="nam">dfs_table</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">.</span><span class="nam">values</span><span class="op">,</span> <span class="op">)</span><span class="op">)</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t97" class="pln"><span class="n"><a href="#t97">97</a></span><span class="t"> <span class="str">'q'</span><span class="op">:</span> <span class="num">1</span><span class="op">-</span><span class="nam">p</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t98" class="pln"><span class="n"><a href="#t98">98</a></span><span class="t"> <span class="str">'precision'</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">sqrt</span><span class="op">(</span><span class="nam">fit</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t99" class="pln"><span class="n"><a href="#t99">99</a></span><span class="t"> <span class="str">'MSE'</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">(</span><span class="nam">dfs_table</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">.</span><span class="nam">values</span> <span class="op">-</span> <span class="nam">prob_survive</span><span class="op">(</span><span class="nam">vector</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span><span class="op">)</span> <span class="op">**</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t100" class="pln"><span class="n"><a href="#t100">100</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p id="t101" class="pln"><span class="n"><a href="#t101">101</a></span><span class="t"> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">dfs_table</span><span class="op">.</span><span class="nam">index</span> </span><span class="r"></span></p> + <p id="t102" class="pln"><span class="n"><a href="#t102">102</a></span><span class="t"> <span class="op">]</span> </span><span class="r"></span></p> + <p id="t103" class="pln"><span class="n"><a href="#t103">103</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t104" class="mis show_mis"><span class="n"><a href="#t104">104</a></span><span class="t"> <span class="nam">dfp</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">probs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t105" class="pln"><span class="n"><a href="#t105">105</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t106" class="mis show_mis"><span class="n"><a href="#t106">106</a></span><span class="t"> <span class="nam">dfp</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">x</span><span class="op">=</span><span class="str">'ng'</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">'q'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t107" class="mis show_mis"><span class="n"><a href="#t107">107</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">ylim</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t108" class="mis show_mis"><span class="n"><a href="#t108">108</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t109" class="pln"><span class="n"><a href="#t109">109</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t110" class="mis show_mis"><span class="n"><a href="#t110">110</a></span><span class="t"> <span class="key">if</span> <span class="nam">show_individual_fits</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t111" class="mis show_mis"><span class="n"><a href="#t111">111</a></span><span class="t"> <span class="key">for</span> <span class="nam">c</span><span class="op">,</span> <span class="nam">p</span><span class="op">,</span> <span class="nam">q</span><span class="op">,</span> <span class="nam">v</span><span class="op">,</span> <span class="nam">_</span> <span class="key">in</span> <span class="nam">dfp</span><span class="op">.</span><span class="nam">values</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t112" class="mis show_mis"><span class="n"><a href="#t112">112</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">vector</span><span class="op">,</span> <span class="nam">dfs_table</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="nam">c</span><span class="op">]</span><span class="op">,</span> <span class="str">'o'</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">'data'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t113" class="mis show_mis"><span class="n"><a href="#t113">113</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">vector</span><span class="op">,</span> <span class="nam">prob_survive</span><span class="op">(</span><span class="nam">vector</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">f'fit q={q:.2f}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t114" class="mis show_mis"><span class="n"><a href="#t114">114</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">f'{c} ng'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t115" class="mis show_mis"><span class="n"><a href="#t115">115</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">xlabel</span><span class="op">(</span><span class="str">'n_cells'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t116" class="mis show_mis"><span class="n"><a href="#t116">116</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t117" class="mis show_mis"><span class="n"><a href="#t117">117</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t118" class="pln"><span class="n"><a href="#t118">118</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t119" class="mis show_mis"><span class="n"><a href="#t119">119</a></span><span class="t"> <span class="key">return</span> <span class="nam">dfp</span> </span><span class="r"></span></p> + <p id="t120" class="pln"><span class="n"><a href="#t120">120</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t121" class="pln"><span class="n"><a href="#t121">121</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t122" class="pln"><span class="n"><a href="#t122">122</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t123" class="run"><span class="n"><a href="#t123">123</a></span><span class="t"><span class="key">def</span> <span class="nam">exponent</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">b</span><span class="op">,</span> <span class="nam">c</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t124" class="pln"><span class="n"><a href="#t124">124</a></span><span class="t"> <span class="str">'''b * np.exp(x / c)'''</span> </span><span class="r"></span></p> + <p id="t125" class="mis show_mis"><span class="n"><a href="#t125">125</a></span><span class="t"> <span class="key">return</span> <span class="nam">b</span> <span class="op">*</span> <span class="nam">np</span><span class="op">.</span><span class="nam">exp</span><span class="op">(</span><span class="nam">x</span> <span class="op">*</span> <span class="nam">c</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t126" class="pln"><span class="n"><a href="#t126">126</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t127" class="pln"><span class="n"><a href="#t127">127</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t128" class="run"><span class="n"><a href="#t128">128</a></span><span class="t"><span class="key">def</span> <span class="nam">exp_on_baseline</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">a</span><span class="op">,</span> <span class="nam">b</span><span class="op">,</span> <span class="nam">c</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t129" class="pln"><span class="n"><a href="#t129">129</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t130" class="pln"><span class="n"><a href="#t130">130</a></span><span class="t"><span class="str"> a + b * np.exp(c * x)</span> </span><span class="r"></span></p> + <p id="t131" class="pln"><span class="n"><a href="#t131">131</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t132" class="mis show_mis"><span class="n"><a href="#t132">132</a></span><span class="t"> <span class="key">return</span> <span class="nam">a</span> <span class="op">+</span> <span class="nam">b</span> <span class="op">*</span> <span class="nam">np</span><span class="op">.</span><span class="nam">exp</span><span class="op">(</span><span class="nam">c</span> <span class="op">*</span> <span class="nam">x</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t133" class="pln"><span class="n"><a href="#t133">133</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t134" class="pln"><span class="n"><a href="#t134">134</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t135" class="pln"><span class="n"><a href="#t135">135</a></span><span class="t"><span class="com"># def lin_exp_fun(x, a, b, c, d, cut=0):</span> </span><span class="r"></span></p> + <p id="t136" class="pln"><span class="n"><a href="#t136">136</a></span><span class="t"><span class="com"># ''' a + bx, a + c exp(d x), concatenate at point `cut` computed automatically'''</span> </span><span class="r"></span></p> + <p id="t137" class="pln"><span class="n"><a href="#t137">137</a></span><span class="t"><span class="com"># try:</span> </span><span class="r"></span></p> + <p id="t138" class="pln"><span class="n"><a href="#t138">138</a></span><span class="t"><span class="com"># acut = int(abs(-1 / d * lambertw(- c * d / b)))</span> </span><span class="r"></span></p> + <p id="t139" class="pln"><span class="n"><a href="#t139">139</a></span><span class="t"><span class="com"># print(f'cut {acut}')</span> </span><span class="r"></span></p> + <p id="t140" class="pln"><span class="n"><a href="#t140">140</a></span><span class="t"><span class="com"># except ValueError:</span> </span><span class="r"></span></p> + <p id="t141" class="pln"><span class="n"><a href="#t141">141</a></span><span class="t"><span class="com"># acut = cut</span> </span><span class="r"></span></p> + <p id="t142" class="pln"><span class="n"><a href="#t142">142</a></span><span class="t"><span class="com"># print('unable to find intersection lin-exp')</span> </span><span class="r"></span></p> + <p id="t143" class="pln"><span class="n"><a href="#t143">143</a></span><span class="t"><span class="com"># return np.concatenate((a + b * x[:acut], exp_on_baseline(x[acut:], a, c, d)))</span> </span><span class="r"></span></p> + <p id="t144" class="pln"><span class="n"><a href="#t144">144</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t145" class="pln"><span class="n"><a href="#t145">145</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t146" class="run"><span class="n"><a href="#t146">146</a></span><span class="t"><span class="key">def</span> <span class="nam">lin_exp_fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">a</span><span class="op">,</span> <span class="nam">b</span><span class="op">,</span> <span class="nam">c</span><span class="op">,</span> <span class="nam">d</span><span class="op">,</span> <span class="nam">cut</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t147" class="mis show_mis"><span class="n"><a href="#t147">147</a></span><span class="t"> <span class="nam">cut</span> <span class="op">=</span> <span class="nam">int</span><span class="op">(</span><span class="nam">cut</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t148" class="mis show_mis"><span class="n"><a href="#t148">148</a></span><span class="t"> <span class="key">return</span> <span class="nam">np</span><span class="op">.</span><span class="nam">concatenate</span><span class="op">(</span><span class="op">(</span><span class="nam">a</span> <span class="op">+</span> <span class="nam">b</span> <span class="op">*</span> <span class="nam">x</span><span class="op">[</span><span class="op">:</span><span class="nam">cut</span><span class="op">]</span><span class="op">,</span> <span class="nam">exp_on_baseline</span><span class="op">(</span><span class="nam">x</span><span class="op">[</span><span class="nam">cut</span><span class="op">:</span><span class="op">]</span><span class="op">,</span> <span class="nam">a</span><span class="op">,</span> <span class="nam">c</span><span class="op">,</span> <span class="nam">d</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t149" class="pln"><span class="n"><a href="#t149">149</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t150" class="pln"><span class="n"><a href="#t150">150</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t151" class="run"><span class="n"><a href="#t151">151</a></span><span class="t"><span class="key">def</span> <span class="nam">exp_exp_fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">a</span><span class="op">,</span> <span class="nam">b</span><span class="op">,</span> <span class="nam">c</span><span class="op">,</span> <span class="nam">d</span><span class="op">,</span> <span class="nam">e</span><span class="op">,</span> <span class="nam">cut</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t152" class="pln"><span class="n"><a href="#t152">152</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t153" class="pln"><span class="n"><a href="#t153">153</a></span><span class="t"><span class="str"> Double-exponent fit</span> </span><span class="r"></span></p> + <p id="t154" class="pln"><span class="n"><a href="#t154">154</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t155" class="pln"><span class="n"><a href="#t155">155</a></span><span class="t"><span class="str"> Parameters:</span> </span><span class="r"></span></p> + <p id="t156" class="pln"><span class="n"><a href="#t156">156</a></span><span class="t"><span class="str"> -----------</span> </span><span class="r"></span></p> + <p id="t157" class="pln"><span class="n"><a href="#t157">157</a></span><span class="t"><span class="str"> a - common baseline</span> </span><span class="r"></span></p> + <p id="t158" class="pln"><span class="n"><a href="#t158">158</a></span><span class="t"><span class="str"> b - first pivot point</span> </span><span class="r"></span></p> + <p id="t159" class="pln"><span class="n"><a href="#t159">159</a></span><span class="t"><span class="str"> c - first power</span> </span><span class="r"></span></p> + <p id="t160" class="pln"><span class="n"><a href="#t160">160</a></span><span class="t"><span class="str"> d - second pivot point</span> </span><span class="r"></span></p> + <p id="t161" class="pln"><span class="n"><a href="#t161">161</a></span><span class="t"><span class="str"> e - second power</span> </span><span class="r"></span></p> + <p id="t162" class="pln"><span class="n"><a href="#t162">162</a></span><span class="t"><span class="str"> cut - juction point</span> </span><span class="r"></span></p> + <p id="t163" class="pln"><span class="n"><a href="#t163">163</a></span><span class="t"><span class="str"> </span> </span><span class="r"></span></p> + <p id="t164" class="pln"><span class="n"><a href="#t164">164</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t165" class="pln"><span class="n"><a href="#t165">165</a></span><span class="t"><span class="str"> -------</span> </span><span class="r"></span></p> + <p id="t166" class="pln"><span class="n"><a href="#t166">166</a></span><span class="t"><span class="str"> a curve</span> </span><span class="r"></span></p> + <p id="t167" class="pln"><span class="n"><a href="#t167">167</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t168" class="mis show_mis"><span class="n"><a href="#t168">168</a></span><span class="t"> <span class="nam">cut</span> <span class="op">=</span> <span class="nam">int</span><span class="op">(</span><span class="nam">cut</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t169" class="mis show_mis"><span class="n"><a href="#t169">169</a></span><span class="t"> <span class="key">return</span> <span class="nam">np</span><span class="op">.</span><span class="nam">concatenate</span><span class="op">(</span><span class="op">(</span><span class="nam">exp_on_baseline</span><span class="op">(</span><span class="nam">x</span><span class="op">[</span><span class="op">:</span><span class="nam">cut</span><span class="op">]</span><span class="op">,</span> <span class="nam">a</span><span class="op">,</span> <span class="nam">b</span><span class="op">,</span> <span class="nam">c</span><span class="op">)</span><span class="op">,</span> <span class="nam">exp_on_baseline</span><span class="op">(</span><span class="nam">x</span><span class="op">[</span><span class="nam">cut</span><span class="op">:</span><span class="op">]</span><span class="op">,</span> <span class="nam">a</span><span class="op">,</span> <span class="nam">d</span><span class="op">,</span> <span class="nam">e</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t170" class="pln"><span class="n"><a href="#t170">170</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t171" class="pln"><span class="n"><a href="#t171">171</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t172" class="run"><span class="n"><a href="#t172">172</a></span><span class="t"><span class="key">def</span> <span class="nam">exp_exp_fit</span><span class="op">(</span><span class="nam">curve</span><span class="op">:</span><span class="nam">list</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">fun</span><span class="op">=</span><span class="nam">exp_exp_fun</span><span class="op">,</span> <span class="nam">base_limit</span><span class="op">=</span><span class="op">-</span><span class="num">2</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t173" class="pln"><span class="n"><a href="#t173">173</a></span><span class="t"> <span class="str">'''fits dual exponent with optimizing a junction '''</span> </span><span class="r"></span></p> + <p id="t174" class="pln"><span class="n"><a href="#t174">174</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t175" class="mis show_mis"><span class="n"><a href="#t175">175</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">curve</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t176" class="mis show_mis"><span class="n"><a href="#t176">176</a></span><span class="t"> <span class="nam">params</span> <span class="op">=</span> <span class="nam">dict</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t177" class="pln"><span class="n"><a href="#t177">177</a></span><span class="t"> <span class="nam">fun</span><span class="op">=</span><span class="nam">fun</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t178" class="pln"><span class="n"><a href="#t178">178</a></span><span class="t"> <span class="nam">bounds</span><span class="op">=</span><span class="op">(</span><span class="op">(</span><span class="nam">base_limit</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="num">0</span><span class="op">)</span><span class="op">,</span> <span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="num">10</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">inf</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t179" class="pln"><span class="n"><a href="#t179">179</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t180" class="pln"><span class="n"><a href="#t180">180</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t181" class="mis show_mis"><span class="n"><a href="#t181">181</a></span><span class="t"> <span class="key">def</span> <span class="nam">find_cut</span><span class="op">(</span><span class="nam">cut</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t182" class="mis show_mis"><span class="n"><a href="#t182">182</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t183" class="mis show_mis"><span class="n"><a href="#t183">183</a></span><span class="t"> <span class="nam">popt</span> <span class="op">=</span> <span class="nam">fit_exponent</span><span class="op">(</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="op">(</span><span class="num">0</span><span class="op">,</span><span class="num">1</span><span class="op">,</span><span class="num">.1</span><span class="op">,</span><span class="num">.1</span><span class="op">,</span><span class="num">.1</span><span class="op">,</span> <span class="nam">cut</span><span class="op">)</span><span class="op">,</span> <span class="op">**</span><span class="nam">params</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t184" class="mis show_mis"><span class="n"><a href="#t184">184</a></span><span class="t"> <span class="nam">fit_result</span> <span class="op">=</span> <span class="nam">fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t185" class="mis show_mis"><span class="n"><a href="#t185">185</a></span><span class="t"> <span class="nam">chi2</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">(</span><span class="nam">fit_result</span> <span class="op">-</span> <span class="nam">curve</span><span class="op">)</span> <span class="op">**</span> <span class="num">2</span> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t186" class="mis show_mis"><span class="n"><a href="#t186">186</a></span><span class="t"> <span class="key">return</span> <span class="nam">chi2</span> </span><span class="r"></span></p> + <p id="t187" class="mis show_mis"><span class="n"><a href="#t187">187</a></span><span class="t"> <span class="key">except</span> <span class="nam">RuntimeError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t188" class="mis show_mis"><span class="n"><a href="#t188">188</a></span><span class="t"> <span class="key">return</span> <span class="nam">np</span><span class="op">.</span><span class="nam">inf</span> </span><span class="r"></span></p> + <p id="t189" class="pln"><span class="n"><a href="#t189">189</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t190" class="mis show_mis"><span class="n"><a href="#t190">190</a></span><span class="t"> <span class="nam">chi2s</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="nam">find_cut</span><span class="op">,</span> <span class="nam">range</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">curve</span><span class="op">)</span> <span class="op">-</span> <span class="num">10</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t191" class="pln"><span class="n"><a href="#t191">191</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t192" class="mis show_mis"><span class="n"><a href="#t192">192</a></span><span class="t"> <span class="nam">cut</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">argmin</span><span class="op">(</span><span class="nam">chi2s</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t193" class="mis show_mis"><span class="n"><a href="#t193">193</a></span><span class="t"> <span class="nam">popt</span> <span class="op">=</span> <span class="nam">fit_exponent</span><span class="op">(</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="op">(</span><span class="num">0</span><span class="op">,</span><span class="num">1</span><span class="op">,</span><span class="num">.1</span><span class="op">,</span><span class="num">.1</span><span class="op">,</span><span class="num">.1</span><span class="op">,</span> <span class="nam">cut</span><span class="op">)</span><span class="op">,</span> <span class="op">**</span><span class="nam">params</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t194" class="pln"><span class="n"><a href="#t194">194</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t195" class="mis show_mis"><span class="n"><a href="#t195">195</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t196" class="mis show_mis"><span class="n"><a href="#t196">196</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">semilogy</span><span class="op">(</span><span class="nam">curve</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t197" class="mis show_mis"><span class="n"><a href="#t197">197</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">)</span><span class="op">,</span> <span class="str">'.'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t198" class="mis show_mis"><span class="n"><a href="#t198">198</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">cut</span><span class="op">,</span> <span class="nam">fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">)</span><span class="op">[</span><span class="nam">cut</span><span class="op">]</span><span class="op">,</span> <span class="str">'o'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t199" class="mis show_mis"><span class="n"><a href="#t199">199</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t200" class="pln"><span class="n"><a href="#t200">200</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t201" class="mis show_mis"><span class="n"><a href="#t201">201</a></span><span class="t"> <span class="key">return</span> <span class="nam">popt</span> </span><span class="r"></span></p> + <p id="t202" class="pln"><span class="n"><a href="#t202">202</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t203" class="run"><span class="n"><a href="#t203">203</a></span><span class="t"><span class="key">def</span> <span class="nam">lin_exp_fit</span><span class="op">(</span><span class="nam">curve</span><span class="op">:</span><span class="nam">list</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">fun</span><span class="op">=</span><span class="nam">lin_exp_fun</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t204" class="pln"><span class="n"><a href="#t204">204</a></span><span class="t"> <span class="str">'''fits linear fuction in the beginning of the curve and exponent to the end '''</span> </span><span class="r"></span></p> + <p id="t205" class="pln"><span class="n"><a href="#t205">205</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t206" class="mis show_mis"><span class="n"><a href="#t206">206</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">curve</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t207" class="pln"><span class="n"><a href="#t207">207</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t208" class="mis show_mis"><span class="n"><a href="#t208">208</a></span><span class="t"> <span class="key">def</span> <span class="nam">find_cut</span><span class="op">(</span><span class="nam">cut</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t209" class="mis show_mis"><span class="n"><a href="#t209">209</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t210" class="mis show_mis"><span class="n"><a href="#t210">210</a></span><span class="t"> <span class="nam">popt</span> <span class="op">=</span> <span class="nam">fit_exponent</span><span class="op">(</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">fun</span><span class="op">=</span><span class="nam">fun</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="op">(</span><span class="num">0</span><span class="op">,</span><span class="num">0</span><span class="op">,</span><span class="num">0</span><span class="op">,</span><span class="num">0</span><span class="op">,</span> <span class="nam">cut</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t211" class="mis show_mis"><span class="n"><a href="#t211">211</a></span><span class="t"> <span class="nam">fit_result</span> <span class="op">=</span> <span class="nam">fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t212" class="mis show_mis"><span class="n"><a href="#t212">212</a></span><span class="t"> <span class="nam">chi2</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">(</span><span class="nam">fit_result</span> <span class="op">-</span> <span class="nam">curve</span><span class="op">)</span> <span class="op">**</span> <span class="num">2</span> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t213" class="mis show_mis"><span class="n"><a href="#t213">213</a></span><span class="t"> <span class="key">return</span> <span class="nam">chi2</span> </span><span class="r"></span></p> + <p id="t214" class="mis show_mis"><span class="n"><a href="#t214">214</a></span><span class="t"> <span class="key">except</span> <span class="nam">RuntimeError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t215" class="mis show_mis"><span class="n"><a href="#t215">215</a></span><span class="t"> <span class="key">return</span> <span class="nam">np</span><span class="op">.</span><span class="nam">inf</span> </span><span class="r"></span></p> + <p id="t216" class="pln"><span class="n"><a href="#t216">216</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t217" class="mis show_mis"><span class="n"><a href="#t217">217</a></span><span class="t"> <span class="nam">chi2s</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="nam">find_cut</span><span class="op">,</span> <span class="nam">range</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">curve</span><span class="op">)</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t218" class="pln"><span class="n"><a href="#t218">218</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t219" class="mis show_mis"><span class="n"><a href="#t219">219</a></span><span class="t"> <span class="nam">cut</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">argmin</span><span class="op">(</span><span class="nam">chi2s</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t220" class="mis show_mis"><span class="n"><a href="#t220">220</a></span><span class="t"> <span class="nam">popt</span> <span class="op">=</span> <span class="nam">fit_exponent</span><span class="op">(</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">fun</span><span class="op">=</span><span class="nam">fun</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="op">(</span><span class="num">0</span><span class="op">,</span><span class="num">0</span><span class="op">,</span><span class="num">0</span><span class="op">,</span><span class="num">0</span><span class="op">,</span> <span class="nam">cut</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t221" class="pln"><span class="n"><a href="#t221">221</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t222" class="mis show_mis"><span class="n"><a href="#t222">222</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t223" class="mis show_mis"><span class="n"><a href="#t223">223</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">semilogy</span><span class="op">(</span><span class="nam">curve</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t224" class="mis show_mis"><span class="n"><a href="#t224">224</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">)</span><span class="op">,</span> <span class="str">'.'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t225" class="mis show_mis"><span class="n"><a href="#t225">225</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">cut</span><span class="op">,</span> <span class="nam">fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">)</span><span class="op">[</span><span class="nam">cut</span><span class="op">]</span><span class="op">,</span> <span class="str">'o'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t226" class="mis show_mis"><span class="n"><a href="#t226">226</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t227" class="pln"><span class="n"><a href="#t227">227</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t228" class="mis show_mis"><span class="n"><a href="#t228">228</a></span><span class="t"> <span class="key">return</span> <span class="nam">popt</span> </span><span class="r"></span></p> + <p id="t229" class="pln"><span class="n"><a href="#t229">229</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t230" class="pln"><span class="n"><a href="#t230">230</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t231" class="run"><span class="n"><a href="#t231">231</a></span><span class="t"><span class="key">def</span> <span class="nam">fit_exp_on_baseline</span><span class="op">(</span><span class="nam">data</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="op">(</span><span class="num">1</span><span class="op">,</span><span class="num">1</span><span class="op">,</span><span class="num">0</span><span class="op">)</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t232" class="pln"><span class="n"><a href="#t232">232</a></span><span class="t"> <span class="str">"""fits a + b * exp(c * x)</span> </span><span class="r"></span></p> + <p id="t233" class="pln"><span class="n"><a href="#t233">233</a></span><span class="t"><span class="str"> kwargs: same as in fit.fit_exponent and fit.plot_fit</span> </span><span class="r"></span></p> + <p id="t234" class="pln"><span class="n"><a href="#t234">234</a></span><span class="t"><span class="str"> returns:</span> </span><span class="r"></span></p> + <p id="t235" class="pln"><span class="n"><a href="#t235">235</a></span><span class="t"><span class="str"> (a, b, c)</span> </span><span class="r"></span></p> + <p id="t236" class="pln"><span class="n"><a href="#t236">236</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p id="t237" class="mis show_mis"><span class="n"><a href="#t237">237</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t238" class="mis show_mis"><span class="n"><a href="#t238">238</a></span><span class="t"> <span class="nam">popt</span><span class="op">,</span> <span class="nam">bins</span> <span class="op">=</span> <span class="nam">fit_exponent</span><span class="op">(</span><span class="nam">data</span><span class="op">,</span> <span class="nam">bins</span><span class="op">=</span><span class="nam">x</span><span class="op">,</span> <span class="nam">fun</span><span class="op">=</span><span class="nam">exp_on_baseline</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t239" class="pln"><span class="n"><a href="#t239">239</a></span><span class="t"> <span class="nam">p0</span><span class="op">=</span><span class="nam">p0</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">return_bins</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t240" class="mis show_mis"><span class="n"><a href="#t240">240</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span> <span class="op">==</span> <span class="str">'log'</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t241" class="mis show_mis"><span class="n"><a href="#t241">241</a></span><span class="t"> <span class="nam">curve</span> <span class="op">=</span> <span class="nam">data</span> <span class="op">-</span> <span class="nam">popt</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t242" class="mis show_mis"><span class="n"><a href="#t242">242</a></span><span class="t"> <span class="nam">fit</span> <span class="op">=</span> <span class="nam">exp_on_baseline</span><span class="op">(</span><span class="nam">bins</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="nam">popt</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">popt</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t243" class="mis show_mis"><span class="n"><a href="#t243">243</a></span><span class="t"> <span class="nam">plot_fit</span><span class="op">(</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">fit</span><span class="op">,</span> <span class="nam">bins</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t244" class="mis show_mis"><span class="n"><a href="#t244">244</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span> <span class="op">==</span> <span class="str">'linear'</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t245" class="mis show_mis"><span class="n"><a href="#t245">245</a></span><span class="t"> <span class="nam">curve</span> <span class="op">=</span> <span class="nam">data</span> </span><span class="r"></span></p> + <p id="t246" class="mis show_mis"><span class="n"><a href="#t246">246</a></span><span class="t"> <span class="nam">fit</span> <span class="op">=</span> <span class="nam">exp_on_baseline</span><span class="op">(</span><span class="nam">bins</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t247" class="mis show_mis"><span class="n"><a href="#t247">247</a></span><span class="t"> <span class="nam">plot_fit</span><span class="op">(</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">fit</span><span class="op">,</span> <span class="nam">bins</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t248" class="mis show_mis"><span class="n"><a href="#t248">248</a></span><span class="t"> <span class="key">return</span> <span class="op">(</span><span class="nam">popt</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t249" class="mis show_mis"><span class="n"><a href="#t249">249</a></span><span class="t"> <span class="key">except</span> <span class="nam">RuntimeError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t250" class="pln"><span class="n"><a href="#t250">250</a></span><span class="t"> <span class="com"># if plot:</span> </span><span class="r"></span></p> + <p id="t251" class="pln"><span class="n"><a href="#t251">251</a></span><span class="t"> <span class="com"># plt.plot(x, data)</span> </span><span class="r"></span></p> + <p id="t252" class="mis show_mis"><span class="n"><a href="#t252">252</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'No fit'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t253" class="mis show_mis"><span class="n"><a href="#t253">253</a></span><span class="t"> <span class="key">return</span> <span class="op">(</span><span class="key">None</span><span class="op">,</span> <span class="key">None</span><span class="op">,</span> <span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t254" class="pln"><span class="n"><a href="#t254">254</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t255" class="pln"><span class="n"><a href="#t255">255</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t256" class="run"><span class="n"><a href="#t256">256</a></span><span class="t"><span class="key">def</span> <span class="nam">lag_exponent</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">lag</span><span class="op">,</span> <span class="nam">c</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t257" class="pln"><span class="n"><a href="#t257">257</a></span><span class="t"> <span class="str">'''np.exp((x - lag) / c)'''</span> </span><span class="r"></span></p> + <p id="t258" class="mis show_mis"><span class="n"><a href="#t258">258</a></span><span class="t"> <span class="key">return</span> <span class="nam">np</span><span class="op">.</span><span class="nam">exp</span><span class="op">(</span><span class="op">(</span><span class="nam">x</span> <span class="op">-</span> <span class="nam">lag</span><span class="op">)</span> <span class="op">/</span> <span class="nam">c</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t259" class="pln"><span class="n"><a href="#t259">259</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t260" class="pln"><span class="n"><a href="#t260">260</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t261" class="run"><span class="n"><a href="#t261">261</a></span><span class="t"><span class="key">def</span> <span class="nam">gompertz</span><span class="op">(</span><span class="nam">t</span><span class="op">,</span> <span class="nam">a</span><span class="op">,</span> <span class="nam">b</span><span class="op">,</span> <span class="nam">c</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t262" class="pln"><span class="n"><a href="#t262">262</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t263" class="pln"><span class="n"><a href="#t263">263</a></span><span class="t"><span class="str"> https://en.wikipedia.org/wiki/Gompertz_function</span> </span><span class="r"></span></p> + <p id="t264" class="pln"><span class="n"><a href="#t264">264</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t265" class="mis show_mis"><span class="n"><a href="#t265">265</a></span><span class="t"> <span class="key">return</span> <span class="nam">a</span> <span class="op">*</span> <span class="nam">np</span><span class="op">.</span><span class="nam">exp</span><span class="op">(</span><span class="op">-</span> <span class="nam">b</span> <span class="op">*</span> <span class="nam">np</span><span class="op">.</span><span class="nam">exp</span><span class="op">(</span><span class="op">-</span> <span class="nam">c</span> <span class="op">*</span> <span class="nam">t</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t266" class="pln"><span class="n"><a href="#t266">266</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t267" class="run"><span class="n"><a href="#t267">267</a></span><span class="t"><span class="key">def</span> <span class="nam">sigmoid</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">a</span><span class="op">,</span> <span class="nam">b</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t268" class="mis show_mis"><span class="n"><a href="#t268">268</a></span><span class="t"> <span class="key">return</span> <span class="num">1</span> <span class="op">/</span> <span class="op">(</span><span class="num">1</span> <span class="op">+</span> <span class="nam">np</span><span class="op">.</span><span class="nam">exp</span><span class="op">(</span><span class="nam">a</span> <span class="op">*</span> <span class="nam">x</span> <span class="op">+</span> <span class="nam">b</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t269" class="pln"><span class="n"><a href="#t269">269</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t270" class="pln"><span class="n"><a href="#t270">270</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t271" class="run"><span class="n"><a href="#t271">271</a></span><span class="t"><span class="key">def</span> <span class="nam">hill</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">n</span><span class="op">,</span> <span class="nam">K</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t272" class="mis show_mis"><span class="n"><a href="#t272">272</a></span><span class="t"> <span class="key">return</span> <span class="nam">x</span> <span class="op">**</span> <span class="nam">n</span><span class="op">/</span><span class="op">(</span><span class="nam">x</span> <span class="op">**</span> <span class="nam">n</span> <span class="op">+</span> <span class="nam">K</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t273" class="pln"><span class="n"><a href="#t273">273</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t274" class="run"><span class="n"><a href="#t274">274</a></span><span class="t"><span class="key">def</span> <span class="nam">erf_fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">a</span><span class="op">,</span> <span class="nam">b</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t275" class="mis show_mis"><span class="n"><a href="#t275">275</a></span><span class="t"> <span class="key">return</span> <span class="op">(</span><span class="op">(</span><span class="num">1</span> <span class="op">+</span> <span class="nam">erf</span><span class="op">(</span><span class="nam">a</span> <span class="op">*</span> <span class="op">(</span><span class="nam">x</span> <span class="op">-</span> <span class="nam">b</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> <span class="op">/</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t276" class="pln"><span class="n"><a href="#t276">276</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t277" class="run"><span class="n"><a href="#t277">277</a></span><span class="t"><span class="key">def</span> <span class="nam">fit_sigmoid</span><span class="op">(</span><span class="nam">probs</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">fun</span><span class="op">=</span><span class="nam">sigmoid</span><span class="op">,</span> <span class="nam">fit_name</span><span class="op">=</span><span class="str">'sigmoid'</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="op">(</span><span class="num">2.</span><span class="op">,</span> <span class="op">-</span><span class="num">2.</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t278" class="mis show_mis"><span class="n"><a href="#t278">278</a></span><span class="t"> <span class="nam">probs</span> <span class="op">=</span> <span class="nam">probs</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t279" class="mis show_mis"><span class="n"><a href="#t279">279</a></span><span class="t"> <span class="nam">vector</span> <span class="op">=</span> <span class="nam">probs</span><span class="op">.</span><span class="nam">ng</span> </span><span class="r"></span></p> + <p id="t280" class="pln"><span class="n"><a href="#t280">280</a></span><span class="t"><span class="com"># print(vector)</span> </span><span class="r"></span></p> + <p id="t281" class="pln"><span class="n"><a href="#t281">281</a></span><span class="t"><span class="com"># probs.loc[:, 'negative'] = 1 - probs.positive</span> </span><span class="r"></span></p> + <p id="t282" class="mis show_mis"><span class="n"><a href="#t282">282</a></span><span class="t"> <span class="nam">popt</span><span class="op">,</span> <span class="nam">pcov</span> <span class="op">=</span> <span class="nam">curve_fit</span><span class="op">(</span><span class="nam">fun</span><span class="op">,</span> <span class="nam">vector</span><span class="op">,</span> <span class="nam">probs</span><span class="op">.</span><span class="nam">q</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="nam">p0</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t283" class="mis show_mis"><span class="n"><a href="#t283">283</a></span><span class="t"> <span class="nam">a</span><span class="op">,</span> <span class="nam">b</span> <span class="op">=</span> <span class="nam">popt</span> </span><span class="r"></span></p> + <p id="t284" class="mis show_mis"><span class="n"><a href="#t284">284</a></span><span class="t"> <span class="nam">da</span><span class="op">,</span> <span class="nam">db</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">sqrt</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">diag</span><span class="op">(</span><span class="nam">pcov</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t285" class="mis show_mis"><span class="n"><a href="#t285">285</a></span><span class="t"> <span class="key">if</span> <span class="nam">ax</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t286" class="mis show_mis"><span class="n"><a href="#t286">286</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t287" class="mis show_mis"><span class="n"><a href="#t287">287</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">vector</span><span class="op">,</span> <span class="nam">probs</span><span class="op">.</span><span class="nam">q</span><span class="op">,</span> <span class="str">'.'</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">'data'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t288" class="mis show_mis"><span class="n"><a href="#t288">288</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="op">(</span><span class="nam">x</span> <span class="op">:=</span> <span class="nam">sorted</span><span class="op">(</span><span class="nam">vector</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">fun</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">)</span><span class="op">,</span> <span class="nam">lw</span><span class="op">=</span><span class="num">10</span><span class="op">,</span> <span class="nam">alpha</span><span class="op">=</span><span class="num">.5</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">f'{fit_name} fit'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t289" class="mis show_mis"><span class="n"><a href="#t289">289</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t290" class="mis show_mis"><span class="n"><a href="#t290">290</a></span><span class="t"> <span class="key">return</span> <span class="nam">popt</span><span class="op">,</span> <span class="op">(</span><span class="nam">da</span><span class="op">,</span> <span class="nam">db</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t291" class="pln"><span class="n"><a href="#t291">291</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t292" class="pln"><span class="n"><a href="#t292">292</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t293" class="run"><span class="n"><a href="#t293">293</a></span><span class="t"><span class="key">def</span> <span class="nam">fit_exponent</span><span class="op">(</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">bins</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">fun</span><span class="op">=</span><span class="nam">exponent</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="op">(</span><span class="num">1.</span><span class="op">,</span> <span class="num">.5</span><span class="op">,</span><span class="op">)</span><span class="op">,</span> <span class="nam">bounds</span><span class="op">=</span><span class="op">(</span><span class="op">-</span><span class="nam">np</span><span class="op">.</span><span class="nam">inf</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">inf</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t294" class="pln"><span class="n"><a href="#t294">294</a></span><span class="t"> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">plot_init</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">return_bins</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t295" class="pln"><span class="n"><a href="#t295">295</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t296" class="pln"><span class="n"><a href="#t296">296</a></span><span class="t"><span class="str"> Fits exponent to 1D curve</span> </span><span class="r"></span></p> + <p id="t297" class="pln"><span class="n"><a href="#t297">297</a></span><span class="t"><span class="str"> plot: ['linear', 'log', None]</span> </span><span class="r"></span></p> + <p id="t298" class="pln"><span class="n"><a href="#t298">298</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t299" class="mis show_mis"><span class="n"><a href="#t299">299</a></span><span class="t"> <span class="key">if</span> <span class="nam">bins</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t300" class="mis show_mis"><span class="n"><a href="#t300">300</a></span><span class="t"> <span class="nam">bins</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">curve</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t301" class="mis show_mis"><span class="n"><a href="#t301">301</a></span><span class="t"> <span class="nam">popt</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">curve_fit</span><span class="op">(</span><span class="nam">f</span><span class="op">=</span><span class="nam">fun</span><span class="op">,</span> <span class="nam">xdata</span><span class="op">=</span><span class="nam">bins</span><span class="op">,</span> <span class="nam">ydata</span><span class="op">=</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="nam">p0</span><span class="op">,</span> <span class="nam">bounds</span><span class="op">=</span><span class="nam">bounds</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t302" class="pln"><span class="n"><a href="#t302">302</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t303" class="mis show_mis"><span class="n"><a href="#t303">303</a></span><span class="t"> <span class="nam">fit_result</span> <span class="op">=</span> <span class="nam">fun</span><span class="op">(</span><span class="nam">bins</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t304" class="mis show_mis"><span class="n"><a href="#t304">304</a></span><span class="t"> <span class="nam">plot_fit</span><span class="op">(</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">fit_result</span><span class="op">,</span> <span class="nam">bins</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t305" class="mis show_mis"><span class="n"><a href="#t305">305</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot_init</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t306" class="mis show_mis"><span class="n"><a href="#t306">306</a></span><span class="t"> <span class="nam">plot_fit</span><span class="op">(</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">fun</span><span class="op">(</span><span class="nam">bins</span><span class="op">,</span> <span class="op">*</span><span class="nam">p0</span><span class="op">)</span><span class="op">,</span> <span class="nam">bins</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">,</span> <span class="nam">labels</span><span class="op">=</span><span class="op">[</span><span class="str">'init'</span><span class="op">,</span> <span class="str">'data'</span><span class="op">]</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t307" class="mis show_mis"><span class="n"><a href="#t307">307</a></span><span class="t"> <span class="key">if</span> <span class="nam">return_bins</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t308" class="mis show_mis"><span class="n"><a href="#t308">308</a></span><span class="t"> <span class="key">return</span> <span class="nam">popt</span><span class="op">,</span> <span class="nam">bins</span> </span><span class="r"></span></p> + <p id="t309" class="mis show_mis"><span class="n"><a href="#t309">309</a></span><span class="t"> <span class="key">return</span> <span class="nam">popt</span> </span><span class="r"></span></p> + <p id="t310" class="pln"><span class="n"><a href="#t310">310</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t311" class="pln"><span class="n"><a href="#t311">311</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t312" class="run"><span class="n"><a href="#t312">312</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_fit</span><span class="op">(</span><span class="nam">curve</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">fit</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">vector</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="str">'linear'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t313" class="pln"><span class="n"><a href="#t313">313</a></span><span class="t"> <span class="nam">labels</span><span class="op">=</span><span class="op">[</span><span class="str">'data'</span><span class="op">,</span> <span class="str">'fit'</span><span class="op">]</span><span class="op">,</span> <span class="nam">markers</span><span class="op">=</span><span class="op">[</span><span class="str">'.'</span><span class="op">,</span> <span class="str">'-'</span><span class="op">]</span><span class="op">,</span> <span class="nam">legend</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t314" class="pln"><span class="n"><a href="#t314">314</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t315" class="pln"><span class="n"><a href="#t315">315</a></span><span class="t"><span class="str"> plot: ['linear', 'log', None]</span> </span><span class="r"></span></p> + <p id="t316" class="pln"><span class="n"><a href="#t316">316</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t317" class="mis show_mis"><span class="n"><a href="#t317">317</a></span><span class="t"> <span class="key">def</span> <span class="nam">plot_curves</span><span class="op">(</span><span class="nam">fun</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t318" class="mis show_mis"><span class="n"><a href="#t318">318</a></span><span class="t"> <span class="op">[</span><span class="nam">fun</span><span class="op">(</span><span class="nam">vector</span><span class="op">,</span> <span class="nam">c</span><span class="op">,</span> <span class="nam">marker</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="nam">label</span><span class="op">)</span> <span class="key">for</span> <span class="nam">c</span><span class="op">,</span> <span class="nam">marker</span><span class="op">,</span> <span class="nam">label</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="op">[</span><span class="nam">curve</span><span class="op">,</span> <span class="nam">fit</span><span class="op">]</span><span class="op">,</span> <span class="nam">markers</span><span class="op">,</span> <span class="nam">labels</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t319" class="mis show_mis"><span class="n"><a href="#t319">319</a></span><span class="t"> <span class="key">if</span> <span class="nam">legend</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t320" class="mis show_mis"><span class="n"><a href="#t320">320</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="nam">loc</span><span class="op">=</span><span class="op">(</span><span class="num">1</span><span class="op">,</span><span class="num">0</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t321" class="pln"><span class="n"><a href="#t321">321</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t322" class="mis show_mis"><span class="n"><a href="#t322">322</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span> <span class="op">==</span> <span class="str">'log'</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t323" class="mis show_mis"><span class="n"><a href="#t323">323</a></span><span class="t"> <span class="nam">plot_curves</span><span class="op">(</span><span class="nam">plt</span><span class="op">.</span><span class="nam">semilogy</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t324" class="mis show_mis"><span class="n"><a href="#t324">324</a></span><span class="t"> <span class="key">elif</span> <span class="nam">plot</span> <span class="op">==</span> <span class="str">'linear'</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t325" class="mis show_mis"><span class="n"><a href="#t325">325</a></span><span class="t"> <span class="nam">plot_curves</span><span class="op">(</span><span class="nam">plt</span><span class="op">.</span><span class="nam">plot</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t326" class="mis show_mis"><span class="n"><a href="#t326">326</a></span><span class="t"> <span class="key">elif</span> <span class="nam">plot</span> <span class="op">==</span> <span class="key">False</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t327" class="mis show_mis"><span class="n"><a href="#t327">327</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p id="t328" class="pln"><span class="n"><a href="#t328">328</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t329" class="mis show_mis"><span class="n"><a href="#t329">329</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'plot type `{plot}` not understood. Use `log` or `linear`'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t330" class="pln"><span class="n"><a href="#t330">330</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t331" class="mis show_mis"><span class="n"><a href="#t331">331</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span> </span><span class="r"></span></p> + <p id="t332" class="pln"><span class="n"><a href="#t332">332</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t333" class="pln"><span class="n"><a href="#t333">333</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t334" class="run"><span class="n"><a href="#t334">334</a></span><span class="t"><span class="key">def</span> <span class="nam">add_doubling_time</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t335" class="pln"><span class="n"><a href="#t335">335</a></span><span class="t"> <span class="nam">df</span><span class="op">:</span><span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t336" class="pln"><span class="n"><a href="#t336">336</a></span><span class="t"> <span class="nam">rate_column</span><span class="op">:</span><span class="nam">str</span><span class="op">=</span><span class="str">'c'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t337" class="pln"><span class="n"><a href="#t337">337</a></span><span class="t"> <span class="nam">frame_rate</span><span class="op">:</span><span class="nam">float</span><span class="op">=</span><span class="num">1.</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t338" class="pln"><span class="n"><a href="#t338">338</a></span><span class="t"> <span class="nam">new_column</span><span class="op">=</span><span class="str">'Doubling time, min'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t339" class="pln"><span class="n"><a href="#t339">339</a></span><span class="t"> <span class="nam">convert_rate_time</span> <span class="op">=</span> <span class="key">lambda</span> <span class="nam">c</span><span class="op">,</span> <span class="nam">frame_rate</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">log</span><span class="op">(</span><span class="num">2</span><span class="op">)</span> <span class="op">/</span> <span class="nam">c</span> <span class="op">*</span> <span class="nam">frame_rate</span> </span><span class="r"></span></p> + <p id="t340" class="pln"><span class="n"><a href="#t340">340</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t341" class="pln"><span class="n"><a href="#t341">341</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t342" class="pln"><span class="n"><a href="#t342">342</a></span><span class="t"><span class="str"> adds a column with doubling time using rate 'c'</span> </span><span class="r"></span></p> + <p id="t343" class="pln"><span class="n"><a href="#t343">343</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t344" class="mis show_mis"><span class="n"><a href="#t344">344</a></span><span class="t"> <span class="nam">table</span> <span class="op">=</span> <span class="nam">df</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t345" class="mis show_mis"><span class="n"><a href="#t345">345</a></span><span class="t"> <span class="nam">table</span><span class="op">[</span><span class="nam">new_column</span><span class="op">]</span> <span class="op">=</span> <span class="nam">convert_rate_time</span><span class="op">(</span><span class="nam">table</span><span class="op">[</span><span class="nam">rate_column</span><span class="op">]</span><span class="op">.</span><span class="nam">values</span><span class="op">,</span> <span class="nam">frame_rate</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t346" class="mis show_mis"><span class="n"><a href="#t346">346</a></span><span class="t"> <span class="key">return</span> <span class="nam">table</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/droplet_growth_mic_py.html b/cov_html/droplet_growth_mic_py.html new file mode 100644 index 0000000000000000000000000000000000000000..dd615c718851efd78324e95229d5030d970fff3f --- /dev/null +++ b/cov_html/droplet_growth_mic_py.html @@ -0,0 +1,405 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for droplet_growth/mic.py: 12%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>droplet_growth/mic.py</b> : + <span class="pc_cov">12%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 187 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">22 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">165 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">tifffile</span> <span class="key">import</span> <span class="nam">imwrite</span><span class="op">,</span> <span class="nam">imread</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">glob</span> <span class="key">import</span> <span class="nam">glob</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">droplet_growth</span><span class="op">.</span><span class="nam">register</span> <span class="key">as</span> <span class="nam">reg</span> </span><span class="r"></span></p> + <p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">droplet_growth</span> <span class="key">import</span> <span class="nam">segment</span><span class="op">,</span> <span class="nam">count</span><span class="op">,</span> <span class="nam">poisson</span><span class="op">,</span> <span class="nam">fit</span> </span><span class="r"></span></p> + <p id="t6" class="run"><span class="n"><a href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">nd2tif</span><span class="op">.</span><span class="nam">transform</span> <span class="key">import</span> <span class="nam">Well</span><span class="op">,</span> <span class="nam">to_8bits</span> </span><span class="r"></span></p> + <p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span> </span><span class="r"></span></p> + <p id="t8" class="run"><span class="n"><a href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span> </span><span class="r"></span></p> + <p id="t9" class="run"><span class="n"><a href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">measure</span> <span class="key">import</span> <span class="nam">regionprops</span><span class="op">,</span> <span class="nam">regionprops_table</span> </span><span class="r"></span></p> + <p id="t10" class="run"><span class="n"><a href="#t10">10</a></span><span class="t"><span class="key">import</span> <span class="nam">re</span> </span><span class="r"></span></p> + <p id="t11" class="run"><span class="n"><a href="#t11">11</a></span><span class="t"><span class="key">import</span> <span class="nam">seaborn</span> <span class="key">as</span> <span class="nam">sns</span> </span><span class="r"></span></p> + <p id="t12" class="pln"><span class="n"><a href="#t12">12</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t13" class="pln"><span class="n"><a href="#t13">13</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t14" class="pln"><span class="n"><a href="#t14">14</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t15" class="run"><span class="n"><a href="#t15">15</a></span><span class="t"><span class="key">def</span> <span class="nam">get_stats</span><span class="op">(</span><span class="nam">dff_with_final_state</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"> <span class="str">'''Collects prob_survive and sample size for all concentrations and n_cells</span> </span><span class="r"></span></p> + <p id="t17" class="pln"><span class="n"><a href="#t17">17</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t18" class="pln"><span class="n"><a href="#t18">18</a></span><span class="t"><span class="str"> DataFrame with four columns</span> </span><span class="r"></span></p> + <p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t20" class="mis show_mis"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="key">assert</span> <span class="nam">all</span><span class="op">(</span><span class="op">[</span><span class="nam">c</span> <span class="key">in</span> <span class="nam">dff_with_final_state</span><span class="op">.</span><span class="nam">columns</span> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="op">[</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="str">'ng'</span><span class="op">,</span> <span class="str">'final_state'</span><span class="op">]</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t21" class="mis show_mis"><span class="n"><a href="#t21">21</a></span><span class="t"> <span class="nam">stats</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t22" class="mis show_mis"><span class="n"><a href="#t22">22</a></span><span class="t"> <span class="key">for</span> <span class="nam">n</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">6</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t23" class="mis show_mis"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="nam">dff_with_final_state</span><span class="op">[</span><span class="str">'ng'</span><span class="op">]</span><span class="op">.</span><span class="nam">unique</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t24" class="mis show_mis"><span class="n"><a href="#t24">24</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">dff_with_final_state</span><span class="op">.</span><span class="nam">query</span><span class="op">(</span><span class="str">f'`ng` == {c}'</span><span class="op">)</span><span class="op">.</span><span class="nam">query</span><span class="op">(</span><span class="str">f'n_cells == {n}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t25" class="mis show_mis"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="nam">N</span> <span class="op">=</span> <span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t26" class="mis show_mis"><span class="n"><a href="#t26">26</a></span><span class="t"> <span class="nam">p</span> <span class="op">=</span> <span class="nam">df</span><span class="op">.</span><span class="nam">final_state</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t27" class="mis show_mis"><span class="n"><a href="#t27">27</a></span><span class="t"> <span class="nam">stats</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="op">{</span><span class="str">'n_cells'</span><span class="op">:</span> <span class="nam">n</span><span class="op">,</span> <span class="str">'sample_size'</span><span class="op">:</span> <span class="nam">N</span><span class="op">,</span> <span class="str">'ng'</span><span class="op">:</span> <span class="nam">c</span><span class="op">,</span> <span class="str">'prob_survive'</span><span class="op">:</span> <span class="nam">p</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t28" class="pln"><span class="n"><a href="#t28">28</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t29" class="mis show_mis"><span class="n"><a href="#t29">29</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">stats</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t30" class="pln"><span class="n"><a href="#t30">30</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t31" class="mis show_mis"><span class="n"><a href="#t31">31</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">150</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t32" class="mis show_mis"><span class="n"><a href="#t32">32</a></span><span class="t"> <span class="nam">sns</span><span class="op">.</span><span class="nam">scatterplot</span><span class="op">(</span><span class="nam">data</span><span class="op">=</span><span class="nam">df</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">'prob_survive'</span><span class="op">,</span> <span class="nam">hue</span><span class="op">=</span><span class="str">'ng'</span><span class="op">,</span> <span class="nam">size</span><span class="op">=</span><span class="str">'sample_size'</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t33" class="mis show_mis"><span class="n"><a href="#t33">33</a></span><span class="t"> <span class="nam">sns</span><span class="op">.</span><span class="nam">lineplot</span><span class="op">(</span><span class="nam">data</span><span class="op">=</span><span class="nam">df</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">'prob_survive'</span><span class="op">,</span> <span class="nam">hue</span><span class="op">=</span><span class="str">'ng'</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span> <span class="nam">legend</span><span class="op">=</span><span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t34" class="mis show_mis"><span class="n"><a href="#t34">34</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="nam">loc</span><span class="op">=</span><span class="op">(</span><span class="num">1.01</span><span class="op">,</span><span class="num">0</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t36" class="mis show_mis"><span class="n"><a href="#t36">36</a></span><span class="t"> <span class="key">return</span> <span class="nam">df</span> </span><span class="r"></span></p> + <p id="t37" class="pln"><span class="n"><a href="#t37">37</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t38" class="pln"><span class="n"><a href="#t38">38</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t39" class="run"><span class="n"><a href="#t39">39</a></span><span class="t"><span class="key">def</span> <span class="nam">show_prob_survive</span><span class="op">(</span><span class="nam">dff</span><span class="op">:</span><span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">threshold_mean_intensity</span><span class="op">=</span><span class="str">'auto'</span><span class="op">,</span> <span class="nam">max_cells</span><span class="op">:</span><span class="nam">int</span><span class="op">=</span><span class="num">5</span><span class="op">,</span> <span class="nam">dpi</span><span class="op">:</span><span class="nam">int</span><span class="op">=</span><span class="num">150</span><span class="op">,</span> <span class="nam">title</span><span class="op">:</span><span class="nam">str</span><span class="op">=</span><span class="str">''</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t40" class="pln"><span class="n"><a href="#t40">40</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t41" class="pln"><span class="n"><a href="#t41">41</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t42" class="pln"><span class="n"><a href="#t42">42</a></span><span class="t"><span class="str"> Thresholds mean_intensity to get final state and </span> </span><span class="r"></span></p> + <p id="t43" class="pln"><span class="n"><a href="#t43">43</a></span><span class="t"><span class="str"> plots average for all concentrations and cell numbers 0..max_cells</span> </span><span class="r"></span></p> + <p id="t44" class="pln"><span class="n"><a href="#t44">44</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t45" class="pln"><span class="n"><a href="#t45">45</a></span><span class="t"><span class="str"> DataFrame with new column: final_state and threshold</span> </span><span class="r"></span></p> + <p id="t46" class="pln"><span class="n"><a href="#t46">46</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t47" class="mis show_mis"><span class="n"><a href="#t47">47</a></span><span class="t"> <span class="key">assert</span> <span class="nam">all</span><span class="op">(</span><span class="op">[</span><span class="nam">c</span> <span class="key">in</span> <span class="nam">dff</span><span class="op">.</span><span class="nam">columns</span> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="op">[</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="str">'mean_intensity'</span><span class="op">,</span> <span class="str">'ng'</span><span class="op">]</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t48" class="pln"><span class="n"><a href="#t48">48</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t49" class="mis show_mis"><span class="n"><a href="#t49">49</a></span><span class="t"> <span class="key">if</span> <span class="nam">threshold_mean_intensity</span> <span class="op">==</span> <span class="str">'auto'</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t50" class="mis show_mis"><span class="n"><a href="#t50">50</a></span><span class="t"> <span class="nam">max_c</span> <span class="op">=</span> <span class="nam">dff</span><span class="op">[</span><span class="str">"ng"</span><span class="op">]</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t51" class="mis show_mis"><span class="n"><a href="#t51">51</a></span><span class="t"> <span class="nam">thr</span> <span class="op">=</span> <span class="op">(</span><span class="nam">ddd</span><span class="op">:=</span> <span class="nam">dff</span><span class="op">.</span><span class="nam">query</span><span class="op">(</span><span class="str">f'`ng` == {max_c}'</span><span class="op">)</span><span class="op">.</span><span class="nam">mean_intensity</span><span class="op">)</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span> <span class="op">+</span> <span class="nam">ddd</span><span class="op">.</span><span class="nam">std</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t52" class="mis show_mis"><span class="n"><a href="#t52">52</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'computed threshold = {thr} from max concentration {max_c}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t53" class="pln"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t54" class="mis show_mis"><span class="n"><a href="#t54">54</a></span><span class="t"> <span class="nam">thr</span> <span class="op">=</span> <span class="nam">threshold_mean_intensity</span> </span><span class="r"></span></p> + <p id="t55" class="pln"><span class="n"><a href="#t55">55</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t56" class="mis show_mis"><span class="n"><a href="#t56">56</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">dff</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t57" class="mis show_mis"><span class="n"><a href="#t57">57</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="str">'final_state'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">df</span><span class="op">.</span><span class="nam">mean_intensity</span> <span class="op">></span> <span class="nam">thr</span> </span><span class="r"></span></p> + <p id="t58" class="mis show_mis"><span class="n"><a href="#t58">58</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="str">'threshold_mean_intensity'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">thr</span> </span><span class="r"></span></p> + <p id="t59" class="pln"><span class="n"><a href="#t59">59</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t60" class="mis show_mis"><span class="n"><a href="#t60">60</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="nam">dpi</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t61" class="mis show_mis"><span class="n"><a href="#t61">61</a></span><span class="t"> <span class="nam">sns</span><span class="op">.</span><span class="nam">lineplot</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t62" class="pln"><span class="n"><a href="#t62">62</a></span><span class="t"> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t63" class="pln"><span class="n"><a href="#t63">63</a></span><span class="t"> <span class="nam">data</span><span class="op">=</span><span class="nam">df</span><span class="op">.</span><span class="nam">query</span><span class="op">(</span><span class="str">f'n_cells <= {max_cells}'</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t64" class="pln"><span class="n"><a href="#t64">64</a></span><span class="t"> <span class="nam">x</span><span class="op">=</span><span class="str">'ng'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t65" class="pln"><span class="n"><a href="#t65">65</a></span><span class="t"> <span class="nam">y</span><span class="op">=</span><span class="str">'final_state'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t66" class="pln"><span class="n"><a href="#t66">66</a></span><span class="t"> <span class="nam">hue</span><span class="op">=</span><span class="str">'n_cells'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t67" class="pln"><span class="n"><a href="#t67">67</a></span><span class="t"> <span class="nam">ci</span><span class="op">=</span><span class="num">95</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t68" class="mis show_mis"><span class="n"><a href="#t68">68</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">xlabel</span><span class="op">(</span><span class="str">'[AB] ng'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t69" class="mis show_mis"><span class="n"><a href="#t69">69</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="nam">title</span> <span class="op">+</span> <span class="str">" prob_survive"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t70" class="mis show_mis"><span class="n"><a href="#t70">70</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t71" class="mis show_mis"><span class="n"><a href="#t71">71</a></span><span class="t"> <span class="key">return</span> <span class="nam">df</span> </span><span class="r"></span></p> + <p id="t72" class="pln"><span class="n"><a href="#t72">72</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t73" class="pln"><span class="n"><a href="#t73">73</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t74" class="run"><span class="n"><a href="#t74">74</a></span><span class="t"><span class="key">def</span> <span class="nam">get_intensities</span><span class="op">(</span><span class="nam">path</span><span class="op">:</span><span class="nam">str</span><span class="op">,</span> <span class="nam">regex</span><span class="op">:</span><span class="nam">str</span><span class="op">=</span><span class="str">r'(\d+)ng'</span><span class="op">,</span> <span class="nam">plot</span><span class="op">:</span><span class="nam">bool</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">save_suffix</span><span class="op">=</span><span class="str">'intensities'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t75" class="pln"><span class="n"><a href="#t75">75</a></span><span class="t"> <span class="nam">calibration_um</span><span class="op">=</span><span class="num">.7</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t76" class="pln"><span class="n"><a href="#t76">76</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t77" class="pln"><span class="n"><a href="#t77">77</a></span><span class="t"><span class="str"> Reads aligned stack from tif (bf, fluo, mask)</span> </span><span class="r"></span></p> + <p id="t78" class="pln"><span class="n"><a href="#t78">78</a></span><span class="t"><span class="str"> Gets intensities, gets concetration from the filename.</span> </span><span class="r"></span></p> + <p id="t79" class="pln"><span class="n"><a href="#t79">79</a></span><span class="t"><span class="str"> Returns pandas Dataframe with corresponding columns</span> </span><span class="r"></span></p> + <p id="t80" class="pln"><span class="n"><a href="#t80">80</a></span><span class="t"><span class="str"> Saves tif stack with [bf, fluo, labels, mean_intensity]</span> </span><span class="r"></span></p> + <p id="t81" class="pln"><span class="n"><a href="#t81">81</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t82" class="mis show_mis"><span class="n"><a href="#t82">82</a></span><span class="t"> <span class="nam">stack</span> <span class="op">=</span> <span class="nam">imread</span><span class="op">(</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t83" class="mis show_mis"><span class="n"><a href="#t83">83</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t84" class="mis show_mis"><span class="n"><a href="#t84">84</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">stack</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t85" class="mis show_mis"><span class="n"><a href="#t85">85</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t86" class="mis show_mis"><span class="n"><a href="#t86">86</a></span><span class="t"> <span class="nam">bf</span><span class="op">,</span> <span class="nam">fluo</span><span class="op">,</span> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">stack</span> </span><span class="r"></span></p> + <p id="t87" class="mis show_mis"><span class="n"><a href="#t87">87</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t88" class="mis show_mis"><span class="n"><a href="#t88">88</a></span><span class="t"> <span class="nam">bf</span><span class="op">,</span> <span class="nam">fluo</span><span class="op">,</span> <span class="nam">mask</span> <span class="op">=</span> <span class="op">[</span><span class="nam">stack</span><span class="op">[</span><span class="op">:</span><span class="op">,</span><span class="op">:</span><span class="op">,</span><span class="nam">i</span><span class="op">]</span> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="num">3</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t89" class="mis show_mis"><span class="n"><a href="#t89">89</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">fluo</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t90" class="mis show_mis"><span class="n"><a href="#t90">90</a></span><span class="t"> <span class="nam">fluo</span> <span class="op">=</span> <span class="nam">fluo</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'f'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t91" class="pln"><span class="n"><a href="#t91">91</a></span><span class="t"> <span class="com"># fluo_wo_bg = fluo - segment.ndi.gaussian_filter(fluo, len(fluo)//20)</span> </span><span class="r"></span></p> + <p id="t92" class="pln"><span class="n"><a href="#t92">92</a></span><span class="t"> <span class="com"># labels = segment.label(segment.ndi.binary_dilation(mask, np.ones((dilate, dilate))))</span> </span><span class="r"></span></p> + <p id="t93" class="mis show_mis"><span class="n"><a href="#t93">93</a></span><span class="t"> <span class="nam">labels</span> <span class="op">=</span> <span class="nam">segment</span><span class="op">.</span><span class="nam">label</span><span class="op">(</span><span class="nam">mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t94" class="pln"><span class="n"><a href="#t94">94</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t95" class="mis show_mis"><span class="n"><a href="#t95">95</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t96" class="pln"><span class="n"><a href="#t96">96</a></span><span class="t"> <span class="nam">regionprops_table</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t97" class="pln"><span class="n"><a href="#t97">97</a></span><span class="t"> <span class="nam">labels</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t98" class="pln"><span class="n"><a href="#t98">98</a></span><span class="t"> <span class="com"># fluo_wo_bg, </span> </span><span class="r"></span></p> + <p id="t99" class="pln"><span class="n"><a href="#t99">99</a></span><span class="t"> <span class="nam">fluo</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t100" class="pln"><span class="n"><a href="#t100">100</a></span><span class="t"> <span class="nam">properties</span><span class="op">=</span><span class="op">[</span><span class="str">'label'</span><span class="op">,</span> <span class="str">'mean_intensity'</span><span class="op">,</span> <span class="str">'max_intensity'</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t101" class="pln"><span class="n"><a href="#t101">101</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t102" class="pln"><span class="n"><a href="#t102">102</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t103" class="mis show_mis"><span class="n"><a href="#t103">103</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t104" class="mis show_mis"><span class="n"><a href="#t104">104</a></span><span class="t"> <span class="nam">ng</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">compile</span><span class="op">(</span><span class="nam">regex</span><span class="op">)</span><span class="op">.</span><span class="nam">findall</span><span class="op">(</span><span class="nam">path</span><span class="op">)</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t105" class="mis show_mis"><span class="n"><a href="#t105">105</a></span><span class="t"> <span class="nam">print</span> <span class="op">(</span><span class="nam">ng</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t106" class="mis show_mis"><span class="n"><a href="#t106">106</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span><span class="str">'ng'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">int</span><span class="op">(</span><span class="nam">ng</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t107" class="mis show_mis"><span class="n"><a href="#t107">107</a></span><span class="t"> <span class="key">except</span> <span class="nam">IndexError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t108" class="mis show_mis"><span class="n"><a href="#t108">108</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'concentration not found'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t109" class="pln"><span class="n"><a href="#t109">109</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t110" class="mis show_mis"><span class="n"><a href="#t110">110</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t111" class="mis show_mis"><span class="n"><a href="#t111">111</a></span><span class="t"> <span class="nam">truncated_fluo</span> <span class="op">=</span> <span class="nam">fluo_wo_bg</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t112" class="mis show_mis"><span class="n"><a href="#t112">112</a></span><span class="t"> <span class="nam">truncated_fluo</span><span class="op">[</span><span class="nam">truncated_fluo</span> <span class="op">></span> <span class="num">100</span><span class="op">]</span> <span class="op">=</span> <span class="num">100</span> </span><span class="r"></span></p> + <p id="t113" class="mis show_mis"><span class="n"><a href="#t113">113</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="nam">nrows</span><span class="op">=</span><span class="num">3</span><span class="op">,</span><span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">10</span><span class="op">,</span><span class="num">10</span><span class="op">)</span><span class="op">,</span> <span class="nam">dpi</span><span class="op">=</span><span class="num">150</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t114" class="mis show_mis"><span class="n"><a href="#t114">114</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">fluo</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t115" class="mis show_mis"><span class="n"><a href="#t115">115</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">fluo_wo_bg</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t116" class="mis show_mis"><span class="n"><a href="#t116">116</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">segment</span><span class="op">.</span><span class="nam">label2rgb</span><span class="op">(</span><span class="nam">labels</span><span class="op">></span><span class="num">0</span><span class="op">,</span> <span class="nam">to_8bits</span><span class="op">(</span><span class="nam">truncated_fluo</span><span class="op">)</span><span class="op">,</span> <span class="nam">bg_label</span><span class="op">=</span><span class="num">0</span><span class="op">,</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t117" class="pln"><span class="n"><a href="#t117">117</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t118" class="mis show_mis"><span class="n"><a href="#t118">118</a></span><span class="t"> <span class="key">if</span> <span class="nam">save_suffix</span> <span class="key">is</span> <span class="key">not</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t119" class="mis show_mis"><span class="n"><a href="#t119">119</a></span><span class="t"> <span class="nam">intensity_mask</span> <span class="op">=</span> <span class="nam">mask</span> </span><span class="r"></span></p> + <p id="t120" class="mis show_mis"><span class="n"><a href="#t120">120</a></span><span class="t"> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="nam">labels</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span> <span class="op">+</span> <span class="num">1</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t121" class="mis show_mis"><span class="n"><a href="#t121">121</a></span><span class="t"> <span class="nam">intensity</span> <span class="op">=</span> <span class="nam">df</span><span class="op">.</span><span class="nam">query</span><span class="op">(</span><span class="str">f'label == {i}'</span><span class="op">)</span><span class="op">.</span><span class="nam">mean_intensity</span> </span><span class="r"></span></p> + <p id="t122" class="mis show_mis"><span class="n"><a href="#t122">122</a></span><span class="t"> <span class="nam">intensity_mask</span><span class="op">[</span><span class="nam">labels</span> <span class="op">==</span> <span class="nam">i</span><span class="op">]</span> <span class="op">=</span> <span class="nam">int</span><span class="op">(</span><span class="nam">intensity</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t123" class="mis show_mis"><span class="n"><a href="#t123">123</a></span><span class="t"> <span class="nam">stack</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="op">[</span><span class="nam">bf</span><span class="op">,</span> <span class="nam">fluo</span><span class="op">,</span> <span class="nam">labels</span><span class="op">,</span> <span class="nam">intensity_mask</span><span class="op">]</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="str">'uint16'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t124" class="mis show_mis"><span class="n"><a href="#t124">124</a></span><span class="t"> <span class="nam">_</span> <span class="op">=</span> <span class="nam">Well</span><span class="op">(</span><span class="nam">stack</span><span class="op">,</span> <span class="nam">order</span><span class="op">=</span><span class="str">'cyx'</span><span class="op">,</span> <span class="nam">calibration_um</span><span class="op">=</span><span class="nam">calibration_um</span><span class="op">,</span> <span class="op">)</span><span class="op">.</span><span class="nam">save_tif</span><span class="op">(</span><span class="nam">p</span> <span class="op">:=</span> <span class="nam">path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'.tif'</span><span class="op">,</span> <span class="str">f'.{save_suffix}.tif'</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t125" class="mis show_mis"><span class="n"><a href="#t125">125</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'Saved {p}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t126" class="pln"><span class="n"><a href="#t126">126</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t127" class="mis show_mis"><span class="n"><a href="#t127">127</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">to_csv</span><span class="op">(</span><span class="nam">c</span> <span class="op">:=</span> <span class="nam">path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'.tif'</span><span class="op">,</span> <span class="str">f'.{save_suffix}.csv'</span><span class="op">)</span><span class="op">,</span> <span class="nam">index</span><span class="op">=</span><span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t128" class="mis show_mis"><span class="n"><a href="#t128">128</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'Saved table to {c}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t129" class="mis show_mis"><span class="n"><a href="#t129">129</a></span><span class="t"> <span class="key">return</span> <span class="nam">df</span> </span><span class="r"></span></p> + <p id="t130" class="pln"><span class="n"><a href="#t130">130</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t131" class="run"><span class="n"><a href="#t131">131</a></span><span class="t"><span class="key">def</span> <span class="nam">show_mean_instensities</span><span class="op">(</span><span class="nam">results</span><span class="op">:</span><span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">max_cells</span><span class="op">=</span><span class="num">5</span><span class="op">,</span> <span class="nam">mean_intensity_lim</span><span class="op">=</span><span class="num">600</span><span class="op">,</span> <span class="nam">dpi</span><span class="op">=</span><span class="num">150</span><span class="op">,</span> <span class="nam">title</span><span class="op">=</span><span class="str">''</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t132" class="pln"><span class="n"><a href="#t132">132</a></span><span class="t"> <span class="str">'''swarm plot of mean_intensity vs concenctration colored as n_cells'''</span> </span><span class="r"></span></p> + <p id="t133" class="mis show_mis"><span class="n"><a href="#t133">133</a></span><span class="t"> <span class="key">assert</span> <span class="nam">all</span><span class="op">(</span><span class="op">[</span><span class="nam">c</span> <span class="key">in</span> <span class="nam">results</span><span class="op">.</span><span class="nam">columns</span> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="op">[</span><span class="str">'n_cells'</span><span class="op">,</span> <span class="str">'mean_intensity'</span><span class="op">,</span> <span class="str">'concentration, ng'</span><span class="op">]</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t134" class="mis show_mis"><span class="n"><a href="#t134">134</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="nam">dpi</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t135" class="mis show_mis"><span class="n"><a href="#t135">135</a></span><span class="t"> <span class="nam">sns</span><span class="op">.</span><span class="nam">swarmplot</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t136" class="pln"><span class="n"><a href="#t136">136</a></span><span class="t"> <span class="nam">data</span><span class="op">=</span><span class="nam">results</span><span class="op">.</span><span class="nam">query</span><span class="op">(</span><span class="str">f'0<n_cells<={max_cells}'</span><span class="op">)</span><span class="op">.</span><span class="nam">query</span><span class="op">(</span><span class="str">f'mean_intensity < {mean_intensity_lim}'</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t137" class="pln"><span class="n"><a href="#t137">137</a></span><span class="t"> <span class="nam">x</span><span class="op">=</span><span class="str">'concentration, ng'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t138" class="pln"><span class="n"><a href="#t138">138</a></span><span class="t"> <span class="nam">y</span><span class="op">=</span><span class="str">'mean_intensity'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t139" class="pln"><span class="n"><a href="#t139">139</a></span><span class="t"> <span class="nam">hue</span><span class="op">=</span><span class="str">'n_cells'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t140" class="pln"><span class="n"><a href="#t140">140</a></span><span class="t"> <span class="nam">size</span><span class="op">=</span><span class="num">1</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t141" class="pln"><span class="n"><a href="#t141">141</a></span><span class="t"> <span class="nam">dodge</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t142" class="pln"><span class="n"><a href="#t142">142</a></span><span class="t"> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span> </span><span class="r"></span></p> + <p id="t143" class="pln"><span class="n"><a href="#t143">143</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t144" class="pln"><span class="n"><a href="#t144">144</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t145" class="mis show_mis"><span class="n"><a href="#t145">145</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">set_xlabel</span><span class="op">(</span><span class="str">'[AB] ng'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t146" class="mis show_mis"><span class="n"><a href="#t146">146</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="nam">title</span> <span class="op">+</span> <span class="str">"mean_intensity"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t147" class="mis show_mis"><span class="n"><a href="#t147">147</a></span><span class="t"> <span class="key">return</span> <span class="nam">ax</span> </span><span class="r"></span></p> + <p id="t148" class="pln"><span class="n"><a href="#t148">148</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t149" class="pln"><span class="n"><a href="#t149">149</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t150" class="pln"><span class="n"><a href="#t150">150</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t151" class="run"><span class="n"><a href="#t151">151</a></span><span class="t"><span class="key">def</span> <span class="nam">read_align_count</span><span class="op">(</span><span class="nam">composite_tif_path</span><span class="op">,</span> <span class="nam">template_bin8</span><span class="op">,</span> <span class="nam">mask</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t152" class="mis show_mis"><span class="n"><a href="#t152">152</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">composite_tif_path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t153" class="mis show_mis"><span class="n"><a href="#t153">153</a></span><span class="t"> <span class="nam">sample_name</span> <span class="op">=</span> <span class="nam">composite_tif_path</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="str">'/'</span><span class="op">)</span><span class="op">[</span><span class="op">-</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t154" class="mis show_mis"><span class="n"><a href="#t154">154</a></span><span class="t"> <span class="nam">composite</span> <span class="op">=</span> <span class="nam">imread</span><span class="op">(</span><span class="nam">composite_tif_path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t155" class="mis show_mis"><span class="n"><a href="#t155">155</a></span><span class="t"> <span class="nam">values</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="nam">composite</span><span class="op">,</span> <span class="nam">axis</span><span class="op">=</span><span class="op">(</span><span class="num">1</span><span class="op">,</span><span class="num">2</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t156" class="mis show_mis"><span class="n"><a href="#t156">156</a></span><span class="t"> <span class="nam">bf</span> <span class="op">=</span> <span class="nam">composite</span><span class="op">[</span><span class="nam">np</span><span class="op">.</span><span class="nam">argmax</span><span class="op">(</span><span class="nam">values</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t157" class="mis show_mis"><span class="n"><a href="#t157">157</a></span><span class="t"> <span class="nam">fluo</span> <span class="op">=</span> <span class="nam">composite</span><span class="op">[</span><span class="nam">np</span><span class="op">.</span><span class="nam">argmin</span><span class="op">(</span><span class="nam">values</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t158" class="pln"><span class="n"><a href="#t158">158</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t159" class="mis show_mis"><span class="n"><a href="#t159">159</a></span><span class="t"> <span class="nam">l</span><span class="op">,</span> <span class="nam">df</span> <span class="op">=</span> <span class="nam">align_and_count</span><span class="op">(</span><span class="nam">bf</span><span class="op">,</span> <span class="nam">fluo</span><span class="op">,</span> <span class="nam">title</span><span class="op">=</span><span class="nam">sample_name</span><span class="op">,</span> <span class="nam">path</span><span class="op">=</span><span class="nam">composite_tif_path</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t160" class="pln"><span class="n"><a href="#t160">160</a></span><span class="t"> <span class="nam">template_bin8</span><span class="op">=</span><span class="nam">template_bin8</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t161" class="pln"><span class="n"><a href="#t161">161</a></span><span class="t"> <span class="nam">mask</span><span class="op">=</span><span class="nam">mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t162" class="mis show_mis"><span class="n"><a href="#t162">162</a></span><span class="t"> <span class="key">del</span> <span class="op">(</span><span class="nam">composite</span><span class="op">,</span> <span class="nam">bf</span><span class="op">,</span> <span class="nam">fluo</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t163" class="mis show_mis"><span class="n"><a href="#t163">163</a></span><span class="t"> <span class="key">return</span> <span class="op">{</span><span class="str">'path'</span><span class="op">:</span> <span class="nam">composite_tif_path</span><span class="op">,</span> <span class="str">'lambda'</span><span class="op">:</span> <span class="nam">l</span><span class="op">,</span> <span class="str">'counts'</span><span class="op">:</span> <span class="nam">df</span><span class="op">}</span> </span><span class="r"></span></p> + <p id="t164" class="pln"><span class="n"><a href="#t164">164</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t165" class="pln"><span class="n"><a href="#t165">165</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t166" class="run"><span class="n"><a href="#t166">166</a></span><span class="t"><span class="key">def</span> <span class="nam">get_overnight_intensities</span><span class="op">(</span><span class="nam">overnight_tif_path</span><span class="op">,</span> <span class="nam">aligned_composite_tif_path</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t167" class="mis show_mis"><span class="n"><a href="#t167">167</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">overnight_tif_path</span><span class="op">,</span> <span class="nam">aligned_composite_tif_path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t168" class="mis show_mis"><span class="n"><a href="#t168">168</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t169" class="mis show_mis"><span class="n"><a href="#t169">169</a></span><span class="t"> <span class="nam">bf_aligned</span><span class="op">,</span> <span class="nam">fluo_aligned</span><span class="op">,</span> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">imread</span><span class="op">(</span><span class="nam">aligned_composite_tif_path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t170" class="mis show_mis"><span class="n"><a href="#t170">170</a></span><span class="t"> <span class="nam">bfo</span><span class="op">,</span> <span class="nam">fluoo</span> <span class="op">=</span> <span class="nam">imread</span><span class="op">(</span><span class="nam">overnight_tif_path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t171" class="mis show_mis"><span class="n"><a href="#t171">171</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t172" class="mis show_mis"><span class="n"><a href="#t172">172</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'No pair'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t173" class="mis show_mis"><span class="n"><a href="#t173">173</a></span><span class="t"> <span class="key">return</span> <span class="nam">overnight_tif_path</span><span class="op">,</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t174" class="pln"><span class="n"><a href="#t174">174</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t175" class="mis show_mis"><span class="n"><a href="#t175">175</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">150</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">10</span><span class="op">,</span><span class="num">5</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t176" class="mis show_mis"><span class="n"><a href="#t176">176</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">bf_aligned</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t177" class="mis show_mis"><span class="n"><a href="#t177">177</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'Initial bf'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t178" class="mis show_mis"><span class="n"><a href="#t178">178</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t179" class="pln"><span class="n"><a href="#t179">179</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t180" class="mis show_mis"><span class="n"><a href="#t180">180</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'data ready'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t181" class="mis show_mis"><span class="n"><a href="#t181">181</a></span><span class="t"> <span class="nam">bfo_bin8_filtered</span> <span class="op">=</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">filter_vertical_stripes</span><span class="op">(</span><span class="nam">bfo</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="num">8</span><span class="op">,</span><span class="op">:</span><span class="op">:</span><span class="num">8</span><span class="op">]</span><span class="op">,</span> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t182" class="mis show_mis"><span class="n"><a href="#t182">182</a></span><span class="t"> <span class="nam">bf_bin8_aligned</span> <span class="op">=</span> <span class="nam">bf_aligned</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="num">8</span><span class="op">,</span><span class="op">:</span><span class="op">:</span><span class="num">8</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t183" class="mis show_mis"><span class="n"><a href="#t183">183</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'filtered bfo'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t184" class="mis show_mis"><span class="n"><a href="#t184">184</a></span><span class="t"> <span class="nam">tvec_bin8</span> <span class="op">=</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">get_transform</span><span class="op">(</span><span class="nam">bfo_bin8_filtered</span><span class="op">,</span> <span class="nam">bf_bin8_aligned</span><span class="op">,</span> <span class="nam">dpi</span><span class="op">=</span><span class="num">150</span><span class="op">,</span> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t185" class="mis show_mis"><span class="n"><a href="#t185">185</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t186" class="mis show_mis"><span class="n"><a href="#t186">186</a></span><span class="t"> <span class="nam">tvec_bin1</span> <span class="op">=</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">scale_tvec</span><span class="op">(</span><span class="nam">tvec_bin8</span><span class="op">,</span> <span class="num">8</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t187" class="mis show_mis"><span class="n"><a href="#t187">187</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'tvec ready'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t188" class="mis show_mis"><span class="n"><a href="#t188">188</a></span><span class="t"> <span class="nam">fluoo_aligned</span> <span class="op">=</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">unpad</span><span class="op">(</span><span class="nam">reg</span><span class="op">.</span><span class="nam">transform</span><span class="op">(</span><span class="nam">fluoo</span><span class="op">,</span> <span class="nam">tvec_bin1</span><span class="op">)</span><span class="op">,</span> <span class="nam">mask</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t189" class="pln"><span class="n"><a href="#t189">189</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t190" class="mis show_mis"><span class="n"><a href="#t190">190</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">fluoo_aligned</span><span class="op">,</span> <span class="nam">vmin</span><span class="op">=</span><span class="op">(</span><span class="nam">fm</span> <span class="op">:=</span> <span class="nam">fluoo_aligned</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">vmax</span> <span class="op">=</span> <span class="nam">fm</span> <span class="op">+</span> <span class="num">200</span> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t191" class="mis show_mis"><span class="n"><a href="#t191">191</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'aligned fluo'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t192" class="mis show_mis"><span class="n"><a href="#t192">192</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t193" class="mis show_mis"><span class="n"><a href="#t193">193</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'fluo aligned'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t194" class="mis show_mis"><span class="n"><a href="#t194">194</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">regionprops_table</span><span class="op">(</span><span class="nam">segment</span><span class="op">.</span><span class="nam">label</span><span class="op">(</span><span class="nam">mask</span><span class="op">)</span><span class="op">,</span> <span class="nam">fluoo_aligned</span><span class="op">,</span> <span class="nam">properties</span><span class="op">=</span><span class="op">(</span><span class="str">'mean_intensity'</span><span class="op">,</span> <span class="str">'max_intensity'</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t195" class="mis show_mis"><span class="n"><a href="#t195">195</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="str">'bg'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">median</span><span class="op">(</span><span class="nam">fluoo_aligned</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t196" class="mis show_mis"><span class="n"><a href="#t196">196</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">to_csv</span><span class="op">(</span><span class="nam">overnight_tif_path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'Overnight.tif'</span><span class="op">,</span> <span class="str">'intensities.csv'</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t197" class="mis show_mis"><span class="n"><a href="#t197">197</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'df saved'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t198" class="mis show_mis"><span class="n"><a href="#t198">198</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">mean_intensity</span><span class="op">.</span><span class="nam">hist</span><span class="op">(</span><span class="nam">bins</span><span class="op">=</span><span class="num">50</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t199" class="mis show_mis"><span class="n"><a href="#t199">199</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t200" class="mis show_mis"><span class="n"><a href="#t200">200</a></span><span class="t"> <span class="key">return</span> <span class="nam">overnight_tif_path</span><span class="op">,</span> <span class="nam">df</span> </span><span class="r"></span></p> + <p id="t201" class="pln"><span class="n"><a href="#t201">201</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t202" class="pln"><span class="n"><a href="#t202">202</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t203" class="pln"><span class="n"><a href="#t203">203</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t204" class="run"><span class="n"><a href="#t204">204</a></span><span class="t"><span class="key">def</span> <span class="nam">align_and_count</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t205" class="pln"><span class="n"><a href="#t205">205</a></span><span class="t"> <span class="nam">bf_bin1</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t206" class="pln"><span class="n"><a href="#t206">206</a></span><span class="t"> <span class="nam">fluo_bin1</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t207" class="pln"><span class="n"><a href="#t207">207</a></span><span class="t"> <span class="nam">template_bin8</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t208" class="pln"><span class="n"><a href="#t208">208</a></span><span class="t"> <span class="nam">mask</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t209" class="pln"><span class="n"><a href="#t209">209</a></span><span class="t"> <span class="nam">title</span><span class="op">:</span><span class="nam">str</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t210" class="pln"><span class="n"><a href="#t210">210</a></span><span class="t"> <span class="nam">rename</span><span class="op">:</span><span class="nam">tuple</span><span class="op">=</span><span class="op">(</span><span class="str">'Composite'</span><span class="op">,</span> <span class="str">'Aligned_composite'</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t211" class="pln"><span class="n"><a href="#t211">211</a></span><span class="t"> <span class="nam">path</span><span class="op">:</span><span class="nam">str</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t212" class="pln"><span class="n"><a href="#t212">212</a></span><span class="t"> <span class="nam">px_size</span><span class="op">:</span><span class="nam">float</span><span class="op">=</span><span class="num">.65</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t213" class="pln"><span class="n"><a href="#t213">213</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t214" class="mis show_mis"><span class="n"><a href="#t214">214</a></span><span class="t"> <span class="nam">bf_bin8</span> <span class="op">=</span> <span class="nam">bf_bin1</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="num">8</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="num">8</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t215" class="mis show_mis"><span class="n"><a href="#t215">215</a></span><span class="t"> <span class="nam">bf_bin8_filtered</span> <span class="op">=</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">filter_vertical_stripes</span><span class="op">(</span><span class="nam">bf_bin8</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t216" class="mis show_mis"><span class="n"><a href="#t216">216</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'data ready, mask shape {mask.shape}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t217" class="mis show_mis"><span class="n"><a href="#t217">217</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">bf_bin8_filtered</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t218" class="mis show_mis"><span class="n"><a href="#t218">218</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t219" class="mis show_mis"><span class="n"><a href="#t219">219</a></span><span class="t"> <span class="nam">tr</span> <span class="op">=</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">get_transform</span><span class="op">(</span><span class="nam">bf_bin8_filtered</span><span class="op">,</span> <span class="nam">template_bin8</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t220" class="mis show_mis"><span class="n"><a href="#t220">220</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t221" class="mis show_mis"><span class="n"><a href="#t221">221</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'registration ready'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t222" class="mis show_mis"><span class="n"><a href="#t222">222</a></span><span class="t"> <span class="nam">aligned_fluo</span> <span class="op">=</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">unpad</span><span class="op">(</span><span class="nam">reg</span><span class="op">.</span><span class="nam">transform</span><span class="op">(</span><span class="nam">fluo_bin1</span><span class="op">,</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">scale_tvec</span><span class="op">(</span><span class="nam">tr</span><span class="op">,</span> <span class="num">8</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">mask</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t223" class="mis show_mis"><span class="n"><a href="#t223">223</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'fluo aligned {aligned_fluo.shape}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t224" class="mis show_mis"><span class="n"><a href="#t224">224</a></span><span class="t"> <span class="nam">aligned_bf</span> <span class="op">=</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">unpad</span><span class="op">(</span><span class="nam">reg</span><span class="op">.</span><span class="nam">transform</span><span class="op">(</span><span class="nam">bf_bin1</span><span class="op">,</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">scale_tvec</span><span class="op">(</span><span class="nam">tr</span><span class="op">,</span> <span class="num">8</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">mask</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t225" class="mis show_mis"><span class="n"><a href="#t225">225</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'bf aligned {aligned_bf.shape}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t226" class="mis show_mis"><span class="n"><a href="#t226">226</a></span><span class="t"> <span class="nam">stack</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">(</span><span class="nam">aligned_bf</span><span class="op">,</span> <span class="nam">aligned_fluo</span><span class="op">,</span> <span class="nam">mask</span><span class="op">,</span> <span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t227" class="mis show_mis"><span class="n"><a href="#t227">227</a></span><span class="t"> <span class="nam">well</span> <span class="op">=</span> <span class="nam">Well</span><span class="op">(</span><span class="nam">stack</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'uint16'</span><span class="op">)</span><span class="op">,</span> <span class="str">'cyx'</span><span class="op">,</span> <span class="nam">px_size</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t228" class="pln"><span class="n"><a href="#t228">228</a></span><span class="t"><span class="com"># plt.imshow(aligned_fluo[:2000,:2000], vmin=440, vmax=600)</span> </span><span class="r"></span></p> + <p id="t229" class="pln"><span class="n"><a href="#t229">229</a></span><span class="t"><span class="com"># plt.show()</span> </span><span class="r"></span></p> + <p id="t230" class="pln"><span class="n"><a href="#t230">230</a></span><span class="t"><span class="com"># plt.imshow(mask[:2000,:2000])</span> </span><span class="r"></span></p> + <p id="t231" class="pln"><span class="n"><a href="#t231">231</a></span><span class="t"><span class="com"># plt.show()</span> </span><span class="r"></span></p> + <p id="t232" class="pln"><span class="n"><a href="#t232">232</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t233" class="mis show_mis"><span class="n"><a href="#t233">233</a></span><span class="t"> <span class="nam">n_cells</span> <span class="op">=</span> <span class="nam">get_cell_numbers</span><span class="op">(</span><span class="nam">aligned_fluo</span><span class="op">,</span> <span class="nam">mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t234" class="mis show_mis"><span class="n"><a href="#t234">234</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'cells counted'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t235" class="mis show_mis"><span class="n"><a href="#t235">235</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">n_cells</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t236" class="mis show_mis"><span class="n"><a href="#t236">236</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">poisson</span><span class="op">.</span><span class="nam">fit</span><span class="op">(</span><span class="nam">df</span><span class="op">.</span><span class="nam">n_cells</span><span class="op">,</span> <span class="nam">title</span><span class="op">=</span><span class="nam">title</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t237" class="mis show_mis"><span class="n"><a href="#t237">237</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="str">'poisson fit'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">l</span> </span><span class="r"></span></p> + <p id="t238" class="mis show_mis"><span class="n"><a href="#t238">238</a></span><span class="t"> <span class="key">if</span> <span class="nam">path</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t239" class="mis show_mis"><span class="n"><a href="#t239">239</a></span><span class="t"> <span class="nam">well</span><span class="op">.</span><span class="nam">save_tif</span><span class="op">(</span><span class="nam">path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="op">*</span><span class="nam">rename</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t240" class="pln"><span class="n"><a href="#t240">240</a></span><span class="t"><span class="com"># imwrite(path.replace(*rename), stack)</span> </span><span class="r"></span></p> + <p id="t241" class="mis show_mis"><span class="n"><a href="#t241">241</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">to_csv</span><span class="op">(</span><span class="nam">path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'Composite.tif'</span><span class="op">,</span> <span class="str">'counts.csv'</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t242" class="mis show_mis"><span class="n"><a href="#t242">242</a></span><span class="t"> <span class="key">return</span> <span class="nam">l</span><span class="op">,</span> <span class="nam">df</span> </span><span class="r"></span></p> + <p id="t243" class="pln"><span class="n"><a href="#t243">243</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t244" class="pln"><span class="n"><a href="#t244">244</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t245" class="pln"><span class="n"><a href="#t245">245</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t246" class="run"><span class="n"><a href="#t246">246</a></span><span class="t"><span class="key">def</span> <span class="nam">get_cell_numbers</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t247" class="pln"><span class="n"><a href="#t247">247</a></span><span class="t"> <span class="nam">multiwell_image</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t248" class="pln"><span class="n"><a href="#t248">248</a></span><span class="t"> <span class="nam">labels</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t249" class="pln"><span class="n"><a href="#t249">249</a></span><span class="t"> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t250" class="pln"><span class="n"><a href="#t250">250</a></span><span class="t"> <span class="nam">threshold_abs</span><span class="op">:</span><span class="nam">float</span><span class="op">=</span><span class="num">2</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t251" class="pln"><span class="n"><a href="#t251">251</a></span><span class="t"> <span class="nam">min_distance</span><span class="op">:</span><span class="nam">float</span><span class="op">=</span><span class="num">5</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t252" class="pln"><span class="n"><a href="#t252">252</a></span><span class="t"> <span class="nam">meta</span><span class="op">:</span><span class="nam">dict</span><span class="op">=</span><span class="op">{</span><span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t253" class="pln"><span class="n"><a href="#t253">253</a></span><span class="t"> <span class="nam">bf</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">=</span><span class="key">None</span> </span><span class="r"></span></p> + <p id="t254" class="pln"><span class="n"><a href="#t254">254</a></span><span class="t"> <span class="op">)</span> <span class="op">-></span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t255" class="pln"><span class="n"><a href="#t255">255</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t256" class="mis show_mis"><span class="n"><a href="#t256">256</a></span><span class="t"> <span class="nam">props</span> <span class="op">=</span> <span class="nam">segment</span><span class="op">.</span><span class="nam">regionprops</span><span class="op">(</span><span class="nam">labels</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t257" class="pln"><span class="n"><a href="#t257">257</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t258" class="mis show_mis"><span class="n"><a href="#t258">258</a></span><span class="t"> <span class="key">def</span> <span class="nam">get_n_peaks</span><span class="op">(</span><span class="nam">i</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t259" class="mis show_mis"><span class="n"><a href="#t259">259</a></span><span class="t"> <span class="key">if</span> <span class="nam">bf</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t260" class="mis show_mis"><span class="n"><a href="#t260">260</a></span><span class="t"> <span class="key">return</span> <span class="nam">count</span><span class="op">.</span><span class="nam">get_peak_number</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t261" class="pln"><span class="n"><a href="#t261">261</a></span><span class="t"> <span class="nam">multiwell_image</span><span class="op">[</span><span class="nam">props</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">.</span><span class="nam">slice</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t262" class="pln"><span class="n"><a href="#t262">262</a></span><span class="t"> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t263" class="pln"><span class="n"><a href="#t263">263</a></span><span class="t"> <span class="nam">dif_gauss_sigma</span><span class="op">=</span><span class="op">(</span><span class="num">3</span><span class="op">,</span> <span class="num">5</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t264" class="pln"><span class="n"><a href="#t264">264</a></span><span class="t"> <span class="nam">threshold_abs</span><span class="op">=</span><span class="nam">threshold_abs</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t265" class="pln"><span class="n"><a href="#t265">265</a></span><span class="t"> <span class="nam">min_distance</span><span class="op">=</span><span class="nam">min_distance</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t266" class="pln"><span class="n"><a href="#t266">266</a></span><span class="t"> <span class="nam">title</span><span class="op">=</span><span class="nam">props</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">.</span><span class="nam">label</span> </span><span class="r"></span></p> + <p id="t267" class="pln"><span class="n"><a href="#t267">267</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t268" class="pln"><span class="n"><a href="#t268">268</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t269" class="mis show_mis"><span class="n"><a href="#t269">269</a></span><span class="t"> <span class="key">return</span> <span class="nam">count</span><span class="op">.</span><span class="nam">get_peak_number</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t270" class="pln"><span class="n"><a href="#t270">270</a></span><span class="t"> <span class="nam">multiwell_image</span><span class="op">[</span><span class="nam">props</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">.</span><span class="nam">slice</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t271" class="pln"><span class="n"><a href="#t271">271</a></span><span class="t"> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t272" class="pln"><span class="n"><a href="#t272">272</a></span><span class="t"> <span class="nam">dif_gauss_sigma</span><span class="op">=</span><span class="op">(</span><span class="num">3</span><span class="op">,</span> <span class="num">5</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t273" class="pln"><span class="n"><a href="#t273">273</a></span><span class="t"> <span class="nam">threshold_abs</span><span class="op">=</span><span class="nam">threshold_abs</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t274" class="pln"><span class="n"><a href="#t274">274</a></span><span class="t"> <span class="nam">min_distance</span><span class="op">=</span><span class="nam">min_distance</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t275" class="pln"><span class="n"><a href="#t275">275</a></span><span class="t"> <span class="nam">title</span><span class="op">=</span><span class="nam">props</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">.</span><span class="nam">label</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t276" class="pln"><span class="n"><a href="#t276">276</a></span><span class="t"> <span class="nam">bf_crop</span><span class="op">=</span><span class="nam">bf</span><span class="op">[</span><span class="nam">props</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">.</span><span class="nam">slice</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t277" class="pln"><span class="n"><a href="#t277">277</a></span><span class="t"> <span class="nam">return_std</span><span class="op">=</span><span class="key">True</span> </span><span class="r"></span></p> + <p id="t278" class="pln"><span class="n"><a href="#t278">278</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t279" class="pln"><span class="n"><a href="#t279">279</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t280" class="mis show_mis"><span class="n"><a href="#t280">280</a></span><span class="t"> <span class="nam">n_cells</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="nam">get_n_peaks</span><span class="op">,</span> <span class="nam">range</span><span class="op">(</span><span class="nam">labels</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t281" class="mis show_mis"><span class="n"><a href="#t281">281</a></span><span class="t"> <span class="key">return</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="op">[</span><span class="op">{</span> </span><span class="r"></span></p> + <p id="t282" class="pln"><span class="n"><a href="#t282">282</a></span><span class="t"> <span class="str">'label'</span><span class="op">:</span> <span class="nam">prop</span><span class="op">.</span><span class="nam">label</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t283" class="pln"><span class="n"><a href="#t283">283</a></span><span class="t"> <span class="str">'x'</span><span class="op">:</span> <span class="nam">prop</span><span class="op">.</span><span class="nam">centroid</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t284" class="pln"><span class="n"><a href="#t284">284</a></span><span class="t"> <span class="str">'y'</span><span class="op">:</span> <span class="nam">prop</span><span class="op">.</span><span class="nam">centroid</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t285" class="pln"><span class="n"><a href="#t285">285</a></span><span class="t"> <span class="str">'n_cells'</span><span class="op">:</span> <span class="nam">n_cell</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t286" class="pln"><span class="n"><a href="#t286">286</a></span><span class="t"> <span class="com"># 'std': n_cell[1],</span> </span><span class="r"></span></p> + <p id="t287" class="pln"><span class="n"><a href="#t287">287</a></span><span class="t"> <span class="op">**</span><span class="nam">meta</span> </span><span class="r"></span></p> + <p id="t288" class="pln"><span class="n"><a href="#t288">288</a></span><span class="t"> <span class="op">}</span> <span class="key">for</span> <span class="nam">prop</span><span class="op">,</span> <span class="nam">n_cell</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="nam">props</span><span class="op">,</span> <span class="nam">n_cells</span><span class="op">)</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t289" class="pln"><span class="n"><a href="#t289">289</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t290" class="pln"><span class="n"><a href="#t290">290</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t291" class="pln"><span class="n"><a href="#t291">291</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t292" class="run"><span class="n"><a href="#t292">292</a></span><span class="t"><span class="key">def</span> <span class="nam">get_file_pair</span><span class="op">(</span><span class="nam">overnight_path</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t293" class="mis show_mis"><span class="n"><a href="#t293">293</a></span><span class="t"> <span class="nam">c_path</span> <span class="op">=</span> <span class="nam">glob</span><span class="op">(</span><span class="nam">overnight_path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'Overnight'</span><span class="op">,</span> <span class="str">'Aligned_composite'</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t294" class="mis show_mis"><span class="n"><a href="#t294">294</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t295" class="mis show_mis"><span class="n"><a href="#t295">295</a></span><span class="t"> <span class="nam">c_path</span> <span class="op">=</span> <span class="nam">c_path</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t296" class="mis show_mis"><span class="n"><a href="#t296">296</a></span><span class="t"> <span class="key">except</span> <span class="nam">IndexError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t297" class="mis show_mis"><span class="n"><a href="#t297">297</a></span><span class="t"> <span class="nam">c_path</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t298" class="mis show_mis"><span class="n"><a href="#t298">298</a></span><span class="t"> <span class="key">return</span> <span class="nam">overnight_path</span><span class="op">,</span> <span class="nam">c_path</span> </span><span class="r"></span></p> + <p id="t299" class="pln"><span class="n"><a href="#t299">299</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t300" class="pln"><span class="n"><a href="#t300">300</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t301" class="pln"><span class="n"><a href="#t301">301</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t302" class="run"><span class="n"><a href="#t302">302</a></span><span class="t"><span class="key">def</span> <span class="nam">concatenate_horizontally_results_for_one_chip</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t303" class="pln"><span class="n"><a href="#t303">303</a></span><span class="t"> <span class="nam">prefix</span><span class="op">:</span><span class="nam">str</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t304" class="pln"><span class="n"><a href="#t304">304</a></span><span class="t"> <span class="nam">filenames</span><span class="op">=</span><span class="op">(</span><span class="str">'counts.csv'</span><span class="op">,</span> <span class="str">'intensities.csv'</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t305" class="pln"><span class="n"><a href="#t305">305</a></span><span class="t"> <span class="nam">meta_regexp</span><span class="op">=</span><span class="str">r'(\d+e-\d+)_(\d+)ng/'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t306" class="pln"><span class="n"><a href="#t306">306</a></span><span class="t"> <span class="nam">meta_columns</span><span class="op">=</span><span class="op">(</span><span class="str">'inoculum'</span><span class="op">,</span><span class="str">'concentration, ng'</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t307" class="pln"><span class="n"><a href="#t307">307</a></span><span class="t"> <span class="nam">meta_types</span><span class="op">=</span><span class="op">(</span><span class="nam">float</span><span class="op">,</span> <span class="nam">int</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t308" class="pln"><span class="n"><a href="#t308">308</a></span><span class="t"> <span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t309" class="pln"><span class="n"><a href="#t309">309</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t310" class="pln"><span class="n"><a href="#t310">310</a></span><span class="t"><span class="str"> Prefix is a folder path in which `counts.csv` and `intensitites.csv` can be found</span> </span><span class="r"></span></p> + <p id="t311" class="pln"><span class="n"><a href="#t311">311</a></span><span class="t"><span class="str"> This finction reads and concatenated horisontally two files.</span> </span><span class="r"></span></p> + <p id="t312" class="pln"><span class="n"><a href="#t312">312</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t313" class="pln"><span class="n"><a href="#t313">313</a></span><span class="t"><span class="str"> pandas.DataFrame with both csv combined</span> </span><span class="r"></span></p> + <p id="t314" class="pln"><span class="n"><a href="#t314">314</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t315" class="mis show_mis"><span class="n"><a href="#t315">315</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t316" class="mis show_mis"><span class="n"><a href="#t316">316</a></span><span class="t"> <span class="nam">meta_info</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">compile</span><span class="op">(</span><span class="nam">meta_regexp</span><span class="op">)</span><span class="op">.</span><span class="nam">findall</span><span class="op">(</span><span class="nam">prefix</span><span class="op">)</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t317" class="mis show_mis"><span class="n"><a href="#t317">317</a></span><span class="t"> <span class="nam">print</span> <span class="op">(</span><span class="nam">meta_info</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t318" class="pln"><span class="n"><a href="#t318">318</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t319" class="mis show_mis"><span class="n"><a href="#t319">319</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">concat</span><span class="op">(</span><span class="op">(</span><span class="nam">pd</span><span class="op">.</span><span class="nam">read_csv</span><span class="op">(</span><span class="nam">prefix</span> <span class="op">+</span> <span class="nam">f</span><span class="op">,</span> <span class="nam">index_col</span><span class="op">=</span><span class="num">0</span><span class="op">)</span> <span class="key">for</span> <span class="nam">f</span> <span class="key">in</span> <span class="nam">filenames</span><span class="op">)</span><span class="op">,</span> <span class="nam">axis</span><span class="op">=</span><span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t320" class="mis show_mis"><span class="n"><a href="#t320">320</a></span><span class="t"> <span class="key">for</span> <span class="nam">column</span><span class="op">,</span> <span class="nam">to_type</span><span class="op">,</span> <span class="nam">meta</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="nam">meta_columns</span><span class="op">,</span> <span class="nam">meta_types</span><span class="op">,</span> <span class="nam">meta_info</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t321" class="mis show_mis"><span class="n"><a href="#t321">321</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="nam">column</span><span class="op">]</span> <span class="op">=</span> <span class="nam">to_type</span><span class="op">(</span><span class="nam">meta</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t322" class="mis show_mis"><span class="n"><a href="#t322">322</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="str">'folder'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">prefix</span> </span><span class="r"></span></p> + <p id="t323" class="mis show_mis"><span class="n"><a href="#t323">323</a></span><span class="t"> <span class="key">return</span> <span class="nam">df</span> </span><span class="r"></span></p> + <p id="t324" class="mis show_mis"><span class="n"><a href="#t324">324</a></span><span class="t"> <span class="key">except</span> <span class="nam">FileNotFoundError</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t325" class="mis show_mis"><span class="n"><a href="#t325">325</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">e</span><span class="op">.</span><span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t326" class="mis show_mis"><span class="n"><a href="#t326">326</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'something is missing in {prefix}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t327" class="mis show_mis"><span class="n"><a href="#t327">327</a></span><span class="t"> <span class="key">return</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t328" class="mis show_mis"><span class="n"><a href="#t328">328</a></span><span class="t"> <span class="key">except</span> <span class="nam">IndexError</span> <span class="key">as</span> <span class="nam">i</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t329" class="mis show_mis"><span class="n"><a href="#t329">329</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">i</span><span class="op">.</span><span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t330" class="mis show_mis"><span class="n"><a href="#t330">330</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'unable to parce metadata in {prefix}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t331" class="mis show_mis"><span class="n"><a href="#t331">331</a></span><span class="t"> <span class="key">return</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t332" class="pln"><span class="n"><a href="#t332">332</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t333" class="pln"><span class="n"><a href="#t333">333</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t334" class="run"><span class="n"><a href="#t334">334</a></span><span class="t"><span class="key">def</span> <span class="nam">concatenate_vertically_all_chips_csv</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t335" class="pln"><span class="n"><a href="#t335">335</a></span><span class="t"> <span class="nam">list_of_folders_with_counts_and_intensities</span><span class="op">:</span><span class="nam">list</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t336" class="pln"><span class="n"><a href="#t336">336</a></span><span class="t"> <span class="nam">fun</span><span class="op">=</span><span class="nam">concatenate_horizontally_results_for_one_chip</span> </span><span class="r"></span></p> + <p id="t337" class="pln"><span class="n"><a href="#t337">337</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t338" class="pln"><span class="n"><a href="#t338">338</a></span><span class="t"> <span class="str">'''Concatenates vertically results for different concentrations'''</span> </span><span class="r"></span></p> + <p id="t339" class="mis show_mis"><span class="n"><a href="#t339">339</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">concat</span><span class="op">(</span><span class="nam">list</span><span class="op">(</span><span class="nam">filter</span><span class="op">(</span><span class="key">lambda</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">x</span> <span class="key">is</span> <span class="key">not</span> <span class="key">None</span><span class="op">,</span> <span class="nam">map</span><span class="op">(</span><span class="nam">fun</span><span class="op">,</span> <span class="nam">list_of_folders_with_counts_and_intensities</span><span class="op">)</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t340" class="mis show_mis"><span class="n"><a href="#t340">340</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">index</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">range</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t341" class="mis show_mis"><span class="n"><a href="#t341">341</a></span><span class="t"> <span class="key">return</span> <span class="nam">df</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/droplet_growth_multiwell_py.html b/cov_html/droplet_growth_multiwell_py.html new file mode 100644 index 0000000000000000000000000000000000000000..81d92e51e2104ad97136f256e82ecfc6df65ebd6 --- /dev/null +++ b/cov_html/droplet_growth_multiwell_py.html @@ -0,0 +1,533 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for droplet_growth/multiwell.py: 11%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>droplet_growth/multiwell.py</b> : + <span class="pc_cov">11%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 253 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">28 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">225 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">droplet_growth</span> <span class="key">import</span> <span class="nam">fit</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">pims_nd2</span> <span class="key">as</span> <span class="nam">nd</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span> </span><span class="r"></span></p> + <p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">seaborn</span> <span class="key">as</span> <span class="nam">sns</span> </span><span class="r"></span></p> + <p id="t6" class="run"><span class="n"><a href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">json</span> </span><span class="r"></span></p> + <p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">logging</span> </span><span class="r"></span></p> + <p id="t8" class="run"><span class="n"><a href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span> </span><span class="r"></span></p> + <p id="t9" class="run"><span class="n"><a href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">scipy</span><span class="op">.</span><span class="nam">ndimage</span> <span class="key">import</span> <span class="op">(</span><span class="nam">gaussian_filter</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t10" class="pln"><span class="n"><a href="#t10">10</a></span><span class="t"> <span class="nam">binary_erosion</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t11" class="pln"><span class="n"><a href="#t11">11</a></span><span class="t"> <span class="nam">binary_dilation</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t12" class="pln"><span class="n"><a href="#t12">12</a></span><span class="t"> <span class="nam">binary_fill_holes</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t13" class="pln"><span class="n"><a href="#t13">13</a></span><span class="t"> <span class="nam">label</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t14" class="pln"><span class="n"><a href="#t14">14</a></span><span class="t"> <span class="nam">measurements</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t15" class="pln"><span class="n"><a href="#t15">15</a></span><span class="t"> <span class="nam">laplace</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"><span class="op">)</span> </span><span class="r"></span></p> + <p id="t17" class="run"><span class="n"><a href="#t17">17</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">measure</span> <span class="key">import</span> <span class="nam">regionprops</span><span class="op">,</span> <span class="nam">regionprops_table</span> </span><span class="r"></span></p> + <p id="t18" class="pln"><span class="n"><a href="#t18">18</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t20" class="run"><span class="n"><a href="#t20">20</a></span><span class="t"><span class="nam">logger</span> <span class="op">=</span> <span class="nam">logging</span><span class="op">.</span><span class="nam">getLogger</span><span class="op">(</span><span class="nam">__name__</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t21" class="run"><span class="n"><a href="#t21">21</a></span><span class="t"><span class="nam">logger</span><span class="op">.</span><span class="nam">setLevel</span><span class="op">(</span><span class="nam">logging</span><span class="op">.</span><span class="nam">INFO</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t22" class="pln"><span class="n"><a href="#t22">22</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t23" class="pln"><span class="n"><a href="#t23">23</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t24" class="run"><span class="n"><a href="#t24">24</a></span><span class="t"><span class="key">def</span> <span class="nam">analyse_curves</span><span class="op">(</span><span class="nam">ID</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">intensity_tables</span><span class="op">:</span><span class="nam">list</span><span class="op">=</span><span class="op">[</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t25" class="pln"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="nam">dyes</span><span class="op">:</span><span class="nam">list</span><span class="op">=</span><span class="op">[</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"> <span class="nam">meta_table</span><span class="op">:</span><span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t27" class="pln"><span class="n"><a href="#t27">27</a></span><span class="t"> <span class="nam">plot</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t28" class="pln"><span class="n"><a href="#t28">28</a></span><span class="t"> <span class="nam">skip</span><span class="op">=</span><span class="num">2</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t29" class="pln"><span class="n"><a href="#t29">29</a></span><span class="t"> <span class="nam">fit_fun</span><span class="op">=</span><span class="nam">fit</span><span class="op">.</span><span class="nam">fit_exp_on_baseline</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t30" class="pln"><span class="n"><a href="#t30">30</a></span><span class="t"> <span class="nam">gen_fun</span><span class="op">=</span><span class="nam">fit</span><span class="op">.</span><span class="nam">exp_on_baseline</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t31" class="pln"><span class="n"><a href="#t31">31</a></span><span class="t"> <span class="nam">start</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t32" class="pln"><span class="n"><a href="#t32">32</a></span><span class="t"> <span class="nam">stop</span><span class="op">:</span><span class="nam">str</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"> <span class="nam">min_len</span><span class="op">=</span><span class="num">10</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t34" class="pln"><span class="n"><a href="#t34">34</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t36" class="pln"><span class="n"><a href="#t36">36</a></span><span class="t"><span class="str"> stop:str/int</span> </span><span class="r"></span></p> + <p id="t37" class="pln"><span class="n"><a href="#t37">37</a></span><span class="t"><span class="str"> 'grad': use gradient</span> </span><span class="r"></span></p> + <p id="t38" class="pln"><span class="n"><a href="#t38">38</a></span><span class="t"><span class="str"> int: use hard limit</span> </span><span class="r"></span></p> + <p id="t39" class="pln"><span class="n"><a href="#t39">39</a></span><span class="t"><span class="str"> None: Use all data</span> </span><span class="r"></span></p> + <p id="t40" class="pln"><span class="n"><a href="#t40">40</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t41" class="pln"><span class="n"><a href="#t41">41</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t42" class="mis show_mis"><span class="n"><a href="#t42">42</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'ID: {ID}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t43" class="mis show_mis"><span class="n"><a href="#t43">43</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t44" class="mis show_mis"><span class="n"><a href="#t44">44</a></span><span class="t"> <span class="key">if</span> <span class="nam">meta_table</span> <span class="key">is</span> <span class="key">not</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t45" class="mis show_mis"><span class="n"><a href="#t45">45</a></span><span class="t"> <span class="nam">meta</span> <span class="op">=</span> <span class="nam">meta_table</span><span class="op">.</span><span class="nam">query</span><span class="op">(</span><span class="str">f'ID == {ID}'</span><span class="op">)</span><span class="op">.</span><span class="nam">to_dict</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t46" class="mis show_mis"><span class="n"><a href="#t46">46</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">meta</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t47" class="pln"><span class="n"><a href="#t47">47</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t48" class="mis show_mis"><span class="n"><a href="#t48">48</a></span><span class="t"> <span class="nam">meta</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> + <p id="t49" class="pln"><span class="n"><a href="#t49">49</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t50" class="mis show_mis"><span class="n"><a href="#t50">50</a></span><span class="t"> <span class="nam">wells</span> <span class="op">=</span> <span class="op">[</span><span class="nam">table</span><span class="op">[</span><span class="nam">table</span><span class="op">.</span><span class="nam">label</span> <span class="op">==</span> <span class="nam">ID</span><span class="op">]</span> <span class="key">for</span> <span class="nam">table</span> <span class="key">in</span> <span class="nam">intensity_tables</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t51" class="pln"><span class="n"><a href="#t51">51</a></span><span class="t"> <span class="com"># bgs = [bg[bg.label == ID] for bg in bg_tables]</span> </span><span class="r"></span></p> + <p id="t52" class="mis show_mis"><span class="n"><a href="#t52">52</a></span><span class="t"> <span class="nam">bg_free_values</span> <span class="op">=</span> <span class="op">[</span><span class="nam">well</span><span class="op">.</span><span class="nam">I</span><span class="op">.</span><span class="nam">values</span> <span class="key">for</span> <span class="nam">well</span> <span class="key">in</span> <span class="nam">wells</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t53" class="pln"><span class="n"><a href="#t53">53</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t54" class="pln"><span class="n"><a href="#t54">54</a></span><span class="t"> <span class="com"># if bg_free_values[0].max() < 5 * bg_free_values[0].std():</span> </span><span class="r"></span></p> + <p id="t55" class="pln"><span class="n"><a href="#t55">55</a></span><span class="t"> <span class="com"># raise ValueError(f'No signal: bg_free_values.max() < 5 * std()')</span> </span><span class="r"></span></p> + <p id="t56" class="pln"><span class="n"><a href="#t56">56</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t57" class="mis show_mis"><span class="n"><a href="#t57">57</a></span><span class="t"> <span class="key">except</span> <span class="nam">KeyError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t58" class="mis show_mis"><span class="n"><a href="#t58">58</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'Wrong ID {ID}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t59" class="mis show_mis"><span class="n"><a href="#t59">59</a></span><span class="t"> <span class="key">return</span> <span class="op">[</span><span class="op">{</span><span class="str">'id'</span><span class="op">:</span> <span class="nam">ID</span><span class="op">,</span> <span class="op">**</span><span class="nam">meta</span><span class="op">,</span> <span class="str">'dye'</span><span class="op">:</span> <span class="nam">ddd</span><span class="op">,</span> <span class="str">'comment'</span><span class="op">:</span> <span class="str">'Wrong ID'</span><span class="op">}</span> <span class="key">for</span> <span class="nam">ddd</span> <span class="key">in</span> <span class="nam">dyes</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t60" class="mis show_mis"><span class="n"><a href="#t60">60</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t61" class="mis show_mis"><span class="n"><a href="#t61">61</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="op">*</span><span class="nam">e</span><span class="op">.</span><span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t62" class="pln"><span class="n"><a href="#t62">62</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t63" class="mis show_mis"><span class="n"><a href="#t63">63</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t64" class="mis show_mis"><span class="n"><a href="#t64">64</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="num">1</span><span class="op">,</span><span class="num">1</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">5</span><span class="op">,</span><span class="num">2</span><span class="op">)</span><span class="op">,</span> <span class="nam">sharex</span><span class="op">=</span><span class="str">'all'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t65" class="pln"><span class="n"><a href="#t65">65</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t66" class="mis show_mis"><span class="n"><a href="#t66">66</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">f'{dyes[0]} raw'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t67" class="mis show_mis"><span class="n"><a href="#t67">67</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">wells</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">mean_intensity</span><span class="op">.</span><span class="nam">values</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">'signal'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t68" class="mis show_mis"><span class="n"><a href="#t68">68</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">wells</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">bg_mean</span><span class="op">.</span><span class="nam">values</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">'bg'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t69" class="mis show_mis"><span class="n"><a href="#t69">69</a></span><span class="t"> <span class="nam">ax</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t70" class="mis show_mis"><span class="n"><a href="#t70">70</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t71" class="pln"><span class="n"><a href="#t71">71</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t72" class="mis show_mis"><span class="n"><a href="#t72">72</a></span><span class="t"> <span class="key">return</span> <span class="op">[</span><span class="op">{</span><span class="str">'id'</span><span class="op">:</span> <span class="nam">ID</span><span class="op">,</span> <span class="op">**</span><span class="nam">meta</span><span class="op">,</span> <span class="str">'dye'</span><span class="op">:</span> <span class="nam">dye</span><span class="op">,</span> <span class="str">'curve'</span><span class="op">:</span> <span class="nam">well</span><span class="op">.</span><span class="nam">I</span><span class="op">,</span> <span class="str">'comment'</span><span class="op">:</span> <span class="nam">e</span><span class="op">.</span><span class="nam">args</span><span class="op">}</span> <span class="key">for</span> <span class="nam">dye</span><span class="op">,</span> <span class="nam">well</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="nam">dyes</span><span class="op">,</span> <span class="nam">wells</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t73" class="pln"><span class="n"><a href="#t73">73</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t74" class="mis show_mis"><span class="n"><a href="#t74">74</a></span><span class="t"> <span class="nam">grad</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">gradient</span><span class="op">(</span><span class="nam">wells</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">mean_intensity</span><span class="op">.</span><span class="nam">values</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t75" class="mis show_mis"><span class="n"><a href="#t75">75</a></span><span class="t"> <span class="nam">peak_grad</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t76" class="pln"><span class="n"><a href="#t76">76</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t77" class="mis show_mis"><span class="n"><a href="#t77">77</a></span><span class="t"> <span class="key">if</span> <span class="nam">stop</span> <span class="op">==</span> <span class="str">'grad'</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t78" class="mis show_mis"><span class="n"><a href="#t78">78</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t79" class="mis show_mis"><span class="n"><a href="#t79">79</a></span><span class="t"> <span class="nam">peak_grad</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">argmax</span><span class="op">(</span><span class="nam">grad</span><span class="op">[</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">argmin</span><span class="op">(</span><span class="nam">grad</span><span class="op">)</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t80" class="mis show_mis"><span class="n"><a href="#t80">80</a></span><span class="t"> <span class="nam">stop</span> <span class="op">=</span> <span class="nam">peak_grad</span> </span><span class="r"></span></p> + <p id="t81" class="mis show_mis"><span class="n"><a href="#t81">81</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'Using gradient peak {stop} as stop'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t82" class="mis show_mis"><span class="n"><a href="#t82">82</a></span><span class="t"> <span class="key">if</span> <span class="nam">peak_grad</span> <span class="op"><</span> <span class="nam">min_len</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t83" class="mis show_mis"><span class="n"><a href="#t83">83</a></span><span class="t"> <span class="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">'dataset too short'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t84" class="mis show_mis"><span class="n"><a href="#t84">84</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t85" class="mis show_mis"><span class="n"><a href="#t85">85</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'dataset too short'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t86" class="mis show_mis"><span class="n"><a href="#t86">86</a></span><span class="t"> <span class="key">return</span> <span class="op">[</span><span class="op">{</span><span class="str">'id'</span><span class="op">:</span> <span class="nam">ID</span><span class="op">,</span> <span class="op">**</span><span class="nam">meta</span><span class="op">,</span> <span class="str">'dye'</span><span class="op">:</span> <span class="nam">ddd</span><span class="op">,</span> <span class="str">'comment'</span><span class="op">:</span> <span class="str">'dataset too short'</span><span class="op">}</span> <span class="key">for</span> <span class="nam">ddd</span> <span class="key">in</span> <span class="nam">dyes</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t87" class="pln"><span class="n"><a href="#t87">87</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t88" class="mis show_mis"><span class="n"><a href="#t88">88</a></span><span class="t"> <span class="key">elif</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">stop</span><span class="op">,</span> <span class="nam">int</span><span class="op">)</span> <span class="key">or</span> <span class="nam">stop</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t89" class="mis show_mis"><span class="n"><a href="#t89">89</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p id="t90" class="pln"><span class="n"><a href="#t90">90</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t91" class="mis show_mis"><span class="n"><a href="#t91">91</a></span><span class="t"> <span class="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">'stop parameter {stop} not understood: use integer, `grad`, or None'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t92" class="pln"><span class="n"><a href="#t92">92</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t93" class="pln"><span class="n"><a href="#t93">93</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t94" class="mis show_mis"><span class="n"><a href="#t94">94</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t95" class="mis show_mis"><span class="n"><a href="#t95">95</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t96" class="mis show_mis"><span class="n"><a href="#t96">96</a></span><span class="t"> <span class="nam">wells</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">intensity_image</span><span class="op">.</span><span class="nam">shape</span> </span><span class="r"></span></p> + <p id="t97" class="mis show_mis"><span class="n"><a href="#t97">97</a></span><span class="t"> <span class="key">for</span> <span class="nam">dye</span><span class="op">,</span> <span class="nam">well</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="nam">dyes</span><span class="op">,</span> <span class="nam">wells</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t98" class="mis show_mis"><span class="n"><a href="#t98">98</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">dye</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t99" class="mis show_mis"><span class="n"><a href="#t99">99</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="nam">len</span><span class="op">(</span><span class="nam">well</span><span class="op">)</span> <span class="op">//</span> <span class="nam">skip</span><span class="op">,</span> <span class="nam">sharex</span><span class="op">=</span><span class="str">'all'</span><span class="op">,</span> <span class="nam">sharey</span><span class="op">=</span><span class="str">'all'</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">15</span><span class="op">,</span><span class="num">1</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t100" class="mis show_mis"><span class="n"><a href="#t100">100</a></span><span class="t"> <span class="key">for</span> <span class="nam">_a</span><span class="op">,</span> <span class="op">(</span><span class="nam">i</span><span class="op">,</span> <span class="nam">img</span><span class="op">)</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="nam">ax</span><span class="op">,</span> <span class="nam">list</span><span class="op">(</span><span class="nam">enumerate</span><span class="op">(</span><span class="nam">well</span><span class="op">.</span><span class="nam">intensity_image</span><span class="op">)</span><span class="op">)</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">skip</span><span class="op">]</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t101" class="mis show_mis"><span class="n"><a href="#t101">101</a></span><span class="t"> <span class="nam">img</span><span class="op">[</span><span class="nam">img</span><span class="op">==</span><span class="num">0</span><span class="op">]</span> <span class="op">=</span> <span class="nam">img</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t102" class="mis show_mis"><span class="n"><a href="#t102">102</a></span><span class="t"> <span class="nam">_a</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">img</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t103" class="mis show_mis"><span class="n"><a href="#t103">103</a></span><span class="t"> <span class="nam">_a</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="nam">i</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t104" class="pln"><span class="n"><a href="#t104">104</a></span><span class="t"> <span class="com"># a.colorbar()</span> </span><span class="r"></span></p> + <p id="t105" class="mis show_mis"><span class="n"><a href="#t105">105</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t106" class="mis show_mis"><span class="n"><a href="#t106">106</a></span><span class="t"> <span class="key">except</span> <span class="nam">AttributeError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t107" class="mis show_mis"><span class="n"><a href="#t107">107</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'No images, ignoring plot'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t108" class="pln"><span class="n"><a href="#t108">108</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t109" class="pln"><span class="n"><a href="#t109">109</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t110" class="mis show_mis"><span class="n"><a href="#t110">110</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="num">3</span><span class="op">,</span><span class="num">1</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">5</span><span class="op">,</span><span class="num">5</span><span class="op">)</span><span class="op">,</span> <span class="nam">sharex</span><span class="op">=</span><span class="str">'all'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t111" class="mis show_mis"><span class="n"><a href="#t111">111</a></span><span class="t"> <span class="key">for</span> <span class="nam">dye</span><span class="op">,</span> <span class="nam">well</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="nam">dyes</span><span class="op">[</span><span class="op">:</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">wells</span><span class="op">[</span><span class="op">:</span><span class="num">1</span><span class="op">]</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t112" class="mis show_mis"><span class="n"><a href="#t112">112</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">f'{dye} raw'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t113" class="mis show_mis"><span class="n"><a href="#t113">113</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">well</span><span class="op">.</span><span class="nam">mean_intensity</span><span class="op">.</span><span class="nam">values</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">'signal'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t114" class="mis show_mis"><span class="n"><a href="#t114">114</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">well</span><span class="op">.</span><span class="nam">bg_mean</span><span class="op">.</span><span class="nam">values</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">'bg'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t115" class="mis show_mis"><span class="n"><a href="#t115">115</a></span><span class="t"> <span class="nam">ax1</span> <span class="op">=</span> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">twinx</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t116" class="mis show_mis"><span class="n"><a href="#t116">116</a></span><span class="t"> <span class="key">if</span> <span class="nam">peak_grad</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t117" class="mis show_mis"><span class="n"><a href="#t117">117</a></span><span class="t"> <span class="nam">ax1</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">grad</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:green'</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">'gradient'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t118" class="mis show_mis"><span class="n"><a href="#t118">118</a></span><span class="t"> <span class="nam">ax1</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">peak_grad</span><span class="op">,</span> <span class="nam">grad</span><span class="op">[</span><span class="nam">peak_grad</span><span class="op">]</span><span class="op">,</span> <span class="str">'go'</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">'peak of gradient'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t119" class="mis show_mis"><span class="n"><a href="#t119">119</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t120" class="mis show_mis"><span class="n"><a href="#t120">120</a></span><span class="t"> <span class="nam">ax1</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="nam">loc</span><span class="op">=</span><span class="op">(</span><span class="num">1</span><span class="op">,</span><span class="num">.5</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t121" class="pln"><span class="n"><a href="#t121">121</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t122" class="pln"><span class="n"><a href="#t122">122</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t123" class="pln"><span class="n"><a href="#t123">123</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t124" class="mis show_mis"><span class="n"><a href="#t124">124</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t125" class="mis show_mis"><span class="n"><a href="#t125">125</a></span><span class="t"> <span class="nam">popts</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t126" class="mis show_mis"><span class="n"><a href="#t126">126</a></span><span class="t"> <span class="nam">datas</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t127" class="mis show_mis"><span class="n"><a href="#t127">127</a></span><span class="t"> <span class="key">for</span> <span class="nam">data</span> <span class="key">in</span> <span class="nam">bg_free_values</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t128" class="mis show_mis"><span class="n"><a href="#t128">128</a></span><span class="t"> <span class="nam">popt</span> <span class="op">=</span> <span class="nam">fit_fun</span><span class="op">(</span><span class="nam">data</span><span class="op">[</span><span class="nam">start</span><span class="op">:</span><span class="nam">stop</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t129" class="mis show_mis"><span class="n"><a href="#t129">129</a></span><span class="t"> <span class="nam">datas</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">data</span><span class="op">[</span><span class="nam">start</span><span class="op">:</span><span class="nam">stop</span><span class="op">]</span> <span class="op">-</span> <span class="nam">popt</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t130" class="mis show_mis"><span class="n"><a href="#t130">130</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">popt</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t131" class="mis show_mis"><span class="n"><a href="#t131">131</a></span><span class="t"> <span class="nam">popts</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">popt</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t132" class="pln"><span class="n"><a href="#t132">132</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t133" class="mis show_mis"><span class="n"><a href="#t133">133</a></span><span class="t"> <span class="nam">fit_results</span> <span class="op">=</span> <span class="op">[</span><span class="nam">gen_fun</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">datas</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="op">*</span><span class="nam">popt</span><span class="op">[</span><span class="num">1</span><span class="op">:</span><span class="op">]</span><span class="op">)</span> <span class="key">for</span> <span class="nam">popt</span> <span class="key">in</span> <span class="nam">popts</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t134" class="pln"><span class="n"><a href="#t134">134</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t135" class="mis show_mis"><span class="n"><a href="#t135">135</a></span><span class="t"> <span class="nam">chi2s</span> <span class="op">=</span> <span class="op">[</span><span class="nam">np</span><span class="op">.</span><span class="nam">sum</span><span class="op">(</span><span class="op">(</span><span class="nam">fit_result</span> <span class="op">-</span> <span class="nam">data</span><span class="op">)</span> <span class="op">**</span> <span class="num">2</span> <span class="op">)</span> <span class="op">/</span> <span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">fit_result</span><span class="op">)</span> <span class="op">-</span> <span class="num">2</span><span class="op">)</span> <span class="xx">\</span> </span><span class="r"></span></p> + <p id="t136" class="pln"><span class="n"><a href="#t136">136</a></span><span class="t"> <span class="key">for</span> <span class="nam">fit_result</span><span class="op">,</span> <span class="nam">data</span> <span class="key">in</span> <span class="nam">zip</span> <span class="op">(</span><span class="nam">fit_results</span><span class="op">,</span> <span class="nam">datas</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t137" class="mis show_mis"><span class="n"><a href="#t137">137</a></span><span class="t"> <span class="op">[</span><span class="nam">print</span><span class="op">(</span><span class="str">f'chi2: {chi2}'</span><span class="op">)</span> <span class="key">for</span> <span class="nam">chi2</span> <span class="key">in</span> <span class="nam">chi2s</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t138" class="mis show_mis"><span class="n"><a href="#t138">138</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t139" class="mis show_mis"><span class="n"><a href="#t139">139</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">'intensities wo bg'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t140" class="mis show_mis"><span class="n"><a href="#t140">140</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">start</span><span class="op">,</span> <span class="nam">stop</span><span class="op">)</span><span class="op">,</span> <span class="nam">datas</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="nam">dyes</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:orange'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t141" class="mis show_mis"><span class="n"><a href="#t141">141</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">set_ylabel</span><span class="op">(</span><span class="nam">dyes</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:orange'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t142" class="mis show_mis"><span class="n"><a href="#t142">142</a></span><span class="t"> <span class="nam">ax2</span> <span class="op">=</span> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">twinx</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t143" class="mis show_mis"><span class="n"><a href="#t143">143</a></span><span class="t"> <span class="key">if</span> <span class="nam">len</span><span class="op">(</span><span class="nam">dyes</span><span class="op">)</span> <span class="op">></span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t144" class="mis show_mis"><span class="n"><a href="#t144">144</a></span><span class="t"> <span class="nam">ax2</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">start</span><span class="op">,</span> <span class="nam">stop</span><span class="op">)</span><span class="op">,</span> <span class="nam">datas</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="nam">dyes</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:blue'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t145" class="mis show_mis"><span class="n"><a href="#t145">145</a></span><span class="t"> <span class="nam">ax2</span><span class="op">.</span><span class="nam">set_ylabel</span><span class="op">(</span><span class="nam">dyes</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:blue'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t146" class="pln"><span class="n"><a href="#t146">146</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t147" class="mis show_mis"><span class="n"><a href="#t147">147</a></span><span class="t"> <span class="key">for</span> <span class="nam">aa</span><span class="op">,</span> <span class="nam">fit_result</span><span class="op">,</span> <span class="nam">dye</span><span class="op">,</span> <span class="nam">color</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="op">(</span><span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">ax2</span><span class="op">)</span><span class="op">,</span> <span class="nam">fit_results</span><span class="op">,</span> <span class="nam">dyes</span><span class="op">,</span> <span class="op">(</span><span class="str">'tab:green'</span><span class="op">,</span> <span class="str">'tab:red'</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t148" class="mis show_mis"><span class="n"><a href="#t148">148</a></span><span class="t"> <span class="nam">aa</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">start</span><span class="op">,</span> <span class="nam">stop</span><span class="op">)</span><span class="op">,</span> <span class="nam">fit_result</span><span class="op">,</span> <span class="str">'.'</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">f'{dye}_fit'</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="nam">color</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t149" class="pln"><span class="n"><a href="#t149">149</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t150" class="mis show_mis"><span class="n"><a href="#t150">150</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">'intensities wo bg log scale'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t151" class="mis show_mis"><span class="n"><a href="#t151">151</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">.</span><span class="nam">semilogy</span><span class="op">(</span><span class="nam">datas</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="nam">dyes</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t152" class="mis show_mis"><span class="n"><a href="#t152">152</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">.</span><span class="nam">set_ylabel</span><span class="op">(</span><span class="nam">dyes</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:orange'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t153" class="mis show_mis"><span class="n"><a href="#t153">153</a></span><span class="t"> <span class="nam">ax3</span> <span class="op">=</span> <span class="nam">ax</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">.</span><span class="nam">twinx</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t154" class="mis show_mis"><span class="n"><a href="#t154">154</a></span><span class="t"> <span class="key">if</span> <span class="nam">len</span><span class="op">(</span><span class="nam">dyes</span><span class="op">)</span> <span class="op">></span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t155" class="mis show_mis"><span class="n"><a href="#t155">155</a></span><span class="t"> <span class="nam">ax3</span><span class="op">.</span><span class="nam">semilogy</span><span class="op">(</span><span class="nam">datas</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="nam">dyes</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:orange'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t156" class="mis show_mis"><span class="n"><a href="#t156">156</a></span><span class="t"> <span class="nam">ax3</span><span class="op">.</span><span class="nam">set_ylabel</span><span class="op">(</span><span class="nam">dyes</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:blue'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t157" class="pln"><span class="n"><a href="#t157">157</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t158" class="mis show_mis"><span class="n"><a href="#t158">158</a></span><span class="t"> <span class="key">for</span> <span class="nam">aa</span><span class="op">,</span> <span class="nam">fit_result</span><span class="op">,</span> <span class="nam">dye</span><span class="op">,</span> <span class="nam">color</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="op">(</span><span class="nam">ax</span><span class="op">[</span><span class="num">2</span><span class="op">]</span><span class="op">,</span> <span class="nam">ax3</span><span class="op">)</span><span class="op">,</span> <span class="nam">fit_results</span><span class="op">,</span> <span class="nam">dyes</span><span class="op">,</span> <span class="op">(</span><span class="str">'tab:green'</span><span class="op">,</span> <span class="str">'tab:red'</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t159" class="mis show_mis"><span class="n"><a href="#t159">159</a></span><span class="t"> <span class="nam">aa</span><span class="op">.</span><span class="nam">semilogy</span><span class="op">(</span><span class="nam">fit_result</span><span class="op">,</span> <span class="str">'.'</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">f'{dye}_fit'</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="nam">color</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t160" class="mis show_mis"><span class="n"><a href="#t160">160</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t161" class="pln"><span class="n"><a href="#t161">161</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t162" class="mis show_mis"><span class="n"><a href="#t162">162</a></span><span class="t"> <span class="key">return</span> <span class="op">[</span> </span><span class="r"></span></p> + <p id="t163" class="pln"><span class="n"><a href="#t163">163</a></span><span class="t"> <span class="op">{</span><span class="str">'id'</span><span class="op">:</span> <span class="nam">ID</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t164" class="pln"><span class="n"><a href="#t164">164</a></span><span class="t"> <span class="op">**</span><span class="nam">meta</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t165" class="pln"><span class="n"><a href="#t165">165</a></span><span class="t"> <span class="str">'dye'</span><span class="op">:</span> <span class="nam">dye</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t166" class="pln"><span class="n"><a href="#t166">166</a></span><span class="t"> <span class="op">**</span><span class="op">{</span><span class="nam">key</span><span class="op">:</span> <span class="nam">val</span> <span class="key">for</span> <span class="nam">key</span><span class="op">,</span> <span class="nam">val</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="str">'abcdef'</span><span class="op">,</span> <span class="nam">popt</span><span class="op">)</span><span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t167" class="pln"><span class="n"><a href="#t167">167</a></span><span class="t"> <span class="str">'chi2'</span><span class="op">:</span> <span class="nam">chi2</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t168" class="pln"><span class="n"><a href="#t168">168</a></span><span class="t"> <span class="str">'curve'</span><span class="op">:</span> <span class="nam">bg_free_value</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t169" class="pln"><span class="n"><a href="#t169">169</a></span><span class="t"> <span class="str">'stop'</span><span class="op">:</span> <span class="nam">stop</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t170" class="pln"><span class="n"><a href="#t170">170</a></span><span class="t"> <span class="str">'max_grad'</span><span class="op">:</span> <span class="nam">max</span><span class="op">(</span><span class="nam">grad</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t171" class="pln"><span class="n"><a href="#t171">171</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p id="t172" class="pln"><span class="n"><a href="#t172">172</a></span><span class="t"> <span class="key">for</span> <span class="nam">dye</span><span class="op">,</span> <span class="nam">popt</span><span class="op">,</span> <span class="nam">chi2</span><span class="op">,</span> <span class="nam">bg_free_value</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="nam">dyes</span><span class="op">,</span> <span class="nam">popts</span><span class="op">,</span> <span class="nam">chi2s</span><span class="op">,</span> <span class="nam">bg_free_values</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t173" class="pln"><span class="n"><a href="#t173">173</a></span><span class="t"> <span class="op">]</span> </span><span class="r"></span></p> + <p id="t174" class="pln"><span class="n"><a href="#t174">174</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t175" class="mis show_mis"><span class="n"><a href="#t175">175</a></span><span class="t"> <span class="key">except</span> <span class="op">(</span><span class="nam">RuntimeError</span><span class="op">,</span> <span class="nam">TypeError</span><span class="op">)</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t176" class="mis show_mis"><span class="n"><a href="#t176">176</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'No fit'</span><span class="op">,</span> <span class="op">*</span><span class="nam">e</span><span class="op">.</span><span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t177" class="mis show_mis"><span class="n"><a href="#t177">177</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">bg_free_values</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t178" class="mis show_mis"><span class="n"><a href="#t178">178</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t179" class="mis show_mis"><span class="n"><a href="#t179">179</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">'intensities wo bg'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t180" class="mis show_mis"><span class="n"><a href="#t180">180</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">start</span><span class="op">,</span> <span class="nam">stop</span><span class="op">)</span><span class="op">,</span> <span class="nam">bg_free_values</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="nam">dyes</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t181" class="mis show_mis"><span class="n"><a href="#t181">181</a></span><span class="t"> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">set_ylabel</span><span class="op">(</span><span class="nam">dyes</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:blue'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t182" class="mis show_mis"><span class="n"><a href="#t182">182</a></span><span class="t"> <span class="nam">ax2</span> <span class="op">=</span> <span class="nam">ax</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">twinx</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t183" class="mis show_mis"><span class="n"><a href="#t183">183</a></span><span class="t"> <span class="key">if</span> <span class="nam">len</span><span class="op">(</span><span class="nam">dyes</span><span class="op">)</span> <span class="op">></span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t184" class="mis show_mis"><span class="n"><a href="#t184">184</a></span><span class="t"> <span class="nam">ax2</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">start</span><span class="op">,</span> <span class="nam">stop</span><span class="op">)</span><span class="op">,</span> <span class="nam">bg_free_values</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="nam">dyes</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:orange'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t185" class="mis show_mis"><span class="n"><a href="#t185">185</a></span><span class="t"> <span class="nam">ax2</span><span class="op">.</span><span class="nam">set_ylabel</span><span class="op">(</span><span class="nam">dyes</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:orange'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t186" class="pln"><span class="n"><a href="#t186">186</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t187" class="mis show_mis"><span class="n"><a href="#t187">187</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t188" class="mis show_mis"><span class="n"><a href="#t188">188</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t189" class="mis show_mis"><span class="n"><a href="#t189">189</a></span><span class="t"> <span class="key">return</span> <span class="op">[</span><span class="op">{</span><span class="str">'id'</span><span class="op">:</span> <span class="nam">ID</span><span class="op">,</span> <span class="op">**</span><span class="nam">meta</span><span class="op">,</span> <span class="str">'dye'</span><span class="op">:</span> <span class="nam">dye</span><span class="op">}</span> <span class="xx">\</span> </span><span class="r"></span></p> + <p id="t190" class="pln"><span class="n"><a href="#t190">190</a></span><span class="t"> <span class="key">for</span> <span class="nam">dye</span> <span class="key">in</span> <span class="nam">dyes</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t191" class="pln"><span class="n"><a href="#t191">191</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t192" class="pln"><span class="n"><a href="#t192">192</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t193" class="pln"><span class="n"><a href="#t193">193</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t194" class="run"><span class="n"><a href="#t194">194</a></span><span class="t"><span class="key">def</span> <span class="nam">get_intensity_table</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t195" class="pln"><span class="n"><a href="#t195">195</a></span><span class="t"> <span class="nam">labelled_mask</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t196" class="pln"><span class="n"><a href="#t196">196</a></span><span class="t"> <span class="nam">intensity_image_sequence</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t197" class="pln"><span class="n"><a href="#t197">197</a></span><span class="t"> <span class="nam">values</span> <span class="op">=</span> <span class="op">[</span><span class="str">'mean_intensity'</span><span class="op">,</span> <span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t198" class="pln"><span class="n"><a href="#t198">198</a></span><span class="t"> <span class="nam">estimator</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">mean</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t199" class="pln"><span class="n"><a href="#t199">199</a></span><span class="t"> <span class="nam">plot</span><span class="op">:</span> <span class="nam">bool</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p id="t200" class="pln"><span class="n"><a href="#t200">200</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t201" class="mis show_mis"><span class="n"><a href="#t201">201</a></span><span class="t"> <span class="key">assert</span> <span class="op">(</span><span class="nam">iis</span> <span class="op">:=</span> <span class="nam">intensity_image_sequence</span><span class="op">)</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="num">3</span><span class="op">,</span> <span class="op">(</span> </span><span class="r"></span></p> + <p id="t202" class="pln"><span class="n"><a href="#t202">202</a></span><span class="t"> <span class="str">f'expected 3D stack for intensity, got shape {iis.shape}'</span> </span><span class="r"></span></p> + <p id="t203" class="pln"><span class="n"><a href="#t203">203</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t204" class="mis show_mis"><span class="n"><a href="#t204">204</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">columns</span><span class="op">=</span><span class="op">[</span><span class="str">'time'</span><span class="op">,</span> <span class="str">'label'</span><span class="op">,</span> <span class="op">*</span><span class="nam">values</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t205" class="pln"><span class="n"><a href="#t205">205</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t206" class="mis show_mis"><span class="n"><a href="#t206">206</a></span><span class="t"> <span class="key">for</span> <span class="nam">t</span><span class="op">,</span> <span class="nam">img</span> <span class="key">in</span> <span class="nam">enumerate</span><span class="op">(</span><span class="nam">iis</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t207" class="mis show_mis"><span class="n"><a href="#t207">207</a></span><span class="t"> <span class="nam">dict_li</span> <span class="op">=</span> <span class="nam">regionprops_table</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t208" class="pln"><span class="n"><a href="#t208">208</a></span><span class="t"> <span class="nam">labelled_mask</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t209" class="pln"><span class="n"><a href="#t209">209</a></span><span class="t"> <span class="nam">intensity_image</span><span class="op">=</span><span class="nam">img</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t210" class="pln"><span class="n"><a href="#t210">210</a></span><span class="t"> <span class="nam">properties</span><span class="op">=</span><span class="op">[</span><span class="str">'label'</span><span class="op">,</span> <span class="op">*</span><span class="nam">values</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t211" class="pln"><span class="n"><a href="#t211">211</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t212" class="mis show_mis"><span class="n"><a href="#t212">212</a></span><span class="t"> <span class="nam">dict_bg</span> <span class="op">=</span> <span class="nam">regionprops_table</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t213" class="pln"><span class="n"><a href="#t213">213</a></span><span class="t"> <span class="nam">get_outlines</span><span class="op">(</span><span class="nam">labelled_mask</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t214" class="pln"><span class="n"><a href="#t214">214</a></span><span class="t"> <span class="nam">intensity_image</span><span class="op">=</span><span class="nam">img</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t215" class="pln"><span class="n"><a href="#t215">215</a></span><span class="t"> <span class="nam">properties</span><span class="op">=</span><span class="op">[</span><span class="str">'mean_intensity'</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t216" class="pln"><span class="n"><a href="#t216">216</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t217" class="mis show_mis"><span class="n"><a href="#t217">217</a></span><span class="t"> <span class="nam">dict_litb</span> <span class="op">=</span> <span class="op">{</span><span class="str">'time'</span><span class="op">:</span> <span class="op">[</span><span class="nam">t</span><span class="op">]</span><span class="op">*</span><span class="nam">len</span><span class="op">(</span><span class="nam">dict_li</span><span class="op">[</span><span class="str">'label'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="op">**</span><span class="nam">dict_li</span><span class="op">,</span> <span class="str">'bg_mean'</span><span class="op">:</span> <span class="nam">dict_bg</span><span class="op">[</span><span class="str">'mean_intensity'</span><span class="op">]</span><span class="op">}</span> </span><span class="r"></span></p> + <p id="t218" class="mis show_mis"><span class="n"><a href="#t218">218</a></span><span class="t"> <span class="nam">df1</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">.</span><span class="nam">from_dict</span><span class="op">(</span><span class="nam">dict_litb</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t219" class="mis show_mis"><span class="n"><a href="#t219">219</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">concat</span><span class="op">(</span><span class="op">[</span><span class="nam">df</span><span class="op">,</span> <span class="nam">df1</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t220" class="pln"><span class="n"><a href="#t220">220</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t221" class="mis show_mis"><span class="n"><a href="#t221">221</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t222" class="mis show_mis"><span class="n"><a href="#t222">222</a></span><span class="t"> <span class="nam">plot_intensity_vs_time</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t223" class="mis show_mis"><span class="n"><a href="#t223">223</a></span><span class="t"> <span class="nam">df</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="str">"I"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">df</span><span class="op">.</span><span class="nam">mean_intensity</span> <span class="op">-</span> <span class="nam">df</span><span class="op">.</span><span class="nam">bg_mean</span> </span><span class="r"></span></p> + <p id="t224" class="mis show_mis"><span class="n"><a href="#t224">224</a></span><span class="t"> <span class="key">return</span> <span class="nam">df</span> </span><span class="r"></span></p> + <p id="t225" class="pln"><span class="n"><a href="#t225">225</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t226" class="pln"><span class="n"><a href="#t226">226</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t227" class="run"><span class="n"><a href="#t227">227</a></span><span class="t"><span class="key">def</span> <span class="nam">estimate_bg</span><span class="op">(</span><span class="nam">values</span><span class="op">,</span> <span class="nam">eps</span><span class="op">=</span><span class="num">.1</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t228" class="pln"><span class="n"><a href="#t228">228</a></span><span class="t"> <span class="str">'''iteratively shaves off the values higher than mean + 3 * std to get a good mean value'''</span> </span><span class="r"></span></p> + <p id="t229" class="mis show_mis"><span class="n"><a href="#t229">229</a></span><span class="t"> <span class="nam">mean</span><span class="op">,</span> <span class="nam">std</span> <span class="op">=</span> <span class="nam">values</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">values</span><span class="op">.</span><span class="nam">std</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t230" class="mis show_mis"><span class="n"><a href="#t230">230</a></span><span class="t"> <span class="nam">good_values</span> <span class="op">=</span> <span class="nam">values</span><span class="op">[</span><span class="nam">values</span> <span class="op"><</span> <span class="nam">mean</span> <span class="op">+</span> <span class="num">3</span> <span class="op">*</span> <span class="nam">std</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t231" class="mis show_mis"><span class="n"><a href="#t231">231</a></span><span class="t"> <span class="nam">new_mean</span> <span class="op">=</span> <span class="nam">good_values</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t232" class="mis show_mis"><span class="n"><a href="#t232">232</a></span><span class="t"> <span class="key">if</span> <span class="nam">np</span><span class="op">.</span><span class="nam">abs</span><span class="op">(</span><span class="nam">new_mean</span> <span class="op">-</span> <span class="nam">mean</span><span class="op">)</span> <span class="op">></span> <span class="nam">eps</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t233" class="mis show_mis"><span class="n"><a href="#t233">233</a></span><span class="t"> <span class="key">return</span> <span class="nam">estimate_bg</span><span class="op">(</span><span class="nam">good_values</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t234" class="pln"><span class="n"><a href="#t234">234</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t235" class="mis show_mis"><span class="n"><a href="#t235">235</a></span><span class="t"> <span class="key">return</span> <span class="nam">new_mean</span> </span><span class="r"></span></p> + <p id="t236" class="pln"><span class="n"><a href="#t236">236</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t237" class="pln"><span class="n"><a href="#t237">237</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t238" class="run"><span class="n"><a href="#t238">238</a></span><span class="t"><span class="key">def</span> <span class="nam">get_outlines</span><span class="op">(</span><span class="nam">labels</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t239" class="pln"><span class="n"><a href="#t239">239</a></span><span class="t"> <span class="str">'''creates 1 px outline around labels'''</span> </span><span class="r"></span></p> + <p id="t240" class="mis show_mis"><span class="n"><a href="#t240">240</a></span><span class="t"> <span class="key">return</span> <span class="nam">labels</span> <span class="op">*</span> <span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">abs</span><span class="op">(</span><span class="nam">laplace</span><span class="op">(</span><span class="nam">labels</span><span class="op">)</span><span class="op">)</span> <span class="op">></span> <span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t241" class="pln"><span class="n"><a href="#t241">241</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t242" class="pln"><span class="n"><a href="#t242">242</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t243" class="run"><span class="n"><a href="#t243">243</a></span><span class="t"><span class="key">def</span> <span class="nam">get_background_table</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t244" class="pln"><span class="n"><a href="#t244">244</a></span><span class="t"> <span class="nam">labelled_mask</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t245" class="pln"><span class="n"><a href="#t245">245</a></span><span class="t"> <span class="nam">intensity_image_sequence</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t246" class="pln"><span class="n"><a href="#t246">246</a></span><span class="t"> <span class="nam">estimator</span> <span class="op">=</span> <span class="nam">estimate_bg</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t247" class="pln"><span class="n"><a href="#t247">247</a></span><span class="t"> <span class="nam">plot</span><span class="op">:</span> <span class="nam">bool</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p id="t248" class="pln"><span class="n"><a href="#t248">248</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t249" class="pln"><span class="n"><a href="#t249">249</a></span><span class="t"> <span class="str">"""</span> </span><span class="r"></span></p> + <p id="t250" class="pln"><span class="n"><a href="#t250">250</a></span><span class="t"><span class="str"> Makes outlines out of well mask and estimates signals</span> </span><span class="r"></span></p> + <p id="t251" class="pln"><span class="n"><a href="#t251">251</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p id="t252" class="mis show_mis"><span class="n"><a href="#t252">252</a></span><span class="t"> <span class="key">assert</span> <span class="op">(</span><span class="nam">iis</span> <span class="op">:=</span> <span class="nam">intensity_image_sequence</span><span class="op">)</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="num">3</span><span class="op">,</span> <span class="op">(</span> </span><span class="r"></span></p> + <p id="t253" class="pln"><span class="n"><a href="#t253">253</a></span><span class="t"> <span class="str">f'expected 3D stack for intensity, got shape {iis.shape}'</span> </span><span class="r"></span></p> + <p id="t254" class="pln"><span class="n"><a href="#t254">254</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t255" class="mis show_mis"><span class="n"><a href="#t255">255</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">columns</span><span class="op">=</span><span class="op">[</span><span class="str">'time'</span><span class="op">,</span> <span class="str">'label'</span><span class="op">,</span> <span class="str">'mean_intensity'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t256" class="pln"><span class="n"><a href="#t256">256</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t257" class="mis show_mis"><span class="n"><a href="#t257">257</a></span><span class="t"> <span class="nam">outlines</span> <span class="op">=</span> <span class="nam">get_outlines</span><span class="op">(</span><span class="nam">labelled_mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t258" class="pln"><span class="n"><a href="#t258">258</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t259" class="mis show_mis"><span class="n"><a href="#t259">259</a></span><span class="t"> <span class="key">for</span> <span class="nam">t</span><span class="op">,</span> <span class="nam">img</span> <span class="key">in</span> <span class="nam">enumerate</span><span class="op">(</span><span class="nam">iis</span><span class="op">[</span><span class="op">:</span><span class="op">]</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t260" class="mis show_mis"><span class="n"><a href="#t260">260</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'.'</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t261" class="mis show_mis"><span class="n"><a href="#t261">261</a></span><span class="t"> <span class="key">def</span> <span class="nam">get_vals</span><span class="op">(</span><span class="nam">label</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t262" class="mis show_mis"><span class="n"><a href="#t262">262</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">outlines</span> <span class="op">==</span> <span class="nam">label</span> </span><span class="r"></span></p> + <p id="t263" class="mis show_mis"><span class="n"><a href="#t263">263</a></span><span class="t"> <span class="nam">intensities</span> <span class="op">=</span> <span class="nam">img</span><span class="op">[</span><span class="nam">mask</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t264" class="mis show_mis"><span class="n"><a href="#t264">264</a></span><span class="t"> <span class="key">return</span> <span class="op">{</span><span class="str">'time'</span><span class="op">:</span> <span class="nam">t</span><span class="op">,</span> <span class="str">'label'</span><span class="op">:</span> <span class="nam">label</span><span class="op">,</span> <span class="str">'mean_intensity'</span><span class="op">:</span> <span class="nam">estimator</span><span class="op">(</span><span class="nam">intensities</span><span class="op">)</span><span class="op">}</span> </span><span class="r"></span></p> + <p id="t265" class="mis show_mis"><span class="n"><a href="#t265">265</a></span><span class="t"> <span class="nam">labels</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">unique</span><span class="op">(</span><span class="nam">labelled_mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t266" class="mis show_mis"><span class="n"><a href="#t266">266</a></span><span class="t"> <span class="nam">labels</span> <span class="op">=</span> <span class="nam">labels</span><span class="op">[</span><span class="nam">labels</span> <span class="op">></span> <span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t267" class="mis show_mis"><span class="n"><a href="#t267">267</a></span><span class="t"> <span class="nam">vals</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="nam">get_vals</span><span class="op">,</span> <span class="nam">labels</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t268" class="mis show_mis"><span class="n"><a href="#t268">268</a></span><span class="t"> <span class="nam">df1</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">data</span><span class="op">=</span><span class="nam">vals</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t269" class="mis show_mis"><span class="n"><a href="#t269">269</a></span><span class="t"> <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">concat</span><span class="op">(</span><span class="op">[</span><span class="nam">df</span><span class="op">,</span> <span class="nam">df1</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t270" class="pln"><span class="n"><a href="#t270">270</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t271" class="mis show_mis"><span class="n"><a href="#t271">271</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t272" class="mis show_mis"><span class="n"><a href="#t272">272</a></span><span class="t"> <span class="nam">plot_intensity_vs_time</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t273" class="mis show_mis"><span class="n"><a href="#t273">273</a></span><span class="t"> <span class="key">return</span> <span class="nam">df</span> </span><span class="r"></span></p> + <p id="t274" class="pln"><span class="n"><a href="#t274">274</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t275" class="run"><span class="n"><a href="#t275">275</a></span><span class="t"><span class="key">def</span> <span class="nam">get_centers</span><span class="op">(</span><span class="nam">labelled_mask</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">shift_labels</span><span class="op">=</span><span class="op">(</span><span class="num">0</span><span class="op">,</span><span class="num">30</span><span class="op">)</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'w'</span><span class="op">,</span> <span class="nam">size</span><span class="op">=</span><span class="num">6</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">10</span><span class="op">,</span><span class="num">6</span><span class="op">)</span><span class="op">,</span> <span class="nam">dpi</span><span class="op">=</span><span class="num">150</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t276" class="pln"><span class="n"><a href="#t276">276</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t277" class="pln"><span class="n"><a href="#t277">277</a></span><span class="t"><span class="str"> Find the centroid coordinates of the labelled mask</span> </span><span class="r"></span></p> + <p id="t278" class="pln"><span class="n"><a href="#t278">278</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t279" class="pln"><span class="n"><a href="#t279">279</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t280" class="pln"><span class="n"><a href="#t280">280</a></span><span class="t"><span class="str"> -------</span> </span><span class="r"></span></p> + <p id="t281" class="pln"><span class="n"><a href="#t281">281</a></span><span class="t"><span class="str"> centers: list of dict {'center': (y,x), 'label': int}</span> </span><span class="r"></span></p> + <p id="t282" class="pln"><span class="n"><a href="#t282">282</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t283" class="pln"><span class="n"><a href="#t283">283</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t284" class="mis show_mis"><span class="n"><a href="#t284">284</a></span><span class="t"> <span class="key">assert</span> <span class="nam">labelled_mask</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="num">2</span><span class="op">,</span> <span class="str">'Please provide 2D array with labels'</span> </span><span class="r"></span></p> + <p id="t285" class="pln"><span class="n"><a href="#t285">285</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t286" class="mis show_mis"><span class="n"><a href="#t286">286</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">labelled_mask</span> </span><span class="r"></span></p> + <p id="t287" class="mis show_mis"><span class="n"><a href="#t287">287</a></span><span class="t"> <span class="nam">centers</span> <span class="op">=</span> <span class="op">[</span><span class="op">{</span><span class="str">'center'</span><span class="op">:</span> <span class="nam">r</span><span class="op">.</span><span class="nam">centroid</span><span class="op">,</span> <span class="str">'label'</span><span class="op">:</span> <span class="nam">r</span><span class="op">.</span><span class="nam">label</span><span class="op">}</span> <span class="key">for</span> <span class="nam">r</span> <span class="key">in</span> <span class="nam">regionprops</span><span class="op">(</span><span class="nam">mask</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t288" class="pln"><span class="n"><a href="#t288">288</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t289" class="mis show_mis"><span class="n"><a href="#t289">289</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t290" class="mis show_mis"><span class="n"><a href="#t290">290</a></span><span class="t"> <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">10</span><span class="op">,</span><span class="num">6</span><span class="op">)</span><span class="op">,</span> <span class="nam">dpi</span><span class="op">=</span><span class="num">150</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t291" class="mis show_mis"><span class="n"><a href="#t291">291</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">mask</span> <span class="op">></span> <span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t292" class="mis show_mis"><span class="n"><a href="#t292">292</a></span><span class="t"> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="nam">centers</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t293" class="mis show_mis"><span class="n"><a href="#t293">293</a></span><span class="t"> <span class="op">(</span><span class="nam">cy</span><span class="op">,</span> <span class="nam">cx</span><span class="op">)</span><span class="op">,</span> <span class="nam">label</span> <span class="op">=</span> <span class="nam">c</span><span class="op">.</span><span class="nam">values</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t294" class="mis show_mis"><span class="n"><a href="#t294">294</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">text</span><span class="op">(</span><span class="nam">cx</span> <span class="op">+</span> <span class="nam">shift_labels</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">cy</span> <span class="op">+</span> <span class="nam">shift_labels</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">label</span><span class="op">,</span> <span class="nam">fontdict</span><span class="op">=</span><span class="op">{</span><span class="str">'color'</span><span class="op">:</span> <span class="nam">color</span><span class="op">,</span> <span class="str">'size'</span><span class="op">:</span> <span class="nam">size</span><span class="op">,</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t295" class="mis show_mis"><span class="n"><a href="#t295">295</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">axis</span><span class="op">(</span><span class="str">'off'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t296" class="pln"><span class="n"><a href="#t296">296</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t297" class="mis show_mis"><span class="n"><a href="#t297">297</a></span><span class="t"> <span class="key">return</span> <span class="nam">centers</span> </span><span class="r"></span></p> + <p id="t298" class="pln"><span class="n"><a href="#t298">298</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t299" class="pln"><span class="n"><a href="#t299">299</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t300" class="run"><span class="n"><a href="#t300">300</a></span><span class="t"><span class="key">def</span> <span class="nam">filter_table_by_min_intensity</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t301" class="pln"><span class="n"><a href="#t301">301</a></span><span class="t"> <span class="nam">table</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">column</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">time</span><span class="op">:</span> <span class="nam">int</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t302" class="pln"><span class="n"><a href="#t302">302</a></span><span class="t"> <span class="nam">min_intensity</span><span class="op">:</span> <span class="nam">float</span> </span><span class="r"></span></p> + <p id="t303" class="pln"><span class="n"><a href="#t303">303</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t304" class="pln"><span class="n"><a href="#t304">304</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t305" class="pln"><span class="n"><a href="#t305">305</a></span><span class="t"><span class="str"> Returns rows which at time `time` have `mean_intensity` > `min_intensity`</span> </span><span class="r"></span></p> + <p id="t306" class="pln"><span class="n"><a href="#t306">306</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t307" class="mis show_mis"><span class="n"><a href="#t307">307</a></span><span class="t"> <span class="key">return</span> <span class="nam">table</span><span class="op">[</span><span class="nam">table</span><span class="op">[</span><span class="nam">table</span><span class="op">.</span><span class="nam">time</span> <span class="op">==</span> <span class="nam">time</span><span class="op">]</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="nam">column</span><span class="op">]</span> <span class="op">></span> <span class="nam">min_intensity</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t308" class="pln"><span class="n"><a href="#t308">308</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t309" class="pln"><span class="n"><a href="#t309">309</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t310" class="run"><span class="n"><a href="#t310">310</a></span><span class="t"><span class="key">def</span> <span class="nam">filter_table_by_max_intensity</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t311" class="pln"><span class="n"><a href="#t311">311</a></span><span class="t"> <span class="nam">table</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">column</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">time</span><span class="op">:</span> <span class="nam">int</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t312" class="pln"><span class="n"><a href="#t312">312</a></span><span class="t"> <span class="nam">max_intensity</span><span class="op">:</span> <span class="nam">float</span> </span><span class="r"></span></p> + <p id="t313" class="pln"><span class="n"><a href="#t313">313</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t314" class="pln"><span class="n"><a href="#t314">314</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t315" class="pln"><span class="n"><a href="#t315">315</a></span><span class="t"><span class="str"> Returns rows which at time `time` have `column` < `max_intensity`</span> </span><span class="r"></span></p> + <p id="t316" class="pln"><span class="n"><a href="#t316">316</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t317" class="mis show_mis"><span class="n"><a href="#t317">317</a></span><span class="t"> <span class="key">return</span> <span class="nam">table</span><span class="op">[</span><span class="nam">table</span><span class="op">[</span><span class="nam">table</span><span class="op">.</span><span class="nam">time</span> <span class="op">==</span> <span class="nam">time</span><span class="op">]</span><span class="op">.</span><span class="nam">loc</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="nam">column</span><span class="op">]</span> <span class="op"><</span> <span class="nam">max_intensity</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t318" class="pln"><span class="n"><a href="#t318">318</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t319" class="pln"><span class="n"><a href="#t319">319</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t320" class="run"><span class="n"><a href="#t320">320</a></span><span class="t"><span class="key">def</span> <span class="nam">read_stitched_nd2</span><span class="op">(</span><span class="nam">path</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">bundle</span><span class="op">=</span><span class="str">"zyx"</span><span class="op">,</span> <span class="nam">channel</span><span class="op">=</span><span class="num">0</span><span class="op">,</span> <span class="nam">time_limit</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t321" class="pln"><span class="n"><a href="#t321">321</a></span><span class="t"> <span class="str">"""</span> </span><span class="r"></span></p> + <p id="t322" class="pln"><span class="n"><a href="#t322">322</a></span><span class="t"><span class="str"> Reads nd2 with bundle, channel</span> </span><span class="r"></span></p> + <p id="t323" class="pln"><span class="n"><a href="#t323">323</a></span><span class="t"><span class="str"> Yields one timepoint at a time.</span> </span><span class="r"></span></p> + <p id="t324" class="pln"><span class="n"><a href="#t324">324</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p id="t325" class="pln"><span class="n"><a href="#t325">325</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t326" class="mis show_mis"><span class="n"><a href="#t326">326</a></span><span class="t"> <span class="key">with</span> <span class="nam">nd</span><span class="op">.</span><span class="nam">ND2_Reader</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span><span class="op">)</span> <span class="key">as</span> <span class="nam">frames</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t327" class="mis show_mis"><span class="n"><a href="#t327">327</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">info</span><span class="op">(</span><span class="nam">frames</span><span class="op">.</span><span class="nam">sizes</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t328" class="pln"><span class="n"><a href="#t328">328</a></span><span class="t"> <span class="com"># logger.info(frames.calibration)</span> </span><span class="r"></span></p> + <p id="t329" class="pln"><span class="n"><a href="#t329">329</a></span><span class="t"> <span class="com"># logger.info(frames.calibrationZ)</span> </span><span class="r"></span></p> + <p id="t330" class="pln"><span class="n"><a href="#t330">330</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t331" class="pln"><span class="n"><a href="#t331">331</a></span><span class="t"> <span class="com"># json.dump(frames.metadata, open(path.replace('.nd2','_meta.json'), 'w'), default=repr)</span> </span><span class="r"></span></p> + <p id="t332" class="mis show_mis"><span class="n"><a href="#t332">332</a></span><span class="t"> <span class="nam">frames</span><span class="op">.</span><span class="nam">iter_axes</span> <span class="op">=</span> <span class="str">"t"</span> </span><span class="r"></span></p> + <p id="t333" class="mis show_mis"><span class="n"><a href="#t333">333</a></span><span class="t"> <span class="nam">frames</span><span class="op">.</span><span class="nam">default_coords</span><span class="op">[</span><span class="str">"c"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">channel</span> </span><span class="r"></span></p> + <p id="t334" class="mis show_mis"><span class="n"><a href="#t334">334</a></span><span class="t"> <span class="nam">frames</span><span class="op">.</span><span class="nam">bundle_axes</span> <span class="op">=</span> <span class="nam">bundle</span> </span><span class="r"></span></p> + <p id="t335" class="mis show_mis"><span class="n"><a href="#t335">335</a></span><span class="t"> <span class="key">for</span> <span class="nam">zyx</span> <span class="key">in</span> <span class="nam">frames</span><span class="op">[</span><span class="op">:</span><span class="nam">time_limit</span><span class="op">]</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t336" class="mis show_mis"><span class="n"><a href="#t336">336</a></span><span class="t"> <span class="key">yield</span> <span class="nam">zyx</span> </span><span class="r"></span></p> + <p id="t337" class="pln"><span class="n"><a href="#t337">337</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t338" class="pln"><span class="n"><a href="#t338">338</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t339" class="run"><span class="n"><a href="#t339">339</a></span><span class="t"><span class="key">def</span> <span class="nam">get_mask</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t340" class="pln"><span class="n"><a href="#t340">340</a></span><span class="t"> <span class="nam">bf_image</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t341" class="pln"><span class="n"><a href="#t341">341</a></span><span class="t"> <span class="nam">thr</span><span class="op">:</span><span class="nam">float</span><span class="op">=</span><span class="num">0.1</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t342" class="pln"><span class="n"><a href="#t342">342</a></span><span class="t"> <span class="nam">sigma</span><span class="op">:</span><span class="nam">float</span><span class="op">=</span><span class="num">2</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t343" class="pln"><span class="n"><a href="#t343">343</a></span><span class="t"> <span class="nam">erode</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">10</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t344" class="pln"><span class="n"><a href="#t344">344</a></span><span class="t"> <span class="nam">post_dilate</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">10</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t345" class="pln"><span class="n"><a href="#t345">345</a></span><span class="t"> <span class="nam">size_lim</span> <span class="op">:</span> <span class="nam">tuple</span> <span class="op">=</span> <span class="op">(</span><span class="key">None</span><span class="op">,</span> <span class="key">None</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t346" class="pln"><span class="n"><a href="#t346">346</a></span><span class="t"> <span class="nam">eccentricity_lim</span><span class="op">:</span> <span class="nam">float</span> <span class="op">=</span> <span class="num">0.7</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t347" class="pln"><span class="n"><a href="#t347">347</a></span><span class="t"> <span class="nam">plot</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t348" class="pln"><span class="n"><a href="#t348">348</a></span><span class="t"> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">5</span><span class="op">,</span> <span class="num">5</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t349" class="pln"><span class="n"><a href="#t349">349</a></span><span class="t"> <span class="nam">structure</span><span class="op">=</span><span class="key">None</span> </span><span class="r"></span></p> + <p id="t350" class="pln"><span class="n"><a href="#t350">350</a></span><span class="t"><span class="op">)</span> <span class="op">-></span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t351" class="pln"><span class="n"><a href="#t351">351</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t352" class="pln"><span class="n"><a href="#t352">352</a></span><span class="t"><span class="str"> Creates a labelled mask using first image from bf stack</span> </span><span class="r"></span></p> + <p id="t353" class="pln"><span class="n"><a href="#t353">353</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t354" class="mis show_mis"><span class="n"><a href="#t354">354</a></span><span class="t"> <span class="key">assert</span> <span class="nam">bf_image</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="num">2</span><span class="op">,</span> <span class="str">f'expected 2D image, got {bf_image.shape}'</span> </span><span class="r"></span></p> + <p id="t355" class="mis show_mis"><span class="n"><a href="#t355">355</a></span><span class="t"> <span class="nam">bf</span> <span class="op">=</span> <span class="nam">bf_image</span> </span><span class="r"></span></p> + <p id="t356" class="pln"><span class="n"><a href="#t356">356</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t357" class="mis show_mis"><span class="n"><a href="#t357">357</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">_detect_wells</span><span class="op">(</span><span class="nam">bf</span><span class="op">,</span> <span class="nam">erode</span><span class="op">=</span><span class="nam">erode</span><span class="op">,</span> <span class="nam">thr</span><span class="op">=</span><span class="nam">thr</span><span class="op">,</span> <span class="nam">sigma</span><span class="op">=</span><span class="nam">sigma</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t358" class="mis show_mis"><span class="n"><a href="#t358">358</a></span><span class="t"> <span class="nam">labels</span><span class="op">,</span> <span class="nam">n_labels</span> <span class="op">=</span> <span class="nam">label</span><span class="op">(</span><span class="nam">mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t359" class="mis show_mis"><span class="n"><a href="#t359">359</a></span><span class="t"> <span class="nam">regions</span> <span class="op">=</span> <span class="nam">regionprops</span><span class="op">(</span><span class="nam">labels</span><span class="op">,</span> <span class="nam">intensity_image</span><span class="op">=</span><span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t360" class="mis show_mis"><span class="n"><a href="#t360">360</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">regions</span><span class="op">)</span><span class="op">,</span> <span class="str">' regions'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t361" class="pln"><span class="n"><a href="#t361">361</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t362" class="mis show_mis"><span class="n"><a href="#t362">362</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">any</span><span class="op">(</span><span class="nam">size_lim</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t363" class="mis show_mis"><span class="n"><a href="#t363">363</a></span><span class="t"> <span class="nam">sizes</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="op">[</span><span class="nam">r</span><span class="op">.</span><span class="nam">major_axis_length</span> <span class="key">for</span> <span class="nam">r</span> <span class="key">in</span> <span class="nam">regions</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t364" class="mis show_mis"><span class="n"><a href="#t364">364</a></span><span class="t"> <span class="nam">mean_sizes</span> <span class="op">=</span> <span class="nam">sizes</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t365" class="mis show_mis"><span class="n"><a href="#t365">365</a></span><span class="t"> <span class="nam">std_sizes</span> <span class="op">=</span> <span class="nam">sizes</span><span class="op">.</span><span class="nam">std</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t366" class="mis show_mis"><span class="n"><a href="#t366">366</a></span><span class="t"> <span class="nam">size_lim</span> <span class="op">=</span> <span class="op">(</span><span class="nam">mean_sizes</span> <span class="op">-</span> <span class="nam">std_sizes</span><span class="op">,</span> <span class="nam">mean_sizes</span> <span class="op">+</span> <span class="nam">std_sizes</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t367" class="pln"><span class="n"><a href="#t367">367</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t368" class="mis show_mis"><span class="n"><a href="#t368">368</a></span><span class="t"> <span class="nam">mean_sizes</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="nam">size_lim</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t369" class="pln"><span class="n"><a href="#t369">369</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t370" class="mis show_mis"><span class="n"><a href="#t370">370</a></span><span class="t"> <span class="nam">bad_regions</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">filter</span><span class="op">(</span><span class="key">lambda</span> <span class="nam">r</span><span class="op">:</span> <span class="nam">r</span><span class="op">.</span><span class="nam">major_axis_length</span> <span class="op"><</span> <span class="nam">size_lim</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="key">or</span> <span class="nam">r</span><span class="op">.</span><span class="nam">major_axis_length</span> <span class="op">></span> <span class="nam">size_lim</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="key">or</span> <span class="nam">r</span><span class="op">.</span><span class="nam">eccentricity</span> <span class="op">></span> <span class="nam">eccentricity_lim</span><span class="op">,</span> <span class="nam">regions</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t371" class="mis show_mis"><span class="n"><a href="#t371">371</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="op">(</span><span class="nam">lb</span> <span class="op">:=</span> <span class="nam">len</span><span class="op">(</span><span class="nam">bad_regions</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="str">' bad regions'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t372" class="pln"><span class="n"><a href="#t372">372</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t373" class="mis show_mis"><span class="n"><a href="#t373">373</a></span><span class="t"> <span class="nam">good_mask</span> <span class="op">=</span> <span class="nam">mask</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t374" class="pln"><span class="n"><a href="#t374">374</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t375" class="mis show_mis"><span class="n"><a href="#t375">375</a></span><span class="t"> <span class="key">if</span> <span class="nam">lb</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t376" class="mis show_mis"><span class="n"><a href="#t376">376</a></span><span class="t"> <span class="nam">bad_mask</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">[</span><span class="nam">labels</span> <span class="op">==</span> <span class="nam">br</span><span class="op">.</span><span class="nam">label</span> <span class="key">for</span> <span class="nam">br</span> <span class="key">in</span> <span class="nam">bad_regions</span><span class="op">]</span><span class="op">,</span> <span class="nam">axis</span><span class="op">=</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t377" class="mis show_mis"><span class="n"><a href="#t377">377</a></span><span class="t"> <span class="nam">good_mask</span><span class="op">[</span><span class="nam">bad_mask</span><span class="op">]</span> <span class="op">=</span> <span class="num">0</span> </span><span class="r"></span></p> + <p id="t378" class="pln"><span class="n"><a href="#t378">378</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t379" class="mis show_mis"><span class="n"><a href="#t379">379</a></span><span class="t"> <span class="key">if</span> <span class="nam">post_dilate</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t380" class="mis show_mis"><span class="n"><a href="#t380">380</a></span><span class="t"> <span class="nam">good_mask</span> <span class="op">=</span> <span class="nam">binary_dilation</span><span class="op">(</span><span class="nam">good_mask</span><span class="op">,</span> <span class="nam">structure</span><span class="op">=</span><span class="nam">structure</span><span class="op">,</span> <span class="nam">iterations</span><span class="op">=</span><span class="nam">post_dilate</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t381" class="pln"><span class="n"><a href="#t381">381</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t382" class="mis show_mis"><span class="n"><a href="#t382">382</a></span><span class="t"> <span class="nam">good_labels</span><span class="op">,</span> <span class="nam">n</span> <span class="op">=</span> <span class="nam">label</span><span class="op">(</span><span class="nam">good_mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t383" class="pln"><span class="n"><a href="#t383">383</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t384" class="mis show_mis"><span class="n"><a href="#t384">384</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'{n} good regions'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t385" class="pln"><span class="n"><a href="#t385">385</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t386" class="mis show_mis"><span class="n"><a href="#t386">386</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t387" class="pln"><span class="n"><a href="#t387">387</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t388" class="mis show_mis"><span class="n"><a href="#t388">388</a></span><span class="t"> <span class="nam">show</span><span class="op">(</span><span class="nam">bf</span><span class="op">,</span> <span class="nam">vmax</span><span class="op">=</span><span class="nam">bf</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="nam">figsize</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t389" class="mis show_mis"><span class="n"><a href="#t389">389</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'input'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t390" class="mis show_mis"><span class="n"><a href="#t390">390</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t391" class="pln"><span class="n"><a href="#t391">391</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t392" class="mis show_mis"><span class="n"><a href="#t392">392</a></span><span class="t"> <span class="nam">h</span><span class="op">,</span> <span class="nam">bins</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">hist</span><span class="op">(</span><span class="op">[</span><span class="nam">r</span><span class="op">.</span><span class="nam">major_axis_length</span> <span class="key">for</span> <span class="nam">r</span> <span class="key">in</span> <span class="nam">regions</span><span class="op">]</span><span class="op">,</span> <span class="nam">bins</span><span class="op">=</span><span class="num">30</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t393" class="mis show_mis"><span class="n"><a href="#t393">393</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">vlines</span><span class="op">(</span><span class="nam">mean_sizes</span><span class="op">,</span> <span class="nam">ymin</span><span class="op">=</span><span class="num">0</span><span class="op">,</span> <span class="nam">ymax</span><span class="op">=</span><span class="nam">h</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t394" class="mis show_mis"><span class="n"><a href="#t394">394</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">vlines</span><span class="op">(</span><span class="nam">size_lim</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">ymin</span><span class="op">=</span><span class="num">0</span><span class="op">,</span> <span class="nam">ymax</span><span class="op">=</span><span class="nam">h</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span> <span class="op">/</span> <span class="num">3</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t395" class="mis show_mis"><span class="n"><a href="#t395">395</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">vlines</span><span class="op">(</span><span class="nam">size_lim</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">ymin</span><span class="op">=</span><span class="num">0</span><span class="op">,</span> <span class="nam">ymax</span><span class="op">=</span><span class="nam">h</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span> <span class="op">/</span> <span class="num">3</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t396" class="mis show_mis"><span class="n"><a href="#t396">396</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'size'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t397" class="mis show_mis"><span class="n"><a href="#t397">397</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t398" class="pln"><span class="n"><a href="#t398">398</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t399" class="mis show_mis"><span class="n"><a href="#t399">399</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">hist</span><span class="op">(</span><span class="op">[</span><span class="nam">r</span><span class="op">.</span><span class="nam">eccentricity</span> <span class="key">for</span> <span class="nam">r</span> <span class="key">in</span> <span class="nam">regions</span><span class="op">]</span><span class="op">,</span> <span class="nam">bins</span><span class="op">=</span><span class="num">30</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t400" class="mis show_mis"><span class="n"><a href="#t400">400</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'eccentricit y'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t401" class="mis show_mis"><span class="n"><a href="#t401">401</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t402" class="pln"><span class="n"><a href="#t402">402</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t403" class="mis show_mis"><span class="n"><a href="#t403">403</a></span><span class="t"> <span class="key">if</span> <span class="nam">lb</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t404" class="mis show_mis"><span class="n"><a href="#t404">404</a></span><span class="t"> <span class="nam">show</span><span class="op">(</span><span class="nam">bad_mask</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="nam">figsize</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t405" class="mis show_mis"><span class="n"><a href="#t405">405</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'bad regions'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t406" class="mis show_mis"><span class="n"><a href="#t406">406</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t407" class="pln"><span class="n"><a href="#t407">407</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t408" class="pln"><span class="n"><a href="#t408">408</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t409" class="mis show_mis"><span class="n"><a href="#t409">409</a></span><span class="t"> <span class="nam">show</span><span class="op">(</span><span class="nam">good_mask</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="nam">figsize</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t410" class="mis show_mis"><span class="n"><a href="#t410">410</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'good mask'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t411" class="mis show_mis"><span class="n"><a href="#t411">411</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t412" class="pln"><span class="n"><a href="#t412">412</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t413" class="mis show_mis"><span class="n"><a href="#t413">413</a></span><span class="t"> <span class="nam">show</span><span class="op">(</span><span class="nam">good_labels</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="nam">figsize</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t414" class="mis show_mis"><span class="n"><a href="#t414">414</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'good labels'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t415" class="mis show_mis"><span class="n"><a href="#t415">415</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t416" class="pln"><span class="n"><a href="#t416">416</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t417" class="mis show_mis"><span class="n"><a href="#t417">417</a></span><span class="t"> <span class="key">return</span> <span class="nam">good_labels</span> </span><span class="r"></span></p> + <p id="t418" class="pln"><span class="n"><a href="#t418">418</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t419" class="pln"><span class="n"><a href="#t419">419</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t420" class="run"><span class="n"><a href="#t420">420</a></span><span class="t"><span class="key">def</span> <span class="nam">_detect_wells</span><span class="op">(</span><span class="nam">bf</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">thr</span><span class="op">=</span><span class="num">0.1</span><span class="op">,</span> <span class="nam">sigma</span><span class="op">=</span><span class="num">2</span><span class="op">,</span> <span class="nam">erode</span><span class="op">=</span><span class="num">5</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t421" class="pln"><span class="n"><a href="#t421">421</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t422" class="pln"><span class="n"><a href="#t422">422</a></span><span class="t"><span class="str"> Return mask of wells</span> </span><span class="r"></span></p> + <p id="t423" class="pln"><span class="n"><a href="#t423">423</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t424" class="mis show_mis"><span class="n"><a href="#t424">424</a></span><span class="t"> <span class="nam">grad</span> <span class="op">=</span> <span class="nam">get_2d_gradient</span><span class="op">(</span><span class="nam">bf</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t425" class="mis show_mis"><span class="n"><a href="#t425">425</a></span><span class="t"> <span class="nam">sm_grad</span> <span class="op">=</span> <span class="nam">gaussian_filter</span><span class="op">(</span><span class="nam">grad</span><span class="op">,</span> <span class="nam">sigma</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t426" class="mis show_mis"><span class="n"><a href="#t426">426</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">sm_grad</span> <span class="op">></span> <span class="nam">sm_grad</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span> <span class="op">*</span> <span class="nam">thr</span> </span><span class="r"></span></p> + <p id="t427" class="mis show_mis"><span class="n"><a href="#t427">427</a></span><span class="t"> <span class="nam">filled_mask</span> <span class="op">=</span> <span class="nam">binary_erosion</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t428" class="pln"><span class="n"><a href="#t428">428</a></span><span class="t"> <span class="nam">binary_fill_holes</span><span class="op">(</span><span class="nam">mask</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t429" class="pln"><span class="n"><a href="#t429">429</a></span><span class="t"> <span class="nam">structure</span><span class="op">=</span><span class="nam">np</span><span class="op">.</span><span class="nam">ones</span><span class="op">(</span><span class="op">(</span><span class="nam">erode</span><span class="op">,</span> <span class="nam">erode</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t430" class="pln"><span class="n"><a href="#t430">430</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t431" class="pln"><span class="n"><a href="#t431">431</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t432" class="mis show_mis"><span class="n"><a href="#t432">432</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t433" class="mis show_mis"><span class="n"><a href="#t433">433</a></span><span class="t"> <span class="op">[</span><span class="nam">show</span><span class="op">(</span><span class="nam">b</span><span class="op">)</span> <span class="key">for</span> <span class="nam">b</span> <span class="key">in</span> <span class="op">[</span><span class="nam">grad</span><span class="op">,</span> <span class="nam">sm_grad</span><span class="op">,</span> <span class="nam">mask</span><span class="op">,</span> <span class="nam">filled_mask</span><span class="op">]</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t434" class="pln"><span class="n"><a href="#t434">434</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t435" class="mis show_mis"><span class="n"><a href="#t435">435</a></span><span class="t"> <span class="key">return</span> <span class="nam">filled_mask</span> </span><span class="r"></span></p> + <p id="t436" class="pln"><span class="n"><a href="#t436">436</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t437" class="pln"><span class="n"><a href="#t437">437</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t438" class="run"><span class="n"><a href="#t438">438</a></span><span class="t"><span class="key">def</span> <span class="nam">get_2d_gradient</span><span class="op">(</span><span class="nam">xy</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t439" class="mis show_mis"><span class="n"><a href="#t439">439</a></span><span class="t"> <span class="nam">gx</span><span class="op">,</span> <span class="nam">gy</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">gradient</span><span class="op">(</span><span class="nam">xy</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t440" class="mis show_mis"><span class="n"><a href="#t440">440</a></span><span class="t"> <span class="key">return</span> <span class="nam">np</span><span class="op">.</span><span class="nam">sqrt</span><span class="op">(</span><span class="nam">gx</span> <span class="op">**</span> <span class="num">2</span> <span class="op">+</span> <span class="nam">gy</span> <span class="op">**</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t441" class="pln"><span class="n"><a href="#t441">441</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t442" class="pln"><span class="n"><a href="#t442">442</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t443" class="run"><span class="n"><a href="#t443">443</a></span><span class="t"><span class="key">def</span> <span class="nam">show</span><span class="op">(</span><span class="nam">grad</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">5</span><span class="op">,</span> <span class="num">5</span><span class="op">)</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t444" class="mis show_mis"><span class="n"><a href="#t444">444</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">figsize</span><span class="op">=</span><span class="nam">figsize</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t445" class="mis show_mis"><span class="n"><a href="#t445">445</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">grad</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t446" class="pln"><span class="n"><a href="#t446">446</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t447" class="pln"><span class="n"><a href="#t447">447</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t448" class="run"><span class="n"><a href="#t448">448</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_intensity_vs_time</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t449" class="pln"><span class="n"><a href="#t449">449</a></span><span class="t"> <span class="nam">table</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">'time'</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">'mean_intensity'</span><span class="op">,</span> <span class="nam">size</span><span class="op">=</span><span class="num">1</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span> </span><span class="r"></span></p> + <p id="t450" class="pln"><span class="n"><a href="#t450">450</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t451" class="pln"><span class="n"><a href="#t451">451</a></span><span class="t"> <span class="str">''' Swarm-plot '''</span> </span><span class="r"></span></p> + <p id="t452" class="mis show_mis"><span class="n"><a href="#t452">452</a></span><span class="t"> <span class="nam">plot</span> <span class="op">=</span> <span class="nam">sns</span><span class="op">.</span><span class="nam">swarmplot</span><span class="op">(</span><span class="nam">data</span><span class="op">=</span><span class="nam">table</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="nam">y</span><span class="op">,</span> <span class="nam">size</span><span class="op">=</span><span class="nam">size</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t453" class="mis show_mis"><span class="n"><a href="#t453">453</a></span><span class="t"> <span class="key">return</span> <span class="nam">plot</span> </span><span class="r"></span></p> + <p id="t454" class="pln"><span class="n"><a href="#t454">454</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t455" class="pln"><span class="n"><a href="#t455">455</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t456" class="run"><span class="n"><a href="#t456">456</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_intensity_line</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t457" class="pln"><span class="n"><a href="#t457">457</a></span><span class="t"> <span class="nam">table</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">'time'</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">'mean_intensity'</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span> </span><span class="r"></span></p> + <p id="t458" class="pln"><span class="n"><a href="#t458">458</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t459" class="pln"><span class="n"><a href="#t459">459</a></span><span class="t"> <span class="str">''' Averaged line plot with confidence interval '''</span> </span><span class="r"></span></p> + <p id="t460" class="mis show_mis"><span class="n"><a href="#t460">460</a></span><span class="t"> <span class="nam">plot</span> <span class="op">=</span> <span class="nam">sns</span><span class="op">.</span><span class="nam">lineplot</span><span class="op">(</span><span class="nam">data</span><span class="op">=</span><span class="nam">table</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="nam">y</span><span class="op">,</span> <span class="nam">ci</span><span class="op">=</span><span class="str">'sd'</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t461" class="mis show_mis"><span class="n"><a href="#t461">461</a></span><span class="t"> <span class="key">return</span> <span class="nam">plot</span> </span><span class="r"></span></p> + <p id="t462" class="pln"><span class="n"><a href="#t462">462</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t463" class="pln"><span class="n"><a href="#t463">463</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t464" class="run"><span class="n"><a href="#t464">464</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_intensity_raw_line</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t465" class="pln"><span class="n"><a href="#t465">465</a></span><span class="t"> <span class="nam">table</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">'time'</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">'mean_intensity'</span><span class="op">,</span> <span class="nam">units</span><span class="op">=</span><span class="str">'label'</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span> </span><span class="r"></span></p> + <p id="t466" class="pln"><span class="n"><a href="#t466">466</a></span><span class="t"><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t467" class="pln"><span class="n"><a href="#t467">467</a></span><span class="t"> <span class="str">''' Plot every dataset in the series as a separate line '''</span> </span><span class="r"></span></p> + <p id="t468" class="mis show_mis"><span class="n"><a href="#t468">468</a></span><span class="t"> <span class="nam">plot</span> <span class="op">=</span> <span class="nam">sns</span><span class="op">.</span><span class="nam">lineplot</span><span class="op">(</span><span class="nam">data</span><span class="op">=</span><span class="nam">table</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="nam">y</span><span class="op">,</span> <span class="nam">units</span><span class="op">=</span><span class="nam">units</span><span class="op">,</span> <span class="nam">estimator</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t469" class="mis show_mis"><span class="n"><a href="#t469">469</a></span><span class="t"> <span class="key">return</span> <span class="nam">plot</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/droplet_growth_poisson_py.html b/cov_html/droplet_growth_poisson_py.html new file mode 100644 index 0000000000000000000000000000000000000000..18dd77ea5e4e83e122ae16d064f2cded3fcebd3f --- /dev/null +++ b/cov_html/droplet_growth_poisson_py.html @@ -0,0 +1,93 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for droplet_growth/poisson.py: 19%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>droplet_growth/poisson.py</b> : + <span class="pc_cov">19%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 26 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">5 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">21 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">scipy</span><span class="op">.</span><span class="nam">optimize</span> <span class="key">import</span> <span class="nam">curve_fit</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">scipy</span><span class="op">.</span><span class="nam">stats</span> <span class="key">import</span> <span class="nam">poisson</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t5" class="pln"><span class="n"><a href="#t5">5</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t6" class="pln"><span class="n"><a href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="key">def</span> <span class="nam">fit</span><span class="op">(</span><span class="nam">numbers</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">max_value</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">xlabel</span><span class="op">=</span><span class="str">'Initial number of cells'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t8" class="pln"><span class="n"><a href="#t8">8</a></span><span class="t"> <span class="nam">title</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">save_fig_path</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t9" class="mis show_mis"><span class="n"><a href="#t9">9</a></span><span class="t"> <span class="key">if</span> <span class="nam">max_value</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t10" class="mis show_mis"><span class="n"><a href="#t10">10</a></span><span class="t"> <span class="nam">max_value</span> <span class="op">=</span> <span class="nam">numbers</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t11" class="mis show_mis"><span class="n"><a href="#t11">11</a></span><span class="t"> <span class="nam">bins</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">max_value</span> <span class="op">+</span> <span class="num">1</span><span class="op">)</span> <span class="op">-</span> <span class="num">.5</span> </span><span class="r"></span></p> + <p id="t12" class="mis show_mis"><span class="n"><a href="#t12">12</a></span><span class="t"> <span class="nam">vector</span> <span class="op">=</span> <span class="nam">bins</span><span class="op">[</span><span class="op">:</span><span class="op">-</span><span class="num">1</span><span class="op">]</span> <span class="op">+</span><span class="num">.5</span> </span><span class="r"></span></p> + <p id="t13" class="mis show_mis"><span class="n"><a href="#t13">13</a></span><span class="t"> <span class="nam">hist</span><span class="op">,</span> <span class="nam">bins</span><span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">histogram</span><span class="op">(</span><span class="nam">numbers</span><span class="op">,</span> <span class="nam">bins</span><span class="op">=</span><span class="nam">bins</span><span class="op">,</span> <span class="nam">density</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t14" class="mis show_mis"><span class="n"><a href="#t14">14</a></span><span class="t"> <span class="nam">popt</span><span class="op">,</span> <span class="nam">pcov</span> <span class="op">=</span> <span class="nam">curve_fit</span><span class="op">(</span><span class="nam">poisson</span><span class="op">.</span><span class="nam">pmf</span><span class="op">,</span> <span class="nam">vector</span><span class="op">,</span> <span class="nam">hist</span><span class="op">,</span> <span class="nam">p0</span><span class="op">=</span><span class="op">(</span><span class="num">1.</span><span class="op">,</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t15" class="mis show_mis"><span class="n"><a href="#t15">15</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">popt</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t16" class="mis show_mis"><span class="n"><a href="#t16">16</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t17" class="mis show_mis"><span class="n"><a href="#t17">17</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">hist</span><span class="op">(</span><span class="nam">numbers</span><span class="op">,</span> <span class="nam">bins</span><span class="op">=</span><span class="nam">bins</span><span class="op">,</span> <span class="nam">fill</span><span class="op">=</span><span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t18" class="mis show_mis"><span class="n"><a href="#t18">18</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">plot</span><span class="op">(</span><span class="nam">vector</span><span class="op">,</span> <span class="nam">len</span><span class="op">(</span><span class="nam">numbers</span><span class="op">)</span> <span class="op">*</span> <span class="nam">poisson</span><span class="op">.</span><span class="nam">pmf</span><span class="op">(</span><span class="nam">vector</span><span class="op">,</span> <span class="nam">l</span><span class="op">)</span><span class="op">,</span> <span class="str">'.-'</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">f'Poisson fit λ={l:.1f}'</span><span class="op">,</span> <span class="nam">color</span><span class="op">=</span><span class="str">'tab:red'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t19" class="mis show_mis"><span class="n"><a href="#t19">19</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">xlabel</span><span class="op">(</span><span class="nam">xlabel</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t20" class="mis show_mis"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="nam">title</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t21" class="mis show_mis"><span class="n"><a href="#t21">21</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t22" class="mis show_mis"><span class="n"><a href="#t22">22</a></span><span class="t"> <span class="key">if</span> <span class="nam">save_fig_path</span> <span class="key">is</span> <span class="key">not</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t23" class="mis show_mis"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t24" class="mis show_mis"><span class="n"><a href="#t24">24</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">save_fig_path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t25" class="mis show_mis"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'Save histogram {save_fig_path}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t26" class="mis show_mis"><span class="n"><a href="#t26">26</a></span><span class="t"> <span class="key">except</span> <span class="nam">Exception</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t27" class="mis show_mis"><span class="n"><a href="#t27">27</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'saving histogram failed'</span><span class="op">,</span> <span class="nam">e</span><span class="op">.</span><span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t28" class="mis show_mis"><span class="n"><a href="#t28">28</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t29" class="mis show_mis"><span class="n"><a href="#t29">29</a></span><span class="t"> <span class="key">return</span> <span class="nam">l</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/droplet_growth_projections_py.html b/cov_html/droplet_growth_projections_py.html new file mode 100644 index 0000000000000000000000000000000000000000..4fd6bdd9cc8fd13f4454fb8c4e41ed849bed8c7f --- /dev/null +++ b/cov_html/droplet_growth_projections_py.html @@ -0,0 +1,152 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for droplet_growth/projections.py: 0%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>droplet_growth/projections.py</b> : + <span class="pc_cov">0%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 47 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">0 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">47 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="mis show_mis"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">api</span> <span class="key">import</span> <span class="nam">read</span><span class="op">,</span> <span class="nam">Well</span> </span><span class="r"></span></p> + <p id="t2" class="mis show_mis"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t3" class="mis show_mis"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> + <p id="t4" class="mis show_mis"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">tifffile</span> <span class="key">import</span> <span class="nam">imwrite</span> </span><span class="r"></span></p> + <p id="t5" class="pln"><span class="n"><a href="#t5">5</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t6" class="pln"><span class="n"><a href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t7" class="mis show_mis"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="key">def</span> <span class="nam">get_max_mean_projections</span><span class="op">(</span><span class="nam">folder</span><span class="op">,</span> <span class="nam">output</span><span class="op">,</span> <span class="nam">channels</span><span class="op">:</span><span class="nam">list</span><span class="op">,</span> <span class="nam">bin</span><span class="op">=</span><span class="num">1</span><span class="op">,</span> <span class="nam">regex</span><span class="op">=</span><span class="str">'([ctz])(\\d{1,2})'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t8" class="pln"><span class="n"><a href="#t8">8</a></span><span class="t"> <span class="nam">prefix</span><span class="op">:</span><span class="nam">tuple</span><span class="op">=</span><span class="op">(</span><span class="str">'max_'</span><span class="op">,</span> <span class="str">'mean_'</span><span class="op">)</span><span class="op">,</span> <span class="nam">suffix</span><span class="op">=</span><span class="str">'projection_cX.tif'</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t9" class="pln"><span class="n"><a href="#t9">9</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t10" class="pln"><span class="n"><a href="#t10">10</a></span><span class="t"><span class="str"> Reads single files exported by NIS to the `folder` using regex.</span> </span><span class="r"></span></p> + <p id="t11" class="pln"><span class="n"><a href="#t11">11</a></span><span class="t"><span class="str"> Extracts max, mean projections for all timepoints and selectes channels.</span> </span><span class="r"></span></p> + <p id="t12" class="pln"><span class="n"><a href="#t12">12</a></span><span class="t"><span class="str"> Saves tif stacks, returns two stacks as np.arrays</span> </span><span class="r"></span></p> + <p id="t13" class="pln"><span class="n"><a href="#t13">13</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t14" class="mis show_mis"><span class="n"><a href="#t14">14</a></span><span class="t"> <span class="nam">reader</span> <span class="op">=</span> <span class="nam">read</span><span class="op">.</span><span class="nam">VirtualStack</span><span class="op">(</span><span class="nam">folder</span><span class="op">,</span> <span class="nam">regex</span><span class="op">=</span><span class="nam">regex</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t15" class="mis show_mis"><span class="n"><a href="#t15">15</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">reader</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t16" class="mis show_mis"><span class="n"><a href="#t16">16</a></span><span class="t"> <span class="nam">t_range</span> <span class="op">=</span> <span class="nam">tuple</span><span class="op">(</span><span class="nam">reader</span><span class="op">.</span><span class="nam">ranges</span><span class="op">[</span><span class="str">'t'</span><span class="op">]</span><span class="op">.</span><span class="nam">values</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t17" class="mis show_mis"><span class="n"><a href="#t17">17</a></span><span class="t"> <span class="nam">ppp</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t18" class="mis show_mis"><span class="n"><a href="#t18">18</a></span><span class="t"> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="nam">channels</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t19" class="mis show_mis"><span class="n"><a href="#t19">19</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'channel {c}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t20" class="mis show_mis"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="nam">proj</span> <span class="op">=</span> <span class="nam">get_t_series</span><span class="op">(</span><span class="nam">t_range</span><span class="op">,</span> <span class="nam">reader</span><span class="op">,</span> <span class="nam">c</span><span class="op">,</span> <span class="nam">bin</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t21" class="mis show_mis"><span class="n"><a href="#t21">21</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t22" class="mis show_mis"><span class="n"><a href="#t22">22</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'Saving data'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t23" class="mis show_mis"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="nam">save_projections</span><span class="op">(</span><span class="nam">proj</span><span class="op">,</span> <span class="nam">output</span><span class="op">,</span> <span class="nam">prefix</span><span class="op">,</span> <span class="nam">suffix</span><span class="op">=</span><span class="nam">suffix</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'X'</span><span class="op">,</span> <span class="nam">str</span><span class="op">(</span><span class="nam">c</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t24" class="mis show_mis"><span class="n"><a href="#t24">24</a></span><span class="t"> <span class="key">except</span> <span class="nam">Exception</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t25" class="mis show_mis"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'saving failed: {e.args}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t26" class="mis show_mis"><span class="n"><a href="#t26">26</a></span><span class="t"> <span class="nam">ppp</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">proj</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t27" class="mis show_mis"><span class="n"><a href="#t27">27</a></span><span class="t"> <span class="key">return</span> <span class="nam">proj</span> </span><span class="r"></span></p> + <p id="t28" class="pln"><span class="n"><a href="#t28">28</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t29" class="pln"><span class="n"><a href="#t29">29</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t30" class="mis show_mis"><span class="n"><a href="#t30">30</a></span><span class="t"><span class="key">def</span> <span class="nam">_get_z_projections</span><span class="op">(</span><span class="nam">reader</span><span class="op">:</span><span class="nam">read</span><span class="op">.</span><span class="nam">VirtualStack</span><span class="op">,</span> <span class="nam">t</span><span class="op">:</span><span class="nam">int</span><span class="op">,</span> <span class="nam">c</span><span class="op">:</span><span class="nam">int</span><span class="op">=</span><span class="num">3</span><span class="op">,</span> <span class="nam">bin</span><span class="op">:</span><span class="nam">int</span><span class="op">=</span><span class="num">1</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t31" class="pln"><span class="n"><a href="#t31">31</a></span><span class="t"> <span class="str">''' Makes max, mean z projection for a single timepoint </span> </span><span class="r"></span></p> + <p id="t32" class="pln"><span class="n"><a href="#t32">32</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"><span class="str"> -------</span> </span><span class="r"></span></p> + <p id="t34" class="pln"><span class="n"><a href="#t34">34</a></span><span class="t"><span class="str"> (numpy.array, numpy.array) - max, mean 2D arrays</span> </span><span class="r"></span></p> + <p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t36" class="mis show_mis"><span class="n"><a href="#t36">36</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'.'</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t37" class="mis show_mis"><span class="n"><a href="#t37">37</a></span><span class="t"> <span class="nam">images</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">reader</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="nam">c</span><span class="op">=</span><span class="nam">c</span><span class="op">,</span> <span class="nam">t</span><span class="op">=</span><span class="nam">t</span><span class="op">,</span> <span class="nam">bin</span><span class="op">=</span><span class="nam">bin</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t38" class="mis show_mis"><span class="n"><a href="#t38">38</a></span><span class="t"> <span class="nam">stack</span> <span class="op">=</span> <span class="nam">Well</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="nam">images</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t39" class="mis show_mis"><span class="n"><a href="#t39">39</a></span><span class="t"> <span class="nam">max_proj</span> <span class="op">=</span> <span class="nam">stack</span><span class="op">.</span><span class="nam">array</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t40" class="mis show_mis"><span class="n"><a href="#t40">40</a></span><span class="t"> <span class="nam">avg_proj</span> <span class="op">=</span> <span class="nam">stack</span><span class="op">.</span><span class="nam">array</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t41" class="mis show_mis"><span class="n"><a href="#t41">41</a></span><span class="t"> <span class="key">return</span> <span class="nam">max_proj</span><span class="op">,</span> <span class="nam">avg_proj</span> </span><span class="r"></span></p> + <p id="t42" class="pln"><span class="n"><a href="#t42">42</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t43" class="pln"><span class="n"><a href="#t43">43</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t44" class="mis show_mis"><span class="n"><a href="#t44">44</a></span><span class="t"><span class="key">def</span> <span class="nam">get_t_series</span><span class="op">(</span><span class="nam">t_range</span><span class="op">:</span><span class="nam">tuple</span><span class="op">,</span> <span class="nam">reader</span><span class="op">:</span><span class="nam">read</span><span class="op">.</span><span class="nam">VirtualStack</span><span class="op">,</span> <span class="nam">c</span><span class="op">:</span><span class="nam">int</span><span class="op">=</span><span class="num">3</span><span class="op">,</span> <span class="nam">bin</span><span class="op">:</span><span class="nam">int</span><span class="op">=</span><span class="num">1</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t45" class="pln"><span class="n"><a href="#t45">45</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t46" class="pln"><span class="n"><a href="#t46">46</a></span><span class="t"><span class="str"> Makes max, mean z projection for a range of timepoints,</span> </span><span class="r"></span></p> + <p id="t47" class="pln"><span class="n"><a href="#t47">47</a></span><span class="t"><span class="str"> including the last index</span> </span><span class="r"></span></p> + <p id="t48" class="pln"><span class="n"><a href="#t48">48</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t49" class="pln"><span class="n"><a href="#t49">49</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t50" class="pln"><span class="n"><a href="#t50">50</a></span><span class="t"><span class="str"> -------</span> </span><span class="r"></span></p> + <p id="t51" class="pln"><span class="n"><a href="#t51">51</a></span><span class="t"><span class="str"> (numpy.array, numpy.array) - max, mean 3D arrays</span> </span><span class="r"></span></p> + <p id="t52" class="pln"><span class="n"><a href="#t52">52</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t53" class="mis show_mis"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'assembling z projections for t-series {t_range}: '</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t54" class="mis show_mis"><span class="n"><a href="#t54">54</a></span><span class="t"> <span class="nam">fun</span> <span class="op">=</span> <span class="key">lambda</span> <span class="nam">t</span><span class="op">:</span> <span class="nam">_get_z_projections</span><span class="op">(</span><span class="nam">reader</span><span class="op">,</span> <span class="nam">t</span><span class="op">,</span> <span class="nam">c</span><span class="op">,</span> <span class="nam">bin</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t55" class="mis show_mis"><span class="n"><a href="#t55">55</a></span><span class="t"> <span class="nam">z_projections</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="nam">fun</span><span class="op">,</span> <span class="nam">range</span><span class="op">(</span><span class="nam">t_range</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span><span class="nam">t_range</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">+</span><span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t56" class="pln"><span class="n"><a href="#t56">56</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t57" class="mis show_mis"><span class="n"><a href="#t57">57</a></span><span class="t"> <span class="nam">max_stack</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">[</span><span class="nam">p</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'int16'</span><span class="op">)</span> <span class="key">for</span> <span class="nam">p</span> <span class="key">in</span> <span class="nam">z_projections</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t58" class="mis show_mis"><span class="n"><a href="#t58">58</a></span><span class="t"> <span class="nam">avg_stack</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">[</span><span class="nam">p</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'float32'</span><span class="op">)</span> <span class="key">for</span> <span class="nam">p</span> <span class="key">in</span> <span class="nam">z_projections</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t59" class="pln"><span class="n"><a href="#t59">59</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t60" class="mis show_mis"><span class="n"><a href="#t60">60</a></span><span class="t"> <span class="key">return</span> <span class="nam">max_stack</span><span class="op">,</span> <span class="nam">avg_stack</span> </span><span class="r"></span></p> + <p id="t61" class="pln"><span class="n"><a href="#t61">61</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t62" class="pln"><span class="n"><a href="#t62">62</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t63" class="mis show_mis"><span class="n"><a href="#t63">63</a></span><span class="t"><span class="key">def</span> <span class="nam">save_projections</span><span class="op">(</span><span class="nam">data</span><span class="op">:</span><span class="nam">tuple</span><span class="op">,</span> <span class="nam">folder</span><span class="op">:</span><span class="nam">str</span><span class="op">,</span> <span class="nam">prefix</span><span class="op">:</span><span class="nam">tuple</span><span class="op">=</span><span class="op">(</span><span class="str">'max_'</span><span class="op">,</span> <span class="str">'mean_'</span><span class="op">)</span><span class="op">,</span> <span class="nam">suffix</span><span class="op">=</span><span class="str">'projection_c3.tif'</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t64" class="pln"><span class="n"><a href="#t64">64</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t65" class="pln"><span class="n"><a href="#t65">65</a></span><span class="t"><span class="str"> Saves 3D time-stacks in ImageJ format</span> </span><span class="r"></span></p> + <p id="t66" class="pln"><span class="n"><a href="#t66">66</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t67" class="mis show_mis"><span class="n"><a href="#t67">67</a></span><span class="t"> <span class="key">for</span> <span class="nam">d</span><span class="op">,</span> <span class="nam">p</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="nam">data</span><span class="op">,</span> <span class="nam">prefix</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t68" class="mis show_mis"><span class="n"><a href="#t68">68</a></span><span class="t"> <span class="nam">path</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">folder</span><span class="op">,</span> <span class="str">f'{p}{suffix}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t69" class="mis show_mis"><span class="n"><a href="#t69">69</a></span><span class="t"> <span class="nam">imwrite</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">d</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span><span class="op">,</span><span class="num">1</span><span class="op">,</span><span class="num">1</span><span class="op">,</span><span class="op">*</span><span class="nam">d</span><span class="op">.</span><span class="nam">shape</span><span class="op">[</span><span class="num">1</span><span class="op">:</span><span class="op">]</span><span class="op">,</span><span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">imagej</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t70" class="mis show_mis"><span class="n"><a href="#t70">70</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'\nsaved data to `{path}`'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t71" class="mis show_mis"><span class="n"><a href="#t71">71</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span> </span><span class="r"></span></p> + <p id="t72" class="pln"><span class="n"><a href="#t72">72</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t73" class="pln"><span class="n"><a href="#t73">73</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t74" class="mis show_mis"><span class="n"><a href="#t74">74</a></span><span class="t"><span class="key">def</span> <span class="nam">crop</span><span class="op">(</span><span class="nam">array</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">center</span><span class="op">:</span><span class="nam">tuple</span><span class="op">,</span> <span class="nam">size</span><span class="op">:</span><span class="nam">int</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t75" class="pln"><span class="n"><a href="#t75">75</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t76" class="pln"><span class="n"><a href="#t76">76</a></span><span class="t"> <span class="str">''' 2d square crop of last 2 dimensions of 2d/3d array '''</span> </span><span class="r"></span></p> + <p id="t77" class="pln"><span class="n"><a href="#t77">77</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t78" class="mis show_mis"><span class="n"><a href="#t78">78</a></span><span class="t"> <span class="nam">limits</span> <span class="op">=</span> <span class="op">(</span><span class="nam">c</span> <span class="op">:=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="nam">center</span><span class="op">)</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="nam">int</span><span class="op">)</span><span class="op">)</span> <span class="op">-</span> <span class="nam">size</span><span class="op">,</span> <span class="nam">c</span> <span class="op">+</span> <span class="nam">size</span> </span><span class="r"></span></p> + <p id="t79" class="mis show_mis"><span class="n"><a href="#t79">79</a></span><span class="t"> <span class="nam">limits</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">zeros</span><span class="op">(</span><span class="op">(</span><span class="num">2</span><span class="op">,</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">limits</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="nam">axis</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">,</span> <span class="xx">\</span> </span><span class="r"></span></p> + <p id="t80" class="pln"><span class="n"><a href="#t80">80</a></span><span class="t"> <span class="nam">np</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="op">(</span><span class="nam">array</span><span class="op">.</span><span class="nam">shape</span><span class="op">[</span><span class="op">-</span><span class="num">2</span><span class="op">:</span><span class="op">]</span><span class="op">,</span> <span class="nam">limits</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="nam">axis</span><span class="op">=</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t81" class="pln"><span class="n"><a href="#t81">81</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t82" class="mis show_mis"><span class="n"><a href="#t82">82</a></span><span class="t"> <span class="key">if</span> <span class="nam">array</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="num">2</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t83" class="mis show_mis"><span class="n"><a href="#t83">83</a></span><span class="t"> <span class="key">return</span> <span class="nam">array</span><span class="op">[</span><span class="nam">limits</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">:</span><span class="nam">limits</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">limits</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">:</span><span class="nam">limits</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t84" class="mis show_mis"><span class="n"><a href="#t84">84</a></span><span class="t"> <span class="key">elif</span> <span class="nam">array</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="num">3</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t85" class="mis show_mis"><span class="n"><a href="#t85">85</a></span><span class="t"> <span class="key">return</span> <span class="nam">array</span><span class="op">[</span><span class="op">:</span><span class="nam">limits</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">:</span><span class="nam">limits</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="op">:</span><span class="nam">limits</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">:</span><span class="nam">limits</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t86" class="pln"><span class="n"><a href="#t86">86</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t87" class="pln"><span class="n"><a href="#t87">87</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t88" class="mis show_mis"><span class="n"><a href="#t88">88</a></span><span class="t"> <span class="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">f'Expected 2d or 3d array, got {array.shape}'</span><span class="op">)</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/droplet_growth_register_py.html b/cov_html/droplet_growth_register_py.html new file mode 100644 index 0000000000000000000000000000000000000000..b76f4fd51adc020d8f7e817ce11a1188327e0b64 --- /dev/null +++ b/cov_html/droplet_growth_register_py.html @@ -0,0 +1,443 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for droplet_growth/register.py: 13%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>droplet_growth/register.py</b> : + <span class="pc_cov">13%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 222 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">28 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">194 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">tifffile</span> <span class="key">import</span> <span class="nam">imread</span><span class="op">,</span> <span class="nam">imwrite</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">imreg_dft</span> <span class="key">as</span> <span class="nam">reg</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">scipy</span><span class="op">.</span><span class="nam">ndimage</span> <span class="key">as</span> <span class="nam">ndi</span> </span><span class="r"></span></p> + <p id="t6" class="run"><span class="n"><a href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">droplet_growth</span> <span class="key">import</span> <span class="nam">mic</span> </span><span class="r"></span></p> + <p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">nd2tif</span><span class="op">.</span><span class="nam">transform</span> <span class="key">import</span> <span class="nam">to_8bits</span> </span><span class="r"></span></p> + <p id="t8" class="run"><span class="n"><a href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> + <p id="t9" class="pln"><span class="n"><a href="#t9">9</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t10" class="run"><span class="n"><a href="#t10">10</a></span><span class="t"><span class="nam">grey</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="op">[</span><span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="num">256</span><span class="op">)</span><span class="op">]</span> <span class="op">*</span> <span class="num">3</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="str">'uint8'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t11" class="run"><span class="n"><a href="#t11">11</a></span><span class="t"><span class="nam">red</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="op">[</span><span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="num">256</span><span class="op">)</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">zeros</span><span class="op">(</span><span class="op">(</span><span class="num">256</span><span class="op">,</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">zeros</span><span class="op">(</span><span class="op">(</span><span class="num">256</span><span class="op">,</span><span class="op">)</span><span class="op">)</span><span class="op">]</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="str">'uint8'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t12" class="run"><span class="n"><a href="#t12">12</a></span><span class="t"><span class="nam">green</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="op">[</span><span class="nam">np</span><span class="op">.</span><span class="nam">zeros</span><span class="op">(</span><span class="op">(</span><span class="num">256</span><span class="op">,</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="num">256</span><span class="op">)</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">zeros</span><span class="op">(</span><span class="op">(</span><span class="num">256</span><span class="op">,</span><span class="op">)</span><span class="op">)</span><span class="op">]</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="str">'uint8'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t13" class="run"><span class="n"><a href="#t13">13</a></span><span class="t"><span class="nam">blue</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="op">[</span><span class="nam">np</span><span class="op">.</span><span class="nam">zeros</span><span class="op">(</span><span class="op">(</span><span class="num">256</span><span class="op">,</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">zeros</span><span class="op">(</span><span class="op">(</span><span class="num">256</span><span class="op">,</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="num">256</span><span class="op">)</span><span class="op">]</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="str">'uint8'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t14" class="pln"><span class="n"><a href="#t14">14</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t15" class="run"><span class="n"><a href="#t15">15</a></span><span class="t"><span class="nam">META_ALIGNED</span> <span class="op">=</span> <span class="op">{</span><span class="str">'ImageJ'</span><span class="op">:</span> <span class="str">'1.53c'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"> <span class="str">'images'</span><span class="op">:</span> <span class="num">3</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t17" class="pln"><span class="n"><a href="#t17">17</a></span><span class="t"> <span class="str">'channels'</span><span class="op">:</span> <span class="num">3</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t18" class="pln"><span class="n"><a href="#t18">18</a></span><span class="t"> <span class="str">'hyperstack'</span><span class="op">:</span> <span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"> <span class="str">'mode'</span><span class="op">:</span> <span class="str">'composite'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t20" class="pln"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="str">'unit'</span><span class="op">:</span> <span class="str">''</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t21" class="pln"><span class="n"><a href="#t21">21</a></span><span class="t"> <span class="str">'loop'</span><span class="op">:</span> <span class="key">False</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t22" class="pln"><span class="n"><a href="#t22">22</a></span><span class="t"> <span class="str">'min'</span><span class="op">:</span> <span class="num">1878.0</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t23" class="pln"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="str">'max'</span><span class="op">:</span> <span class="num">30728.0</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t24" class="pln"><span class="n"><a href="#t24">24</a></span><span class="t"> <span class="str">'Ranges'</span><span class="op">:</span> <span class="op">(</span><span class="num">1878.0</span><span class="op">,</span> <span class="num">30728.0</span><span class="op">,</span> <span class="num">430.0</span><span class="op">,</span> <span class="num">600.0</span><span class="op">,</span> <span class="num">0.0</span><span class="op">,</span> <span class="num">501.0</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t25" class="pln"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="str">'LUTs'</span><span class="op">:</span> <span class="op">[</span><span class="nam">grey</span><span class="op">,</span> <span class="nam">green</span><span class="op">,</span> <span class="nam">blue</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p id="t27" class="pln"><span class="n"><a href="#t27">27</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t28" class="run"><span class="n"><a href="#t28">28</a></span><span class="t"><span class="key">def</span> <span class="nam">align_stack</span><span class="op">(</span><span class="nam">data_or_path</span><span class="op">,</span> <span class="nam">template16</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">path</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">binnings</span><span class="op">=</span><span class="op">(</span><span class="num">1</span><span class="op">,</span><span class="num">16</span><span class="op">,</span><span class="num">2</span><span class="op">)</span><span class="op">,</span> <span class="nam">suffix</span><span class="op">=</span><span class="str">'.aligned.tif'</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t29" class="pln"><span class="n"><a href="#t29">29</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t30" class="pln"><span class="n"><a href="#t30">30</a></span><span class="t"><span class="str"> stack should contain two channels: bright field and fluorescence.</span> </span><span class="r"></span></p> + <p id="t31" class="pln"><span class="n"><a href="#t31">31</a></span><span class="t"><span class="str"> BF will be binned 8 times and registered with template8 (aligned BF).</span> </span><span class="r"></span></p> + <p id="t32" class="pln"><span class="n"><a href="#t32">32</a></span><span class="t"><span class="str"> When the transformation verctor will be applied to the original data and stacked with the mask.</span> </span><span class="r"></span></p> + <p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"><span class="str"> The output stack is of the same size as mask.</span> </span><span class="r"></span></p> + <p id="t34" class="pln"><span class="n"><a href="#t34">34</a></span><span class="t"><span class="str"> The resulting 3-layer stack will be returned and also saved with suffix ".aligned.tif"</span> </span><span class="r"></span></p> + <p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t36" class="mis show_mis"><span class="n"><a href="#t36">36</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">data_or_path</span><span class="op">,</span> <span class="nam">str</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t37" class="mis show_mis"><span class="n"><a href="#t37">37</a></span><span class="t"> <span class="nam">path</span> <span class="op">=</span> <span class="nam">data_or_path</span> </span><span class="r"></span></p> + <p id="t38" class="mis show_mis"><span class="n"><a href="#t38">38</a></span><span class="t"> <span class="nam">stack</span> <span class="op">=</span> <span class="nam">imread</span><span class="op">(</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t39" class="mis show_mis"><span class="n"><a href="#t39">39</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">stack</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t40" class="pln"><span class="n"><a href="#t40">40</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t41" class="mis show_mis"><span class="n"><a href="#t41">41</a></span><span class="t"> <span class="key">assert</span> <span class="nam">data_or_path</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="num">3</span> <span class="key">and</span> <span class="nam">data_or_path</span><span class="op">.</span><span class="nam">shape</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">==</span> <span class="num">2</span> </span><span class="r"></span></p> + <p id="t42" class="mis show_mis"><span class="n"><a href="#t42">42</a></span><span class="t"> <span class="key">assert</span> <span class="nam">path</span> <span class="key">is</span> <span class="key">not</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t43" class="mis show_mis"><span class="n"><a href="#t43">43</a></span><span class="t"> <span class="nam">stack</span> <span class="op">=</span> <span class="nam">data_or_path</span> </span><span class="r"></span></p> + <p id="t44" class="pln"><span class="n"><a href="#t44">44</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t45" class="mis show_mis"><span class="n"><a href="#t45">45</a></span><span class="t"> <span class="nam">bf</span><span class="op">,</span> <span class="nam">tritc</span> <span class="op">=</span> <span class="nam">stack</span><span class="op">[</span><span class="op">:</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t46" class="mis show_mis"><span class="n"><a href="#t46">46</a></span><span class="t"> <span class="nam">stack_temp_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t47" class="mis show_mis"><span class="n"><a href="#t47">47</a></span><span class="t"> <span class="nam">mask_temp_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t48" class="mis show_mis"><span class="n"><a href="#t48">48</a></span><span class="t"> <span class="nam">stack_mask_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t49" class="pln"><span class="n"><a href="#t49">49</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t50" class="mis show_mis"><span class="n"><a href="#t50">50</a></span><span class="t"> <span class="nam">f_bf</span> <span class="op">=</span> <span class="nam">bf</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">stack_temp_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">stack_temp_scale</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t51" class="pln"><span class="n"><a href="#t51">51</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t52" class="pln"><span class="n"><a href="#t52">52</a></span><span class="t"> <span class="com"># f_bf = filter_by_fft(</span> </span><span class="r"></span></p> + <p id="t53" class="pln"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="com"># bf[::stack_temp_scale, ::stack_temp_scale], </span> </span><span class="r"></span></p> + <p id="t54" class="pln"><span class="n"><a href="#t54">54</a></span><span class="t"> <span class="com"># sigma=40,</span> </span><span class="r"></span></p> + <p id="t55" class="pln"><span class="n"><a href="#t55">55</a></span><span class="t"> <span class="com"># fix_horizontal_stripes=True, </span> </span><span class="r"></span></p> + <p id="t56" class="pln"><span class="n"><a href="#t56">56</a></span><span class="t"> <span class="com"># fix_vertical_stripes=True,</span> </span><span class="r"></span></p> + <p id="t57" class="pln"><span class="n"><a href="#t57">57</a></span><span class="t"> <span class="com"># highpass=True</span> </span><span class="r"></span></p> + <p id="t58" class="pln"><span class="n"><a href="#t58">58</a></span><span class="t"> <span class="com"># )</span> </span><span class="r"></span></p> + <p id="t59" class="mis show_mis"><span class="n"><a href="#t59">59</a></span><span class="t"> <span class="nam">tvec8</span> <span class="op">=</span> <span class="nam">get_transform</span><span class="op">(</span><span class="nam">f_bf</span><span class="op">,</span> <span class="nam">template16</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t60" class="mis show_mis"><span class="n"><a href="#t60">60</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t61" class="mis show_mis"><span class="n"><a href="#t61">61</a></span><span class="t"> <span class="nam">tvec</span> <span class="op">=</span> <span class="nam">scale_tvec</span><span class="op">(</span><span class="nam">tvec8</span><span class="op">,</span> <span class="nam">mask_temp_scale</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t62" class="mis show_mis"><span class="n"><a href="#t62">62</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t63" class="mis show_mis"><span class="n"><a href="#t63">63</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t64" class="mis show_mis"><span class="n"><a href="#t64">64</a></span><span class="t"> <span class="nam">aligned_tritc</span> <span class="op">=</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">transform</span><span class="op">(</span><span class="nam">tritc</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">stack_mask_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">stack_mask_scale</span><span class="op">]</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t65" class="mis show_mis"><span class="n"><a href="#t65">65</a></span><span class="t"> <span class="nam">aligned_bf</span> <span class="op">=</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">transform</span><span class="op">(</span><span class="nam">bf</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">stack_mask_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">stack_mask_scale</span><span class="op">]</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t66" class="mis show_mis"><span class="n"><a href="#t66">66</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t67" class="mis show_mis"><span class="n"><a href="#t67">67</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">"stack_mask_scale: "</span><span class="op">,</span> <span class="nam">stack_mask_scale</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t68" class="mis show_mis"><span class="n"><a href="#t68">68</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">e</span><span class="op">.</span><span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t69" class="mis show_mis"><span class="n"><a href="#t69">69</a></span><span class="t"> <span class="key">raise</span> <span class="nam">e</span> </span><span class="r"></span></p> + <p id="t70" class="pln"><span class="n"><a href="#t70">70</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t71" class="mis show_mis"><span class="n"><a href="#t71">71</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t72" class="mis show_mis"><span class="n"><a href="#t72">72</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t73" class="mis show_mis"><span class="n"><a href="#t73">73</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">aligned_tritc</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">,</span><span class="op">)</span><span class="com"># vmax=aligned_tritc.max()/5)</span> </span><span class="r"></span></p> + <p id="t74" class="mis show_mis"><span class="n"><a href="#t74">74</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">colorbar</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t75" class="mis show_mis"><span class="n"><a href="#t75">75</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t76" class="pln"><span class="n"><a href="#t76">76</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t77" class="mis show_mis"><span class="n"><a href="#t77">77</a></span><span class="t"> <span class="nam">saturated_tritc</span> <span class="op">=</span> <span class="nam">aligned_tritc</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t78" class="mis show_mis"><span class="n"><a href="#t78">78</a></span><span class="t"> <span class="nam">saturated_tritc</span><span class="op">[</span><span class="nam">saturated_tritc</span> <span class="op">></span> <span class="num">500</span><span class="op">]</span> <span class="op">=</span> <span class="num">500</span> </span><span class="r"></span></p> + <p id="t79" class="mis show_mis"><span class="n"><a href="#t79">79</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t80" class="mis show_mis"><span class="n"><a href="#t80">80</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">mic</span><span class="op">.</span><span class="nam">segment</span><span class="op">.</span><span class="nam">label2rgb</span><span class="op">(</span><span class="nam">mic</span><span class="op">.</span><span class="nam">segment</span><span class="op">.</span><span class="nam">label</span><span class="op">(</span><span class="nam">mask2</span><span class="op">)</span><span class="op">,</span> <span class="nam">to_8bits</span><span class="op">(</span><span class="nam">saturated_tritc</span><span class="op">)</span><span class="op">,</span> <span class="nam">bg_label</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t81" class="mis show_mis"><span class="n"><a href="#t81">81</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t82" class="pln"><span class="n"><a href="#t82">82</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t83" class="mis show_mis"><span class="n"><a href="#t83">83</a></span><span class="t"> <span class="nam">aligned_stack</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">(</span><span class="nam">aligned_bf</span><span class="op">,</span> <span class="nam">aligned_tritc</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'uint16'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t84" class="pln"><span class="n"><a href="#t84">84</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t85" class="mis show_mis"><span class="n"><a href="#t85">85</a></span><span class="t"> <span class="nam">imwrite</span><span class="op">(</span><span class="op">(</span><span class="nam">p</span><span class="op">:=</span><span class="str">""</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="op">(</span><span class="op">*</span><span class="nam">path</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="str">'.'</span><span class="op">)</span><span class="op">[</span><span class="op">:</span><span class="op">-</span><span class="num">1</span><span class="op">]</span> <span class="op">,</span> <span class="nam">suffix</span><span class="op">)</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">aligned_stack</span><span class="op">,</span> <span class="nam">imagej</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">metadata</span><span class="op">=</span><span class="nam">META_ALIGNED</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t86" class="mis show_mis"><span class="n"><a href="#t86">86</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'Saved aligned stack {p}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t87" class="mis show_mis"><span class="n"><a href="#t87">87</a></span><span class="t"> <span class="key">return</span> <span class="nam">aligned_stack</span> </span><span class="r"></span></p> + <p id="t88" class="pln"><span class="n"><a href="#t88">88</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t89" class="pln"><span class="n"><a href="#t89">89</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t90" class="run"><span class="n"><a href="#t90">90</a></span><span class="t"><span class="key">def</span> <span class="nam">align_stack_nd</span><span class="op">(</span><span class="nam">stack</span><span class="op">,</span> <span class="nam">template16</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">,</span> <span class="nam">path</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">binnings</span><span class="op">=</span><span class="op">(</span><span class="num">1</span><span class="op">,</span><span class="num">16</span><span class="op">,</span><span class="num">2</span><span class="op">)</span><span class="op">,</span> <span class="nam">suffix</span><span class="op">=</span><span class="str">'.aligned.tif'</span><span class="op">)</span> <span class="op">-></span> <span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">dict</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t91" class="pln"><span class="n"><a href="#t91">91</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t92" class="pln"><span class="n"><a href="#t92">92</a></span><span class="t"><span class="str"> stack should contain two channels: bright field and fluorescence.</span> </span><span class="r"></span></p> + <p id="t93" class="pln"><span class="n"><a href="#t93">93</a></span><span class="t"><span class="str"> BF will be binned 8 times and registered with template8 (aligned BF).</span> </span><span class="r"></span></p> + <p id="t94" class="pln"><span class="n"><a href="#t94">94</a></span><span class="t"><span class="str"> When the transformation verctor will be applied to the original data and stacked with the mask.</span> </span><span class="r"></span></p> + <p id="t95" class="pln"><span class="n"><a href="#t95">95</a></span><span class="t"><span class="str"> The output stack is of the same size as mask.</span> </span><span class="r"></span></p> + <p id="t96" class="pln"><span class="n"><a href="#t96">96</a></span><span class="t"><span class="str"> The resulting 3-layer stack will be returned and also saved with suffix ".aligned.tif"</span> </span><span class="r"></span></p> + <p id="t97" class="pln"><span class="n"><a href="#t97">97</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t98" class="pln"><span class="n"><a href="#t98">98</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t99" class="pln"><span class="n"><a href="#t99">99</a></span><span class="t"> <span class="com"># print(stack.shape)</span> </span><span class="r"></span></p> + <p id="t100" class="pln"><span class="n"><a href="#t100">100</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t101" class="mis show_mis"><span class="n"><a href="#t101">101</a></span><span class="t"> <span class="nam">bf</span><span class="op">,</span> <span class="nam">tritc</span> <span class="op">=</span> <span class="nam">stack</span><span class="op">[</span><span class="op">:</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t102" class="pln"><span class="n"><a href="#t102">102</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t103" class="mis show_mis"><span class="n"><a href="#t103">103</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'Aligning {path}: \n'</span><span class="op">,</span> <span class="op">*</span><span class="op">[</span><span class="str">f'{name}: {im.shape}, {bin}\n'</span> <span class="key">for</span> <span class="nam">name</span><span class="op">,</span> <span class="nam">im</span><span class="op">,</span> <span class="nam">bin</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="op">[</span><span class="str">'bf'</span><span class="op">,</span> <span class="str">'tmp'</span><span class="op">,</span> <span class="str">'mask'</span><span class="op">]</span><span class="op">,</span> <span class="op">[</span><span class="nam">bf</span><span class="op">,</span> <span class="nam">template16</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">]</span><span class="op">,</span> <span class="nam">binnings</span> <span class="op">)</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t104" class="pln"><span class="n"><a href="#t104">104</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t105" class="mis show_mis"><span class="n"><a href="#t105">105</a></span><span class="t"> <span class="nam">stack_temp_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t106" class="mis show_mis"><span class="n"><a href="#t106">106</a></span><span class="t"> <span class="nam">mask_temp_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t107" class="mis show_mis"><span class="n"><a href="#t107">107</a></span><span class="t"> <span class="nam">stack_mask_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t108" class="pln"><span class="n"><a href="#t108">108</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t109" class="mis show_mis"><span class="n"><a href="#t109">109</a></span><span class="t"> <span class="nam">f_bf</span> <span class="op">=</span> <span class="nam">bf</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">stack_temp_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">stack_temp_scale</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t110" class="pln"><span class="n"><a href="#t110">110</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t111" class="pln"><span class="n"><a href="#t111">111</a></span><span class="t"> <span class="com">#filter_by_fft(</span> </span><span class="r"></span></p> + <p id="t112" class="pln"><span class="n"><a href="#t112">112</a></span><span class="t"> <span class="com"># bf[::stack_temp_scale, ::stack_temp_scale], </span> </span><span class="r"></span></p> + <p id="t113" class="pln"><span class="n"><a href="#t113">113</a></span><span class="t"> <span class="com"># sigma=40,</span> </span><span class="r"></span></p> + <p id="t114" class="pln"><span class="n"><a href="#t114">114</a></span><span class="t"> <span class="com"># fix_horizontal_stripes=True, </span> </span><span class="r"></span></p> + <p id="t115" class="pln"><span class="n"><a href="#t115">115</a></span><span class="t"> <span class="com"># fix_vertical_stripes=True,</span> </span><span class="r"></span></p> + <p id="t116" class="pln"><span class="n"><a href="#t116">116</a></span><span class="t"> <span class="com"># highpass=True</span> </span><span class="r"></span></p> + <p id="t117" class="pln"><span class="n"><a href="#t117">117</a></span><span class="t"> <span class="com"># )</span> </span><span class="r"></span></p> + <p id="t118" class="mis show_mis"><span class="n"><a href="#t118">118</a></span><span class="t"> <span class="nam">tvec8</span> <span class="op">=</span> <span class="nam">get_transform</span><span class="op">(</span><span class="nam">f_bf</span><span class="op">,</span> <span class="nam">template16</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t119" class="mis show_mis"><span class="n"><a href="#t119">119</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t120" class="mis show_mis"><span class="n"><a href="#t120">120</a></span><span class="t"> <span class="nam">tvec</span> <span class="op">=</span> <span class="nam">scale_tvec</span><span class="op">(</span><span class="nam">tvec8</span><span class="op">,</span> <span class="nam">mask_temp_scale</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t121" class="mis show_mis"><span class="n"><a href="#t121">121</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">tvec</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t122" class="mis show_mis"><span class="n"><a href="#t122">122</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t123" class="mis show_mis"><span class="n"><a href="#t123">123</a></span><span class="t"> <span class="nam">aligned_tritc</span> <span class="op">=</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">transform</span><span class="op">(</span><span class="nam">tritc</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">stack_mask_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">stack_mask_scale</span><span class="op">]</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t124" class="mis show_mis"><span class="n"><a href="#t124">124</a></span><span class="t"> <span class="nam">aligned_bf</span> <span class="op">=</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">transform</span><span class="op">(</span><span class="nam">bf</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">stack_mask_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">stack_mask_scale</span><span class="op">]</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t125" class="mis show_mis"><span class="n"><a href="#t125">125</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t126" class="mis show_mis"><span class="n"><a href="#t126">126</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">"stack_mask_scale: "</span><span class="op">,</span> <span class="nam">stack_mask_scale</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t127" class="mis show_mis"><span class="n"><a href="#t127">127</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">e</span><span class="op">.</span><span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t128" class="mis show_mis"><span class="n"><a href="#t128">128</a></span><span class="t"> <span class="key">raise</span> <span class="nam">e</span> </span><span class="r"></span></p> + <p id="t129" class="pln"><span class="n"><a href="#t129">129</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t130" class="mis show_mis"><span class="n"><a href="#t130">130</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t131" class="mis show_mis"><span class="n"><a href="#t131">131</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t132" class="mis show_mis"><span class="n"><a href="#t132">132</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">aligned_tritc</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">,</span><span class="op">)</span><span class="com"># vmax=aligned_tritc.max()/5)</span> </span><span class="r"></span></p> + <p id="t133" class="mis show_mis"><span class="n"><a href="#t133">133</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">colorbar</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t134" class="mis show_mis"><span class="n"><a href="#t134">134</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t135" class="pln"><span class="n"><a href="#t135">135</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t136" class="mis show_mis"><span class="n"><a href="#t136">136</a></span><span class="t"> <span class="nam">saturated_tritc</span> <span class="op">=</span> <span class="nam">aligned_tritc</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t137" class="mis show_mis"><span class="n"><a href="#t137">137</a></span><span class="t"> <span class="nam">saturated_tritc</span><span class="op">[</span><span class="nam">saturated_tritc</span> <span class="op">></span> <span class="num">500</span><span class="op">]</span> <span class="op">=</span> <span class="num">500</span> </span><span class="r"></span></p> + <p id="t138" class="mis show_mis"><span class="n"><a href="#t138">138</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t139" class="mis show_mis"><span class="n"><a href="#t139">139</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">mic</span><span class="op">.</span><span class="nam">segment</span><span class="op">.</span><span class="nam">label2rgb</span><span class="op">(</span><span class="nam">mic</span><span class="op">.</span><span class="nam">segment</span><span class="op">.</span><span class="nam">label</span><span class="op">(</span><span class="nam">mask2</span><span class="op">)</span><span class="op">,</span> <span class="nam">to_8bits</span><span class="op">(</span><span class="nam">saturated_tritc</span><span class="op">)</span><span class="op">,</span> <span class="nam">bg_label</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t140" class="mis show_mis"><span class="n"><a href="#t140">140</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t141" class="pln"><span class="n"><a href="#t141">141</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t142" class="mis show_mis"><span class="n"><a href="#t142">142</a></span><span class="t"> <span class="nam">aligned_stack</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">(</span><span class="nam">aligned_bf</span><span class="op">,</span> <span class="nam">aligned_tritc</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'uint16'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t143" class="pln"><span class="n"><a href="#t143">143</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t144" class="mis show_mis"><span class="n"><a href="#t144">144</a></span><span class="t"> <span class="key">if</span> <span class="nam">path</span> <span class="key">is</span> <span class="key">not</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t145" class="mis show_mis"><span class="n"><a href="#t145">145</a></span><span class="t"> <span class="nam">imwrite</span><span class="op">(</span><span class="op">(</span><span class="nam">p</span><span class="op">:=</span><span class="str">""</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="op">(</span><span class="op">*</span><span class="nam">path</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="str">'.'</span><span class="op">)</span><span class="op">[</span><span class="op">:</span><span class="op">-</span><span class="num">1</span><span class="op">]</span> <span class="op">,</span> <span class="nam">suffix</span><span class="op">)</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">aligned_stack</span><span class="op">,</span> <span class="nam">imagej</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">metadata</span><span class="op">=</span><span class="nam">META_ALIGNED</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t146" class="mis show_mis"><span class="n"><a href="#t146">146</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'Saved aligned stack {p}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t147" class="mis show_mis"><span class="n"><a href="#t147">147</a></span><span class="t"> <span class="key">return</span> <span class="nam">aligned_stack</span><span class="op">,</span> <span class="nam">tvec</span> </span><span class="r"></span></p> + <p id="t148" class="pln"><span class="n"><a href="#t148">148</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t149" class="pln"><span class="n"><a href="#t149">149</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t150" class="run"><span class="n"><a href="#t150">150</a></span><span class="t"><span class="key">def</span> <span class="nam">align_timelapse</span><span class="op">(</span><span class="nam">bf</span><span class="op">,</span> <span class="nam">fluo_stack</span><span class="op">,</span> <span class="nam">template16</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">binnings</span><span class="op">=</span><span class="op">(</span><span class="num">4</span><span class="op">,</span><span class="num">16</span><span class="op">,</span><span class="num">2</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t151" class="pln"><span class="n"><a href="#t151">151</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t152" class="pln"><span class="n"><a href="#t152">152</a></span><span class="t"><span class="str"> stack should contain two channels: bright field and fluorescence.</span> </span><span class="r"></span></p> + <p id="t153" class="pln"><span class="n"><a href="#t153">153</a></span><span class="t"><span class="str"> BF will be binned 8 times and registered with template8 (aligned BF).</span> </span><span class="r"></span></p> + <p id="t154" class="pln"><span class="n"><a href="#t154">154</a></span><span class="t"><span class="str"> When the transformation verctor will be applied to the original data and stacked with the mask.</span> </span><span class="r"></span></p> + <p id="t155" class="pln"><span class="n"><a href="#t155">155</a></span><span class="t"><span class="str"> The output stack is of the same size as mask.</span> </span><span class="r"></span></p> + <p id="t156" class="pln"><span class="n"><a href="#t156">156</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t157" class="pln"><span class="n"><a href="#t157">157</a></span><span class="t"><span class="str"> (aligned_bf, aligned_fluo, mask)</span> </span><span class="r"></span></p> + <p id="t158" class="pln"><span class="n"><a href="#t158">158</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t159" class="pln"><span class="n"><a href="#t159">159</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t160" class="mis show_mis"><span class="n"><a href="#t160">160</a></span><span class="t"> <span class="nam">stack_temp_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t161" class="mis show_mis"><span class="n"><a href="#t161">161</a></span><span class="t"> <span class="nam">mask_temp_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t162" class="mis show_mis"><span class="n"><a href="#t162">162</a></span><span class="t"> <span class="nam">mask_bf_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t163" class="pln"><span class="n"><a href="#t163">163</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t164" class="mis show_mis"><span class="n"><a href="#t164">164</a></span><span class="t"> <span class="nam">f_bf</span> <span class="op">=</span> <span class="nam">bf</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">stack_temp_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">stack_temp_scale</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t165" class="pln"><span class="n"><a href="#t165">165</a></span><span class="t"> <span class="com"># f_bf = filter_by_fft(</span> </span><span class="r"></span></p> + <p id="t166" class="pln"><span class="n"><a href="#t166">166</a></span><span class="t"> <span class="com"># bf[::stack_temp_scale, ::stack_temp_scale], </span> </span><span class="r"></span></p> + <p id="t167" class="pln"><span class="n"><a href="#t167">167</a></span><span class="t"> <span class="com"># sigma=40,</span> </span><span class="r"></span></p> + <p id="t168" class="pln"><span class="n"><a href="#t168">168</a></span><span class="t"> <span class="com"># fix_horizontal_stripes=True, </span> </span><span class="r"></span></p> + <p id="t169" class="pln"><span class="n"><a href="#t169">169</a></span><span class="t"> <span class="com"># fix_vertical_stripes=True,</span> </span><span class="r"></span></p> + <p id="t170" class="pln"><span class="n"><a href="#t170">170</a></span><span class="t"> <span class="com"># highpass=True</span> </span><span class="r"></span></p> + <p id="t171" class="pln"><span class="n"><a href="#t171">171</a></span><span class="t"> <span class="com"># )</span> </span><span class="r"></span></p> + <p id="t172" class="mis show_mis"><span class="n"><a href="#t172">172</a></span><span class="t"> <span class="nam">tvec8</span> <span class="op">=</span> <span class="nam">get_transform</span><span class="op">(</span><span class="nam">f_bf</span><span class="op">,</span> <span class="nam">template16</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t173" class="mis show_mis"><span class="n"><a href="#t173">173</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t174" class="mis show_mis"><span class="n"><a href="#t174">174</a></span><span class="t"> <span class="nam">tvec</span> <span class="op">=</span> <span class="nam">scale_tvec</span><span class="op">(</span><span class="nam">tvec8</span><span class="op">,</span> <span class="nam">stack_temp_scale</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t175" class="mis show_mis"><span class="n"><a href="#t175">175</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">tvec</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t176" class="pln"><span class="n"><a href="#t176">176</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t177" class="mis show_mis"><span class="n"><a href="#t177">177</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">mask2</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">mask_bf_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">mask_bf_scale</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t178" class="mis show_mis"><span class="n"><a href="#t178">178</a></span><span class="t"> <span class="nam">aligned_bf</span> <span class="op">=</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">transform</span><span class="op">(</span><span class="nam">bf</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span><span class="op">,</span> <span class="nam">mask</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t179" class="pln"><span class="n"><a href="#t179">179</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t180" class="mis show_mis"><span class="n"><a href="#t180">180</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t181" class="mis show_mis"><span class="n"><a href="#t181">181</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t182" class="mis show_mis"><span class="n"><a href="#t182">182</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">bf</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">,</span><span class="op">)</span><span class="com"># vmax=aligned_tritc.max()/5)</span> </span><span class="r"></span></p> + <p id="t183" class="mis show_mis"><span class="n"><a href="#t183">183</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">colorbar</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t184" class="mis show_mis"><span class="n"><a href="#t184">184</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'Original image'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t185" class="mis show_mis"><span class="n"><a href="#t185">185</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t186" class="pln"><span class="n"><a href="#t186">186</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t187" class="mis show_mis"><span class="n"><a href="#t187">187</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t188" class="mis show_mis"><span class="n"><a href="#t188">188</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">mic</span><span class="op">.</span><span class="nam">segment</span><span class="op">.</span><span class="nam">label2rgb</span><span class="op">(</span><span class="nam">mask</span><span class="op">,</span> <span class="nam">to_8bits</span><span class="op">(</span><span class="nam">aligned_bf</span><span class="op">)</span><span class="op">,</span> <span class="nam">bg_label</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t189" class="mis show_mis"><span class="n"><a href="#t189">189</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'Aligned mask over aligned image'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t190" class="mis show_mis"><span class="n"><a href="#t190">190</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t191" class="pln"><span class="n"><a href="#t191">191</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t192" class="mis show_mis"><span class="n"><a href="#t192">192</a></span><span class="t"> <span class="nam">aligned_fluo</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="key">lambda</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">transform</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span><span class="op">,</span> <span class="nam">mask</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span><span class="op">,</span> <span class="nam">fluo_stack</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t193" class="pln"><span class="n"><a href="#t193">193</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t194" class="mis show_mis"><span class="n"><a href="#t194">194</a></span><span class="t"> <span class="key">return</span> <span class="op">(</span><span class="nam">aligned_bf</span><span class="op">,</span> <span class="nam">aligned_fluo</span><span class="op">,</span> <span class="nam">mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t195" class="pln"><span class="n"><a href="#t195">195</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t196" class="pln"><span class="n"><a href="#t196">196</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t197" class="run"><span class="n"><a href="#t197">197</a></span><span class="t"><span class="key">def</span> <span class="nam">align_mask_to_bf</span><span class="op">(</span><span class="nam">bf_path</span><span class="op">,</span> <span class="nam">template16</span><span class="op">,</span> <span class="nam">mask2</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">binnings</span><span class="op">=</span><span class="op">(</span><span class="num">4</span><span class="op">,</span><span class="num">16</span><span class="op">,</span><span class="num">2</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t198" class="pln"><span class="n"><a href="#t198">198</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t199" class="pln"><span class="n"><a href="#t199">199</a></span><span class="t"><span class="str"> bf_path sould contain tif with bright field.</span> </span><span class="r"></span></p> + <p id="t200" class="pln"><span class="n"><a href="#t200">200</a></span><span class="t"><span class="str"> BF will be binned and used as a template to aligh template8.</span> </span><span class="r"></span></p> + <p id="t201" class="pln"><span class="n"><a href="#t201">201</a></span><span class="t"><span class="str"> When the transformation verctor will be applied to the mask which will be returned </span> </span><span class="r"></span></p> + <p id="t202" class="pln"><span class="n"><a href="#t202">202</a></span><span class="t"><span class="str"> resized to the size of the BF input.</span> </span><span class="r"></span></p> + <p id="t203" class="pln"><span class="n"><a href="#t203">203</a></span><span class="t"><span class="str"> The aligned mask will be saved as "mask.aligned.tif"</span> </span><span class="r"></span></p> + <p id="t204" class="pln"><span class="n"><a href="#t204">204</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t205" class="pln"><span class="n"><a href="#t205">205</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t206" class="mis show_mis"><span class="n"><a href="#t206">206</a></span><span class="t"> <span class="nam">bf</span> <span class="op">=</span> <span class="nam">imread</span><span class="op">(</span><span class="nam">bf_path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t207" class="mis show_mis"><span class="n"><a href="#t207">207</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">bf_path</span><span class="op">,</span> <span class="nam">bf</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t208" class="pln"><span class="n"><a href="#t208">208</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t209" class="mis show_mis"><span class="n"><a href="#t209">209</a></span><span class="t"> <span class="nam">bf_temp_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t210" class="mis show_mis"><span class="n"><a href="#t210">210</a></span><span class="t"> <span class="nam">mask_temp_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t211" class="mis show_mis"><span class="n"><a href="#t211">211</a></span><span class="t"> <span class="nam">mask_bf_scale</span> <span class="op">=</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">//</span> <span class="nam">binnings</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t212" class="pln"><span class="n"><a href="#t212">212</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t213" class="mis show_mis"><span class="n"><a href="#t213">213</a></span><span class="t"> <span class="nam">f_bf</span> <span class="op">=</span> <span class="nam">filter_by_fft</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t214" class="pln"><span class="n"><a href="#t214">214</a></span><span class="t"> <span class="nam">bf</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">bf_temp_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">bf_temp_scale</span><span class="op">]</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t215" class="pln"><span class="n"><a href="#t215">215</a></span><span class="t"> <span class="nam">sigma</span><span class="op">=</span><span class="num">40</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t216" class="pln"><span class="n"><a href="#t216">216</a></span><span class="t"> <span class="nam">fix_horizontal_stripes</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t217" class="pln"><span class="n"><a href="#t217">217</a></span><span class="t"> <span class="nam">fix_vertical_stripes</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t218" class="pln"><span class="n"><a href="#t218">218</a></span><span class="t"> <span class="nam">highpass</span><span class="op">=</span><span class="key">True</span> </span><span class="r"></span></p> + <p id="t219" class="pln"><span class="n"><a href="#t219">219</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t220" class="mis show_mis"><span class="n"><a href="#t220">220</a></span><span class="t"> <span class="nam">tvec8</span> <span class="op">=</span> <span class="nam">get_transform</span><span class="op">(</span><span class="nam">pad</span><span class="op">(</span><span class="nam">template16</span><span class="op">,</span> <span class="nam">f_bf</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span><span class="op">,</span> <span class="nam">f_bf</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="nam">plot</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t221" class="mis show_mis"><span class="n"><a href="#t221">221</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t222" class="mis show_mis"><span class="n"><a href="#t222">222</a></span><span class="t"> <span class="nam">tvec</span> <span class="op">=</span> <span class="nam">scale_tvec</span><span class="op">(</span><span class="nam">tvec8</span><span class="op">,</span> <span class="nam">mask_temp_scale</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t223" class="mis show_mis"><span class="n"><a href="#t223">223</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">tvec</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t224" class="pln"><span class="n"><a href="#t224">224</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t225" class="mis show_mis"><span class="n"><a href="#t225">225</a></span><span class="t"> <span class="nam">padded_mask</span> <span class="op">=</span> <span class="nam">pad</span><span class="op">(</span><span class="nam">mask2</span><span class="op">[</span><span class="op">:</span><span class="op">:</span><span class="nam">mask_bf_scale</span><span class="op">,</span> <span class="op">:</span><span class="op">:</span><span class="nam">mask_bf_scale</span><span class="op">]</span><span class="op">,</span> <span class="nam">bf</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t226" class="mis show_mis"><span class="n"><a href="#t226">226</a></span><span class="t"> <span class="nam">aligned_mask</span> <span class="op">=</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">transform</span><span class="op">(</span><span class="nam">padded_mask</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span><span class="op">,</span> <span class="nam">bf</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t227" class="pln"><span class="n"><a href="#t227">227</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t228" class="mis show_mis"><span class="n"><a href="#t228">228</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t229" class="mis show_mis"><span class="n"><a href="#t229">229</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t230" class="mis show_mis"><span class="n"><a href="#t230">230</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">bf</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">,</span><span class="op">)</span><span class="com"># vmax=aligned_tritc.max()/5)</span> </span><span class="r"></span></p> + <p id="t231" class="mis show_mis"><span class="n"><a href="#t231">231</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">colorbar</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t232" class="mis show_mis"><span class="n"><a href="#t232">232</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'Original image'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t233" class="mis show_mis"><span class="n"><a href="#t233">233</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t234" class="pln"><span class="n"><a href="#t234">234</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t235" class="mis show_mis"><span class="n"><a href="#t235">235</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t236" class="mis show_mis"><span class="n"><a href="#t236">236</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">tvec8</span><span class="op">[</span><span class="str">"timg"</span><span class="op">]</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">,</span><span class="op">)</span><span class="com"># vmax=aligned_tritc.max()/5)</span> </span><span class="r"></span></p> + <p id="t237" class="mis show_mis"><span class="n"><a href="#t237">237</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">colorbar</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t238" class="mis show_mis"><span class="n"><a href="#t238">238</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'Aligned template'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t239" class="mis show_mis"><span class="n"><a href="#t239">239</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t240" class="pln"><span class="n"><a href="#t240">240</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t241" class="mis show_mis"><span class="n"><a href="#t241">241</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t242" class="mis show_mis"><span class="n"><a href="#t242">242</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">mic</span><span class="op">.</span><span class="nam">segment</span><span class="op">.</span><span class="nam">label2rgb</span><span class="op">(</span><span class="nam">aligned_mask</span><span class="op">,</span> <span class="nam">to_8bits</span><span class="op">(</span><span class="nam">bf</span><span class="op">)</span><span class="op">,</span> <span class="nam">bg_label</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t243" class="mis show_mis"><span class="n"><a href="#t243">243</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">title</span><span class="op">(</span><span class="str">'Aligned mask over orginal image'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t244" class="mis show_mis"><span class="n"><a href="#t244">244</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t245" class="pln"><span class="n"><a href="#t245">245</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t246" class="mis show_mis"><span class="n"><a href="#t246">246</a></span><span class="t"> <span class="nam">save_path</span> <span class="op">=</span> <span class="nam">bf_path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'.tif'</span><span class="op">,</span> <span class="str">'.mask.aligned.tif'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t247" class="mis show_mis"><span class="n"><a href="#t247">247</a></span><span class="t"> <span class="nam">imwrite</span><span class="op">(</span><span class="nam">save_path</span><span class="op">,</span> <span class="nam">aligned_mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t248" class="mis show_mis"><span class="n"><a href="#t248">248</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f"Saved {save_path}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t249" class="pln"><span class="n"><a href="#t249">249</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t250" class="mis show_mis"><span class="n"><a href="#t250">250</a></span><span class="t"> <span class="key">return</span> <span class="nam">aligned_mask</span> </span><span class="r"></span></p> + <p id="t251" class="pln"><span class="n"><a href="#t251">251</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t252" class="pln"><span class="n"><a href="#t252">252</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t253" class="run"><span class="n"><a href="#t253">253</a></span><span class="t"><span class="key">def</span> <span class="nam">get_transform</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">template</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">pad_ratio</span><span class="op">=</span><span class="num">1.2</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">10</span><span class="op">,</span><span class="num">5</span><span class="op">)</span><span class="op">,</span> <span class="nam">dpi</span><span class="op">=</span><span class="num">300</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t254" class="pln"><span class="n"><a href="#t254">254</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t255" class="pln"><span class="n"><a href="#t255">255</a></span><span class="t"><span class="str"> Pads image and template, registers and returns tvec</span> </span><span class="r"></span></p> + <p id="t256" class="pln"><span class="n"><a href="#t256">256</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t257" class="mis show_mis"><span class="n"><a href="#t257">257</a></span><span class="t"> <span class="nam">padded_template</span> <span class="op">=</span> <span class="nam">pad</span><span class="op">(</span><span class="nam">template</span><span class="op">,</span> <span class="op">(</span><span class="nam">s</span> <span class="op">:=</span> <span class="nam">increase</span><span class="op">(</span><span class="nam">image</span><span class="op">.</span><span class="nam">shape</span><span class="op">,</span> <span class="nam">pad_ratio</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t258" class="mis show_mis"><span class="n"><a href="#t258">258</a></span><span class="t"> <span class="nam">padded_image</span> <span class="op">=</span> <span class="nam">pad</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t259" class="mis show_mis"><span class="n"><a href="#t259">259</a></span><span class="t"> <span class="nam">tvec</span> <span class="op">=</span> <span class="nam">register</span><span class="op">(</span><span class="nam">padded_image</span><span class="op">,</span> <span class="nam">padded_template</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t260" class="mis show_mis"><span class="n"><a href="#t260">260</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t261" class="mis show_mis"><span class="n"><a href="#t261">261</a></span><span class="t"> <span class="nam">aligned_bf</span> <span class="op">=</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">tvec</span><span class="op">[</span><span class="str">'timg'</span><span class="op">]</span><span class="op">,</span> <span class="nam">template</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t262" class="mis show_mis"><span class="n"><a href="#t262">262</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">figure</span><span class="op">(</span><span class="nam">figsize</span><span class="op">=</span><span class="nam">figsize</span><span class="op">,</span> <span class="nam">dpi</span><span class="op">=</span><span class="nam">dpi</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t263" class="mis show_mis"><span class="n"><a href="#t263">263</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">aligned_bf</span><span class="op">,</span> <span class="nam">cmap</span><span class="op">=</span><span class="str">'gray'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t264" class="mis show_mis"><span class="n"><a href="#t264">264</a></span><span class="t"> <span class="key">return</span> <span class="nam">tvec</span> </span><span class="r"></span></p> + <p id="t265" class="pln"><span class="n"><a href="#t265">265</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t266" class="pln"><span class="n"><a href="#t266">266</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t267" class="run"><span class="n"><a href="#t267">267</a></span><span class="t"><span class="key">def</span> <span class="nam">register</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">template</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t268" class="pln"><span class="n"><a href="#t268">268</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t269" class="pln"><span class="n"><a href="#t269">269</a></span><span class="t"><span class="str"> Register image towards template</span> </span><span class="r"></span></p> + <p id="t270" class="pln"><span class="n"><a href="#t270">270</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t271" class="pln"><span class="n"><a href="#t271">271</a></span><span class="t"><span class="str"> tvec:dict</span> </span><span class="r"></span></p> + <p id="t272" class="pln"><span class="n"><a href="#t272">272</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t273" class="mis show_mis"><span class="n"><a href="#t273">273</a></span><span class="t"> <span class="key">assert</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array_equal</span><span class="op">(</span><span class="nam">image</span><span class="op">.</span><span class="nam">shape</span><span class="op">,</span> <span class="nam">template</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span><span class="op">,</span> <span class="xx">\</span> </span><span class="r"></span></p> + <p id="t274" class="pln"><span class="n"><a href="#t274">274</a></span><span class="t"> <span class="str">f'unequal shapes {(image.shape, template.shape)}'</span> </span><span class="r"></span></p> + <p id="t275" class="mis show_mis"><span class="n"><a href="#t275">275</a></span><span class="t"> <span class="key">return</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">similarity</span><span class="op">(</span><span class="nam">template</span><span class="op">,</span> <span class="nam">image</span><span class="op">,</span> <span class="nam">constraints</span><span class="op">=</span><span class="op">{</span><span class="str">'scale'</span><span class="op">:</span> <span class="op">[</span><span class="num">1</span><span class="op">,</span><span class="num">0.2</span><span class="op">]</span><span class="op">,</span> <span class="str">'tx'</span><span class="op">:</span> <span class="op">[</span><span class="num">0</span><span class="op">,</span> <span class="num">500</span><span class="op">]</span><span class="op">,</span> <span class="str">'ty'</span><span class="op">:</span> <span class="op">[</span><span class="num">0</span><span class="op">,</span> <span class="num">50</span><span class="op">]</span><span class="op">,</span> <span class="str">'angle'</span><span class="op">:</span> <span class="op">[</span><span class="num">0</span><span class="op">,</span> <span class="num">30</span><span class="op">]</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t276" class="pln"><span class="n"><a href="#t276">276</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t277" class="pln"><span class="n"><a href="#t277">277</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t278" class="run"><span class="n"><a href="#t278">278</a></span><span class="t"><span class="key">def</span> <span class="nam">filter_by_fft</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t279" class="pln"><span class="n"><a href="#t279">279</a></span><span class="t"> <span class="nam">image</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t280" class="pln"><span class="n"><a href="#t280">280</a></span><span class="t"> <span class="nam">sigma</span><span class="op">=</span><span class="num">40</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t281" class="pln"><span class="n"><a href="#t281">281</a></span><span class="t"> <span class="nam">fix_horizontal_stripes</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t282" class="pln"><span class="n"><a href="#t282">282</a></span><span class="t"> <span class="nam">fix_vertical_stripes</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t283" class="pln"><span class="n"><a href="#t283">283</a></span><span class="t"> <span class="nam">highpass</span><span class="op">=</span><span class="key">True</span> </span><span class="r"></span></p> + <p id="t284" class="pln"><span class="n"><a href="#t284">284</a></span><span class="t"> <span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t285" class="pln"><span class="n"><a href="#t285">285</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t286" class="mis show_mis"><span class="n"><a href="#t286">286</a></span><span class="t"> <span class="nam">size</span> <span class="op">=</span> <span class="nam">get_fft_size</span><span class="op">(</span><span class="nam">image</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t287" class="mis show_mis"><span class="n"><a href="#t287">287</a></span><span class="t"> <span class="nam">fft</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">fft</span><span class="op">.</span><span class="nam">fft2</span><span class="op">(</span><span class="nam">pad</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">size</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t288" class="mis show_mis"><span class="n"><a href="#t288">288</a></span><span class="t"> <span class="nam">bg</span> <span class="op">=</span> <span class="nam">fft</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span><span class="op">[</span><span class="num">0</span><span class="op">,</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t289" class="mis show_mis"><span class="n"><a href="#t289">289</a></span><span class="t"> <span class="key">if</span> <span class="nam">fix_vertical_stripes</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t290" class="mis show_mis"><span class="n"><a href="#t290">290</a></span><span class="t"> <span class="nam">fft</span><span class="op">[</span><span class="num">0</span><span class="op">,</span> <span class="num">1</span><span class="op">:</span><span class="op">]</span> <span class="op">=</span> <span class="num">0</span> <span class="com">#vertical</span> </span><span class="r"></span></p> + <p id="t291" class="mis show_mis"><span class="n"><a href="#t291">291</a></span><span class="t"> <span class="key">if</span> <span class="nam">fix_horizontal_stripes</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t292" class="mis show_mis"><span class="n"><a href="#t292">292</a></span><span class="t"> <span class="nam">fft</span><span class="op">[</span><span class="num">1</span><span class="op">:</span><span class="op">,</span> <span class="num">0</span><span class="op">]</span> <span class="op">=</span> <span class="num">0</span> <span class="com">#horizontal</span> </span><span class="r"></span></p> + <p id="t293" class="pln"><span class="n"><a href="#t293">293</a></span><span class="t"> <span class="com"># fft = fft * np.fft.fftshift(fft_mask(size, sigma = size[0]/sigma, highpass=highpass))</span> </span><span class="r"></span></p> + <p id="t294" class="mis show_mis"><span class="n"><a href="#t294">294</a></span><span class="t"> <span class="nam">fft</span> <span class="op">=</span> <span class="nam">fft</span> <span class="op">*</span> <span class="op">(</span><span class="nam">fft_mask</span><span class="op">(</span><span class="nam">size</span><span class="op">,</span> <span class="nam">sigma</span> <span class="op">=</span> <span class="nam">size</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">/</span><span class="nam">sigma</span><span class="op">,</span> <span class="nam">highpass</span><span class="op">=</span><span class="nam">highpass</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t295" class="mis show_mis"><span class="n"><a href="#t295">295</a></span><span class="t"> <span class="nam">filtered_image</span> <span class="op">=</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">abs</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">fft</span><span class="op">.</span><span class="nam">ifft2</span><span class="op">(</span><span class="nam">fft</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">image</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t296" class="mis show_mis"><span class="n"><a href="#t296">296</a></span><span class="t"> <span class="key">return</span> <span class="nam">filtered_image</span> </span><span class="r"></span></p> + <p id="t297" class="pln"><span class="n"><a href="#t297">297</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t298" class="run"><span class="n"><a href="#t298">298</a></span><span class="t"><span class="key">def</span> <span class="nam">fft_mask</span><span class="op">(</span><span class="nam">shape</span><span class="op">,</span> <span class="nam">sigma</span><span class="op">=</span><span class="num">10</span><span class="op">,</span> <span class="nam">highpass</span><span class="op">=</span><span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t299" class="mis show_mis"><span class="n"><a href="#t299">299</a></span><span class="t"> <span class="nam">y</span><span class="op">,</span><span class="nam">x</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">indices</span><span class="op">(</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t300" class="pln"><span class="n"><a href="#t300">300</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t301" class="mis show_mis"><span class="n"><a href="#t301">301</a></span><span class="t"> <span class="nam">gaus</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">exp</span><span class="op">(</span> <span class="op">-</span> <span class="op">(</span><span class="nam">x</span> <span class="op">-</span> <span class="nam">shape</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">//</span> <span class="num">2</span><span class="op">)</span> <span class="op">**</span> <span class="num">2</span> <span class="op">/</span> <span class="nam">sigma</span> <span class="op">**</span> <span class="num">2</span> <span class="op">/</span> <span class="num">2</span><span class="op">)</span> <span class="op">*</span> <span class="nam">np</span><span class="op">.</span><span class="nam">exp</span><span class="op">(</span> <span class="op">-</span> <span class="op">(</span><span class="nam">y</span> <span class="op">-</span> <span class="nam">shape</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">//</span> <span class="num">2</span><span class="op">)</span> <span class="op">**</span> <span class="num">2</span> <span class="op">/</span> <span class="nam">sigma</span> <span class="op">**</span> <span class="num">2</span> <span class="op">/</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t302" class="mis show_mis"><span class="n"><a href="#t302">302</a></span><span class="t"> <span class="nam">gaus</span> <span class="op">=</span> <span class="nam">gaus</span> <span class="op">/</span> <span class="nam">gaus</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t303" class="mis show_mis"><span class="n"><a href="#t303">303</a></span><span class="t"> <span class="key">if</span> <span class="nam">highpass</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t304" class="mis show_mis"><span class="n"><a href="#t304">304</a></span><span class="t"> <span class="key">return</span> <span class="num">1</span> <span class="op">-</span> <span class="nam">gaus</span> </span><span class="r"></span></p> + <p id="t305" class="mis show_mis"><span class="n"><a href="#t305">305</a></span><span class="t"> <span class="key">return</span> <span class="nam">gaus</span> </span><span class="r"></span></p> + <p id="t306" class="pln"><span class="n"><a href="#t306">306</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t307" class="pln"><span class="n"><a href="#t307">307</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t308" class="run"><span class="n"><a href="#t308">308</a></span><span class="t"><span class="key">def</span> <span class="nam">pad</span><span class="op">(</span><span class="nam">image</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">to_shape</span><span class="op">:</span><span class="nam">tuple</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">padding</span><span class="op">:</span><span class="nam">tuple</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t309" class="mis show_mis"><span class="n"><a href="#t309">309</a></span><span class="t"> <span class="key">if</span> <span class="nam">padding</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t310" class="mis show_mis"><span class="n"><a href="#t310">310</a></span><span class="t"> <span class="nam">padding</span> <span class="op">=</span> <span class="nam">calculate_padding</span><span class="op">(</span><span class="nam">image</span><span class="op">.</span><span class="nam">shape</span><span class="op">,</span> <span class="nam">to_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t311" class="mis show_mis"><span class="n"><a href="#t311">311</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t312" class="mis show_mis"><span class="n"><a href="#t312">312</a></span><span class="t"> <span class="nam">padded</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">pad</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">padding</span><span class="op">,</span> <span class="str">'edge'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t313" class="mis show_mis"><span class="n"><a href="#t313">313</a></span><span class="t"> <span class="key">except</span> <span class="nam">TypeError</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t314" class="mis show_mis"><span class="n"><a href="#t314">314</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">e</span><span class="op">.</span><span class="nam">args</span><span class="op">,</span> <span class="nam">padding</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t315" class="mis show_mis"><span class="n"><a href="#t315">315</a></span><span class="t"> <span class="key">raise</span> <span class="nam">e</span> </span><span class="r"></span></p> + <p id="t316" class="mis show_mis"><span class="n"><a href="#t316">316</a></span><span class="t"> <span class="key">return</span> <span class="nam">padded</span> </span><span class="r"></span></p> + <p id="t317" class="pln"><span class="n"><a href="#t317">317</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t318" class="pln"><span class="n"><a href="#t318">318</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t319" class="run"><span class="n"><a href="#t319">319</a></span><span class="t"><span class="key">def</span> <span class="nam">unpad</span><span class="op">(</span><span class="nam">image</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">to_shape</span><span class="op">:</span><span class="nam">tuple</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">padding</span><span class="op">:</span><span class="nam">tuple</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t320" class="mis show_mis"><span class="n"><a href="#t320">320</a></span><span class="t"> <span class="key">if</span> <span class="nam">any</span><span class="op">(</span><span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="nam">image</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> <span class="op">-</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="nam">to_shape</span><span class="op">)</span> <span class="op"><</span> <span class="num">0</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t321" class="mis show_mis"><span class="n"><a href="#t321">321</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'unpad:warning: image.shape {image.shape} is within to_shape {to_shape}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t322" class="mis show_mis"><span class="n"><a href="#t322">322</a></span><span class="t"> <span class="nam">image</span> <span class="op">=</span> <span class="nam">pad</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="op">(</span><span class="nam">image</span><span class="op">.</span><span class="nam">shape</span><span class="op">,</span> <span class="nam">to_shape</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">axis</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t323" class="mis show_mis"><span class="n"><a href="#t323">323</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'new image shape after padding {image.shape}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t324" class="mis show_mis"><span class="n"><a href="#t324">324</a></span><span class="t"> <span class="key">if</span> <span class="nam">padding</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t325" class="mis show_mis"><span class="n"><a href="#t325">325</a></span><span class="t"> <span class="nam">padding</span> <span class="op">=</span> <span class="nam">calculate_padding</span><span class="op">(</span><span class="nam">to_shape</span><span class="op">,</span> <span class="nam">image</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t326" class="pln"><span class="n"><a href="#t326">326</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t327" class="mis show_mis"><span class="n"><a href="#t327">327</a></span><span class="t"> <span class="nam">y</span> <span class="op">=</span> <span class="op">[</span><span class="nam">padding</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="op">-</span><span class="nam">padding</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t328" class="mis show_mis"><span class="n"><a href="#t328">328</a></span><span class="t"> <span class="key">if</span> <span class="nam">y</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">==</span> <span class="num">0</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t329" class="mis show_mis"><span class="n"><a href="#t329">329</a></span><span class="t"> <span class="nam">y</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t330" class="mis show_mis"><span class="n"><a href="#t330">330</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="op">[</span><span class="nam">padding</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="op">-</span><span class="nam">padding</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t331" class="mis show_mis"><span class="n"><a href="#t331">331</a></span><span class="t"> <span class="key">if</span> <span class="nam">x</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">==</span> <span class="num">0</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t332" class="mis show_mis"><span class="n"><a href="#t332">332</a></span><span class="t"> <span class="nam">x</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t333" class="mis show_mis"><span class="n"><a href="#t333">333</a></span><span class="t"> <span class="key">return</span> <span class="nam">image</span><span class="op">[</span><span class="nam">y</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">:</span><span class="nam">y</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">x</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">:</span><span class="nam">x</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t334" class="pln"><span class="n"><a href="#t334">334</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t335" class="pln"><span class="n"><a href="#t335">335</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t336" class="run"><span class="n"><a href="#t336">336</a></span><span class="t"><span class="key">def</span> <span class="nam">get_fft_size</span><span class="op">(</span><span class="nam">shape</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t337" class="mis show_mis"><span class="n"><a href="#t337">337</a></span><span class="t"> <span class="nam">max_size</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t338" class="mis show_mis"><span class="n"><a href="#t338">338</a></span><span class="t"> <span class="nam">n</span> <span class="op">=</span> <span class="num">5</span> </span><span class="r"></span></p> + <p id="t339" class="mis show_mis"><span class="n"><a href="#t339">339</a></span><span class="t"> <span class="key">while</span> <span class="op">(</span><span class="num">2</span> <span class="op">**</span> <span class="nam">n</span><span class="op">)</span> <span class="op"><</span> <span class="op">(</span><span class="nam">max_size</span> <span class="op">*</span> <span class="num">1.5</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t340" class="mis show_mis"><span class="n"><a href="#t340">340</a></span><span class="t"> <span class="nam">n</span> <span class="op">+=</span> <span class="num">1</span> </span><span class="r"></span></p> + <p id="t341" class="mis show_mis"><span class="n"><a href="#t341">341</a></span><span class="t"> <span class="key">return</span> <span class="op">(</span><span class="num">2</span> <span class="op">**</span> <span class="nam">n</span><span class="op">,</span> <span class="num">2</span> <span class="op">**</span> <span class="nam">n</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t342" class="pln"><span class="n"><a href="#t342">342</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t343" class="pln"><span class="n"><a href="#t343">343</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t344" class="run"><span class="n"><a href="#t344">344</a></span><span class="t"><span class="key">def</span> <span class="nam">calculate_padding</span><span class="op">(</span><span class="nam">shape1</span><span class="op">:</span><span class="nam">tuple</span><span class="op">,</span> <span class="nam">shape2</span><span class="op">:</span><span class="nam">tuple</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t345" class="pln"><span class="n"><a href="#t345">345</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t346" class="pln"><span class="n"><a href="#t346">346</a></span><span class="t"><span class="str"> Calculates padding to get shape2 from shape1</span> </span><span class="r"></span></p> + <p id="t347" class="pln"><span class="n"><a href="#t347">347</a></span><span class="t"><span class="str"> Return:</span> </span><span class="r"></span></p> + <p id="t348" class="pln"><span class="n"><a href="#t348">348</a></span><span class="t"><span class="str"> 2D tuple of indices</span> </span><span class="r"></span></p> + <p id="t349" class="pln"><span class="n"><a href="#t349">349</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t350" class="mis show_mis"><span class="n"><a href="#t350">350</a></span><span class="t"> <span class="nam">dif</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="nam">shape2</span><span class="op">)</span> <span class="op">-</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="nam">shape1</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t351" class="mis show_mis"><span class="n"><a href="#t351">351</a></span><span class="t"> <span class="key">assert</span> <span class="nam">all</span><span class="op">(</span><span class="nam">dif</span> <span class="op">>=</span> <span class="num">0</span><span class="op">)</span><span class="op">,</span> <span class="str">f'Shape2 must be bigger than shape1, got {shape2}, {shape1}'</span> </span><span class="r"></span></p> + <p id="t352" class="mis show_mis"><span class="n"><a href="#t352">352</a></span><span class="t"> <span class="nam">mid</span> <span class="op">=</span> <span class="nam">dif</span> <span class="op">//</span> <span class="num">2</span> </span><span class="r"></span></p> + <p id="t353" class="mis show_mis"><span class="n"><a href="#t353">353</a></span><span class="t"> <span class="nam">rest</span> <span class="op">=</span> <span class="nam">dif</span> <span class="op">-</span> <span class="nam">mid</span> </span><span class="r"></span></p> + <p id="t354" class="mis show_mis"><span class="n"><a href="#t354">354</a></span><span class="t"> <span class="nam">y</span> <span class="op">=</span> <span class="nam">mid</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">rest</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t355" class="mis show_mis"><span class="n"><a href="#t355">355</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="nam">mid</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">rest</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t356" class="mis show_mis"><span class="n"><a href="#t356">356</a></span><span class="t"> <span class="key">return</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">x</span> </span><span class="r"></span></p> + <p id="t357" class="pln"><span class="n"><a href="#t357">357</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t358" class="pln"><span class="n"><a href="#t358">358</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t359" class="run"><span class="n"><a href="#t359">359</a></span><span class="t"><span class="key">def</span> <span class="nam">scale_tvec</span><span class="op">(</span><span class="nam">tvec</span><span class="op">,</span> <span class="nam">scale</span><span class="op">=</span><span class="num">8</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t360" class="mis show_mis"><span class="n"><a href="#t360">360</a></span><span class="t"> <span class="nam">tvec_8x</span> <span class="op">=</span> <span class="nam">tvec</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t361" class="mis show_mis"><span class="n"><a href="#t361">361</a></span><span class="t"> <span class="nam">tvec_8x</span><span class="op">[</span><span class="str">'tvec'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">tvec</span><span class="op">[</span><span class="str">'tvec'</span><span class="op">]</span> <span class="op">*</span> <span class="nam">scale</span> </span><span class="r"></span></p> + <p id="t362" class="mis show_mis"><span class="n"><a href="#t362">362</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t363" class="mis show_mis"><span class="n"><a href="#t363">363</a></span><span class="t"> <span class="nam">tvec_8x</span><span class="op">[</span><span class="str">'timg'</span><span class="op">]</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t364" class="mis show_mis"><span class="n"><a href="#t364">364</a></span><span class="t"> <span class="key">except</span> <span class="nam">KeyError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t365" class="mis show_mis"><span class="n"><a href="#t365">365</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p id="t366" class="pln"><span class="n"><a href="#t366">366</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t367" class="mis show_mis"><span class="n"><a href="#t367">367</a></span><span class="t"> <span class="key">return</span> <span class="nam">tvec_8x</span> </span><span class="r"></span></p> + <p id="t368" class="pln"><span class="n"><a href="#t368">368</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t369" class="pln"><span class="n"><a href="#t369">369</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t370" class="run"><span class="n"><a href="#t370">370</a></span><span class="t"><span class="key">def</span> <span class="nam">transform</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t371" class="mis show_mis"><span class="n"><a href="#t371">371</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'transform {image.shape}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t372" class="mis show_mis"><span class="n"><a href="#t372">372</a></span><span class="t"> <span class="nam">fluo</span> <span class="op">=</span> <span class="nam">reg</span><span class="op">.</span><span class="nam">transform_img_dict</span><span class="op">(</span><span class="nam">image</span><span class="op">,</span> <span class="nam">tvec</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t373" class="mis show_mis"><span class="n"><a href="#t373">373</a></span><span class="t"> <span class="key">return</span> <span class="nam">fluo</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'uint'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t374" class="pln"><span class="n"><a href="#t374">374</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t375" class="pln"><span class="n"><a href="#t375">375</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t376" class="run"><span class="n"><a href="#t376">376</a></span><span class="t"><span class="key">def</span> <span class="nam">increase</span><span class="op">(</span><span class="nam">shape</span><span class="op">,</span> <span class="nam">increase_ratio</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t377" class="mis show_mis"><span class="n"><a href="#t377">377</a></span><span class="t"> <span class="key">assert</span> <span class="nam">increase_ratio</span> <span class="op">></span> <span class="num">1</span> </span><span class="r"></span></p> + <p id="t378" class="mis show_mis"><span class="n"><a href="#t378">378</a></span><span class="t"> <span class="nam">shape</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t379" class="mis show_mis"><span class="n"><a href="#t379">379</a></span><span class="t"> <span class="key">return</span> <span class="nam">tuple</span><span class="op">(</span><span class="op">(</span><span class="nam">shape</span> <span class="op">*</span> <span class="nam">increase_ratio</span><span class="op">)</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="nam">int</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/droplet_growth_segment_py.html b/cov_html/droplet_growth_segment_py.html new file mode 100644 index 0000000000000000000000000000000000000000..42ef8d56053ecf81b8df9bf819e7214efc5d894c --- /dev/null +++ b/cov_html/droplet_growth_segment_py.html @@ -0,0 +1,120 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for droplet_growth/segment.py: 30%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>droplet_growth/segment.py</b> : + <span class="pc_cov">30%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 37 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">11 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">26 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">scipy</span> <span class="key">import</span> <span class="nam">ndimage</span> <span class="key">as</span> <span class="nam">ndi</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">filters</span> <span class="key">import</span> <span class="nam">threshold_otsu</span><span class="op">,</span> <span class="nam">rank</span> </span><span class="r"></span></p> + <p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">measure</span> <span class="key">import</span> <span class="nam">label</span><span class="op">,</span> <span class="nam">regionprops</span> </span><span class="r"></span></p> + <p id="t6" class="run"><span class="n"><a href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">morphology</span> <span class="key">import</span> <span class="nam">disk</span><span class="op">,</span> <span class="nam">remove_small_objects</span> </span><span class="r"></span></p> + <p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">util</span> <span class="key">import</span> <span class="nam">img_as_ubyte</span> </span><span class="r"></span></p> + <p id="t8" class="run"><span class="n"><a href="#t8">8</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">color</span> <span class="key">import</span> <span class="nam">label2rgb</span> </span><span class="r"></span></p> + <p id="t9" class="pln"><span class="n"><a href="#t9">9</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t10" class="pln"><span class="n"><a href="#t10">10</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t11" class="run"><span class="n"><a href="#t11">11</a></span><span class="t"><span class="key">def</span> <span class="nam">get_local_otsu</span><span class="op">(</span><span class="nam">image</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">radius</span> <span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">300</span><span class="op">)</span> <span class="op">-></span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t12" class="mis show_mis"><span class="n"><a href="#t12">12</a></span><span class="t"> <span class="nam">img</span> <span class="op">=</span> <span class="nam">img_as_ubyte</span><span class="op">(</span><span class="nam">image</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t13" class="mis show_mis"><span class="n"><a href="#t13">13</a></span><span class="t"> <span class="nam">selem</span> <span class="op">=</span> <span class="nam">disk</span><span class="op">(</span><span class="nam">radius</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t14" class="mis show_mis"><span class="n"><a href="#t14">14</a></span><span class="t"> <span class="nam">local_otsu</span> <span class="op">=</span> <span class="nam">rank</span><span class="op">.</span><span class="nam">otsu</span><span class="op">(</span><span class="nam">img</span><span class="op">,</span> <span class="nam">selem</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t15" class="mis show_mis"><span class="n"><a href="#t15">15</a></span><span class="t"> <span class="key">return</span> <span class="nam">local_otsu</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t17" class="pln"><span class="n"><a href="#t17">17</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t18" class="run"><span class="n"><a href="#t18">18</a></span><span class="t"><span class="key">def</span> <span class="nam">get_mask</span><span class="op">(</span><span class="nam">image</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">threshold</span><span class="op">:</span><span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"> <span class="nam">erosion</span><span class="op">=</span><span class="num">3</span><span class="op">,</span> <span class="nam">min_size</span><span class="op">=</span><span class="num">5000</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">20</span><span class="op">,</span><span class="num">10</span><span class="op">)</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t20" class="pln"><span class="n"><a href="#t20">20</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t21" class="mis show_mis"><span class="n"><a href="#t21">21</a></span><span class="t"> <span class="nam">img</span> <span class="op">=</span> <span class="nam">img_as_ubyte</span><span class="op">(</span><span class="nam">image</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t22" class="pln"><span class="n"><a href="#t22">22</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t23" class="mis show_mis"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">image</span> <span class="op"><=</span> <span class="nam">threshold</span> </span><span class="r"></span></p> + <p id="t24" class="mis show_mis"><span class="n"><a href="#t24">24</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">ndi</span><span class="op">.</span><span class="nam">binary_fill_holes</span><span class="op">(</span><span class="nam">mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t25" class="mis show_mis"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">ndi</span><span class="op">.</span><span class="nam">binary_erosion</span><span class="op">(</span><span class="nam">mask</span><span class="op">,</span> <span class="nam">iterations</span><span class="op">=</span><span class="nam">erosion</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t27" class="mis show_mis"><span class="n"><a href="#t27">27</a></span><span class="t"> <span class="nam">mask</span> <span class="op">=</span> <span class="nam">remove_small_objects</span><span class="op">(</span><span class="nam">mask</span><span class="op">,</span> <span class="nam">min_size</span><span class="op">=</span><span class="nam">min_size</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t28" class="pln"><span class="n"><a href="#t28">28</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t29" class="mis show_mis"><span class="n"><a href="#t29">29</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t30" class="pln"><span class="n"><a href="#t30">30</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t31" class="mis show_mis"><span class="n"><a href="#t31">31</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="nam">figsize</span><span class="op">=</span><span class="nam">figsize</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t32" class="mis show_mis"><span class="n"><a href="#t32">32</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">label2rgb</span><span class="op">(</span><span class="nam">mask</span><span class="op">,</span> <span class="nam">image</span><span class="op">,</span> <span class="nam">bg_label</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">,</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t33" class="mis show_mis"><span class="n"><a href="#t33">33</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">colorbar</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t34" class="mis show_mis"><span class="n"><a href="#t34">34</a></span><span class="t"> <span class="key">return</span> <span class="nam">mask</span> </span><span class="r"></span></p> + <p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t36" class="pln"><span class="n"><a href="#t36">36</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t37" class="run"><span class="n"><a href="#t37">37</a></span><span class="t"><span class="key">def</span> <span class="nam">filter_mask</span><span class="op">(</span><span class="nam">mask</span><span class="op">,</span> <span class="nam">size_lim</span><span class="op">=</span><span class="op">(</span><span class="num">80</span><span class="op">,</span><span class="num">180</span><span class="op">)</span><span class="op">,</span> <span class="nam">ecc_min</span><span class="op">=</span><span class="num">.7</span><span class="op">,</span> <span class="nam">plot</span><span class="op">=</span><span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t38" class="mis show_mis"><span class="n"><a href="#t38">38</a></span><span class="t"> <span class="nam">labels</span> <span class="op">=</span> <span class="nam">label</span><span class="op">(</span><span class="nam">mask</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t39" class="pln"><span class="n"><a href="#t39">39</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t40" class="mis show_mis"><span class="n"><a href="#t40">40</a></span><span class="t"> <span class="nam">regions</span> <span class="op">=</span> <span class="nam">regionprops</span><span class="op">(</span><span class="nam">labels</span><span class="op">,</span> <span class="nam">intensity_image</span><span class="op">=</span><span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t41" class="pln"><span class="n"><a href="#t41">41</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t42" class="mis show_mis"><span class="n"><a href="#t42">42</a></span><span class="t"> <span class="nam">bad_regions</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">filter</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t43" class="pln"><span class="n"><a href="#t43">43</a></span><span class="t"> <span class="key">lambda</span> <span class="nam">r</span><span class="op">:</span> <span class="nam">r</span><span class="op">.</span><span class="nam">major_axis_length</span> <span class="op"><</span> <span class="nam">size_lim</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="xx">\</span> </span><span class="r"></span></p> + <p id="t44" class="pln"><span class="n"><a href="#t44">44</a></span><span class="t"> <span class="key">or</span> <span class="nam">r</span><span class="op">.</span><span class="nam">major_axis_length</span> <span class="op">></span> <span class="nam">size_lim</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="xx">\</span> </span><span class="r"></span></p> + <p id="t45" class="pln"><span class="n"><a href="#t45">45</a></span><span class="t"> <span class="key">or</span> <span class="nam">r</span><span class="op">.</span><span class="nam">eccentricity</span> <span class="op">></span> <span class="nam">ecc_min</span><span class="op">,</span> <span class="nam">regions</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t46" class="pln"><span class="n"><a href="#t46">46</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t47" class="mis show_mis"><span class="n"><a href="#t47">47</a></span><span class="t"> <span class="nam">good_mask</span> <span class="op">=</span> <span class="nam">mask</span><span class="op">.</span><span class="nam">copy</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t48" class="pln"><span class="n"><a href="#t48">48</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t49" class="mis show_mis"><span class="n"><a href="#t49">49</a></span><span class="t"> <span class="key">if</span> <span class="nam">len</span><span class="op">(</span><span class="nam">bad_regions</span><span class="op">)</span> <span class="op">></span> <span class="num">0</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t50" class="mis show_mis"><span class="n"><a href="#t50">50</a></span><span class="t"> <span class="key">for</span> <span class="nam">br</span> <span class="key">in</span> <span class="nam">bad_regions</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t51" class="mis show_mis"><span class="n"><a href="#t51">51</a></span><span class="t"> <span class="nam">good_mask</span><span class="op">[</span><span class="nam">labels</span> <span class="op">==</span> <span class="nam">br</span><span class="op">.</span><span class="nam">label</span><span class="op">]</span> <span class="op">=</span> <span class="num">0</span> </span><span class="r"></span></p> + <p id="t52" class="mis show_mis"><span class="n"><a href="#t52">52</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'selecting {label(good_mask).max()}/{labels.max()} regions'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t53" class="mis show_mis"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="key">if</span> <span class="nam">plot</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t54" class="mis show_mis"><span class="n"><a href="#t54">54</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">imshow</span><span class="op">(</span><span class="nam">label</span><span class="op">(</span><span class="nam">good_mask</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t55" class="mis show_mis"><span class="n"><a href="#t55">55</a></span><span class="t"> <span class="nam">plt</span><span class="op">.</span><span class="nam">show</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t56" class="mis show_mis"><span class="n"><a href="#t56">56</a></span><span class="t"> <span class="key">return</span> <span class="nam">good_mask</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/index.html b/cov_html/index.html new file mode 100644 index 0000000000000000000000000000000000000000..c610ee7538fa3e516c27945ddefb25d5eae6a714 --- /dev/null +++ b/cov_html/index.html @@ -0,0 +1,175 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Coverage report</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.ba-throttle-debounce.min.js"></script> + <script type="text/javascript" src="jquery.tablesorter.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.index_ready); + </script> +</head> +<body class="indexfile"> +<div id="header"> + <div class="content"> + <h1>Coverage report: + <span class="pc_cov">18%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <form id="filter_container"> + <input id="filter" type="text" value="" placeholder="filter..." /> + </form> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">n</span> + <span class="key">s</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">c</span> change column sorting + </p> + </div> +</div> +<div id="index"> + <table class="index"> + <thead> + <tr class="tablehead" title="Click to sort"> + <th class="name left headerSortDown shortkey_n">Module</th> + <th class="shortkey_s">statements</th> + <th class="shortkey_m">missing</th> + <th class="shortkey_x">excluded</th> + <th class="right shortkey_c">coverage</th> + </tr> + </thead> + <tfoot> + <tr class="total"> + <td class="name left">Total</td> + <td>1236</td> + <td>1012</td> + <td>0</td> + <td class="right" data-ratio="224 1236">18%</td> + </tr> + </tfoot> + <tbody> + <tr class="file"> + <td class="name left"><a href="droplet_growth___init___py.html">droplet_growth/__init__.py</a></td> + <td>1</td> + <td>0</td> + <td>0</td> + <td class="right" data-ratio="1 1">100%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="droplet_growth_count_py.html">droplet_growth/count.py</a></td> + <td>88</td> + <td>75</td> + <td>0</td> + <td class="right" data-ratio="13 88">15%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="droplet_growth_fit_py.html">droplet_growth/fit.py</a></td> + <td>166</td> + <td>140</td> + <td>0</td> + <td class="right" data-ratio="26 166">16%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="droplet_growth_mic_py.html">droplet_growth/mic.py</a></td> + <td>187</td> + <td>165</td> + <td>0</td> + <td class="right" data-ratio="22 187">12%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="droplet_growth_multiwell_py.html">droplet_growth/multiwell.py</a></td> + <td>253</td> + <td>225</td> + <td>0</td> + <td class="right" data-ratio="28 253">11%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="droplet_growth_poisson_py.html">droplet_growth/poisson.py</a></td> + <td>26</td> + <td>21</td> + <td>0</td> + <td class="right" data-ratio="5 26">19%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="droplet_growth_projections_py.html">droplet_growth/projections.py</a></td> + <td>47</td> + <td>47</td> + <td>0</td> + <td class="right" data-ratio="0 47">0%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="droplet_growth_register_py.html">droplet_growth/register.py</a></td> + <td>222</td> + <td>194</td> + <td>0</td> + <td class="right" data-ratio="28 222">13%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="droplet_growth_segment_py.html">droplet_growth/segment.py</a></td> + <td>37</td> + <td>26</td> + <td>0</td> + <td class="right" data-ratio="11 37">30%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="nd2tif___init___py.html">nd2tif/__init__.py</a></td> + <td>0</td> + <td>0</td> + <td>0</td> + <td class="right" data-ratio="0 0">100%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="nd2tif___main___py.html">nd2tif/__main__.py</a></td> + <td>53</td> + <td>53</td> + <td>0</td> + <td class="right" data-ratio="0 53">0%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="nd2tif_read_py.html">nd2tif/read.py</a></td> + <td>32</td> + <td>10</td> + <td>0</td> + <td class="right" data-ratio="22 32">69%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="nd2tif_save_py.html">nd2tif/save.py</a></td> + <td>11</td> + <td>0</td> + <td>0</td> + <td class="right" data-ratio="11 11">100%</td> + </tr> + <tr class="file"> + <td class="name left"><a href="nd2tif_transform_py.html">nd2tif/transform.py</a></td> + <td>113</td> + <td>56</td> + <td>0</td> + <td class="right" data-ratio="57 113">50%</td> + </tr> + </tbody> + </table> + <p id="no_rows"> + No items found using the specified filter. + </p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/jquery.ba-throttle-debounce.min.js b/cov_html/jquery.ba-throttle-debounce.min.js new file mode 100644 index 0000000000000000000000000000000000000000..648fe5d3c22ceadb769337e20fe699abec8e078d --- /dev/null +++ b/cov_html/jquery.ba-throttle-debounce.min.js @@ -0,0 +1,9 @@ +/* + * jQuery throttle / debounce - v1.1 - 3/7/2010 + * http://benalman.com/projects/jquery-throttle-debounce-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this); diff --git a/cov_html/jquery.hotkeys.js b/cov_html/jquery.hotkeys.js new file mode 100644 index 0000000000000000000000000000000000000000..09b21e03c7f058af138ef3ae7767ee24477ef6d1 --- /dev/null +++ b/cov_html/jquery.hotkeys.js @@ -0,0 +1,99 @@ +/* + * jQuery Hotkeys Plugin + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Based upon the plugin by Tzury Bar Yochay: + * http://github.com/tzuryby/hotkeys + * + * Original idea by: + * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ +*/ + +(function(jQuery){ + + jQuery.hotkeys = { + version: "0.8", + + specialKeys: { + 8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause", + 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home", + 37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del", + 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7", + 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/", + 112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8", + 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta" + }, + + shiftNums: { + "`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&", + "8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<", + ".": ">", "/": "?", "\\": "|" + } + }; + + function keyHandler( handleObj ) { + // Only care when a possible input has been specified + if ( typeof handleObj.data !== "string" ) { + return; + } + + var origHandler = handleObj.handler, + keys = handleObj.data.toLowerCase().split(" "); + + handleObj.handler = function( event ) { + // Don't fire in text-accepting inputs that we didn't directly bind to + if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) || + event.target.type === "text") ) { + return; + } + + // Keypress represents characters, not special keys + var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ], + character = String.fromCharCode( event.which ).toLowerCase(), + key, modif = "", possible = {}; + + // check combinations (alt|ctrl|shift+anything) + if ( event.altKey && special !== "alt" ) { + modif += "alt+"; + } + + if ( event.ctrlKey && special !== "ctrl" ) { + modif += "ctrl+"; + } + + // TODO: Need to make sure this works consistently across platforms + if ( event.metaKey && !event.ctrlKey && special !== "meta" ) { + modif += "meta+"; + } + + if ( event.shiftKey && special !== "shift" ) { + modif += "shift+"; + } + + if ( special ) { + possible[ modif + special ] = true; + + } else { + possible[ modif + character ] = true; + possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true; + + // "$" can be triggered as "Shift+4" or "Shift+$" or just "$" + if ( modif === "shift+" ) { + possible[ jQuery.hotkeys.shiftNums[ character ] ] = true; + } + } + + for ( var i = 0, l = keys.length; i < l; i++ ) { + if ( possible[ keys[i] ] ) { + return origHandler.apply( this, arguments ); + } + } + }; + } + + jQuery.each([ "keydown", "keyup", "keypress" ], function() { + jQuery.event.special[ this ] = { add: keyHandler }; + }); + +})( jQuery ); diff --git a/cov_html/jquery.isonscreen.js b/cov_html/jquery.isonscreen.js new file mode 100644 index 0000000000000000000000000000000000000000..0182ebd21372e5f84fa0aeb6d7c10f9f724002da --- /dev/null +++ b/cov_html/jquery.isonscreen.js @@ -0,0 +1,53 @@ +/* Copyright (c) 2010 + * @author Laurence Wheway + * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) + * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + * + * @version 1.2.0 + */ +(function($) { + jQuery.extend({ + isOnScreen: function(box, container) { + //ensure numbers come in as intgers (not strings) and remove 'px' is it's there + for(var i in box){box[i] = parseFloat(box[i])}; + for(var i in container){container[i] = parseFloat(container[i])}; + + if(!container){ + container = { + left: $(window).scrollLeft(), + top: $(window).scrollTop(), + width: $(window).width(), + height: $(window).height() + } + } + + if( box.left+box.width-container.left > 0 && + box.left < container.width+container.left && + box.top+box.height-container.top > 0 && + box.top < container.height+container.top + ) return true; + return false; + } + }) + + + jQuery.fn.isOnScreen = function (container) { + for(var i in container){container[i] = parseFloat(container[i])}; + + if(!container){ + container = { + left: $(window).scrollLeft(), + top: $(window).scrollTop(), + width: $(window).width(), + height: $(window).height() + } + } + + if( $(this).offset().left+$(this).width()-container.left > 0 && + $(this).offset().left < container.width+container.left && + $(this).offset().top+$(this).height()-container.top > 0 && + $(this).offset().top < container.height+container.top + ) return true; + return false; + } +})(jQuery); diff --git a/cov_html/jquery.min.js b/cov_html/jquery.min.js new file mode 100644 index 0000000000000000000000000000000000000000..d2906fc9ec3a591b512906a374f9bd9a26c3ed9d --- /dev/null +++ b/cov_html/jquery.min.js @@ -0,0 +1,5 @@ +(function(global,factory){"use strict";if(typeof module==="object"&&typeof module.exports==="object"){module.exports=global.document?factory(global,true):function(w){if(!w.document){throw new Error("jQuery requires a window with a document")}return factory(w)}}else{factory(global)}})(typeof window!=="undefined"?window:this,function(window,noGlobal){var arr=[];var document=window.document;var getProto=Object.getPrototypeOf;var slice=arr.slice;var concat=arr.concat;var push=arr.push;var indexOf=arr.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var fnToString=hasOwn.toString;var ObjectFunctionString=fnToString.call(Object);var support={};var isFunction=function isFunction(obj){return typeof obj==="function"&&typeof obj.nodeType!=="number"};var isWindow=function isWindow(obj){return obj!=null&&obj===obj.window};var preservedScriptAttributes={type:true,src:true,noModule:true};function DOMEval(code,doc,node){doc=doc||document;var i,script=doc.createElement("script");script.text=code;if(node){for(i in preservedScriptAttributes){if(node[i]){script[i]=node[i]}}}doc.head.appendChild(script).parentNode.removeChild(script)}function toType(obj){if(obj==null){return obj+""}return typeof obj==="object"||typeof obj==="function"?class2type[toString.call(obj)]||"object":typeof obj}var version="3.3.1",jQuery=function(selector,context){return new jQuery.fn.init(selector,context)},rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;jQuery.fn=jQuery.prototype={jquery:version,constructor:jQuery,length:0,toArray:function(){return slice.call(this)},get:function(num){if(num==null){return slice.call(this)}return num<0?this[num+this.length]:this[num]},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);ret.prevObject=this;return ret},each:function(callback){return jQuery.each(this,callback)},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem)}))},slice:function(){return this.pushStack(slice.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j<len?[this[j]]:[])},end:function(){return this.prevObject||this.constructor()},push:push,sort:arr.sort,splice:arr.splice};jQuery.extend=jQuery.fn.extend=function(){var options,name,src,copy,copyIsArray,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[i]||{};i++}if(typeof target!=="object"&&!isFunction(target)){target={}}if(i===length){target=this;i--}for(;i<length;i++){if((options=arguments[i])!=null){for(name in options){src=target[name];copy=options[name];if(name==="__proto__"||target===copy){continue}if(deep&©&&(jQuery.isPlainObject(copy)||(copyIsArray=Array.isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&Array.isArray(src)?src:[]}else{clone=src&&jQuery.isPlainObject(src)?src:{}}target[name]=jQuery.extend(deep,clone,copy)}else if(copy!==undefined){target[name]=copy}}}}return target};jQuery.extend({expando:"jQuery"+(version+Math.random()).replace(/\D/g,""),isReady:true,error:function(msg){throw new Error(msg)},noop:function(){},isPlainObject:function(obj){var proto,Ctor;if(!obj||toString.call(obj)!=="[object Object]"){return false}proto=getProto(obj);if(!proto){return true}Ctor=hasOwn.call(proto,"constructor")&&proto.constructor;return typeof Ctor==="function"&&fnToString.call(Ctor)===ObjectFunctionString},isEmptyObject:function(obj){var name;for(name in obj){return false}return true},globalEval:function(code){DOMEval(code)},each:function(obj,callback){var length,i=0;if(isArrayLike(obj)){length=obj.length;for(;i<length;i++){if(callback.call(obj[i],i,obj[i])===false){break}}}else{for(i in obj){if(callback.call(obj[i],i,obj[i])===false){break}}}return obj},trim:function(text){return text==null?"":(text+"").replace(rtrim,"")},makeArray:function(arr,results){var ret=results||[];if(arr!=null){if(isArrayLike(Object(arr))){jQuery.merge(ret,typeof arr==="string"?[arr]:arr)}else{push.call(ret,arr)}}return ret},inArray:function(elem,arr,i){return arr==null?-1:indexOf.call(arr,elem,i)},merge:function(first,second){var len=+second.length,j=0,i=first.length;for(;j<len;j++){first[i++]=second[j]}first.length=i;return first},grep:function(elems,callback,invert){var callbackInverse,matches=[],i=0,length=elems.length,callbackExpect=!invert;for(;i<length;i++){callbackInverse=!callback(elems[i],i);if(callbackInverse!==callbackExpect){matches.push(elems[i])}}return matches},map:function(elems,callback,arg){var length,value,i=0,ret=[];if(isArrayLike(elems)){length=elems.length;for(;i<length;i++){value=callback(elems[i],i,arg);if(value!=null){ret.push(value)}}}else{for(i in elems){value=callback(elems[i],i,arg);if(value!=null){ret.push(value)}}}return concat.apply([],ret)},guid:1,support:support});if(typeof Symbol==="function"){jQuery.fn[Symbol.iterator]=arr[Symbol.iterator]}jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(i,name){class2type["[object "+name+"]"]=name.toLowerCase()});function isArrayLike(obj){var length=!!obj&&"length"in obj&&obj.length,type=toType(obj);if(isFunction(obj)||isWindow(obj)){return false}return type==="array"||length===0||typeof length==="number"&&length>0&&length-1 in obj}var Sizzle=function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,expando="sizzle"+1*new Date,preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function(a,b){if(a===b){hasDuplicate=true}return 0},hasOwn={}.hasOwnProperty,arr=[],pop=arr.pop,push_native=arr.push,push=arr.push,slice=arr.slice,indexOf=function(list,elem){var i=0,len=list.length;for(;i<len;i++){if(list[i]===elem){return i}}return-1},booleans="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",whitespace="[\\x20\\t\\r\\n\\f]",identifier="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",attributes="\\["+whitespace+"*("+identifier+")(?:"+whitespace+"*([*^$|!~]?=)"+whitespace+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+identifier+"))|)"+whitespace+"*\\]",pseudos=":("+identifier+")(?:\\(("+"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|"+"((?:\\\\.|[^\\\\()[\\]]|"+attributes+")*)|"+".*"+")\\)|)",rwhitespace=new RegExp(whitespace+"+","g"),rtrim=new RegExp("^"+whitespace+"+|((?:^|[^\\\\])(?:\\\\.)*)"+whitespace+"+$","g"),rcomma=new RegExp("^"+whitespace+"*,"+whitespace+"*"),rcombinators=new RegExp("^"+whitespace+"*([>+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+identifier+")"),CLASS:new RegExp("^\\.("+identifier+")"),TAG:new RegExp("^("+identifier+"|[*])"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)},rcssescape=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fcssescape=function(ch,asCodePoint){if(asCodePoint){if(ch==="\0"){return"�"}return ch.slice(0,-1)+"\\"+ch.charCodeAt(ch.length-1).toString(16)+" "}return"\\"+ch},unloadHandler=function(){setDocument()},disabledAncestor=addCombinator(function(elem){return elem.disabled===true&&("form"in elem||"label"in elem)},{dir:"parentNode",next:"legend"});try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var m,i,elem,nid,match,groups,newSelector,newContext=context&&context.ownerDocument,nodeType=context?context.nodeType:9;results=results||[];if(typeof selector!=="string"||!selector||nodeType!==1&&nodeType!==9&&nodeType!==11){return results}if(!seed){if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;if(documentIsHTML){if(nodeType!==11&&(match=rquickExpr.exec(selector))){if(m=match[1]){if(nodeType===9){if(elem=context.getElementById(m)){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(newContext&&(elem=newContext.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&!compilerCache[selector+" "]&&(!rbuggyQSA||!rbuggyQSA.test(selector))){if(nodeType!==1){newContext=context;newSelector=selector}else if(context.nodeName.toLowerCase()!=="object"){if(nid=context.getAttribute("id")){nid=nid.replace(rcssescape,fcssescape)}else{context.setAttribute("id",nid=expando)}groups=tokenize(selector);i=groups.length;while(i--){groups[i]="#"+nid+" "+toSelector(groups[i])}newSelector=groups.join(",");newContext=rsibling.test(selector)&&testContext(context.parentNode)||context}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(nid===expando){context.removeAttribute("id")}}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var el=document.createElement("fieldset");try{return!!fn(el)}catch(e){return false}finally{if(el.parentNode){el.parentNode.removeChild(el)}el=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=arr.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&a.sourceIndex-b.sourceIndex;if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createDisabledPseudo(disabled){return function(elem){if("form"in elem){if(elem.parentNode&&elem.disabled===false){if("label"in elem){if("label"in elem.parentNode){return elem.parentNode.disabled===disabled}else{return elem.disabled===disabled}}return elem.isDisabled===disabled||elem.isDisabled!==!disabled&&disabledAncestor(elem)===disabled}return elem.disabled===disabled}else if("label"in elem){return elem.disabled===disabled}return false}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!=="undefined"&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,subWindow,doc=node?node.ownerDocument||node:preferredDoc;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=document.documentElement;documentIsHTML=!isXML(document);if(preferredDoc!==document&&(subWindow=document.defaultView)&&subWindow.top!==subWindow){if(subWindow.addEventListener){subWindow.addEventListener("unload",unloadHandler,false)}else if(subWindow.attachEvent){subWindow.attachEvent("onunload",unloadHandler)}}support.attributes=assert(function(el){el.className="i";return!el.getAttribute("className")});support.getElementsByTagName=assert(function(el){el.appendChild(document.createComment(""));return!el.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(document.getElementsByClassName);support.getById=assert(function(el){docElem.appendChild(el).id=expando;return!document.getElementsByName||!document.getElementsByName(expando).length});if(support.getById){Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var elem=context.getElementById(id);return elem?[elem]:[]}}}else{Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return node&&node.value===attrId}};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var node,i,elems,elem=context.getElementById(id);if(elem){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem]}elems=context.getElementsByName(id);i=0;while(elem=elems[i++]){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem]}}}return[]}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!=="undefined"){return context.getElementsByTagName(tag)}else if(support.qsa){return context.querySelectorAll(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!=="undefined"&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(document.querySelectorAll)){assert(function(el){docElem.appendChild(el).innerHTML="<a id='"+expando+"'></a>"+"<select id='"+expando+"-\r\\' msallowcapture=''>"+"<option selected=''></option></select>";if(el.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!el.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!el.querySelectorAll("[id~="+expando+"-]").length){rbuggyQSA.push("~=")}if(!el.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}if(!el.querySelectorAll("a#"+expando+"+*").length){rbuggyQSA.push(".#.+[+~]")}});assert(function(el){el.innerHTML="<a href='' disabled='disabled'></a>"+"<select disabled='disabled'><option/></select>";var input=document.createElement("input");input.setAttribute("type","hidden");el.appendChild(input).setAttribute("name","D");if(el.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(el.querySelectorAll(":enabled").length!==2){rbuggyQSA.push(":enabled",":disabled")}docElem.appendChild(el).disabled=true;if(el.querySelectorAll(":disabled").length!==2){rbuggyQSA.push(":enabled",":disabled")}el.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(el){support.disconnectedMatch=matches.call(el,"*");matches.call(el,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===document||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===document||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===document?-1:b===document?1:aup?-1:bup?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return document};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&!compilerCache[expr+" "]&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.escape=function(sel){return(sel+"").replace(rcssescape,fcssescape)};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[6]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]){match[2]=match[4]||match[5]||""}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!=="undefined"&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType,diff=false;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){node=parent;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){uniqueCache[type]=[dirruns,nodeIndex,diff];break}}}else{if(useCache){node=elem;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex}if(diff===false){while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});uniqueCache[type]=[dirruns,diff]}if(node===elem){break}}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);input[0]=null;return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){text=text.replace(runescape,funescape);return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:createDisabledPseudo(false),disabled:createDisabledPseudo(true),checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i<length;i+=2){matchIndexes.push(i)}return matchIndexes}),odd:createPositionalPseudo(function(matchIndexes,length){var i=1;for(;i<length;i+=2){matchIndexes.push(i)}return matchIndexes}),lt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;--i>=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i<length;){matchIndexes.push(i)}return matchIndexes})}};Expr.pseudos["nth"]=Expr.pseudos["eq"];for(i in{radio:true,checkbox:true,file:true,password:true,image:true}){Expr.pseudos[i]=createInputPseudo(i)}for(i in{submit:true,reset:true}){Expr.pseudos[i]=createButtonPseudo(i)}function setFilters(){}setFilters.prototype=Expr.filters=Expr.pseudos;Expr.setFilters=new setFilters;tokenize=Sizzle.tokenize=function(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector+" "];if(cached){return parseOnly?0:cached.slice(0)}soFar=selector;groups=[];preFilters=Expr.preFilter;while(soFar){if(!matched||(match=rcomma.exec(soFar))){if(match){soFar=soFar.slice(match[0].length)||soFar}groups.push(tokens=[])}matched=false;if(match=rcombinators.exec(soFar)){matched=match.shift();tokens.push({value:matched,type:match[0].replace(rtrim," ")});soFar=soFar.slice(matched.length)}for(type in Expr.filter){if((match=matchExpr[type].exec(soFar))&&(!preFilters[type]||(match=preFilters[type](match)))){matched=match.shift();tokens.push({value:matched,type:type,matches:match});soFar=soFar.slice(matched.length)}}if(!matched){break}}return parseOnly?soFar.length:soFar?Sizzle.error(selector):tokenCache(selector,groups).slice(0)};function toSelector(tokens){var i=0,len=tokens.length,selector="";for(;i<len;i++){selector+=tokens[i].value}return selector}function addCombinator(matcher,combinator,base){var dir=combinator.dir,skip=combinator.next,key=skip||dir,checkNonElements=base&&key==="parentNode",doneName=done++;return combinator.first?function(elem,context,xml){while(elem=elem[dir]){if(elem.nodeType===1||checkNonElements){return matcher(elem,context,xml)}}return false}:function(elem,context,xml){var oldCache,uniqueCache,outerCache,newCache=[dirruns,doneName];if(xml){while(elem=elem[dir]){if(elem.nodeType===1||checkNonElements){if(matcher(elem,context,xml)){return true}}}}else{while(elem=elem[dir]){if(elem.nodeType===1||checkNonElements){outerCache=elem[expando]||(elem[expando]={});uniqueCache=outerCache[elem.uniqueID]||(outerCache[elem.uniqueID]={});if(skip&&skip===elem.nodeName.toLowerCase()){elem=elem[dir]||elem}else if((oldCache=uniqueCache[key])&&oldCache[0]===dirruns&&oldCache[1]===doneName){return newCache[2]=oldCache[2]}else{uniqueCache[key]=newCache;if(newCache[2]=matcher(elem,context,xml)){return true}}}}}return false}}function elementMatcher(matchers){return matchers.length>1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i<len;i++){Sizzle(selector,contexts[i],results)}return results}function condense(unmatched,map,filter,context,xml){var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=map!=null;for(;i<len;i++){if(elem=unmatched[i]){if(!filter||filter(elem,context,xml)){newUnmatched.push(elem);if(mapped){map.push(i)}}}}return newUnmatched}function setMatcher(preFilter,selector,matcher,postFilter,postFinder,postSelector){if(postFilter&&!postFilter[expando]){postFilter=setMatcher(postFilter)}if(postFinder&&!postFinder[expando]){postFinder=setMatcher(postFinder,postSelector)}return markFunction(function(seed,results,context,xml){var temp,i,elem,preMap=[],postMap=[],preexisting=results.length,elems=seed||multipleContexts(selector||"*",context.nodeType?[context]:context,[]),matcherIn=preFilter&&(seed||!selector)?condense(elems,preMap,preFilter,context,xml):elems,matcherOut=matcher?postFinder||(seed?preFilter:preexisting||postFilter)?[]:results:matcherIn;if(matcher){matcher(matcherIn,matcherOut,context,xml)}if(postFilter){temp=condense(matcherOut,postMap);postFilter(temp,[],context,xml);i=temp.length;while(i--){if(elem=temp[i]){matcherOut[postMap[i]]=!(matcherIn[postMap[i]]=elem)}}}if(seed){if(postFinder||preFilter){if(postFinder){temp=[];i=matcherOut.length;while(i--){if(elem=matcherOut[i]){temp.push(matcherIn[i]=elem)}}postFinder(null,matcherOut=[],temp,xml)}i=matcherOut.length;while(i--){ +if((elem=matcherOut[i])&&(temp=postFinder?indexOf(seed,elem):preMap[i])>-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){var ret=!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));checkContext=null;return ret}];for(;i<len;i++){if(matcher=Expr.relative[tokens[i].type]){matchers=[addCombinator(elementMatcher(matchers),matcher)]}else{matcher=Expr.filter[tokens[i].type].apply(null,tokens[i].matches);if(matcher[expando]){j=++i;for(;j<len;j++){if(Expr.relative[tokens[j].type]){break}}return setMatcher(i>1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i<j&&matcherFromTokens(tokens.slice(i,j)),j<len&&matcherFromTokens(tokens=tokens.slice(j)),j<len&&toSelector(tokens))}matchers.push(matcher)}}return elementMatcher(matchers)}function matcherFromGroupMatchers(elementMatchers,setMatchers){var bySet=setMatchers.length>0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context===document||context||outermost}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;if(!context&&elem.ownerDocument!==document){setDocument(elem);xml=!documentIsHTML}while(matcher=elementMatchers[j++]){if(matcher(elem,context||document,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,!context||rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(el){return el.compareDocumentPosition(document.createElement("fieldset"))&1});if(!assert(function(el){el.innerHTML="<a href='#'></a>";return el.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(el){el.innerHTML="<input/>";el.firstChild.setAttribute("value","");return el.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(el){return el.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}return Sizzle}(window);jQuery.find=Sizzle;jQuery.expr=Sizzle.selectors;jQuery.expr[":"]=jQuery.expr.pseudos;jQuery.uniqueSort=jQuery.unique=Sizzle.uniqueSort;jQuery.text=Sizzle.getText;jQuery.isXMLDoc=Sizzle.isXML;jQuery.contains=Sizzle.contains;jQuery.escapeSelector=Sizzle.escape;var dir=function(elem,dir,until){var matched=[],truncate=until!==undefined;while((elem=elem[dir])&&elem.nodeType!==9){if(elem.nodeType===1){if(truncate&&jQuery(elem).is(until)){break}matched.push(elem)}}return matched};var siblings=function(n,elem){var matched=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){matched.push(n)}}return matched};var rneedsContext=jQuery.expr.match.needsContext;function nodeName(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()}var rsingleTag=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function winnow(elements,qualifier,not){if(isFunction(qualifier)){return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not})}if(qualifier.nodeType){return jQuery.grep(elements,function(elem){return elem===qualifier!==not})}if(typeof qualifier!=="string"){return jQuery.grep(elements,function(elem){return indexOf.call(qualifier,elem)>-1!==not})}return jQuery.filter(qualifier,elements,not)}jQuery.filter=function(expr,elems,not){var elem=elems[0];if(not){expr=":not("+expr+")"}if(elems.length===1&&elem.nodeType===1){return jQuery.find.matchesSelector(elem,expr)?[elem]:[]}return jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return elem.nodeType===1}))};jQuery.fn.extend({find:function(selector){var i,ret,len=this.length,self=this;if(typeof selector!=="string"){return this.pushStack(jQuery(selector).filter(function(){for(i=0;i<len;i++){if(jQuery.contains(self[i],this)){return true}}}))}ret=this.pushStack([]);for(i=0;i<len;i++){jQuery.find(selector,self[i],ret)}return len>1?jQuery.uniqueSort(ret):ret},filter:function(selector){return this.pushStack(winnow(this,selector||[],false))},not:function(selector){return this.pushStack(winnow(this,selector||[],true))},is:function(selector){return!!winnow(this,typeof selector==="string"&&rneedsContext.test(selector)?jQuery(selector):selector||[],false).length}});var rootjQuery,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,init=jQuery.fn.init=function(selector,context,root){var match,elem;if(!selector){return this}root=root||rootjQuery;if(typeof selector==="string"){if(selector[0]==="<"&&selector[selector.length-1]===">"&&selector.length>=3){match=[null,selector,null]}else{match=rquickExpr.exec(selector)}if(match&&(match[1]||!context)){if(match[1]){context=context instanceof jQuery?context[0]:context;jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,true));if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){for(match in context){if(isFunction(this[match])){this[match](context[match])}else{this.attr(match,context[match])}}}return this}else{elem=document.getElementById(match[2]);if(elem){this[0]=elem;this.length=1}return this}}else if(!context||context.jquery){return(context||root).find(selector)}else{return this.constructor(context).find(selector)}}else if(selector.nodeType){this[0]=selector;this.length=1;return this}else if(isFunction(selector)){return root.ready!==undefined?root.ready(selector):selector(jQuery)}return jQuery.makeArray(selector,this)};init.prototype=jQuery.fn;rootjQuery=jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,guaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({has:function(target){var targets=jQuery(target,this),l=targets.length;return this.filter(function(){var i=0;for(;i<l;i++){if(jQuery.contains(this,targets[i])){return true}}})},closest:function(selectors,context){var cur,i=0,l=this.length,matched=[],targets=typeof selectors!=="string"&&jQuery(selectors);if(!rneedsContext.test(selectors)){for(;i<l;i++){for(cur=this[i];cur&&cur!==context;cur=cur.parentNode){if(cur.nodeType<11&&(targets?targets.index(cur)>-1:cur.nodeType===1&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break}}}}return this.pushStack(matched.length>1?jQuery.uniqueSort(matched):matched)},index:function(elem){if(!elem){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1}if(typeof elem==="string"){return indexOf.call(jQuery(elem),this[0])}return indexOf.call(this,elem.jquery?elem[0]:elem)},add:function(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))))},addBack:function(selector){return this.add(selector==null?this.prevObject:this.prevObject.filter(selector))}});function sibling(cur,dir){while((cur=cur[dir])&&cur.nodeType!==1){}return cur}jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null},parents:function(elem){return dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return dir(elem,"nextSibling")},prevAll:function(elem){return dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return dir(elem,"previousSibling",until)},siblings:function(elem){return siblings((elem.parentNode||{}).firstChild,elem)},children:function(elem){return siblings(elem.firstChild)},contents:function(elem){if(nodeName(elem,"iframe")){return elem.contentDocument}if(nodeName(elem,"template")){elem=elem.content||elem}return jQuery.merge([],elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var matched=jQuery.map(this,fn,until);if(name.slice(-5)!=="Until"){selector=until}if(selector&&typeof selector==="string"){matched=jQuery.filter(selector,matched)}if(this.length>1){if(!guaranteedUnique[name]){jQuery.uniqueSort(matched)}if(rparentsprev.test(name)){matched.reverse()}}return this.pushStack(matched)}});var rnothtmlwhite=/[^\x20\t\r\n\f]+/g;function createOptions(options){var object={};jQuery.each(options.match(rnothtmlwhite)||[],function(_,flag){object[flag]=true});return object}jQuery.Callbacks=function(options){options=typeof options==="string"?createOptions(options):jQuery.extend({},options);var firing,memory,fired,locked,list=[],queue=[],firingIndex=-1,fire=function(){locked=locked||options.once;fired=firing=true;for(;queue.length;firingIndex=-1){memory=queue.shift();while(++firingIndex<list.length){if(list[firingIndex].apply(memory[0],memory[1])===false&&options.stopOnFalse){firingIndex=list.length;memory=false}}}if(!options.memory){memory=false}firing=false;if(locked){if(memory){list=[]}else{list=""}}},self={add:function(){if(list){if(memory&&!firing){firingIndex=list.length-1;queue.push(memory)}(function add(args){jQuery.each(args,function(_,arg){if(isFunction(arg)){if(!options.unique||!self.has(arg)){list.push(arg)}}else if(arg&&arg.length&&toType(arg)!=="string"){add(arg)}})})(arguments);if(memory&&!firing){fire()}}return this},remove:function(){jQuery.each(arguments,function(_,arg){var index;while((index=jQuery.inArray(arg,list,index))>-1){list.splice(index,1);if(index<=firingIndex){firingIndex--}}});return this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:list.length>0},empty:function(){if(list){list=[]}return this},disable:function(){locked=queue=[];list=memory="";return this},disabled:function(){return!list},lock:function(){locked=queue=[];if(!memory&&!firing){list=memory=""}return this},locked:function(){return!!locked},fireWith:function(context,args){if(!locked){args=args||[];args=[context,args.slice?args.slice():args];queue.push(args);if(!firing){fire()}}return this},fire:function(){self.fireWith(this,arguments);return this},fired:function(){return!!fired}};return self};function Identity(v){return v}function Thrower(ex){throw ex}function adoptValue(value,resolve,reject,noValue){var method;try{if(value&&isFunction(method=value.promise)){method.call(value).done(resolve).fail(reject)}else if(value&&isFunction(method=value.then)){method.call(value,resolve,reject)}else{resolve.apply(undefined,[value].slice(noValue))}}catch(value){reject.apply(undefined,[value])}}jQuery.extend({Deferred:function(func){var tuples=[["notify","progress",jQuery.Callbacks("memory"),jQuery.Callbacks("memory"),2],["resolve","done",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),0,"resolved"],["reject","fail",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),1,"rejected"]],state="pending",promise={state:function(){return state},always:function(){deferred.done(arguments).fail(arguments);return this},catch:function(fn){return promise.then(null,fn)},pipe:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var fn=isFunction(fns[tuple[4]])&&fns[tuple[4]];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);if(returned&&isFunction(returned.promise)){returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject)}else{newDefer[tuple[0]+"With"](this,fn?[returned]:arguments)}})});fns=null}).promise()},then:function(onFulfilled,onRejected,onProgress){var maxDepth=0;function resolve(depth,deferred,handler,special){return function(){var that=this,args=arguments,mightThrow=function(){var returned,then;if(depth<maxDepth){return}returned=handler.apply(that,args);if(returned===deferred.promise()){throw new TypeError("Thenable self-resolution")}then=returned&&(typeof returned==="object"||typeof returned==="function")&&returned.then;if(isFunction(then)){if(special){then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special))}else{maxDepth++;then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special),resolve(maxDepth,deferred,Identity,deferred.notifyWith))}}else{if(handler!==Identity){that=undefined;args=[returned]}(special||deferred.resolveWith)(that,args)}},process=special?mightThrow:function(){try{mightThrow()}catch(e){if(jQuery.Deferred.exceptionHook){jQuery.Deferred.exceptionHook(e,process.stackTrace)}if(depth+1>=maxDepth){if(handler!==Thrower){that=undefined;args=[e]}deferred.rejectWith(that,args)}}};if(depth){process()}else{if(jQuery.Deferred.getStackHook){process.stackTrace=jQuery.Deferred.getStackHook()}window.setTimeout(process)}}}return jQuery.Deferred(function(newDefer){tuples[0][3].add(resolve(0,newDefer,isFunction(onProgress)?onProgress:Identity,newDefer.notifyWith));tuples[1][3].add(resolve(0,newDefer,isFunction(onFulfilled)?onFulfilled:Identity));tuples[2][3].add(resolve(0,newDefer,isFunction(onRejected)?onRejected:Thrower))}).promise()},promise:function(obj){return obj!=null?jQuery.extend(obj,promise):promise}},deferred={};jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[5];promise[tuple[1]]=list.add;if(stateString){list.add(function(){state=stateString},tuples[3-i][2].disable,tuples[3-i][3].disable,tuples[0][2].lock,tuples[0][3].lock)}list.add(tuple[3].fire);deferred[tuple[0]]=function(){deferred[tuple[0]+"With"](this===deferred?undefined:this,arguments);return this};deferred[tuple[0]+"With"]=list.fireWith});promise.promise(deferred);if(func){func.call(deferred,deferred)}return deferred},when:function(singleValue){var remaining=arguments.length,i=remaining,resolveContexts=Array(i),resolveValues=slice.call(arguments),master=jQuery.Deferred(),updateFunc=function(i){return function(value){resolveContexts[i]=this;resolveValues[i]=arguments.length>1?slice.call(arguments):value;if(!--remaining){master.resolveWith(resolveContexts,resolveValues)}}};if(remaining<=1){adoptValue(singleValue,master.done(updateFunc(i)).resolve,master.reject,!remaining);if(master.state()==="pending"||isFunction(resolveValues[i]&&resolveValues[i].then)){return master.then()}}while(i--){adoptValue(resolveValues[i],updateFunc(i),master.reject)}return master.promise()}});var rerrorNames=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;jQuery.Deferred.exceptionHook=function(error,stack){if(window.console&&window.console.warn&&error&&rerrorNames.test(error.name)){window.console.warn("jQuery.Deferred exception: "+error.message,error.stack,stack)}};jQuery.readyException=function(error){window.setTimeout(function(){throw error})};var readyList=jQuery.Deferred();jQuery.fn.ready=function(fn){readyList.then(fn).catch(function(error){jQuery.readyException(error)});return this};jQuery.extend({isReady:false,readyWait:1,ready:function(wait){if(wait===true?--jQuery.readyWait:jQuery.isReady){return}jQuery.isReady=true;if(wait!==true&&--jQuery.readyWait>0){return}readyList.resolveWith(document,[jQuery])}});jQuery.ready.then=readyList.then;function completed(){document.removeEventListener("DOMContentLoaded",completed);window.removeEventListener("load",completed);jQuery.ready()}if(document.readyState==="complete"||document.readyState!=="loading"&&!document.documentElement.doScroll){window.setTimeout(jQuery.ready)}else{document.addEventListener("DOMContentLoaded",completed);window.addEventListener("load",completed)}var access=function(elems,fn,key,value,chainable,emptyGet,raw){var i=0,len=elems.length,bulk=key==null;if(toType(key)==="object"){chainable=true;for(i in key){access(elems,fn,i,key[i],true,emptyGet,raw)}}else if(value!==undefined){chainable=true;if(!isFunction(value)){raw=true}if(bulk){if(raw){fn.call(elems,value);fn=null}else{bulk=fn;fn=function(elem,key,value){return bulk.call(jQuery(elem),value)}}}if(fn){for(;i<len;i++){fn(elems[i],key,raw?value:value.call(elems[i],i,fn(elems[i],key)))}}}if(chainable){return elems}if(bulk){return fn.call(elems)}return len?fn(elems[0],key):emptyGet};var rmsPrefix=/^-ms-/,rdashAlpha=/-([a-z])/g;function fcamelCase(all,letter){return letter.toUpperCase()}function camelCase(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)}var acceptData=function(owner){return owner.nodeType===1||owner.nodeType===9||!+owner.nodeType};function Data(){this.expando=jQuery.expando+Data.uid++}Data.uid=1;Data.prototype={cache:function(owner){var value=owner[this.expando];if(!value){value={};if(acceptData(owner)){if(owner.nodeType){owner[this.expando]=value}else{Object.defineProperty(owner,this.expando,{value:value,configurable:true})}}}return value},set:function(owner,data,value){var prop,cache=this.cache(owner);if(typeof data==="string"){cache[camelCase(data)]=value}else{for(prop in data){cache[camelCase(prop)]=data[prop]}}return cache},get:function(owner,key){return key===undefined?this.cache(owner):owner[this.expando]&&owner[this.expando][camelCase(key)]},access:function(owner,key,value){if(key===undefined||key&&typeof key==="string"&&value===undefined){return this.get(owner,key)}this.set(owner,key,value);return value!==undefined?value:key},remove:function(owner,key){var i,cache=owner[this.expando];if(cache===undefined){return}if(key!==undefined){if(Array.isArray(key)){key=key.map(camelCase)}else{key=camelCase(key);key=key in cache?[key]:key.match(rnothtmlwhite)||[]}i=key.length;while(i--){delete cache[key[i]]}}if(key===undefined||jQuery.isEmptyObject(cache)){if(owner.nodeType){owner[this.expando]=undefined}else{delete owner[this.expando]}}},hasData:function(owner){var cache=owner[this.expando];return cache!==undefined&&!jQuery.isEmptyObject(cache)}};var dataPriv=new Data;var dataUser=new Data;var rbrace=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,rmultiDash=/[A-Z]/g;function getData(data){if(data==="true"){return true}if(data==="false"){return false}if(data==="null"){return null}if(data===+data+""){return+data}if(rbrace.test(data)){return JSON.parse(data)}return data}function dataAttr(elem,key,data){var name;if(data===undefined&&elem.nodeType===1){name="data-"+key.replace(rmultiDash,"-$&").toLowerCase();data=elem.getAttribute(name);if(typeof data==="string"){try{data=getData(data)}catch(e){}dataUser.set(elem,key,data)}else{data=undefined}}return data}jQuery.extend({hasData:function(elem){return dataUser.hasData(elem)||dataPriv.hasData(elem)},data:function(elem,name,data){return dataUser.access(elem,name,data)},removeData:function(elem,name){dataUser.remove(elem,name)},_data:function(elem,name,data){return dataPriv.access(elem,name,data)},_removeData:function(elem,name){dataPriv.remove(elem,name)}});jQuery.fn.extend({data:function(key,value){var i,name,data,elem=this[0],attrs=elem&&elem.attributes;if(key===undefined){if(this.length){data=dataUser.get(elem);if(elem.nodeType===1&&!dataPriv.get(elem,"hasDataAttrs")){i=attrs.length;while(i--){if(attrs[i]){name=attrs[i].name;if(name.indexOf("data-")===0){name=camelCase(name.slice(5));dataAttr(elem,name,data[name])}}}dataPriv.set(elem,"hasDataAttrs",true)}}return data}if(typeof key==="object"){return this.each(function(){dataUser.set(this,key)})}return access(this,function(value){var data;if(elem&&value===undefined){data=dataUser.get(elem,key);if(data!==undefined){return data}data=dataAttr(elem,key);if(data!==undefined){return data}return}this.each(function(){dataUser.set(this,key,value)})},null,value,arguments.length>1,null,true)},removeData:function(key){return this.each(function(){dataUser.remove(this,key)})}});jQuery.extend({queue:function(elem,type,data){var queue;if(elem){type=(type||"fx")+"queue";queue=dataPriv.get(elem,type);if(data){if(!queue||Array.isArray(data)){queue=dataPriv.access(elem,type,jQuery.makeArray(data))}else{queue.push(data)}}return queue||[]}},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type)};if(fn==="inprogress"){fn=queue.shift();startLength--}if(fn){if(type==="fx"){queue.unshift("inprogress")}delete hooks.stop;fn.call(elem,next,hooks)}if(!startLength&&hooks){hooks.empty.fire()}},_queueHooks:function(elem,type){var key=type+"queueHooks";return dataPriv.get(elem,key)||dataPriv.access(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){dataPriv.remove(elem,[type+"queue",key])})})}});jQuery.fn.extend({queue:function(type,data){var setter=2;if(typeof type!=="string"){data=type;type="fx";setter--}if(arguments.length<setter){return jQuery.queue(this[0],type)}return data===undefined?this:this.each(function(){var queue=jQuery.queue(this,type,data);jQuery._queueHooks(this,type);if(type==="fx"&&queue[0]!=="inprogress"){jQuery.dequeue(this,type)}})},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type)})},clearQueue:function(type){return this.queue(type||"fx",[])},promise:function(type,obj){var tmp,count=1,defer=jQuery.Deferred(),elements=this,i=this.length,resolve=function(){if(!--count){defer.resolveWith(elements,[elements])}};if(typeof type!=="string"){obj=type;type=undefined}type=type||"fx";while(i--){tmp=dataPriv.get(elements[i],type+"queueHooks");if(tmp&&tmp.empty){count++;tmp.empty.add(resolve)}}resolve();return defer.promise(obj)}});var pnum=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;var rcssNum=new RegExp("^(?:([+-])=|)("+pnum+")([a-z%]*)$","i");var cssExpand=["Top","Right","Bottom","Left"];var isHiddenWithinTree=function(elem,el){elem=el||elem;return elem.style.display==="none"||elem.style.display===""&&jQuery.contains(elem.ownerDocument,elem)&&jQuery.css(elem,"display")==="none"};var swap=function(elem,options,callback,args){var ret,name,old={};for(name in options){old[name]=elem.style[name];elem.style[name]=options[name]}ret=callback.apply(elem,args||[]);for(name in options){elem.style[name]=old[name]}return ret};function adjustCSS(elem,prop,valueParts,tween){var adjusted,scale,maxIterations=20,currentValue=tween?function(){return tween.cur()}:function(){return jQuery.css(elem,prop,"")},initial=currentValue(),unit=valueParts&&valueParts[3]||(jQuery.cssNumber[prop]?"":"px"),initialInUnit=(jQuery.cssNumber[prop]||unit!=="px"&&+initial)&&rcssNum.exec(jQuery.css(elem,prop));if(initialInUnit&&initialInUnit[3]!==unit){initial=initial/2;unit=unit||initialInUnit[3];initialInUnit=+initial||1;while(maxIterations--){jQuery.style(elem,prop,initialInUnit+unit);if((1-scale)*(1-(scale=currentValue()/initial||.5))<=0){maxIterations=0}initialInUnit=initialInUnit/scale}initialInUnit=initialInUnit*2;jQuery.style(elem,prop,initialInUnit+unit);valueParts=valueParts||[]}if(valueParts){initialInUnit=+initialInUnit||+initial||0;adjusted=valueParts[1]?initialInUnit+(valueParts[1]+1)*valueParts[2]:+valueParts[2];if(tween){tween.unit=unit;tween.start=initialInUnit;tween.end=adjusted}}return adjusted}var defaultDisplayMap={};function getDefaultDisplay(elem){var temp,doc=elem.ownerDocument,nodeName=elem.nodeName,display=defaultDisplayMap[nodeName];if(display){return display}temp=doc.body.appendChild(doc.createElement(nodeName));display=jQuery.css(temp,"display");temp.parentNode.removeChild(temp);if(display==="none"){display="block"}defaultDisplayMap[nodeName]=display;return display}function showHide(elements,show){var display,elem,values=[],index=0,length=elements.length;for(;index<length;index++){elem=elements[index];if(!elem.style){continue}display=elem.style.display;if(show){if(display==="none"){values[index]=dataPriv.get(elem,"display")||null;if(!values[index]){elem.style.display=""}}if(elem.style.display===""&&isHiddenWithinTree(elem)){values[index]=getDefaultDisplay(elem)}}else{if(display!=="none"){values[index]="none";dataPriv.set(elem,"display",display)}}}for(index=0;index<length;index++){if(values[index]!=null){elements[index].style.display=values[index]}}return elements}jQuery.fn.extend({show:function(){return showHide(this,true)},hide:function(){return showHide(this)},toggle:function(state){if(typeof state==="boolean"){return state?this.show():this.hide()}return this.each(function(){if(isHiddenWithinTree(this)){jQuery(this).show()}else{jQuery(this).hide()}})}});var rcheckableType=/^(?:checkbox|radio)$/i;var rtagName=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i;var rscriptType=/^$|^module$|\/(?:java|ecma)script/i;var wrapMap={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;function getAll(context,tag){var ret;if(typeof context.getElementsByTagName!=="undefined"){ret=context.getElementsByTagName(tag||"*")}else if(typeof context.querySelectorAll!=="undefined"){ret=context.querySelectorAll(tag||"*")}else{ret=[]}if(tag===undefined||tag&&nodeName(context,tag)){return jQuery.merge([context],ret)}return ret}function setGlobalEval(elems,refElements){var i=0,l=elems.length;for(;i<l;i++){dataPriv.set(elems[i],"globalEval",!refElements||dataPriv.get(refElements[i],"globalEval"))}}var rhtml=/<|&#?\w+;/;function buildFragment(elems,context,scripts,selection,ignored){var elem,tmp,tag,wrap,contains,j,fragment=context.createDocumentFragment(),nodes=[],i=0,l=elems.length;for(;i<l;i++){elem=elems[i];if(elem||elem===0){if(toType(elem)==="object"){jQuery.merge(nodes,elem.nodeType?[elem]:elem)}else if(!rhtml.test(elem)){nodes.push(context.createTextNode(elem))}else{tmp=tmp||fragment.appendChild(context.createElement("div"));tag=(rtagName.exec(elem)||["",""])[1].toLowerCase();wrap=wrapMap[tag]||wrapMap._default;tmp.innerHTML=wrap[1]+jQuery.htmlPrefilter(elem)+wrap[2];j=wrap[0];while(j--){tmp=tmp.lastChild}jQuery.merge(nodes,tmp.childNodes);tmp=fragment.firstChild;tmp.textContent=""}}}fragment.textContent="";i=0;while(elem=nodes[i++]){if(selection&&jQuery.inArray(elem,selection)>-1){if(ignored){ignored.push(elem)}continue}contains=jQuery.contains(elem.ownerDocument,elem);tmp=getAll(fragment.appendChild(elem),"script");if(contains){setGlobalEval(tmp)}if(scripts){j=0;while(elem=tmp[j++]){if(rscriptType.test(elem.type||"")){scripts.push(elem)}}}}return fragment}(function(){var fragment=document.createDocumentFragment(),div=fragment.appendChild(document.createElement("div")),input=document.createElement("input");input.setAttribute("type","radio");input.setAttribute("checked","checked");input.setAttribute("name","t");div.appendChild(input);support.checkClone=div.cloneNode(true).cloneNode(true).lastChild.checked;div.innerHTML="<textarea>x</textarea>";support.noCloneChecked=!!div.cloneNode(true).lastChild.defaultValue})();var documentElement=document.documentElement;var rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rtypenamespace=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return true}function returnFalse(){return false}function safeActiveElement(){try{return document.activeElement}catch(err){}}function on(elem,types,selector,data,fn,one){var origFn,type;if(typeof types==="object"){if(typeof selector!=="string"){data=data||selector;selector=undefined}for(type in types){on(elem,type,selector,data,types[type],one)}return elem}if(data==null&&fn==null){fn=selector;data=selector=undefined}else if(fn==null){if(typeof selector==="string"){fn=data;data=undefined}else{fn=data;data=selector;selector=undefined}}if(fn===false){fn=returnFalse}else if(!fn){return elem}if(one===1){origFn=fn;fn=function(event){jQuery().off(event);return origFn.apply(this,arguments)};fn.guid=origFn.guid||(origFn.guid=jQuery.guid++)}return elem.each(function(){jQuery.event.add(this,types,fn,data,selector)})}jQuery.event={global:{},add:function(elem,types,handler,data,selector){var handleObjIn,eventHandle,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.get(elem);if(!elemData){return}if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;selector=handleObjIn.selector}if(selector){jQuery.find.matchesSelector(documentElement,selector)}if(!handler.guid){handler.guid=jQuery.guid++}if(!(events=elemData.events)){events=elemData.events={}}if(!(eventHandle=elemData.handle)){eventHandle=elemData.handle=function(e){return typeof jQuery!=="undefined"&&jQuery.event.triggered!==e.type?jQuery.event.dispatch.apply(elem,arguments):undefined}}types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){continue}special=jQuery.event.special[type]||{} +;type=(selector?special.delegateType:special.bindType)||type;special=jQuery.event.special[type]||{};handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn);if(!(handlers=events[type])){handlers=events[type]=[];handlers.delegateCount=0;if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle)}}}if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid}}if(selector){handlers.splice(handlers.delegateCount++,0,handleObj)}else{handlers.push(handleObj)}jQuery.event.global[type]=true}},remove:function(elem,types,handler,selector,mappedTypes){var j,origCount,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.hasData(elem)&&dataPriv.get(elem);if(!elemData||!(events=elemData.events)){return}types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){for(type in events){jQuery.event.remove(elem,type+types[t],handler,selector,true)}continue}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;handlers=events[type]||[];tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)");origCount=j=handlers.length;while(j--){handleObj=handlers[j];if((mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!tmp||tmp.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||selector==="**"&&handleObj.selector)){handlers.splice(j,1);if(handleObj.selector){handlers.delegateCount--}if(special.remove){special.remove.call(elem,handleObj)}}}if(origCount&&!handlers.length){if(!special.teardown||special.teardown.call(elem,namespaces,elemData.handle)===false){jQuery.removeEvent(elem,type,elemData.handle)}delete events[type]}}if(jQuery.isEmptyObject(events)){dataPriv.remove(elem,"handle events")}},dispatch:function(nativeEvent){var event=jQuery.event.fix(nativeEvent);var i,j,ret,matched,handleObj,handlerQueue,args=new Array(arguments.length),handlers=(dataPriv.get(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};args[0]=event;for(i=1;i<arguments.length;i++){args[i]=arguments[i]}event.delegateTarget=this;if(special.preDispatch&&special.preDispatch.call(this,event)===false){return}handlerQueue=jQuery.event.handlers.call(this,event,handlers);i=0;while((matched=handlerQueue[i++])&&!event.isPropagationStopped()){event.currentTarget=matched.elem;j=0;while((handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped()){if(!event.rnamespace||event.rnamespace.test(handleObj.namespace)){event.handleObj=handleObj;event.data=handleObj.data;ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args);if(ret!==undefined){if((event.result=ret)===false){event.preventDefault();event.stopPropagation()}}}}}if(special.postDispatch){special.postDispatch.call(this,event)}return event.result},handlers:function(event,handlers){var i,handleObj,sel,matchedHandlers,matchedSelectors,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&!(event.type==="click"&&event.button>=1)){for(;cur!==this;cur=cur.parentNode||this){if(cur.nodeType===1&&!(event.type==="click"&&cur.disabled===true)){matchedHandlers=[];matchedSelectors={};for(i=0;i<delegateCount;i++){handleObj=handlers[i];sel=handleObj.selector+" ";if(matchedSelectors[sel]===undefined){matchedSelectors[sel]=handleObj.needsContext?jQuery(sel,this).index(cur)>-1:jQuery.find(sel,this,null,[cur]).length}if(matchedSelectors[sel]){matchedHandlers.push(handleObj)}}if(matchedHandlers.length){handlerQueue.push({elem:cur,handlers:matchedHandlers})}}}}cur=this;if(delegateCount<handlers.length){handlerQueue.push({elem:cur,handlers:handlers.slice(delegateCount)})}return handlerQueue},addProp:function(name,hook){Object.defineProperty(jQuery.Event.prototype,name,{enumerable:true,configurable:true,get:isFunction(hook)?function(){if(this.originalEvent){return hook(this.originalEvent)}}:function(){if(this.originalEvent){return this.originalEvent[name]}},set:function(value){Object.defineProperty(this,name,{enumerable:true,configurable:true,writable:true,value:value})}})},fix:function(originalEvent){return originalEvent[jQuery.expando]?originalEvent:new jQuery.Event(originalEvent)},special:{load:{noBubble:true},focus:{trigger:function(){if(this!==safeActiveElement()&&this.focus){this.focus();return false}},delegateType:"focusin"},blur:{trigger:function(){if(this===safeActiveElement()&&this.blur){this.blur();return false}},delegateType:"focusout"},click:{trigger:function(){if(this.type==="checkbox"&&this.click&&nodeName(this,"input")){this.click();return false}},_default:function(event){return nodeName(event.target,"a")}},beforeunload:{postDispatch:function(event){if(event.result!==undefined&&event.originalEvent){event.originalEvent.returnValue=event.result}}}}};jQuery.removeEvent=function(elem,type,handle){if(elem.removeEventListener){elem.removeEventListener(type,handle)}};jQuery.Event=function(src,props){if(!(this instanceof jQuery.Event)){return new jQuery.Event(src,props)}if(src&&src.type){this.originalEvent=src;this.type=src.type;this.isDefaultPrevented=src.defaultPrevented||src.defaultPrevented===undefined&&src.returnValue===false?returnTrue:returnFalse;this.target=src.target&&src.target.nodeType===3?src.target.parentNode:src.target;this.currentTarget=src.currentTarget;this.relatedTarget=src.relatedTarget}else{this.type=src}if(props){jQuery.extend(this,props)}this.timeStamp=src&&src.timeStamp||Date.now();this[jQuery.expando]=true};jQuery.Event.prototype={constructor:jQuery.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,isSimulated:false,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=returnTrue;if(e&&!this.isSimulated){e.preventDefault()}},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=returnTrue;if(e&&!this.isSimulated){e.stopPropagation()}},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=returnTrue;if(e&&!this.isSimulated){e.stopImmediatePropagation()}this.stopPropagation()}};jQuery.each({altKey:true,bubbles:true,cancelable:true,changedTouches:true,ctrlKey:true,detail:true,eventPhase:true,metaKey:true,pageX:true,pageY:true,shiftKey:true,view:true,char:true,charCode:true,key:true,keyCode:true,button:true,buttons:true,clientX:true,clientY:true,offsetX:true,offsetY:true,pointerId:true,pointerType:true,screenX:true,screenY:true,targetTouches:true,toElement:true,touches:true,which:function(event){var button=event.button;if(event.which==null&&rkeyEvent.test(event.type)){return event.charCode!=null?event.charCode:event.keyCode}if(!event.which&&button!==undefined&&rmouseEvent.test(event.type)){if(button&1){return 1}if(button&2){return 3}if(button&4){return 2}return 0}return event.which}},jQuery.event.addProp);jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(orig,fix){jQuery.event.special[orig]={delegateType:fix,bindType:fix,handle:function(event){var ret,target=this,related=event.relatedTarget,handleObj=event.handleObj;if(!related||related!==target&&!jQuery.contains(target,related)){event.type=handleObj.origType;ret=handleObj.handler.apply(this,arguments);event.type=fix}return ret}}});jQuery.fn.extend({on:function(types,selector,data,fn){return on(this,types,selector,data,fn)},one:function(types,selector,data,fn){return on(this,types,selector,data,fn,1)},off:function(types,selector,fn){var handleObj,type;if(types&&types.preventDefault&&types.handleObj){handleObj=types.handleObj;jQuery(types.delegateTarget).off(handleObj.namespace?handleObj.origType+"."+handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler);return this}if(typeof types==="object"){for(type in types){this.off(type,selector,types[type])}return this}if(selector===false||typeof selector==="function"){fn=selector;selector=undefined}if(fn===false){fn=returnFalse}return this.each(function(){jQuery.event.remove(this,types,fn,selector)})}});var rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,rnoInnerhtml=/<script|<style|<link/i,rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rcleanScript=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function manipulationTarget(elem,content){if(nodeName(elem,"table")&&nodeName(content.nodeType!==11?content:content.firstChild,"tr")){return jQuery(elem).children("tbody")[0]||elem}return elem}function disableScript(elem){elem.type=(elem.getAttribute("type")!==null)+"/"+elem.type;return elem}function restoreScript(elem){if((elem.type||"").slice(0,5)==="true/"){elem.type=elem.type.slice(5)}else{elem.removeAttribute("type")}return elem}function cloneCopyEvent(src,dest){var i,l,type,pdataOld,pdataCur,udataOld,udataCur,events;if(dest.nodeType!==1){return}if(dataPriv.hasData(src)){pdataOld=dataPriv.access(src);pdataCur=dataPriv.set(dest,pdataOld);events=pdataOld.events;if(events){delete pdataCur.handle;pdataCur.events={};for(type in events){for(i=0,l=events[type].length;i<l;i++){jQuery.event.add(dest,type,events[type][i])}}}}if(dataUser.hasData(src)){udataOld=dataUser.access(src);udataCur=jQuery.extend({},udataOld);dataUser.set(dest,udataCur)}}function fixInput(src,dest){var nodeName=dest.nodeName.toLowerCase();if(nodeName==="input"&&rcheckableType.test(src.type)){dest.checked=src.checked}else if(nodeName==="input"||nodeName==="textarea"){dest.defaultValue=src.defaultValue}}function domManip(collection,args,callback,ignored){args=concat.apply([],args);var fragment,first,scripts,hasScripts,node,doc,i=0,l=collection.length,iNoClone=l-1,value=args[0],valueIsFunction=isFunction(value);if(valueIsFunction||l>1&&typeof value==="string"&&!support.checkClone&&rchecked.test(value)){return collection.each(function(index){var self=collection.eq(index);if(valueIsFunction){args[0]=value.call(this,index,self.html())}domManip(self,args,callback,ignored)})}if(l){fragment=buildFragment(args,collection[0].ownerDocument,false,collection,ignored);first=fragment.firstChild;if(fragment.childNodes.length===1){fragment=first}if(first||ignored){scripts=jQuery.map(getAll(fragment,"script"),disableScript);hasScripts=scripts.length;for(;i<l;i++){node=fragment;if(i!==iNoClone){node=jQuery.clone(node,true,true);if(hasScripts){jQuery.merge(scripts,getAll(node,"script"))}}callback.call(collection[i],node,i)}if(hasScripts){doc=scripts[scripts.length-1].ownerDocument;jQuery.map(scripts,restoreScript);for(i=0;i<hasScripts;i++){node=scripts[i];if(rscriptType.test(node.type||"")&&!dataPriv.access(node,"globalEval")&&jQuery.contains(doc,node)){if(node.src&&(node.type||"").toLowerCase()!=="module"){if(jQuery._evalUrl){jQuery._evalUrl(node.src)}}else{DOMEval(node.textContent.replace(rcleanScript,""),doc,node)}}}}}}return collection}function remove(elem,selector,keepData){var node,nodes=selector?jQuery.filter(selector,elem):elem,i=0;for(;(node=nodes[i])!=null;i++){if(!keepData&&node.nodeType===1){jQuery.cleanData(getAll(node))}if(node.parentNode){if(keepData&&jQuery.contains(node.ownerDocument,node)){setGlobalEval(getAll(node,"script"))}node.parentNode.removeChild(node)}}return elem}jQuery.extend({htmlPrefilter:function(html){return html.replace(rxhtmlTag,"<$1></$2>")},clone:function(elem,dataAndEvents,deepDataAndEvents){var i,l,srcElements,destElements,clone=elem.cloneNode(true),inPage=jQuery.contains(elem.ownerDocument,elem);if(!support.noCloneChecked&&(elem.nodeType===1||elem.nodeType===11)&&!jQuery.isXMLDoc(elem)){destElements=getAll(clone);srcElements=getAll(elem);for(i=0,l=srcElements.length;i<l;i++){fixInput(srcElements[i],destElements[i])}}if(dataAndEvents){if(deepDataAndEvents){srcElements=srcElements||getAll(elem);destElements=destElements||getAll(clone);for(i=0,l=srcElements.length;i<l;i++){cloneCopyEvent(srcElements[i],destElements[i])}}else{cloneCopyEvent(elem,clone)}}destElements=getAll(clone,"script");if(destElements.length>0){setGlobalEval(destElements,!inPage&&getAll(elem,"script"))}return clone},cleanData:function(elems){var data,elem,type,special=jQuery.event.special,i=0;for(;(elem=elems[i])!==undefined;i++){if(acceptData(elem)){if(data=elem[dataPriv.expando]){if(data.events){for(type in data.events){if(special[type]){jQuery.event.remove(elem,type)}else{jQuery.removeEvent(elem,type,data.handle)}}}elem[dataPriv.expando]=undefined}if(elem[dataUser.expando]){elem[dataUser.expando]=undefined}}}}});jQuery.fn.extend({detach:function(selector){return remove(this,selector,true)},remove:function(selector){return remove(this,selector)},text:function(value){return access(this,function(value){return value===undefined?jQuery.text(this):this.empty().each(function(){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){this.textContent=value}})},null,value,arguments.length)},append:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.appendChild(elem)}})},prepend:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild)}})},before:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this)}})},after:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling)}})},empty:function(){var elem,i=0;for(;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.textContent=""}}return this},clone:function(dataAndEvents,deepDataAndEvents){dataAndEvents=dataAndEvents==null?false:dataAndEvents;deepDataAndEvents=deepDataAndEvents==null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function(value){return access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined&&elem.nodeType===1){return elem.innerHTML}if(typeof value==="string"&&!rnoInnerhtml.test(value)&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=jQuery.htmlPrefilter(value);try{for(;i<l;i++){elem=this[i]||{};if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.innerHTML=value}}elem=0}catch(e){}}if(elem){this.empty().append(value)}},null,value,arguments.length)},replaceWith:function(){var ignored=[];return domManip(this,arguments,function(elem){var parent=this.parentNode;if(jQuery.inArray(this,ignored)<0){jQuery.cleanData(getAll(this));if(parent){parent.replaceChild(elem,this)}}},ignored)}});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var elems,ret=[],insert=jQuery(selector),last=insert.length-1,i=0;for(;i<=last;i++){elems=i===last?this:this.clone(true);jQuery(insert[i])[original](elems);push.apply(ret,elems.get())}return this.pushStack(ret)}});var rnumnonpx=new RegExp("^("+pnum+")(?!px)[a-z%]+$","i");var getStyles=function(elem){var view=elem.ownerDocument.defaultView;if(!view||!view.opener){view=window}return view.getComputedStyle(elem)};var rboxStyle=new RegExp(cssExpand.join("|"),"i");(function(){function computeStyleTests(){if(!div){return}container.style.cssText="position:absolute;left:-11111px;width:60px;"+"margin-top:1px;padding:0;border:0";div.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;"+"margin:auto;border:1px;padding:1px;"+"width:60%;top:1%";documentElement.appendChild(container).appendChild(div);var divStyle=window.getComputedStyle(div);pixelPositionVal=divStyle.top!=="1%";reliableMarginLeftVal=roundPixelMeasures(divStyle.marginLeft)===12;div.style.right="60%";pixelBoxStylesVal=roundPixelMeasures(divStyle.right)===36;boxSizingReliableVal=roundPixelMeasures(divStyle.width)===36;div.style.position="absolute";scrollboxSizeVal=div.offsetWidth===36||"absolute";documentElement.removeChild(container);div=null}function roundPixelMeasures(measure){return Math.round(parseFloat(measure))}var pixelPositionVal,boxSizingReliableVal,scrollboxSizeVal,pixelBoxStylesVal,reliableMarginLeftVal,container=document.createElement("div"),div=document.createElement("div");if(!div.style){return}div.style.backgroundClip="content-box";div.cloneNode(true).style.backgroundClip="";support.clearCloneStyle=div.style.backgroundClip==="content-box";jQuery.extend(support,{boxSizingReliable:function(){computeStyleTests();return boxSizingReliableVal},pixelBoxStyles:function(){computeStyleTests();return pixelBoxStylesVal},pixelPosition:function(){computeStyleTests();return pixelPositionVal},reliableMarginLeft:function(){computeStyleTests();return reliableMarginLeftVal},scrollboxSize:function(){computeStyleTests();return scrollboxSizeVal}})})();function curCSS(elem,name,computed){var width,minWidth,maxWidth,ret,style=elem.style;computed=computed||getStyles(elem);if(computed){ret=computed.getPropertyValue(name)||computed[name];if(ret===""&&!jQuery.contains(elem.ownerDocument,elem)){ret=jQuery.style(elem,name)}if(!support.pixelBoxStyles()&&rnumnonpx.test(ret)&&rboxStyle.test(name)){width=style.width;minWidth=style.minWidth;maxWidth=style.maxWidth;style.minWidth=style.maxWidth=style.width=ret;ret=computed.width;style.width=width;style.minWidth=minWidth;style.maxWidth=maxWidth}}return ret!==undefined?ret+"":ret}function addGetHookIf(conditionFn,hookFn){return{get:function(){if(conditionFn()){delete this.get;return}return(this.get=hookFn).apply(this,arguments)}}}var rdisplayswap=/^(none|table(?!-c[ea]).+)/,rcustomProp=/^--/,cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"},cssPrefixes=["Webkit","Moz","ms"],emptyStyle=document.createElement("div").style;function vendorPropName(name){if(name in emptyStyle){return name}var capName=name[0].toUpperCase()+name.slice(1),i=cssPrefixes.length;while(i--){name=cssPrefixes[i]+capName;if(name in emptyStyle){return name}}}function finalPropName(name){var ret=jQuery.cssProps[name];if(!ret){ret=jQuery.cssProps[name]=vendorPropName(name)||name}return ret}function setPositiveNumber(elem,value,subtract){var matches=rcssNum.exec(value);return matches?Math.max(0,matches[2]-(subtract||0))+(matches[3]||"px"):value}function boxModelAdjustment(elem,dimension,box,isBorderBox,styles,computedVal){var i=dimension==="width"?1:0,extra=0,delta=0;if(box===(isBorderBox?"border":"content")){return 0}for(;i<4;i+=2){if(box==="margin"){delta+=jQuery.css(elem,box+cssExpand[i],true,styles)}if(!isBorderBox){delta+=jQuery.css(elem,"padding"+cssExpand[i],true,styles);if(box!=="padding"){delta+=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles)}else{extra+=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles)}}else{if(box==="content"){delta-=jQuery.css(elem,"padding"+cssExpand[i],true,styles)}if(box!=="margin"){delta-=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles)}}}if(!isBorderBox&&computedVal>=0){delta+=Math.max(0,Math.ceil(elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)]-computedVal-delta-extra-.5))}return delta}function getWidthOrHeight(elem,dimension,extra){var styles=getStyles(elem),val=curCSS(elem,dimension,styles),isBorderBox=jQuery.css(elem,"boxSizing",false,styles)==="border-box",valueIsBorderBox=isBorderBox;if(rnumnonpx.test(val)){if(!extra){return val}val="auto"}valueIsBorderBox=valueIsBorderBox&&(support.boxSizingReliable()||val===elem.style[dimension]);if(val==="auto"||!parseFloat(val)&&jQuery.css(elem,"display",false,styles)==="inline"){val=elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)];valueIsBorderBox=true}val=parseFloat(val)||0;return val+boxModelAdjustment(elem,dimension,extra||(isBorderBox?"border":"content"),valueIsBorderBox,styles,val)+"px"}jQuery.extend({cssHooks:{opacity:{get:function(elem,computed){if(computed){var ret=curCSS(elem,"opacity");return ret===""?"1":ret}}}},cssNumber:{animationIterationCount:true,columnCount:true,fillOpacity:true,flexGrow:true,flexShrink:true,fontWeight:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{},style:function(elem,name,value,extra){if(!elem||elem.nodeType===3||elem.nodeType===8||!elem.style){return}var ret,type,hooks,origName=camelCase(name),isCustomProp=rcustomProp.test(name),style=elem.style;if(!isCustomProp){name=finalPropName(origName)}hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(value!==undefined){type=typeof value;if(type==="string"&&(ret=rcssNum.exec(value))&&ret[1]){value=adjustCSS(elem,name,ret);type="number"}if(value==null||value!==value){return}if(type==="number"){value+=ret&&ret[3]||(jQuery.cssNumber[origName]?"":"px")}if(!support.clearCloneStyle&&value===""&&name.indexOf("background")===0){style[name]="inherit"}if(!hooks||!("set"in hooks)||(value=hooks.set(elem,value,extra))!==undefined){if(isCustomProp){style.setProperty(name,value)}else{style[name]=value}}}else{if(hooks&&"get"in hooks&&(ret=hooks.get(elem,false,extra))!==undefined){return ret}return style[name]}},css:function(elem,name,extra,styles){var val,num,hooks,origName=camelCase(name),isCustomProp=rcustomProp.test(name);if(!isCustomProp){name=finalPropName(origName)}hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(hooks&&"get"in hooks){val=hooks.get(elem,true,extra)}if(val===undefined){val=curCSS(elem,name,styles)}if(val==="normal"&&name in cssNormalTransform){val=cssNormalTransform[name]}if(extra===""||extra){num=parseFloat(val);return extra===true||isFinite(num)?num||0:val}return val}});jQuery.each(["height","width"],function(i,dimension){jQuery.cssHooks[dimension]={get:function(elem,computed,extra){if(computed){return rdisplayswap.test(jQuery.css(elem,"display"))&&(!elem.getClientRects().length||!elem.getBoundingClientRect().width)?swap(elem,cssShow,function(){return getWidthOrHeight(elem,dimension,extra)}):getWidthOrHeight(elem,dimension,extra)}},set:function(elem,value,extra){var matches,styles=getStyles(elem),isBorderBox=jQuery.css(elem,"boxSizing",false,styles)==="border-box",subtract=extra&&boxModelAdjustment(elem,dimension,extra,isBorderBox,styles);if(isBorderBox&&support.scrollboxSize()===styles.position){subtract-=Math.ceil(elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)]-parseFloat(styles[dimension])-boxModelAdjustment(elem,dimension,"border",false,styles)-.5)}if(subtract&&(matches=rcssNum.exec(value))&&(matches[3]||"px")!=="px"){elem.style[dimension]=value;value=jQuery.css(elem,dimension)}return setPositiveNumber(elem,value,subtract)}}});jQuery.cssHooks.marginLeft=addGetHookIf(support.reliableMarginLeft,function(elem,computed){if(computed){return(parseFloat(curCSS(elem,"marginLeft"))||elem.getBoundingClientRect().left-swap(elem,{marginLeft:0},function(){return elem.getBoundingClientRect().left}))+"px"}});jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){var i=0,expanded={},parts=typeof value==="string"?value.split(" "):[value];for(;i<4;i++){expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0]}return expanded}};if(prefix!=="margin"){jQuery.cssHooks[prefix+suffix].set=setPositiveNumber}});jQuery.fn.extend({css:function(name,value){return access(this,function(elem,name,value){var styles,len,map={},i=0;if(Array.isArray(name)){styles=getStyles(elem);len=name.length;for(;i<len;i++){map[name[i]]=jQuery.css(elem,name[i],false,styles)}return map}return value!==undefined?jQuery.style(elem,name,value):jQuery.css(elem,name)},name,value,arguments.length>1)}});function Tween(elem,options,prop,end,easing){return new Tween.prototype.init(elem,options,prop,end,easing)}jQuery.Tween=Tween;Tween.prototype={constructor:Tween,init:function(elem,options,prop,end,easing,unit){this.elem=elem;this.prop=prop;this.easing=easing||jQuery.easing._default;this.options=options;this.start=this.now=this.cur();this.end=end;this.unit=unit||(jQuery.cssNumber[prop]?"":"px")},cur:function(){var hooks=Tween.propHooks[this.prop];return hooks&&hooks.get?hooks.get(this):Tween.propHooks._default.get(this)},run:function(percent){var eased,hooks=Tween.propHooks[this.prop];if(this.options.duration){this.pos=eased=jQuery.easing[this.easing](percent,this.options.duration*percent,0,1,this.options.duration)}else{this.pos=eased=percent}this.now=(this.end-this.start)*eased+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this)}if(hooks&&hooks.set){hooks.set(this)}else{Tween.propHooks._default.set(this)}return this}};Tween.prototype.init.prototype=Tween.prototype;Tween.propHooks={_default:{get:function(tween){var result;if(tween.elem.nodeType!==1||tween.elem[tween.prop]!=null&&tween.elem.style[tween.prop]==null){return tween.elem[tween.prop]}result=jQuery.css(tween.elem,tween.prop,"");return!result||result==="auto"?0:result},set:function(tween){if(jQuery.fx.step[tween.prop]){jQuery.fx.step[tween.prop](tween)}else if(tween.elem.nodeType===1&&(tween.elem.style[jQuery.cssProps[tween.prop]]!=null||jQuery.cssHooks[tween.prop])){jQuery.style(tween.elem,tween.prop,tween.now+tween.unit)}else{tween.elem[tween.prop]=tween.now}}}};Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(tween){if(tween.elem.nodeType&&tween.elem.parentNode){tween.elem[tween.prop]=tween.now}}};jQuery.easing={linear:function(p){return p},swing:function(p){return.5-Math.cos(p*Math.PI)/2},_default:"swing"};jQuery.fx=Tween.prototype.init;jQuery.fx.step={};var fxNow,inProgress,rfxtypes=/^(?:toggle|show|hide)$/,rrun=/queueHooks$/;function schedule(){if(inProgress){if(document.hidden===false&&window.requestAnimationFrame){window.requestAnimationFrame(schedule)}else{window.setTimeout(schedule,jQuery.fx.interval)}jQuery.fx.tick()}}function createFxNow(){window.setTimeout(function(){fxNow=undefined});return fxNow=Date.now()}function genFx(type,includeWidth){var which,i=0,attrs={height:type};includeWidth=includeWidth?1:0;for(;i<4;i+=2-includeWidth){which=cssExpand[i];attrs["margin"+which]=attrs["padding"+which]=type}if(includeWidth){attrs.opacity=attrs.width=type}return attrs}function createTween(value,prop,animation){var tween,collection=(Animation.tweeners[prop]||[]).concat(Animation.tweeners["*"]),index=0,length=collection.length;for(;index<length;index++){if(tween=collection[index].call(animation,prop,value)){return tween}}}function defaultPrefilter(elem,props,opts){var prop,value,toggle,hooks,oldfire,propTween,restoreDisplay,display,isBox="width"in props||"height"in props,anim=this,orig={},style=elem.style,hidden=elem.nodeType&&isHiddenWithinTree(elem),dataShow=dataPriv.get(elem,"fxshow");if(!opts.queue){hooks=jQuery._queueHooks(elem,"fx");if(hooks.unqueued==null){hooks.unqueued=0;oldfire=hooks.empty.fire;hooks.empty.fire=function(){if(!hooks.unqueued){oldfire()}}}hooks.unqueued++;anim.always(function(){anim.always(function(){hooks.unqueued--;if(!jQuery.queue(elem,"fx").length){hooks.empty.fire()}})})}for(prop in props){value=props[prop];if(rfxtypes.test(value)){delete props[prop];toggle=toggle||value==="toggle";if(value===(hidden?"hide":"show")){if(value==="show"&&dataShow&&dataShow[prop]!==undefined){hidden=true}else{continue}}orig[prop]=dataShow&&dataShow[prop]||jQuery.style(elem,prop)}}propTween=!jQuery.isEmptyObject(props);if(!propTween&&jQuery.isEmptyObject(orig)){return}if(isBox&&elem.nodeType===1){opts.overflow=[style.overflow,style.overflowX,style.overflowY];restoreDisplay=dataShow&&dataShow.display;if(restoreDisplay==null){restoreDisplay=dataPriv.get(elem,"display")}display=jQuery.css(elem,"display");if(display==="none"){if(restoreDisplay){display=restoreDisplay}else{showHide([elem],true);restoreDisplay=elem.style.display||restoreDisplay;display=jQuery.css(elem,"display");showHide([elem])}}if(display==="inline"||display==="inline-block"&&restoreDisplay!=null){if(jQuery.css(elem,"float")==="none"){if(!propTween){anim.done(function(){style.display=restoreDisplay});if(restoreDisplay==null){display=style.display;restoreDisplay=display==="none"?"":display}}style.display="inline-block"}}}if(opts.overflow){style.overflow="hidden";anim.always(function(){style.overflow=opts.overflow[0];style.overflowX=opts.overflow[1];style.overflowY=opts.overflow[2]})}propTween=false;for(prop in orig){if(!propTween){if(dataShow){if("hidden"in dataShow){hidden=dataShow.hidden}}else{dataShow=dataPriv.access(elem,"fxshow",{display:restoreDisplay})}if(toggle){dataShow.hidden=!hidden}if(hidden){showHide([elem],true)}anim.done(function(){if(!hidden){showHide([elem])}dataPriv.remove(elem,"fxshow");for(prop in orig){jQuery.style(elem,prop,orig[prop])}})}propTween=createTween(hidden?dataShow[prop]:0,prop,anim);if(!(prop in dataShow)){dataShow[prop]=propTween.start;if(hidden){propTween.end=propTween.start;propTween.start=0}}}}function propFilter(props,specialEasing){var index,name,easing,value,hooks;for(index in props){name=camelCase(index);easing=specialEasing[name];value=props[index];if(Array.isArray(value)){easing=value[1];value=props[index]=value[0]}if(index!==name){props[name]=value;delete props[index]}hooks=jQuery.cssHooks[name];if(hooks&&"expand"in hooks){value=hooks.expand(value);delete props[name];for(index in value){if(!(index in props)){props[index]=value[index];specialEasing[index]=easing}}}else{specialEasing[name]=easing}}}function Animation(elem,properties,options){var result,stopped,index=0,length=Animation.prefilters.length,deferred=jQuery.Deferred().always(function(){delete tick.elem}),tick=function(){if(stopped){return false}var currentTime=fxNow||createFxNow(),remaining=Math.max(0,animation.startTime+animation.duration-currentTime),temp=remaining/animation.duration||0,percent=1-temp,index=0,length=animation.tweens.length;for(;index<length;index++){animation.tweens[index].run(percent)}deferred.notifyWith(elem,[animation,percent,remaining]);if(percent<1&&length){return remaining}if(!length){deferred.notifyWith(elem,[animation,1,0])}deferred.resolveWith(elem,[animation]);return false},animation=deferred.promise({elem:elem,props:jQuery.extend({},properties),opts:jQuery.extend(true,{specialEasing:{},easing:jQuery.easing._default},options),originalProperties:properties,originalOptions:options,startTime:fxNow||createFxNow(),duration:options.duration,tweens:[],createTween:function(prop,end){var tween=jQuery.Tween(elem,animation.opts,prop,end,animation.opts.specialEasing[prop]||animation.opts.easing);animation.tweens.push(tween);return tween},stop:function(gotoEnd){var index=0,length=gotoEnd?animation.tweens.length:0;if(stopped){return this}stopped=true;for(;index<length;index++){animation.tweens[index].run(1)}if(gotoEnd){deferred.notifyWith(elem,[animation,1,0]);deferred.resolveWith(elem,[animation,gotoEnd])}else{deferred.rejectWith(elem,[animation,gotoEnd])}return this}}),props=animation.props;propFilter(props,animation.opts.specialEasing);for(;index<length;index++){result=Animation.prefilters[index].call(animation,elem,props,animation.opts);if(result){if(isFunction(result.stop)){jQuery._queueHooks(animation.elem,animation.opts.queue).stop=result.stop.bind(result)}return result}}jQuery.map(props,createTween,animation);if(isFunction(animation.opts.start)){animation.opts.start.call(elem,animation)}animation.progress(animation.opts.progress).done(animation.opts.done,animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);jQuery.fx.timer(jQuery.extend(tick,{elem:elem,anim:animation,queue:animation.opts.queue})) +;return animation}jQuery.Animation=jQuery.extend(Animation,{tweeners:{"*":[function(prop,value){var tween=this.createTween(prop,value);adjustCSS(tween.elem,prop,rcssNum.exec(value),tween);return tween}]},tweener:function(props,callback){if(isFunction(props)){callback=props;props=["*"]}else{props=props.match(rnothtmlwhite)}var prop,index=0,length=props.length;for(;index<length;index++){prop=props[index];Animation.tweeners[prop]=Animation.tweeners[prop]||[];Animation.tweeners[prop].unshift(callback)}},prefilters:[defaultPrefilter],prefilter:function(callback,prepend){if(prepend){Animation.prefilters.unshift(callback)}else{Animation.prefilters.push(callback)}}});jQuery.speed=function(speed,easing,fn){var opt=speed&&typeof speed==="object"?jQuery.extend({},speed):{complete:fn||!fn&&easing||isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!isFunction(easing)&&easing};if(jQuery.fx.off){opt.duration=0}else{if(typeof opt.duration!=="number"){if(opt.duration in jQuery.fx.speeds){opt.duration=jQuery.fx.speeds[opt.duration]}else{opt.duration=jQuery.fx.speeds._default}}}if(opt.queue==null||opt.queue===true){opt.queue="fx"}opt.old=opt.complete;opt.complete=function(){if(isFunction(opt.old)){opt.old.call(this)}if(opt.queue){jQuery.dequeue(this,opt.queue)}};return opt};jQuery.fn.extend({fadeTo:function(speed,to,easing,callback){return this.filter(isHiddenWithinTree).css("opacity",0).show().end().animate({opacity:to},speed,easing,callback)},animate:function(prop,speed,easing,callback){var empty=jQuery.isEmptyObject(prop),optall=jQuery.speed(speed,easing,callback),doAnimation=function(){var anim=Animation(this,jQuery.extend({},prop),optall);if(empty||dataPriv.get(this,"finish")){anim.stop(true)}};doAnimation.finish=doAnimation;return empty||optall.queue===false?this.each(doAnimation):this.queue(optall.queue,doAnimation)},stop:function(type,clearQueue,gotoEnd){var stopQueue=function(hooks){var stop=hooks.stop;delete hooks.stop;stop(gotoEnd)};if(typeof type!=="string"){gotoEnd=clearQueue;clearQueue=type;type=undefined}if(clearQueue&&type!==false){this.queue(type||"fx",[])}return this.each(function(){var dequeue=true,index=type!=null&&type+"queueHooks",timers=jQuery.timers,data=dataPriv.get(this);if(index){if(data[index]&&data[index].stop){stopQueue(data[index])}}else{for(index in data){if(data[index]&&data[index].stop&&rrun.test(index)){stopQueue(data[index])}}}for(index=timers.length;index--;){if(timers[index].elem===this&&(type==null||timers[index].queue===type)){timers[index].anim.stop(gotoEnd);dequeue=false;timers.splice(index,1)}}if(dequeue||!gotoEnd){jQuery.dequeue(this,type)}})},finish:function(type){if(type!==false){type=type||"fx"}return this.each(function(){var index,data=dataPriv.get(this),queue=data[type+"queue"],hooks=data[type+"queueHooks"],timers=jQuery.timers,length=queue?queue.length:0;data.finish=true;jQuery.queue(this,type,[]);if(hooks&&hooks.stop){hooks.stop.call(this,true)}for(index=timers.length;index--;){if(timers[index].elem===this&&timers[index].queue===type){timers[index].anim.stop(true);timers.splice(index,1)}}for(index=0;index<length;index++){if(queue[index]&&queue[index].finish){queue[index].finish.call(this)}}delete data.finish})}});jQuery.each(["toggle","show","hide"],function(i,name){var cssFn=jQuery.fn[name];jQuery.fn[name]=function(speed,easing,callback){return speed==null||typeof speed==="boolean"?cssFn.apply(this,arguments):this.animate(genFx(name,true),speed,easing,callback)}});jQuery.each({slideDown:genFx("show"),slideUp:genFx("hide"),slideToggle:genFx("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(name,props){jQuery.fn[name]=function(speed,easing,callback){return this.animate(props,speed,easing,callback)}});jQuery.timers=[];jQuery.fx.tick=function(){var timer,i=0,timers=jQuery.timers;fxNow=Date.now();for(;i<timers.length;i++){timer=timers[i];if(!timer()&&timers[i]===timer){timers.splice(i--,1)}}if(!timers.length){jQuery.fx.stop()}fxNow=undefined};jQuery.fx.timer=function(timer){jQuery.timers.push(timer);jQuery.fx.start()};jQuery.fx.interval=13;jQuery.fx.start=function(){if(inProgress){return}inProgress=true;schedule()};jQuery.fx.stop=function(){inProgress=null};jQuery.fx.speeds={slow:600,fast:200,_default:400};jQuery.fn.delay=function(time,type){time=jQuery.fx?jQuery.fx.speeds[time]||time:time;type=type||"fx";return this.queue(type,function(next,hooks){var timeout=window.setTimeout(next,time);hooks.stop=function(){window.clearTimeout(timeout)}})};(function(){var input=document.createElement("input"),select=document.createElement("select"),opt=select.appendChild(document.createElement("option"));input.type="checkbox";support.checkOn=input.value!=="";support.optSelected=opt.selected;input=document.createElement("input");input.value="t";input.type="radio";support.radioValue=input.value==="t"})();var boolHook,attrHandle=jQuery.expr.attrHandle;jQuery.fn.extend({attr:function(name,value){return access(this,jQuery.attr,name,value,arguments.length>1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})}});jQuery.extend({attr:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return}if(typeof elem.getAttribute==="undefined"){return jQuery.prop(elem,name,value)}if(nType!==1||!jQuery.isXMLDoc(elem)){hooks=jQuery.attrHooks[name.toLowerCase()]||(jQuery.expr.match.bool.test(name)?boolHook:undefined)}if(value!==undefined){if(value===null){jQuery.removeAttr(elem,name);return}if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}elem.setAttribute(name,value+"");return value}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}ret=jQuery.find.attr(elem,name);return ret==null?undefined:ret},attrHooks:{type:{set:function(elem,value){if(!support.radioValue&&value==="radio"&&nodeName(elem,"input")){var val=elem.value;elem.setAttribute("type",value);if(val){elem.value=val}return value}}}},removeAttr:function(elem,value){var name,i=0,attrNames=value&&value.match(rnothtmlwhite);if(attrNames&&elem.nodeType===1){while(name=attrNames[i++]){elem.removeAttribute(name)}}}});boolHook={set:function(elem,value,name){if(value===false){jQuery.removeAttr(elem,name)}else{elem.setAttribute(name,name)}return name}};jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(i,name){var getter=attrHandle[name]||jQuery.find.attr;attrHandle[name]=function(elem,name,isXML){var ret,handle,lowercaseName=name.toLowerCase();if(!isXML){handle=attrHandle[lowercaseName];attrHandle[lowercaseName]=ret;ret=getter(elem,name,isXML)!=null?lowercaseName:null;attrHandle[lowercaseName]=handle}return ret}});var rfocusable=/^(?:input|select|textarea|button)$/i,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function(name,value){return access(this,jQuery.prop,name,value,arguments.length>1)},removeProp:function(name){return this.each(function(){delete this[jQuery.propFix[name]||name]})}});jQuery.extend({prop:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return}if(nType!==1||!jQuery.isXMLDoc(elem)){name=jQuery.propFix[name]||name;hooks=jQuery.propHooks[name]}if(value!==undefined){if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}return elem[name]=value}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}return elem[name]},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");if(tabindex){return parseInt(tabindex,10)}if(rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href){return 0}return-1}}},propFix:{for:"htmlFor",class:"className"}});if(!support.optSelected){jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;if(parent&&parent.parentNode){parent.parentNode.selectedIndex}return null},set:function(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex}}}}}jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this});function stripAndCollapse(value){var tokens=value.match(rnothtmlwhite)||[];return tokens.join(" ")}function getClass(elem){return elem.getAttribute&&elem.getAttribute("class")||""}function classesToArray(value){if(Array.isArray(value)){return value}if(typeof value==="string"){return value.match(rnothtmlwhite)||[]}return[]}jQuery.fn.extend({addClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)))})}classes=classesToArray(value);if(classes.length){while(elem=this[i++]){curValue=getClass(elem);cur=elem.nodeType===1&&" "+stripAndCollapse(curValue)+" ";if(cur){j=0;while(clazz=classes[j++]){if(cur.indexOf(" "+clazz+" ")<0){cur+=clazz+" "}}finalValue=stripAndCollapse(cur);if(curValue!==finalValue){elem.setAttribute("class",finalValue)}}}}return this},removeClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)))})}if(!arguments.length){return this.attr("class","")}classes=classesToArray(value);if(classes.length){while(elem=this[i++]){curValue=getClass(elem);cur=elem.nodeType===1&&" "+stripAndCollapse(curValue)+" ";if(cur){j=0;while(clazz=classes[j++]){while(cur.indexOf(" "+clazz+" ")>-1){cur=cur.replace(" "+clazz+" "," ")}}finalValue=stripAndCollapse(cur);if(curValue!==finalValue){elem.setAttribute("class",finalValue)}}}}return this},toggleClass:function(value,stateVal){var type=typeof value,isValidValue=type==="string"||Array.isArray(value);if(typeof stateVal==="boolean"&&isValidValue){return stateVal?this.addClass(value):this.removeClass(value)}if(isFunction(value)){return this.each(function(i){jQuery(this).toggleClass(value.call(this,i,getClass(this),stateVal),stateVal)})}return this.each(function(){var className,i,self,classNames;if(isValidValue){i=0;self=jQuery(this);classNames=classesToArray(value);while(className=classNames[i++]){if(self.hasClass(className)){self.removeClass(className)}else{self.addClass(className)}}}else if(value===undefined||type==="boolean"){className=getClass(this);if(className){dataPriv.set(this,"__className__",className)}if(this.setAttribute){this.setAttribute("class",className||value===false?"":dataPriv.get(this,"__className__")||"")}}})},hasClass:function(selector){var className,elem,i=0;className=" "+selector+" ";while(elem=this[i++]){if(elem.nodeType===1&&(" "+stripAndCollapse(getClass(elem))+" ").indexOf(className)>-1){return true}}return false}});var rreturn=/\r/g;jQuery.fn.extend({val:function(value){var hooks,ret,valueIsFunction,elem=this[0];if(!arguments.length){if(elem){hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()];if(hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined){return ret}ret=elem.value;if(typeof ret==="string"){return ret.replace(rreturn,"")}return ret==null?"":ret}return}valueIsFunction=isFunction(value);return this.each(function(i){var val;if(this.nodeType!==1){return}if(valueIsFunction){val=value.call(this,i,jQuery(this).val())}else{val=value}if(val==null){val=""}else if(typeof val==="number"){val+=""}else if(Array.isArray(val)){val=jQuery.map(val,function(value){return value==null?"":value+""})}hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()];if(!hooks||!("set"in hooks)||hooks.set(this,val,"value")===undefined){this.value=val}})}});jQuery.extend({valHooks:{option:{get:function(elem){var val=jQuery.find.attr(elem,"value");return val!=null?val:stripAndCollapse(jQuery.text(elem))}},select:{get:function(elem){var value,option,i,options=elem.options,index=elem.selectedIndex,one=elem.type==="select-one",values=one?null:[],max=one?index+1:options.length;if(index<0){i=max}else{i=one?index:0}for(;i<max;i++){option=options[i];if((option.selected||i===index)&&!option.disabled&&(!option.parentNode.disabled||!nodeName(option.parentNode,"optgroup"))){value=jQuery(option).val();if(one){return value}values.push(value)}}return values},set:function(elem,value){var optionSet,option,options=elem.options,values=jQuery.makeArray(value),i=options.length;while(i--){option=options[i];if(option.selected=jQuery.inArray(jQuery.valHooks.option.get(option),values)>-1){optionSet=true}}if(!optionSet){elem.selectedIndex=-1}return values}}}});jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={set:function(elem,value){if(Array.isArray(value)){return elem.checked=jQuery.inArray(jQuery(elem).val(),value)>-1}}};if(!support.checkOn){jQuery.valHooks[this].get=function(elem){return elem.getAttribute("value")===null?"on":elem.value}}});support.focusin="onfocusin"in window;var rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,stopPropagationCallback=function(e){e.stopPropagation()};jQuery.extend(jQuery.event,{trigger:function(event,data,elem,onlyHandlers){var i,cur,tmp,bubbleType,ontype,handle,special,lastElement,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];cur=lastElement=tmp=elem=elem||document;if(elem.nodeType===3||elem.nodeType===8){return}if(rfocusMorph.test(type+jQuery.event.triggered)){return}if(type.indexOf(".")>-1){namespaces=type.split(".");type=namespaces.shift();namespaces.sort()}ontype=type.indexOf(":")<0&&"on"+type;event=event[jQuery.expando]?event:new jQuery.Event(type,typeof event==="object"&&event);event.isTrigger=onlyHandlers?2:3;event.namespace=namespaces.join(".");event.rnamespace=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;event.result=undefined;if(!event.target){event.target=elem}data=data==null?[event]:jQuery.makeArray(data,[event]);special=jQuery.event.special[type]||{};if(!onlyHandlers&&special.trigger&&special.trigger.apply(elem,data)===false){return}if(!onlyHandlers&&!special.noBubble&&!isWindow(elem)){bubbleType=special.delegateType||type;if(!rfocusMorph.test(bubbleType+type)){cur=cur.parentNode}for(;cur;cur=cur.parentNode){eventPath.push(cur);tmp=cur}if(tmp===(elem.ownerDocument||document)){eventPath.push(tmp.defaultView||tmp.parentWindow||window)}}i=0;while((cur=eventPath[i++])&&!event.isPropagationStopped()){lastElement=cur;event.type=i>1?bubbleType:special.bindType||type;handle=(dataPriv.get(cur,"events")||{})[event.type]&&dataPriv.get(cur,"handle");if(handle){handle.apply(cur,data)}handle=ontype&&cur[ontype];if(handle&&handle.apply&&acceptData(cur)){event.result=handle.apply(cur,data);if(event.result===false){event.preventDefault()}}}event.type=type;if(!onlyHandlers&&!event.isDefaultPrevented()){if((!special._default||special._default.apply(eventPath.pop(),data)===false)&&acceptData(elem)){if(ontype&&isFunction(elem[type])&&!isWindow(elem)){tmp=elem[ontype];if(tmp){elem[ontype]=null}jQuery.event.triggered=type;if(event.isPropagationStopped()){lastElement.addEventListener(type,stopPropagationCallback)}elem[type]();if(event.isPropagationStopped()){lastElement.removeEventListener(type,stopPropagationCallback)}jQuery.event.triggered=undefined;if(tmp){elem[ontype]=tmp}}}}return event.result},simulate:function(type,elem,event){var e=jQuery.extend(new jQuery.Event,event,{type:type,isSimulated:true});jQuery.event.trigger(e,null,elem)}});jQuery.fn.extend({trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this)})},triggerHandler:function(type,data){var elem=this[0];if(elem){return jQuery.event.trigger(type,data,elem,true)}}});if(!support.focusin){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event))};jQuery.event.special[fix]={setup:function(){var doc=this.ownerDocument||this,attaches=dataPriv.access(doc,fix);if(!attaches){doc.addEventListener(orig,handler,true)}dataPriv.access(doc,fix,(attaches||0)+1)},teardown:function(){var doc=this.ownerDocument||this,attaches=dataPriv.access(doc,fix)-1;if(!attaches){doc.removeEventListener(orig,handler,true);dataPriv.remove(doc,fix)}else{dataPriv.access(doc,fix,attaches)}}}})}var location=window.location;var nonce=Date.now();var rquery=/\?/;jQuery.parseXML=function(data){var xml;if(!data||typeof data!=="string"){return null}try{xml=(new window.DOMParser).parseFromString(data,"text/xml")}catch(e){xml=undefined}if(!xml||xml.getElementsByTagName("parsererror").length){jQuery.error("Invalid XML: "+data)}return xml};var rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;function buildParams(prefix,obj,traditional,add){var name;if(Array.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||rbracket.test(prefix)){add(prefix,v)}else{buildParams(prefix+"["+(typeof v==="object"&&v!=null?i:"")+"]",v,traditional,add)}})}else if(!traditional&&toType(obj)==="object"){for(name in obj){buildParams(prefix+"["+name+"]",obj[name],traditional,add)}}else{add(prefix,obj)}}jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,valueOrFunction){var value=isFunction(valueOrFunction)?valueOrFunction():valueOrFunction;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value==null?"":value)};if(Array.isArray(a)||a.jquery&&!jQuery.isPlainObject(a)){jQuery.each(a,function(){add(this.name,this.value)})}else{for(prefix in a){buildParams(prefix,a[prefix],traditional,add)}}return s.join("&")};jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!rcheckableType.test(type))}).map(function(i,elem){var val=jQuery(this).val();if(val==null){return null}if(Array.isArray(val)){return jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}})}return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}});var r20=/%20/g,rhash=/#.*$/,rantiCache=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)$/gm,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,prefilters={},transports={},allTypes="*/".concat("*"),originAnchor=document.createElement("a");originAnchor.href=location.href;function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){if(typeof dataTypeExpression!=="string"){func=dataTypeExpression;dataTypeExpression="*"}var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnothtmlwhite)||[];if(isFunction(func)){while(dataType=dataTypes[i++]){if(dataType[0]==="+"){dataType=dataType.slice(1)||"*";(structure[dataType]=structure[dataType]||[]).unshift(func)}else{(structure[dataType]=structure[dataType]||[]).push(func)}}}}}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){var inspected={},seekingTransport=structure===transports;function inspect(dataType){var selected;inspected[dataType]=true;jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);if(typeof dataTypeOrTransport==="string"&&!seekingTransport&&!inspected[dataTypeOrTransport]){options.dataTypes.unshift(dataTypeOrTransport);inspect(dataTypeOrTransport);return false}else if(seekingTransport){return!(selected=dataTypeOrTransport)}});return selected}return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*")}function ajaxExtend(target,src){var key,deep,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src){if(src[key]!==undefined){(flatOptions[key]?target:deep||(deep={}))[key]=src[key]}}if(deep){jQuery.extend(true,target,deep)}return target}function ajaxHandleResponses(s,jqXHR,responses){var ct,type,finalDataType,firstDataType,contents=s.contents,dataTypes=s.dataTypes;while(dataTypes[0]==="*"){dataTypes.shift();if(ct===undefined){ct=s.mimeType||jqXHR.getResponseHeader("Content-Type")}}if(ct){for(type in contents){if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}}}if(dataTypes[0]in responses){finalDataType=dataTypes[0]}else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}if(!firstDataType){firstDataType=type}}finalDataType=finalDataType||firstDataType}if(finalDataType){if(finalDataType!==dataTypes[0]){dataTypes.unshift(finalDataType)}return responses[finalDataType]}}function ajaxConvert(s,response,jqXHR,isSuccess){var conv2,current,conv,tmp,prev,converters={},dataTypes=s.dataTypes.slice();if(dataTypes[1]){for(conv in s.converters){converters[conv.toLowerCase()]=s.converters[conv]}}current=dataTypes.shift();while(current){if(s.responseFields[current]){jqXHR[s.responseFields[current]]=response}if(!prev&&isSuccess&&s.dataFilter){response=s.dataFilter(response,s.dataType)}prev=current;current=dataTypes.shift();if(current){if(current==="*"){current=prev}else if(prev!=="*"&&prev!==current){conv=converters[prev+" "+current]||converters["* "+current];if(!conv){for(conv2 in converters){tmp=conv2.split(" ");if(tmp[1]===current){conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]];if(conv){if(conv===true){conv=converters[conv2]}else if(converters[conv2]!==true){current=tmp[0];dataTypes.unshift(tmp[1])}break}}}}if(conv!==true){if(conv&&s.throws){response=conv(response)}else{try{response=conv(response)}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current}}}}}}}return{state:"success",data:response}}jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:location.href,type:"GET",isLocal:rlocalProtocol.test(location.protocol),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":JSON.parse,"text xml":jQuery.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target)},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){if(typeof url==="object"){options=url;url=undefined}options=options||{};var transport,cacheURL,responseHeadersString,responseHeaders,timeoutTimer,urlAnchor,completed,fireGlobals,i,uncached,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(completed){if(!responseHeaders){responseHeaders={};while(match=rheaders.exec(responseHeadersString)){responseHeaders[match[1].toLowerCase()]=match[2]}}match=responseHeaders[key.toLowerCase()]}return match==null?null:match},getAllResponseHeaders:function(){return completed?responseHeadersString:null},setRequestHeader:function(name,value){if(completed==null){name=requestHeadersNames[name.toLowerCase()]=requestHeadersNames[name.toLowerCase()]||name;requestHeaders[name]=value}return this},overrideMimeType:function(type){if(completed==null){s.mimeType=type}return this},statusCode:function(map){var code;if(map){if(completed){jqXHR.always(map[jqXHR.status])}else{for(code in map){statusCode[code]=[statusCode[code],map[code]]}}}return this},abort:function(statusText){var finalText=statusText||strAbort;if(transport){transport.abort(finalText)}done(0,finalText);return this}};deferred.promise(jqXHR);s.url=((url||s.url||location.href)+"").replace(rprotocol,location.protocol+"//");s.type=options.method||options.type||s.method||s.type;s.dataTypes=(s.dataType||"*").toLowerCase().match(rnothtmlwhite)||[""];if(s.crossDomain==null){urlAnchor=document.createElement("a");try{urlAnchor.href=s.url;urlAnchor.href=urlAnchor.href;s.crossDomain=originAnchor.protocol+"//"+originAnchor.host!==urlAnchor.protocol+"//"+urlAnchor.host}catch(e){s.crossDomain=true}}if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional)}inspectPrefiltersOrTransports(prefilters,s,options,jqXHR);if(completed){return jqXHR}fireGlobals=jQuery.event&&s.global;if(fireGlobals&&jQuery.active++===0){jQuery.event.trigger("ajaxStart")}s.type=s.type.toUpperCase();s.hasContent=!rnoContent.test(s.type);cacheURL=s.url.replace(rhash,"");if(!s.hasContent){uncached=s.url.slice(cacheURL.length);if(s.data&&(s.processData||typeof s.data==="string")){cacheURL+=(rquery.test(cacheURL)?"&":"?")+s.data;delete s.data}if(s.cache===false){cacheURL=cacheURL.replace(rantiCache,"$1");uncached=(rquery.test(cacheURL)?"&":"?")+"_="+nonce+++uncached}s.url=cacheURL+uncached}else if(s.data&&s.processData&&(s.contentType||"").indexOf("application/x-www-form-urlencoded")===0){s.data=s.data.replace(r20,"+")}if(s.ifModified){if(jQuery.lastModified[cacheURL]){jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL])}if(jQuery.etag[cacheURL]){jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL])}}if(s.data&&s.hasContent&&s.contentType!==false||options.contentType){jqXHR.setRequestHeader("Content-Type",s.contentType)}jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+(s.dataTypes[0]!=="*"?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers){jqXHR.setRequestHeader(i,s.headers[i])}if(s.beforeSend&&(s.beforeSend.call(callbackContext,jqXHR,s)===false||completed)){return jqXHR.abort()}strAbort="abort";completeDeferred.add(s.complete);jqXHR.done(s.success);jqXHR.fail(s.error);transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR);if(!transport){done(-1,"No Transport")}else{jqXHR.readyState=1;if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s])}if(completed){return jqXHR}if(s.async&&s.timeout>0){timeoutTimer=window.setTimeout(function(){jqXHR.abort("timeout")},s.timeout)}try{completed=false;transport.send(requestHeaders,done)}catch(e){if(completed){throw e}done(-1,e)}}function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;if(completed){return}completed=true;if(timeoutTimer){window.clearTimeout(timeoutTimer)}transport=undefined;responseHeadersString=headers||"";jqXHR.readyState=status>0?4:0;isSuccess=status>=200&&status<300||status===304;if(responses){response=ajaxHandleResponses(s,jqXHR,responses)}response=ajaxConvert(s,response,jqXHR,isSuccess);if(isSuccess){if(s.ifModified){modified=jqXHR.getResponseHeader("Last-Modified");if(modified){jQuery.lastModified[cacheURL]=modified}modified=jqXHR.getResponseHeader("etag");if(modified){jQuery.etag[cacheURL]=modified}}if(status===204||s.type==="HEAD"){statusText="nocontent"}else if(status===304){statusText="notmodified"}else{statusText=response.state;success=response.data;error=response.error;isSuccess=!error}}else{error=statusText;if(status||!statusText){statusText="error";if(status<0){status=0}}}jqXHR.status=status;jqXHR.statusText=(nativeStatusText||statusText)+"";if(isSuccess){deferred.resolveWith(callbackContext,[success,statusText,jqXHR])}else{deferred.rejectWith(callbackContext,[jqXHR,statusText,error])}jqXHR.statusCode(statusCode);statusCode=undefined;if(fireGlobals){globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error])}completeDeferred.fireWith(callbackContext,[jqXHR,statusText]);if(fireGlobals){globalEventContext.trigger("ajaxComplete",[jqXHR,s]);if(!--jQuery.active){jQuery.event.trigger("ajaxStop")}}}return jqXHR},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json")},getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script")}});jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){if(isFunction(data)){type=type||callback;callback=data;data=undefined}return jQuery.ajax(jQuery.extend({url:url,type:method,dataType:type,data:data,success:callback},jQuery.isPlainObject(url)&&url))}});jQuery._evalUrl=function(url){return jQuery.ajax({url:url,type:"GET",dataType:"script",cache:true,async:false,global:false,throws:true})};jQuery.fn.extend({wrapAll:function(html){var wrap;if(this[0]){if(isFunction(html)){html=html.call(this[0])}wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0])}wrap.map(function(){var elem=this;while(elem.firstElementChild){elem=elem.firstElementChild}return elem}).append(this)}return this},wrapInner:function(html){if(isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i))})}return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html)}else{self.append(html)}})},wrap:function(html){var htmlIsFunction=isFunction(html);return this.each(function(i){jQuery(this).wrapAll(htmlIsFunction?html.call(this,i):html)})},unwrap:function(selector){this.parent(selector).not("body").each(function(){jQuery(this).replaceWith(this.childNodes)});return this}});jQuery.expr.pseudos.hidden=function(elem){return!jQuery.expr.pseudos.visible(elem)};jQuery.expr.pseudos.visible=function(elem){return!!(elem.offsetWidth||elem.offsetHeight||elem.getClientRects().length)};jQuery.ajaxSettings.xhr=function(){try{return new window.XMLHttpRequest}catch(e){}};var xhrSuccessStatus={0:200,1223:204},xhrSupported=jQuery.ajaxSettings.xhr();support.cors=!!xhrSupported&&"withCredentials"in xhrSupported;support.ajax=xhrSupported=!!xhrSupported;jQuery.ajaxTransport(function(options){var callback,errorCallback;if(support.cors||xhrSupported&&!options.crossDomain){return{send:function(headers,complete){var i,xhr=options.xhr();xhr.open(options.type,options.url,options.async,options.username,options.password);if(options.xhrFields){for(i in options.xhrFields){xhr[i]=options.xhrFields[i]}}if(options.mimeType&&xhr.overrideMimeType){xhr.overrideMimeType(options.mimeType)}if(!options.crossDomain&&!headers["X-Requested-With"]){headers["X-Requested-With"]="XMLHttpRequest"}for(i in headers){xhr.setRequestHeader(i,headers[i])}callback=function(type){return function(){if(callback){callback=errorCallback=xhr.onload=xhr.onerror=xhr.onabort=xhr.ontimeout=xhr.onreadystatechange=null;if(type==="abort"){xhr.abort()}else if(type==="error"){if(typeof xhr.status!=="number"){complete(0,"error")}else{complete(xhr.status,xhr.statusText)}}else{complete(xhrSuccessStatus[xhr.status]||xhr.status,xhr.statusText,(xhr.responseType||"text")!=="text"||typeof xhr.responseText!=="string"?{binary:xhr.response}:{text:xhr.responseText},xhr.getAllResponseHeaders())}}}};xhr.onload=callback();errorCallback=xhr.onerror=xhr.ontimeout=callback("error");if(xhr.onabort!==undefined){xhr.onabort=errorCallback}else{xhr.onreadystatechange=function(){if(xhr.readyState===4){window.setTimeout(function(){if(callback){errorCallback()}})}}}callback=callback("abort");try{xhr.send(options.hasContent&&options.data||null)}catch(e){if(callback){throw e}}},abort:function(){if(callback){callback()}}}}});jQuery.ajaxPrefilter(function(s){if(s.crossDomain){s.contents.script=false}});jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, "+"application/ecmascript, application/x-ecmascript"}, +contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(text){jQuery.globalEval(text);return text}}});jQuery.ajaxPrefilter("script",function(s){if(s.cache===undefined){s.cache=false}if(s.crossDomain){s.type="GET"}});jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,callback;return{send:function(_,complete){script=jQuery("<script>").prop({charset:s.scriptCharset,src:s.url}).on("load error",callback=function(evt){script.remove();callback=null;if(evt){complete(evt.type==="error"?404:200,evt.type)}});document.head.appendChild(script[0])},abort:function(){if(callback){callback()}}}}});var oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||jQuery.expando+"_"+nonce++;this[callback]=true;return callback}});jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=s.jsonp!==false&&(rjsonp.test(s.url)?"url":typeof s.data==="string"&&(s.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&rjsonp.test(s.data)&&"data");if(jsonProp||s.dataTypes[0]==="jsonp"){callbackName=s.jsonpCallback=isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback;if(jsonProp){s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName)}else if(s.jsonp!==false){s.url+=(rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName}s.converters["script json"]=function(){if(!responseContainer){jQuery.error(callbackName+" was not called")}return responseContainer[0]};s.dataTypes[0]="json";overwritten=window[callbackName];window[callbackName]=function(){responseContainer=arguments};jqXHR.always(function(){if(overwritten===undefined){jQuery(window).removeProp(callbackName)}else{window[callbackName]=overwritten}if(s[callbackName]){s.jsonpCallback=originalSettings.jsonpCallback;oldCallbacks.push(callbackName)}if(responseContainer&&isFunction(overwritten)){overwritten(responseContainer[0])}responseContainer=overwritten=undefined});return"script"}});support.createHTMLDocument=function(){var body=document.implementation.createHTMLDocument("").body;body.innerHTML="<form></form><form></form>";return body.childNodes.length===2}();jQuery.parseHTML=function(data,context,keepScripts){if(typeof data!=="string"){return[]}if(typeof context==="boolean"){keepScripts=context;context=false}var base,parsed,scripts;if(!context){if(support.createHTMLDocument){context=document.implementation.createHTMLDocument("");base=context.createElement("base");base.href=document.location.href;context.head.appendChild(base)}else{context=document}}parsed=rsingleTag.exec(data);scripts=!keepScripts&&[];if(parsed){return[context.createElement(parsed[1])]}parsed=buildFragment([data],context,scripts);if(scripts&&scripts.length){jQuery(scripts).remove()}return jQuery.merge([],parsed.childNodes)};jQuery.fn.load=function(url,params,callback){var selector,type,response,self=this,off=url.indexOf(" ");if(off>-1){selector=stripAndCollapse(url.slice(off));url=url.slice(0,off)}if(isFunction(params)){callback=params;params=undefined}else if(params&&typeof params==="object"){type="POST"}if(self.length>0){jQuery.ajax({url:url,type:type||"GET",dataType:"html",data:params}).done(function(responseText){response=arguments;self.html(selector?jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector):responseText)}).always(callback&&function(jqXHR,status){self.each(function(){callback.apply(this,response||[jqXHR.responseText,status,jqXHR])})})}return this};jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,type){jQuery.fn[type]=function(fn){return this.on(type,fn)}});jQuery.expr.pseudos.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem}).length};jQuery.offset={setOffset:function(elem,options,i){var curPosition,curLeft,curCSSTop,curTop,curOffset,curCSSLeft,calculatePosition,position=jQuery.css(elem,"position"),curElem=jQuery(elem),props={};if(position==="static"){elem.style.position="relative"}curOffset=curElem.offset();curCSSTop=jQuery.css(elem,"top");curCSSLeft=jQuery.css(elem,"left");calculatePosition=(position==="absolute"||position==="fixed")&&(curCSSTop+curCSSLeft).indexOf("auto")>-1;if(calculatePosition){curPosition=curElem.position();curTop=curPosition.top;curLeft=curPosition.left}else{curTop=parseFloat(curCSSTop)||0;curLeft=parseFloat(curCSSLeft)||0}if(isFunction(options)){options=options.call(elem,i,jQuery.extend({},curOffset))}if(options.top!=null){props.top=options.top-curOffset.top+curTop}if(options.left!=null){props.left=options.left-curOffset.left+curLeft}if("using"in options){options.using.call(elem,props)}else{curElem.css(props)}}};jQuery.fn.extend({offset:function(options){if(arguments.length){return options===undefined?this:this.each(function(i){jQuery.offset.setOffset(this,options,i)})}var rect,win,elem=this[0];if(!elem){return}if(!elem.getClientRects().length){return{top:0,left:0}}rect=elem.getBoundingClientRect();win=elem.ownerDocument.defaultView;return{top:rect.top+win.pageYOffset,left:rect.left+win.pageXOffset}},position:function(){if(!this[0]){return}var offsetParent,offset,doc,elem=this[0],parentOffset={top:0,left:0};if(jQuery.css(elem,"position")==="fixed"){offset=elem.getBoundingClientRect()}else{offset=this.offset();doc=elem.ownerDocument;offsetParent=elem.offsetParent||doc.documentElement;while(offsetParent&&(offsetParent===doc.body||offsetParent===doc.documentElement)&&jQuery.css(offsetParent,"position")==="static"){offsetParent=offsetParent.parentNode}if(offsetParent&&offsetParent!==elem&&offsetParent.nodeType===1){parentOffset=jQuery(offsetParent).offset();parentOffset.top+=jQuery.css(offsetParent,"borderTopWidth",true);parentOffset.left+=jQuery.css(offsetParent,"borderLeftWidth",true)}}return{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",true),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",true)}},offsetParent:function(){return this.map(function(){var offsetParent=this.offsetParent;while(offsetParent&&jQuery.css(offsetParent,"position")==="static"){offsetParent=offsetParent.offsetParent}return offsetParent||documentElement})}});jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top="pageYOffset"===prop;jQuery.fn[method]=function(val){return access(this,function(elem,method,val){var win;if(isWindow(elem)){win=elem}else if(elem.nodeType===9){win=elem.defaultView}if(val===undefined){return win?win[prop]:elem[method]}if(win){win.scrollTo(!top?val:win.pageXOffset,top?val:win.pageYOffset)}else{elem[method]=val}},method,val,arguments.length)}});jQuery.each(["top","left"],function(i,prop){jQuery.cssHooks[prop]=addGetHookIf(support.pixelPosition,function(elem,computed){if(computed){computed=curCSS(elem,prop);return rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed}})});jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||typeof margin!=="boolean"),extra=defaultExtra||(margin===true||value===true?"margin":"border");return access(this,function(elem,type,value){var doc;if(isWindow(elem)){return funcName.indexOf("outer")===0?elem["inner"+name]:elem.document.documentElement["client"+name]}if(elem.nodeType===9){doc=elem.documentElement;return Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name])}return value===undefined?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra)},type,chainable?margin:undefined,chainable)}})});jQuery.each(("blur focus focusin focusout resize scroll click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup contextmenu").split(" "),function(i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name)}});jQuery.fn.extend({hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)}});jQuery.fn.extend({bind:function(types,data,fn){return this.on(types,null,data,fn)},unbind:function(types,fn){return this.off(types,null,fn)},delegate:function(selector,types,data,fn){return this.on(types,selector,data,fn)},undelegate:function(selector,types,fn){return arguments.length===1?this.off(selector,"**"):this.off(types,selector||"**",fn)}});jQuery.proxy=function(fn,context){var tmp,args,proxy;if(typeof context==="string"){tmp=fn[context];context=fn;fn=tmp}if(!isFunction(fn)){return undefined}args=slice.call(arguments,2);proxy=function(){return fn.apply(context||this,args.concat(slice.call(arguments)))};proxy.guid=fn.guid=fn.guid||jQuery.guid++;return proxy};jQuery.holdReady=function(hold){if(hold){jQuery.readyWait++}else{jQuery.ready(true)}};jQuery.isArray=Array.isArray;jQuery.parseJSON=JSON.parse;jQuery.nodeName=nodeName;jQuery.isFunction=isFunction;jQuery.isWindow=isWindow;jQuery.camelCase=camelCase;jQuery.type=toType;jQuery.now=Date.now;jQuery.isNumeric=function(obj){var type=jQuery.type(obj);return(type==="number"||type==="string")&&!isNaN(obj-parseFloat(obj))};if(typeof define==="function"&&define.amd){define("jquery",[],function(){return jQuery})}var _jQuery=window.jQuery,_$=window.$;jQuery.noConflict=function(deep){if(window.$===jQuery){window.$=_$}if(deep&&window.jQuery===jQuery){window.jQuery=_jQuery}return jQuery};if(!noGlobal){window.jQuery=window.$=jQuery}return jQuery}); diff --git a/cov_html/jquery.tablesorter.min.js b/cov_html/jquery.tablesorter.min.js new file mode 100644 index 0000000000000000000000000000000000000000..64c70071291189a44d084b9d3794ddeafeb6bd18 --- /dev/null +++ b/cov_html/jquery.tablesorter.min.js @@ -0,0 +1,2 @@ + +(function($){$.extend({tablesorter:new function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'.',debug:false};function benchmark(s,d){log(s+","+(new Date().getTime()-d.getTime())+"ms");}this.benchmark=benchmark;function log(s){if(typeof console!="undefined"&&typeof console.debug!="undefined"){console.log(s);}else{alert(s);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}var rows=table.tBodies[0].rows;if(table.tBodies[0].rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i<l;i++){var p=false;if($.metadata&&($($headers[i]).metadata()&&$($headers[i]).metadata().sorter)){p=getParserById($($headers[i]).metadata().sorter);}else if((table.config.headers[i]&&table.config.headers[i].sorter)){p=getParserById(table.config.headers[i].sorter);}if(!p){p=detectParserForColumn(table,cells[i]);}if(table.config.debug){parsersDebug+="column:"+i+" parser:"+p.id+"\n";}list.push(p);}}if(table.config.debug){log(parsersDebug);}return list;};function detectParserForColumn(table,node){var l=parsers.length;for(var i=1;i<l;i++){if(parsers[i].is($.trim(getElementText(table.config,node)),table,node)){return parsers[i];}}return parsers[0];}function getParserById(name){var l=parsers.length;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==name.toLowerCase()){return parsers[i];}}return false;}function buildCache(table){if(table.config.debug){var cacheTime=new Date();}var totalRows=(table.tBodies[0]&&table.tBodies[0].rows.length)||0,totalCells=(table.tBodies[0].rows[0]&&table.tBodies[0].rows[0].cells.length)||0,parsers=table.config.parsers,cache={row:[],normalized:[]};for(var i=0;i<totalRows;++i){var c=table.tBodies[0].rows[i],cols=[];cache.row.push($(c));for(var j=0;j<totalCells;++j){cols.push(parsers[j].format(getElementText(table.config,c.cells[j]),table,c.cells[j]));}cols.push(i);cache.normalized.push(cols);cols=null;};if(table.config.debug){benchmark("Building cache for "+totalRows+" rows:",cacheTime);}return cache;};function getElementText(config,node){if(!node)return"";var t="";if(config.textExtraction=="simple"){if(node.childNodes[0]&&node.childNodes[0].hasChildNodes()){t=node.childNodes[0].innerHTML;}else{t=node.innerHTML;}}else{if(typeof(config.textExtraction)=="function"){t=config.textExtraction(node);}else{t=$(node).text();}}return t;}function appendToTable(table,cache){if(table.config.debug){var appendTime=new Date()}var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=(n[0].length-1),tableBody=$(table.tBodies[0]),rows=[];for(var i=0;i<totalRows;i++){rows.push(r[n[i][checkCell]]);if(!table.config.appender){var o=r[n[i][checkCell]];var l=o.length;for(var j=0;j<l;j++){tableBody[0].appendChild(o[j]);}}}if(table.config.appender){table.config.appender(table,rows);}rows=null;if(table.config.debug){benchmark("Rebuilt table:",appendTime);}applyWidget(table);setTimeout(function(){$(table).trigger("sortEnd");},0);};function buildHeaders(table){if(table.config.debug){var time=new Date();}var meta=($.metadata)?true:false,tableHeadersRows=[];for(var i=0;i<table.tHead.rows.length;i++){tableHeadersRows[i]=0;};$tableHeaders=$("thead th",table);$tableHeaders.each(function(index){this.count=0;this.column=index;this.order=formatSortingOrder(table.config.sortInitialOrder);if(checkHeaderMetadata(this)||checkHeaderOptions(table,index))this.sortDisabled=true;if(!this.sortDisabled){$(this).addClass(table.config.cssHeader);}table.config.headerList[index]=this;});if(table.config.debug){benchmark("Built headers:",time);log($tableHeaders);}return $tableHeaders;};function checkCellColSpan(table,rows,row){var arr=[],r=table.tHead.rows,c=r[row].cells;for(var i=0;i<c.length;i++){var cell=c[i];if(cell.colSpan>1){arr=arr.concat(checkCellColSpan(table,headerArr,row++));}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell);}}}return arr;};function checkHeaderMetadata(cell){if(($.metadata)&&($(cell).metadata().sorter===false)){return true;};return false;}function checkHeaderOptions(table,i){if((table.config.headers[i])&&(table.config.headers[i].sorter===false)){return true;};return false;}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i<l;i++){getWidgetById(c[i]).format(table);}}function getWidgetById(name){var l=widgets.length;for(var i=0;i<l;i++){if(widgets[i].id.toLowerCase()==name.toLowerCase()){return widgets[i];}}};function formatSortingOrder(v){if(typeof(v)!="Number"){i=(v.toLowerCase()=="desc")?1:0;}else{i=(v==(0||1))?v:0;}return i;}function isValueInArray(v,a){var l=a.length;for(var i=0;i<l;i++){if(a[i][0]==v){return true;}}return false;}function setHeadersCss(table,$headers,list,css){$headers.removeClass(css[0]).removeClass(css[1]);var h=[];$headers.each(function(offset){if(!this.sortDisabled){h[this.column]=$(this);}});var l=list.length;for(var i=0;i<l;i++){h[list[i][0]].addClass(css[list[i][1]]);}}function fixColumnWidth(table,$headers){var c=table.config;if(c.widthFixed){var colgroup=$('<colgroup>');$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($('<col>').css('width',$(this).width()));});$(table).prepend(colgroup);};}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;i<l;i++){var s=sortList[i],o=c.headerList[s[0]];o.count=s[1];o.count++;}}function multisort(table,sortList,cache){if(table.config.debug){var sortTime=new Date();}var dynamicExp="var sortWrapper = function(a,b) {",l=sortList.length;for(var i=0;i<l;i++){var c=sortList[i][0];var order=sortList[i][1];var s=(getCachedSortType(table.config.parsers,c)=="text")?((order==0)?"sortText":"sortTextDesc"):((order==0)?"sortNumeric":"sortNumericDesc");var e="e"+i;dynamicExp+="var "+e+" = "+s+"(a["+c+"],b["+c+"]); ";dynamicExp+="if("+e+") { return "+e+"; } ";dynamicExp+="else { ";}var orgOrderCol=cache.normalized[0].length-1;dynamicExp+="return a["+orgOrderCol+"]-b["+orgOrderCol+"];";for(var i=0;i<l;i++){dynamicExp+="}; ";}dynamicExp+="return 0; ";dynamicExp+="}; ";eval(dynamicExp);cache.normalized.sort(sortWrapper);if(table.config.debug){benchmark("Sorting on "+sortList.toString()+" and dir "+order+" time:",sortTime);}return cache;};function sortText(a,b){return((a<b)?-1:((a>b)?1:0));};function sortTextDesc(a,b){return((b<a)?-1:((b>a)?1:0));};function sortNumeric(a,b){return a-b;};function sortNumericDesc(a,b){return b-a;};function getCachedSortType(parsers,i){return parsers[i].type;};this.construct=function(settings){return this.each(function(){if(!this.tHead||!this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);$this=$(this);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){$this.trigger("sortStart");var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){var $cell=$(this);var i=this.column;this.order=this.count++%2;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j<a.length;j++){if(a[j][0]!=i){config.sortList.push(a[j]);}}}config.sortList.push([i,this.order]);}else{if(isValueInArray(i,config.sortList)){for(var j=0;j<config.sortList.length;j++){var s=config.sortList[j],o=config.headerList[s[0]];if(s[0]==i){o.count=s[1];o.count++;s[1]=o.count%2;}}}else{config.sortList.push([i,this.order]);}};setTimeout(function(){setHeadersCss($this[0],$headers,config.sortList,sortCSS);appendToTable($this[0],multisort($this[0],config.sortList,cache));},1);return false;}}).mousedown(function(){if(config.cancelSelection){this.onselectstart=function(){return false};return false;}});$this.bind("update",function(){this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);}).bind("sorton",function(e,list){$(this).trigger("sortStart");config.sortList=list;var sortList=config.sortList;updateHeaderSortCount(this,sortList);setHeadersCss(this,$headers,sortList,sortCSS);appendToTable(this,multisort(this,sortList,cache));}).bind("appendCache",function(){appendToTable(this,cache);}).bind("applyWidgetId",function(e,id){getWidgetById(id).format(this);}).bind("applyWidgets",function(){applyWidget(this);});if($.metadata&&($(this).metadata()&&$(this).metadata().sortlist)){config.sortList=$(this).metadata().sortlist;}if(config.sortList.length>0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==parser.id.toLowerCase()){a=false;}}if(a){parsers.push(parser);};};this.addWidget=function(widget){widgets.push(widget);};this.formatFloat=function(s){var i=parseFloat(s);return(isNaN(i))?0:i;};this.formatInt=function(s){var i=parseInt(s);return(isNaN(i))?0:i;};this.isDigit=function(s,config){var DECIMAL='\\'+config.decimal;var exp='/(^[+]?0('+DECIMAL+'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)'+DECIMAL+'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*'+DECIMAL+'0+$)/';return RegExp(exp).test($.trim(s));};this.clearTableBody=function(table){if($.browser.msie){function empty(){while(this.firstChild)this.removeChild(this.firstChild);}empty.apply(table.tBodies[0]);}else{table.tBodies[0].innerHTML="";}};}});$.fn.extend({tablesorter:$.tablesorter.construct});var ts=$.tablesorter;ts.addParser({id:"text",is:function(s){return true;},format:function(s){return $.trim(s.toLowerCase());},type:"text"});ts.addParser({id:"digit",is:function(s,table){var c=table.config;return $.tablesorter.isDigit(s,c);},format:function(s){return $.tablesorter.formatFloat(s);},type:"numeric"});ts.addParser({id:"currency",is:function(s){return/^[£$€?.]/.test(s);},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.]/g),""));},type:"numeric"});ts.addParser({id:"ipAddress",is:function(s){return/^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);},format:function(s){var a=s.split("."),r="",l=a.length;for(var i=0;i<l;i++){var item=a[i];if(item.length==2){r+="0"+item;}else{r+=item;}}return $.tablesorter.formatFloat(r);},type:"numeric"});ts.addParser({id:"url",is:function(s){return/^(https?|ftp|file):\/\/$/.test(s);},format:function(s){return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));},type:"text"});ts.addParser({id:"isoDate",is:function(s){return/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);},format:function(s){return $.tablesorter.formatFloat((s!="")?new Date(s.replace(new RegExp(/-/g),"/")).getTime():"0");},type:"numeric"});ts.addParser({id:"percent",is:function(s){return/\%$/.test($.trim(s));},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));},type:"numeric"});ts.addParser({id:"usLongDate",is:function(s){return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));},format:function(s){return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"shortDate",is:function(s){return/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);},format:function(s,table){var c=table.config;s=s.replace(/\-/g,"/");if(c.dateFormat=="us"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$1/$2");}else if(c.dateFormat=="uk"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$2/$1");}else if(c.dateFormat=="dd/mm/yy"||c.dateFormat=="dd-mm-yy"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/,"$1/$2/$3");}return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"time",is:function(s){return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);},format:function(s){return $.tablesorter.formatFloat(new Date("2000/01/01 "+s).getTime());},type:"numeric"});ts.addParser({id:"metadata",is:function(s){return false;},format:function(s,table,cell){var c=table.config,p=(!c.parserMetadataName)?'sortValue':c.parserMetadataName;return $(cell).metadata()[p];},type:"numeric"});ts.addWidget({id:"zebra",format:function(table){if(table.config.debug){var time=new Date();}$("tr:visible",table.tBodies[0]).filter(':even').removeClass(table.config.widgetZebra.css[1]).addClass(table.config.widgetZebra.css[0]).end().filter(':odd').removeClass(table.config.widgetZebra.css[0]).addClass(table.config.widgetZebra.css[1]);if(table.config.debug){$.tablesorter.benchmark("Applying Zebra widget",time);}}});})(jQuery); \ No newline at end of file diff --git a/cov_html/keybd_closed.png b/cov_html/keybd_closed.png new file mode 100644 index 0000000000000000000000000000000000000000..db114023f096297a23a7b1266b469d0ce4556b0a Binary files /dev/null and b/cov_html/keybd_closed.png differ diff --git a/cov_html/keybd_open.png b/cov_html/keybd_open.png new file mode 100644 index 0000000000000000000000000000000000000000..db114023f096297a23a7b1266b469d0ce4556b0a Binary files /dev/null and b/cov_html/keybd_open.png differ diff --git a/cov_html/nd2tif___init___py.html b/cov_html/nd2tif___init___py.html new file mode 100644 index 0000000000000000000000000000000000000000..3f147380ed33ebe2234dffa7b2da3ecb6e1f63d3 --- /dev/null +++ b/cov_html/nd2tif___init___py.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for nd2tif/__init__.py: 100%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>nd2tif/__init__.py</b> : + <span class="pc_cov">100%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 0 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">0 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">0 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/nd2tif___main___py.html b/cov_html/nd2tif___main___py.html new file mode 100644 index 0000000000000000000000000000000000000000..ade92f4b36f0608f4388c0f226ee82ee1682098e --- /dev/null +++ b/cov_html/nd2tif___main___py.html @@ -0,0 +1,156 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for nd2tif/__main__.py: 0%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>nd2tif/__main__.py</b> : + <span class="pc_cov">0%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 53 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">0 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">53 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="mis show_mis"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">nd2tif</span> <span class="key">import</span> <span class="nam">read</span><span class="op">,</span> <span class="nam">save</span> </span><span class="r"></span></p> + <p id="t2" class="mis show_mis"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">sys</span> </span><span class="r"></span></p> + <p id="t3" class="mis show_mis"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> + <p id="t4" class="mis show_mis"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">logging</span> </span><span class="r"></span></p> + <p id="t5" class="mis show_mis"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">click</span> </span><span class="r"></span></p> + <p id="t6" class="mis show_mis"><span class="n"><a href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">functools</span> <span class="key">import</span> <span class="nam">partial</span> </span><span class="r"></span></p> + <p id="t7" class="mis show_mis"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">multiprocessing</span> <span class="key">import</span> <span class="nam">Pool</span><span class="op">,</span> <span class="nam">cpu_count</span> </span><span class="r"></span></p> + <p id="t8" class="pln"><span class="n"><a href="#t8">8</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t9" class="mis show_mis"><span class="n"><a href="#t9">9</a></span><span class="t"><span class="nam">logging</span><span class="op">.</span><span class="nam">basicConfig</span><span class="op">(</span><span class="nam">level</span><span class="op">=</span><span class="nam">logging</span><span class="op">.</span><span class="nam">WARNING</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t10" class="pln"><span class="n"><a href="#t10">10</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t11" class="mis show_mis"><span class="n"><a href="#t11">11</a></span><span class="t"><span class="nam">logger</span> <span class="op">=</span> <span class="nam">logging</span><span class="op">.</span><span class="nam">getLogger</span><span class="op">(</span><span class="nam">__name__</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t12" class="pln"><span class="n"><a href="#t12">12</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t13" class="mis show_mis"><span class="n"><a href="#t13">13</a></span><span class="t"><span class="op">@</span><span class="nam">click</span><span class="op">.</span><span class="nam">command</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t14" class="mis show_mis"><span class="n"><a href="#t14">14</a></span><span class="t"><span class="op">@</span><span class="nam">click</span><span class="op">.</span><span class="nam">argument</span><span class="op">(</span><span class="str">'path'</span><span class="op">,</span> <span class="nam">nargs</span><span class="op">=</span><span class="num">1</span><span class="op">)</span><span class="com">#, help='one or several nd2 files')</span> </span><span class="r"></span></p> + <p id="t15" class="mis show_mis"><span class="n"><a href="#t15">15</a></span><span class="t"><span class="op">@</span><span class="nam">click</span><span class="op">.</span><span class="nam">option</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"> <span class="str">'--bin'</span><span class="op">,</span> <span class="str">'-b'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t17" class="pln"><span class="n"><a href="#t17">17</a></span><span class="t"> <span class="nam">type</span><span class="op">=</span><span class="nam">int</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t18" class="pln"><span class="n"><a href="#t18">18</a></span><span class="t"> <span class="nam">default</span><span class="op">=</span><span class="num">4</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"> <span class="nam">show_default</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t20" class="pln"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="nam">help</span><span class="op">=</span><span class="str">'Image binning'</span> </span><span class="r"></span></p> + <p id="t21" class="pln"><span class="n"><a href="#t21">21</a></span><span class="t"><span class="op">)</span> </span><span class="r"></span></p> + <p id="t22" class="mis show_mis"><span class="n"><a href="#t22">22</a></span><span class="t"><span class="op">@</span><span class="nam">click</span><span class="op">.</span><span class="nam">option</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t23" class="pln"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="str">'--to_8bits'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t24" class="pln"><span class="n"><a href="#t24">24</a></span><span class="t"> <span class="nam">is_flag</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t25" class="pln"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="nam">help</span><span class="op">=</span><span class="str">'convert to 8 bits'</span> </span><span class="r"></span></p> + <p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"><span class="op">)</span> </span><span class="r"></span></p> + <p id="t27" class="mis show_mis"><span class="n"><a href="#t27">27</a></span><span class="t"><span class="op">@</span><span class="nam">click</span><span class="op">.</span><span class="nam">option</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t28" class="pln"><span class="n"><a href="#t28">28</a></span><span class="t"> <span class="str">'--log'</span><span class="op">,</span> <span class="nam">type</span><span class="op">=</span><span class="nam">str</span><span class="op">,</span> <span class="nam">default</span><span class="op">=</span><span class="str">'info'</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t29" class="pln"><span class="n"><a href="#t29">29</a></span><span class="t"> <span class="nam">show_default</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">help</span><span class="op">=</span><span class="str">'Logging level'</span> </span><span class="r"></span></p> + <p id="t30" class="pln"><span class="n"><a href="#t30">30</a></span><span class="t"><span class="op">)</span> </span><span class="r"></span></p> + <p id="t31" class="mis show_mis"><span class="n"><a href="#t31">31</a></span><span class="t"><span class="op">@</span><span class="nam">click</span><span class="op">.</span><span class="nam">option</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t32" class="pln"><span class="n"><a href="#t32">32</a></span><span class="t"> <span class="str">'--start'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="nam">type</span><span class="op">=</span><span class="nam">click</span><span class="op">.</span><span class="nam">IntRange</span><span class="op">(</span><span class="num">0</span><span class="op">,</span><span class="num">1</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"> <span class="nam">default</span><span class="op">=</span><span class="num">0</span><span class="op">,</span> <span class="nam">show_default</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t34" class="pln"><span class="n"><a href="#t34">34</a></span><span class="t"> <span class="nam">help</span><span class="op">=</span><span class="str">'Start numbering from 000 or 001'</span> </span><span class="r"></span></p> + <p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"><span class="op">)</span> </span><span class="r"></span></p> + <p id="t36" class="mis show_mis"><span class="n"><a href="#t36">36</a></span><span class="t"><span class="op">@</span><span class="nam">click</span><span class="op">.</span><span class="nam">option</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t37" class="pln"><span class="n"><a href="#t37">37</a></span><span class="t"> <span class="str">'--prefix'</span><span class="op">,</span> <span class="str">'-p'</span><span class="op">,</span> <span class="nam">type</span><span class="op">=</span><span class="nam">str</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t38" class="pln"><span class="n"><a href="#t38">38</a></span><span class="t"> <span class="nam">default</span><span class="op">=</span><span class="str">'Pos_'</span><span class="op">,</span> <span class="nam">show_default</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t39" class="pln"><span class="n"><a href="#t39">39</a></span><span class="t"> <span class="nam">help</span><span class="op">=</span><span class="str">'Prefix for tif files'</span> </span><span class="r"></span></p> + <p id="t40" class="pln"><span class="n"><a href="#t40">40</a></span><span class="t"><span class="op">)</span> </span><span class="r"></span></p> + <p id="t41" class="mis show_mis"><span class="n"><a href="#t41">41</a></span><span class="t"><span class="op">@</span><span class="nam">click</span><span class="op">.</span><span class="nam">option</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t42" class="pln"><span class="n"><a href="#t42">42</a></span><span class="t"> <span class="str">'--cpu'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="nam">type</span><span class="op">=</span><span class="nam">int</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t43" class="pln"><span class="n"><a href="#t43">43</a></span><span class="t"> <span class="nam">default</span><span class="op">=</span><span class="num">1</span><span class="op">,</span> <span class="nam">show_default</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t44" class="pln"><span class="n"><a href="#t44">44</a></span><span class="t"> <span class="nam">help</span><span class="op">=</span><span class="str">'Number of CPU'</span> </span><span class="r"></span></p> + <p id="t45" class="pln"><span class="n"><a href="#t45">45</a></span><span class="t"><span class="op">)</span> </span><span class="r"></span></p> + <p id="t46" class="pln"><span class="n"><a href="#t46">46</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t47" class="mis show_mis"><span class="n"><a href="#t47">47</a></span><span class="t"><span class="key">def</span> <span class="nam">main</span><span class="op">(</span><span class="nam">path</span><span class="op">:</span><span class="nam">str</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="nam">bin</span><span class="op">:</span><span class="nam">int</span><span class="op">=</span><span class="num">4</span><span class="op">,</span> <span class="nam">to_8bits</span><span class="op">:</span><span class="nam">bool</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">log</span><span class="op">=</span><span class="str">'info'</span><span class="op">,</span> <span class="nam">start</span><span class="op">=</span><span class="num">0</span><span class="op">,</span> <span class="nam">prefix</span><span class="op">=</span><span class="str">'Pos_'</span><span class="op">,</span> <span class="nam">cpu</span><span class="op">=</span><span class="num">1</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t48" class="mis show_mis"><span class="n"><a href="#t48">48</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">setLevel</span><span class="op">(</span><span class="nam">getattr</span><span class="op">(</span><span class="nam">logging</span><span class="op">,</span> <span class="nam">log</span><span class="op">.</span><span class="nam">upper</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t49" class="mis show_mis"><span class="n"><a href="#t49">49</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">path</span><span class="op">)</span> <span class="key">or</span> <span class="key">not</span> <span class="nam">path</span><span class="op">.</span><span class="nam">endswith</span><span class="op">(</span><span class="str">".nd2"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t50" class="mis show_mis"><span class="n"><a href="#t50">50</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">error</span><span class="op">(</span><span class="str">"Provide valid .nd2 path"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t51" class="mis show_mis"><span class="n"><a href="#t51">51</a></span><span class="t"> <span class="key">return</span> <span class="key">False</span> </span><span class="r"></span></p> + <p id="t52" class="pln"><span class="n"><a href="#t52">52</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t53" class="mis show_mis"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="nam">reader</span> <span class="op">=</span> <span class="nam">read</span><span class="op">.</span><span class="nam">nd2</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">pos_limit</span><span class="op">=</span><span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t54" class="pln"><span class="n"><a href="#t54">54</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t55" class="mis show_mis"><span class="n"><a href="#t55">55</a></span><span class="t"> <span class="nam">folder</span> <span class="op">=</span> <span class="nam">path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">".nd2"</span><span class="op">,</span> <span class="str">f"_binned_{bin}x{bin}_tifs"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t56" class="pln"><span class="n"><a href="#t56">56</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t57" class="mis show_mis"><span class="n"><a href="#t57">57</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t58" class="mis show_mis"><span class="n"><a href="#t58">58</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">folder</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t59" class="mis show_mis"><span class="n"><a href="#t59">59</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">info</span><span class="op">(</span><span class="str">f'Created new folder {folder}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t60" class="mis show_mis"><span class="n"><a href="#t60">60</a></span><span class="t"> <span class="key">except</span> <span class="nam">FileExistsError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t61" class="mis show_mis"><span class="n"><a href="#t61">61</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">warning</span><span class="op">(</span><span class="str">f'Folder already exists {folder}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t62" class="pln"><span class="n"><a href="#t62">62</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t63" class="mis show_mis"><span class="n"><a href="#t63">63</a></span><span class="t"> <span class="nam">fun</span> <span class="op">=</span> <span class="nam">partial</span><span class="op">(</span><span class="nam">process</span><span class="op">,</span> <span class="nam">bin</span><span class="op">=</span><span class="nam">bin</span><span class="op">,</span> <span class="nam">to_8bits</span><span class="op">=</span><span class="nam">to_8bits</span><span class="op">,</span> <span class="nam">folder</span><span class="op">=</span><span class="nam">folder</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t64" class="pln"><span class="n"><a href="#t64">64</a></span><span class="t"> <span class="nam">prefix</span><span class="op">=</span><span class="nam">prefix</span><span class="op">,</span> <span class="nam">start</span><span class="op">=</span><span class="nam">start</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t65" class="mis show_mis"><span class="n"><a href="#t65">65</a></span><span class="t"> <span class="nam">iterator</span> <span class="op">=</span> <span class="nam">enumerate</span><span class="op">(</span><span class="nam">reader</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t66" class="pln"><span class="n"><a href="#t66">66</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t67" class="mis show_mis"><span class="n"><a href="#t67">67</a></span><span class="t"> <span class="key">if</span> <span class="nam">cpu</span> <span class="op">></span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t68" class="mis show_mis"><span class="n"><a href="#t68">68</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t69" class="mis show_mis"><span class="n"><a href="#t69">69</a></span><span class="t"> <span class="nam">p</span> <span class="op">=</span> <span class="nam">Pool</span><span class="op">(</span><span class="nam">processes</span><span class="op">=</span><span class="op">(</span><span class="nam">n_cpu</span> <span class="op">:=</span> <span class="nam">min</span><span class="op">(</span><span class="op">[</span><span class="nam">cpu</span><span class="op">,</span> <span class="nam">cpu_count</span><span class="op">(</span><span class="op">)</span><span class="op">]</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t70" class="mis show_mis"><span class="n"><a href="#t70">70</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">info</span><span class="op">(</span><span class="str">f'Running {n_cpu} workers'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t71" class="mis show_mis"><span class="n"><a href="#t71">71</a></span><span class="t"> <span class="nam">out</span> <span class="op">=</span> <span class="nam">p</span><span class="op">.</span><span class="nam">map</span><span class="op">(</span><span class="nam">fun</span><span class="op">,</span> <span class="nam">iterator</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t72" class="mis show_mis"><span class="n"><a href="#t72">72</a></span><span class="t"> <span class="nam">p</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t73" class="mis show_mis"><span class="n"><a href="#t73">73</a></span><span class="t"> <span class="key">except</span> <span class="nam">Exception</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t74" class="mis show_mis"><span class="n"><a href="#t74">74</a></span><span class="t"> <span class="nam">logging</span><span class="op">.</span><span class="nam">error</span><span class="op">(</span><span class="nam">e</span><span class="op">,</span> <span class="str">'Fall bask to map'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t75" class="mis show_mis"><span class="n"><a href="#t75">75</a></span><span class="t"> <span class="nam">out</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="nam">fun</span><span class="op">,</span> <span class="nam">iterator</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t76" class="pln"><span class="n"><a href="#t76">76</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t77" class="mis show_mis"><span class="n"><a href="#t77">77</a></span><span class="t"> <span class="nam">out</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">map</span><span class="op">(</span><span class="nam">fun</span><span class="op">,</span> <span class="nam">iterator</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t78" class="mis show_mis"><span class="n"><a href="#t78">78</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span> </span><span class="r"></span></p> + <p id="t79" class="pln"><span class="n"><a href="#t79">79</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t80" class="mis show_mis"><span class="n"><a href="#t80">80</a></span><span class="t"><span class="key">def</span> <span class="nam">process</span><span class="op">(</span><span class="nam">i_well</span><span class="op">:</span><span class="nam">tuple</span><span class="op">,</span> <span class="nam">bin</span><span class="op">,</span> <span class="nam">to_8bits</span><span class="op">,</span> <span class="nam">folder</span><span class="op">,</span> <span class="nam">prefix</span><span class="op">,</span> <span class="nam">start</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t81" class="mis show_mis"><span class="n"><a href="#t81">81</a></span><span class="t"> <span class="nam">i</span><span class="op">,</span> <span class="nam">well</span> <span class="op">=</span> <span class="nam">i_well</span> </span><span class="r"></span></p> + <p id="t82" class="mis show_mis"><span class="n"><a href="#t82">82</a></span><span class="t"> <span class="key">if</span> <span class="nam">bin</span> <span class="op">></span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t83" class="mis show_mis"><span class="n"><a href="#t83">83</a></span><span class="t"> <span class="nam">ds_well</span> <span class="op">=</span> <span class="nam">well</span><span class="op">.</span><span class="nam">downscale</span><span class="op">(</span><span class="nam">bin</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t84" class="mis show_mis"><span class="n"><a href="#t84">84</a></span><span class="t"> <span class="key">if</span> <span class="nam">to_8bits</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t85" class="mis show_mis"><span class="n"><a href="#t85">85</a></span><span class="t"> <span class="nam">ds_well</span> <span class="op">=</span> <span class="nam">ds_well</span><span class="op">.</span><span class="nam">to_8bits</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t86" class="mis show_mis"><span class="n"><a href="#t86">86</a></span><span class="t"> <span class="nam">name</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">folder</span><span class="op">,</span> <span class="str">f"{prefix}{i+start:03d}.tif"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t87" class="mis show_mis"><span class="n"><a href="#t87">87</a></span><span class="t"> <span class="nam">save</span><span class="op">.</span><span class="nam">tiff</span><span class="op">(</span><span class="nam">name</span><span class="op">,</span> <span class="nam">ds_well</span><span class="op">.</span><span class="nam">array</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t88" class="mis show_mis"><span class="n"><a href="#t88">88</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span> </span><span class="r"></span></p> + <p id="t89" class="pln"><span class="n"><a href="#t89">89</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t90" class="mis show_mis"><span class="n"><a href="#t90">90</a></span><span class="t"><span class="key">if</span> <span class="nam">__name__</span> <span class="op">==</span> <span class="str">"__main__"</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t91" class="pln"><span class="n"><a href="#t91">91</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t92" class="mis show_mis"><span class="n"><a href="#t92">92</a></span><span class="t"> <span class="nam">main</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/nd2tif_read_py.html b/cov_html/nd2tif_read_py.html new file mode 100644 index 0000000000000000000000000000000000000000..0538c36fcb4567ea987ddda9e6d4eab4e46544a1 --- /dev/null +++ b/cov_html/nd2tif_read_py.html @@ -0,0 +1,118 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for nd2tif/read.py: 69%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>nd2tif/read.py</b> : + <span class="pc_cov">69%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 32 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">22 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">10 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">pims_nd2</span> <span class="key">as</span> <span class="nam">nd</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">tqdm</span><span class="op">.</span><span class="nam">auto</span> <span class="key">import</span> <span class="nam">tqdm</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">nd2tif</span> <span class="key">import</span> <span class="nam">transform</span> </span><span class="r"></span></p> + <p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">tifffile</span> <span class="key">import</span> <span class="nam">imread</span> </span><span class="r"></span></p> + <p id="t6" class="run"><span class="n"><a href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">logging</span> </span><span class="r"></span></p> + <p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> + <p id="t8" class="run"><span class="n"><a href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">json</span> </span><span class="r"></span></p> + <p id="t9" class="pln"><span class="n"><a href="#t9">9</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t10" class="run"><span class="n"><a href="#t10">10</a></span><span class="t"><span class="nam">logging</span><span class="op">.</span><span class="nam">basicConfig</span><span class="op">(</span><span class="nam">level</span><span class="op">=</span><span class="nam">logging</span><span class="op">.</span><span class="nam">INFO</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t11" class="run"><span class="n"><a href="#t11">11</a></span><span class="t"><span class="nam">logger</span> <span class="op">=</span> <span class="nam">logging</span><span class="op">.</span><span class="nam">getLogger</span><span class="op">(</span><span class="nam">__name__</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t12" class="run"><span class="n"><a href="#t12">12</a></span><span class="t"><span class="nam">logger</span><span class="op">.</span><span class="nam">setLevel</span><span class="op">(</span><span class="nam">logging</span><span class="op">.</span><span class="nam">INFO</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t13" class="pln"><span class="n"><a href="#t13">13</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t14" class="pln"><span class="n"><a href="#t14">14</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t15" class="run"><span class="n"><a href="#t15">15</a></span><span class="t"><span class="key">def</span> <span class="nam">nd2</span><span class="op">(</span><span class="nam">path</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">pos_limit</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t17" class="pln"><span class="n"><a href="#t17">17</a></span><span class="t"><span class="str"> Read nd2 and yield transform.Well objects</span> </span><span class="r"></span></p> + <p id="t18" class="pln"><span class="n"><a href="#t18">18</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t19" class="mis show_mis"><span class="n"><a href="#t19">19</a></span><span class="t"> <span class="key">with</span> <span class="nam">nd</span><span class="op">.</span><span class="nam">ND2_Reader</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span><span class="op">)</span> <span class="key">as</span> <span class="nam">frames</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t20" class="mis show_mis"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">info</span><span class="op">(</span><span class="nam">frames</span><span class="op">.</span><span class="nam">sizes</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t21" class="mis show_mis"><span class="n"><a href="#t21">21</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">info</span><span class="op">(</span><span class="nam">frames</span><span class="op">.</span><span class="nam">metadata</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t22" class="mis show_mis"><span class="n"><a href="#t22">22</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">info</span><span class="op">(</span><span class="str">f'calibration_um={frames.calibration}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t23" class="mis show_mis"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="nam">json</span><span class="op">.</span><span class="nam">dump</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t24" class="pln"><span class="n"><a href="#t24">24</a></span><span class="t"> <span class="nam">frames</span><span class="op">.</span><span class="nam">metadata</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t25" class="pln"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="nam">open</span><span class="op">(</span><span class="nam">path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">".nd2"</span><span class="op">,</span> <span class="str">"_meta.json"</span><span class="op">)</span><span class="op">,</span> <span class="str">"w"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"> <span class="nam">default</span><span class="op">=</span><span class="nam">repr</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t27" class="pln"><span class="n"><a href="#t27">27</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t28" class="mis show_mis"><span class="n"><a href="#t28">28</a></span><span class="t"> <span class="nam">bundle</span> <span class="op">=</span> <span class="nam">auto_order</span><span class="op">(</span><span class="nam">frames</span><span class="op">.</span><span class="nam">sizes</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t29" class="mis show_mis"><span class="n"><a href="#t29">29</a></span><span class="t"> <span class="nam">frames</span><span class="op">.</span><span class="nam">iter_axes</span> <span class="op">=</span> <span class="str">"m"</span> </span><span class="r"></span></p> + <p id="t30" class="mis show_mis"><span class="n"><a href="#t30">30</a></span><span class="t"> <span class="nam">frames</span><span class="op">.</span><span class="nam">bundle_axes</span> <span class="op">=</span> <span class="nam">bundle</span> </span><span class="r"></span></p> + <p id="t31" class="mis show_mis"><span class="n"><a href="#t31">31</a></span><span class="t"> <span class="key">for</span> <span class="nam">well</span> <span class="key">in</span> <span class="nam">tqdm</span><span class="op">(</span><span class="nam">frames</span><span class="op">[</span><span class="op">:</span><span class="nam">pos_limit</span><span class="op">]</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t32" class="mis show_mis"><span class="n"><a href="#t32">32</a></span><span class="t"> <span class="key">yield</span> <span class="nam">transform</span><span class="op">.</span><span class="nam">Well</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"> <span class="nam">array</span><span class="op">=</span><span class="nam">well</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t34" class="pln"><span class="n"><a href="#t34">34</a></span><span class="t"> <span class="nam">order</span><span class="op">=</span><span class="nam">bundle</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"> <span class="nam">calibration_um</span><span class="op">=</span><span class="nam">frames</span><span class="op">.</span><span class="nam">calibration</span> </span><span class="r"></span></p> + <p id="t36" class="pln"><span class="n"><a href="#t36">36</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t37" class="pln"><span class="n"><a href="#t37">37</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t38" class="pln"><span class="n"><a href="#t38">38</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t39" class="run"><span class="n"><a href="#t39">39</a></span><span class="t"><span class="key">def</span> <span class="nam">tiff</span><span class="op">(</span><span class="nam">path</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span> <span class="op">-></span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t40" class="pln"><span class="n"><a href="#t40">40</a></span><span class="t"> <span class="str">""" reads .tif to numpy array """</span> </span><span class="r"></span></p> + <p id="t41" class="run"><span class="n"><a href="#t41">41</a></span><span class="t"> <span class="key">assert</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t42" class="run"><span class="n"><a href="#t42">42</a></span><span class="t"> <span class="key">assert</span> <span class="nam">path</span><span class="op">.</span><span class="nam">endswith</span><span class="op">(</span><span class="op">(</span><span class="str">".tif"</span><span class="op">,</span> <span class="str">".tiff"</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t43" class="run"><span class="n"><a href="#t43">43</a></span><span class="t"> <span class="nam">tif</span> <span class="op">=</span> <span class="nam">imread</span><span class="op">(</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t44" class="run"><span class="n"><a href="#t44">44</a></span><span class="t"> <span class="key">return</span> <span class="nam">tif</span> </span><span class="r"></span></p> + <p id="t45" class="pln"><span class="n"><a href="#t45">45</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t46" class="pln"><span class="n"><a href="#t46">46</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t47" class="run"><span class="n"><a href="#t47">47</a></span><span class="t"><span class="key">def</span> <span class="nam">auto_order</span><span class="op">(</span><span class="nam">axes</span><span class="op">:</span> <span class="nam">dict</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t48" class="pln"><span class="n"><a href="#t48">48</a></span><span class="t"> <span class="str">"""</span> </span><span class="r"></span></p> + <p id="t49" class="pln"><span class="n"><a href="#t49">49</a></span><span class="t"><span class="str"> uses nd2.axes dict to output bundle combination</span> </span><span class="r"></span></p> + <p id="t50" class="pln"><span class="n"><a href="#t50">50</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p id="t51" class="run"><span class="n"><a href="#t51">51</a></span><span class="t"> <span class="nam">keys</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">axes</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t52" class="run"><span class="n"><a href="#t52">52</a></span><span class="t"> <span class="nam">default_order</span> <span class="op">=</span> <span class="nam">transform</span><span class="op">.</span><span class="nam">ImageJStack</span><span class="op">.</span><span class="nam">default_order</span> </span><span class="r"></span></p> + <p id="t53" class="run"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="nam">order</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">filter</span><span class="op">(</span><span class="key">lambda</span> <span class="nam">k</span><span class="op">:</span> <span class="nam">k</span> <span class="key">in</span> <span class="nam">keys</span><span class="op">,</span> <span class="nam">default_order</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t54" class="run"><span class="n"><a href="#t54">54</a></span><span class="t"> <span class="key">return</span> <span class="str">""</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">order</span><span class="op">)</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/nd2tif_save_py.html b/cov_html/nd2tif_save_py.html new file mode 100644 index 0000000000000000000000000000000000000000..87b40029a00003984274ab1aa03f55fcb787892a --- /dev/null +++ b/cov_html/nd2tif_save_py.html @@ -0,0 +1,86 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for nd2tif/save.py: 100%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>nd2tif/save.py</b> : + <span class="pc_cov">100%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 11 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">11 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">0 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">tifffile</span> <span class="key">import</span> <span class="nam">TiffWriter</span><span class="op">,</span> <span class="nam">imwrite</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">nd2tif</span> <span class="key">import</span> <span class="nam">transform</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">logging</span> </span><span class="r"></span></p> + <p id="t5" class="pln"><span class="n"><a href="#t5">5</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t6" class="pln"><span class="n"><a href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="nam">logger</span> <span class="op">=</span> <span class="nam">logging</span><span class="op">.</span><span class="nam">getLogger</span><span class="op">(</span><span class="nam">__name__</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t8" class="run"><span class="n"><a href="#t8">8</a></span><span class="t"><span class="nam">logger</span><span class="op">.</span><span class="nam">setLevel</span><span class="op">(</span><span class="nam">logging</span><span class="op">.</span><span class="nam">INFO</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t9" class="pln"><span class="n"><a href="#t9">9</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t10" class="pln"><span class="n"><a href="#t10">10</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t11" class="run"><span class="n"><a href="#t11">11</a></span><span class="t"><span class="key">def</span> <span class="nam">tiff</span><span class="op">(</span><span class="nam">fname</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">array</span><span class="op">:</span> <span class="nam">numpy</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">calibration_um</span><span class="op">:</span> <span class="nam">float</span> <span class="op">=</span> <span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t12" class="run"><span class="n"><a href="#t12">12</a></span><span class="t"> <span class="key">if</span> <span class="op">(</span><span class="nam">c</span> <span class="op">:=</span> <span class="nam">calibration_um</span><span class="op">)</span> <span class="op">:</span> </span><span class="r"></span></p> + <p id="t13" class="run"><span class="n"><a href="#t13">13</a></span><span class="t"> <span class="nam">imwrite</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t14" class="pln"><span class="n"><a href="#t14">14</a></span><span class="t"> <span class="nam">fname</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t15" class="pln"><span class="n"><a href="#t15">15</a></span><span class="t"> <span class="nam">array</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"> <span class="nam">imagej</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t17" class="pln"><span class="n"><a href="#t17">17</a></span><span class="t"> <span class="nam">resolution</span><span class="op">=</span><span class="op">(</span><span class="num">1</span> <span class="op">/</span> <span class="nam">c</span><span class="op">,</span> <span class="num">1</span> <span class="op">/</span> <span class="nam">c</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t18" class="pln"><span class="n"><a href="#t18">18</a></span><span class="t"> <span class="nam">metadata</span><span class="op">=</span><span class="op">{</span><span class="str">"unit"</span><span class="op">:</span> <span class="str">"um"</span><span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t20" class="pln"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t21" class="run"><span class="n"><a href="#t21">21</a></span><span class="t"> <span class="nam">imwrite</span><span class="op">(</span><span class="nam">fname</span><span class="op">,</span> <span class="nam">array</span><span class="op">,</span> <span class="nam">imagej</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t22" class="run"><span class="n"><a href="#t22">22</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/nd2tif_transform_py.html b/cov_html/nd2tif_transform_py.html new file mode 100644 index 0000000000000000000000000000000000000000..1965cc9e151efb138962f02fb0779ac14a094a44 --- /dev/null +++ b/cov_html/nd2tif_transform_py.html @@ -0,0 +1,235 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> + <title>Coverage for nd2tif/transform.py: 50%</title> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="jquery.min.js"></script> + <script type="text/javascript" src="jquery.hotkeys.js"></script> + <script type="text/javascript" src="jquery.isonscreen.js"></script> + <script type="text/javascript" src="coverage_html.js"></script> + <script type="text/javascript"> + jQuery(document).ready(coverage.pyfile_ready); + </script> +</head> +<body class="pyfile"> +<div id="header"> + <div class="content"> + <h1>Coverage for <b>nd2tif/transform.py</b> : + <span class="pc_cov">50%</span> + </h1> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" /> + <h2 class="stats"> + 113 statements + <button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">57 run</button> + <button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">56 missing</button> + <button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button> + </h2> + </div> +</div> +<div class="help_panel"> + <img id="panel_icon" src="keybd_open.png" alt="Hide keyboard shortcuts" /> + <p class="legend">Hot-keys on this page</p> + <div> + <p class="keyhelp"> + <span class="key">r</span> + <span class="key">m</span> + <span class="key">x</span> + <span class="key">p</span> toggle line displays + </p> + <p class="keyhelp"> + <span class="key">j</span> + <span class="key">k</span> next/prev highlighted chunk + </p> + <p class="keyhelp"> + <span class="key">0</span> (zero) top of page + </p> + <p class="keyhelp"> + <span class="key">1</span> (one) first highlighted chunk + </p> + </div> +</div> +<div id="source"> + <p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span> </span><span class="r"></span></p> + <p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">skimage</span><span class="op">.</span><span class="nam">transform</span> <span class="key">import</span> <span class="nam">downscale_local_mean</span> </span><span class="r"></span></p> + <p id="t3" class="run"><span class="n"><a href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">nd2tif</span> <span class="key">import</span> <span class="nam">save</span> </span><span class="r"></span></p> + <p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">logging</span> </span><span class="r"></span></p> + <p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">nd2reader</span> <span class="key">import</span> <span class="nam">ND2Reader</span> </span><span class="r"></span></p> + <p id="t6" class="pln"><span class="n"><a href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"><span class="nam">logger</span> <span class="op">=</span> <span class="nam">logging</span><span class="op">.</span><span class="nam">getLogger</span><span class="op">(</span><span class="nam">__name__</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t8" class="pln"><span class="n"><a href="#t8">8</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t9" class="pln"><span class="n"><a href="#t9">9</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t10" class="run"><span class="n"><a href="#t10">10</a></span><span class="t"><span class="key">class</span> <span class="nam">ImageJStack</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t11" class="run"><span class="n"><a href="#t11">11</a></span><span class="t"> <span class="nam">default_order</span> <span class="op">=</span> <span class="str">"tzcyxs"</span> </span><span class="r"></span></p> + <p id="t12" class="run"><span class="n"><a href="#t12">12</a></span><span class="t"> <span class="nam">array</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span> </span><span class="r"></span></p> + <p id="t13" class="run"><span class="n"><a href="#t13">13</a></span><span class="t"> <span class="nam">order</span> <span class="op">=</span> <span class="nam">str</span> </span><span class="r"></span></p> + <p id="t14" class="run"><span class="n"><a href="#t14">14</a></span><span class="t"> <span class="nam">shape</span> <span class="op">=</span> <span class="nam">tuple</span> </span><span class="r"></span></p> + <p id="t15" class="run"><span class="n"><a href="#t15">15</a></span><span class="t"> <span class="nam">calibration_um</span> <span class="op">=</span> <span class="nam">float</span> </span><span class="r"></span></p> + <p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t17" class="run"><span class="n"><a href="#t17">17</a></span><span class="t"> <span class="key">def</span> <span class="nam">downscale</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">factor</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t18" class="mis show_mis"><span class="n"><a href="#t18">18</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t20" class="run"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="key">def</span> <span class="nam">to_8bits</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t21" class="mis show_mis"><span class="n"><a href="#t21">21</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p id="t22" class="pln"><span class="n"><a href="#t22">22</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t23" class="run"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="key">def</span> <span class="nam">save_tif</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">path</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t24" class="mis show_mis"><span class="n"><a href="#t24">24</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p id="t25" class="pln"><span class="n"><a href="#t25">25</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t27" class="run"><span class="n"><a href="#t27">27</a></span><span class="t"><span class="key">class</span> <span class="nam">Well</span><span class="op">(</span><span class="nam">ImageJStack</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t28" class="run"><span class="n"><a href="#t28">28</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span> </span><span class="r"></span></p> + <p id="t29" class="pln"><span class="n"><a href="#t29">29</a></span><span class="t"> <span class="nam">self</span><span class="op">,</span> <span class="nam">array</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">order</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">calibration_um</span><span class="op">:</span> <span class="nam">float</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p id="t30" class="pln"><span class="n"><a href="#t30">30</a></span><span class="t"> <span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t31" class="run"><span class="n"><a href="#t31">31</a></span><span class="t"> <span class="key">assert</span> <span class="nam">array</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="nam">len</span><span class="op">(</span><span class="nam">order</span><span class="op">)</span><span class="op">,</span> <span class="op">(</span> </span><span class="r"></span></p> + <p id="t32" class="pln"><span class="n"><a href="#t32">32</a></span><span class="t"> <span class="str">f'array.ndim {array.ndim} is not the same as order len {order}'</span> </span><span class="r"></span></p> + <p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p id="t34" class="run"><span class="n"><a href="#t34">34</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">array</span> <span class="op">=</span> <span class="nam">reshape_like_IJ</span><span class="op">(</span><span class="nam">array</span><span class="op">,</span> <span class="nam">order</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t35" class="run"><span class="n"><a href="#t35">35</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">order</span> <span class="op">=</span> <span class="nam">ImageJStack</span><span class="op">.</span><span class="nam">default_order</span> </span><span class="r"></span></p> + <p id="t36" class="run"><span class="n"><a href="#t36">36</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">shape</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">array</span><span class="op">.</span><span class="nam">shape</span> </span><span class="r"></span></p> + <p id="t37" class="run"><span class="n"><a href="#t37">37</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">calibration_um</span> <span class="op">=</span> <span class="nam">calibration_um</span> </span><span class="r"></span></p> + <p id="t38" class="pln"><span class="n"><a href="#t38">38</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t39" class="run"><span class="n"><a href="#t39">39</a></span><span class="t"> <span class="key">def</span> <span class="nam">downscale</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">factor</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t40" class="mis show_mis"><span class="n"><a href="#t40">40</a></span><span class="t"> <span class="nam">array</span> <span class="op">=</span> <span class="nam">downscale_local_mean</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">array</span><span class="op">,</span> <span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="nam">factor</span><span class="op">,</span> <span class="nam">factor</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t41" class="mis show_mis"><span class="n"><a href="#t41">41</a></span><span class="t"> <span class="key">return</span> <span class="nam">Well</span><span class="op">(</span><span class="nam">array</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'uint16'</span><span class="op">)</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">order</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">calibration_um</span> <span class="op">*</span> <span class="nam">factor</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t42" class="pln"><span class="n"><a href="#t42">42</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t43" class="run"><span class="n"><a href="#t43">43</a></span><span class="t"> <span class="key">def</span> <span class="nam">to_8bits</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t44" class="mis show_mis"><span class="n"><a href="#t44">44</a></span><span class="t"> <span class="nam">arr</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">array</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">"f"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t45" class="mis show_mis"><span class="n"><a href="#t45">45</a></span><span class="t"> <span class="nam">lim_shape</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t46" class="mis show_mis"><span class="n"><a href="#t46">46</a></span><span class="t"> <span class="nam">lim_shape</span><span class="op">[</span><span class="num">3</span><span class="op">:</span><span class="op">]</span> <span class="op">=</span> <span class="op">[</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t47" class="mis show_mis"><span class="n"><a href="#t47">47</a></span><span class="t"> <span class="nam">lim_shape</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">=</span> <span class="num">1</span> </span><span class="r"></span></p> + <p id="t48" class="mis show_mis"><span class="n"><a href="#t48">48</a></span><span class="t"> <span class="nam">lim_shape</span> <span class="op">=</span> <span class="nam">tuple</span><span class="op">(</span><span class="nam">lim_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t49" class="mis show_mis"><span class="n"><a href="#t49">49</a></span><span class="t"> <span class="nam">_min</span> <span class="op">=</span> <span class="nam">arr</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">axis</span><span class="op">=</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="num">3</span><span class="op">,</span> <span class="num">4</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">lim_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t50" class="mis show_mis"><span class="n"><a href="#t50">50</a></span><span class="t"> <span class="nam">_max</span> <span class="op">=</span> <span class="nam">arr</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">axis</span><span class="op">=</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="num">3</span><span class="op">,</span> <span class="num">4</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">lim_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t51" class="mis show_mis"><span class="n"><a href="#t51">51</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">debug</span><span class="op">(</span><span class="str">f"min/max: {_min}/{_max}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t52" class="mis show_mis"><span class="n"><a href="#t52">52</a></span><span class="t"> <span class="nam">new_array</span> <span class="op">=</span> <span class="op">(</span><span class="nam">arr</span> <span class="op">-</span> <span class="nam">_min</span><span class="op">)</span> <span class="op">*</span> <span class="num">255</span> <span class="op">/</span> <span class="op">(</span><span class="nam">_max</span> <span class="op">-</span> <span class="nam">_min</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t53" class="mis show_mis"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="key">return</span> <span class="nam">Well</span><span class="op">(</span><span class="nam">new_array</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">"uint8"</span><span class="op">)</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">order</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">calibration_um</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t54" class="pln"><span class="n"><a href="#t54">54</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t55" class="run"><span class="n"><a href="#t55">55</a></span><span class="t"> <span class="key">def</span> <span class="nam">save_tif</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">path</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t56" class="mis show_mis"><span class="n"><a href="#t56">56</a></span><span class="t"> <span class="nam">save</span><span class="op">.</span><span class="nam">tiff</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">array</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">calibration_um</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t57" class="pln"><span class="n"><a href="#t57">57</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t58" class="pln"><span class="n"><a href="#t58">58</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t59" class="run"><span class="n"><a href="#t59">59</a></span><span class="t"><span class="key">def</span> <span class="nam">reshape_like_IJ</span><span class="op">(</span><span class="nam">array</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">order</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t60" class="run"><span class="n"><a href="#t60">60</a></span><span class="t"> <span class="key">assert</span> <span class="op">[</span><span class="nam">d</span> <span class="key">in</span> <span class="op">(</span><span class="nam">ij</span> <span class="op">:=</span> <span class="nam">ImageJStack</span><span class="op">.</span><span class="nam">default_order</span><span class="op">)</span> <span class="key">for</span> <span class="nam">d</span> <span class="key">in</span> <span class="nam">order</span><span class="op">]</span><span class="op">,</span> <span class="str">f'Order {order} in incompatible with IJ {ij}'</span> </span><span class="r"></span></p> + <p id="t61" class="run"><span class="n"><a href="#t61">61</a></span><span class="t"> <span class="key">assert</span> <span class="nam">array</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="nam">len</span><span class="op">(</span><span class="nam">order</span><span class="op">)</span><span class="op">,</span> <span class="str">f'Order {order} in incompatible with array ndim {array.shape}'</span> </span><span class="r"></span></p> + <p id="t62" class="run"><span class="n"><a href="#t62">62</a></span><span class="t"> <span class="nam">dim_diff</span> <span class="op">=</span> <span class="nam">len</span><span class="op">(</span><span class="nam">ij</span><span class="op">)</span> <span class="op">-</span> <span class="nam">len</span><span class="op">(</span><span class="nam">order</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t63" class="run"><span class="n"><a href="#t63">63</a></span><span class="t"> <span class="nam">shape</span> <span class="op">=</span> <span class="nam">tuple</span><span class="op">(</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">*</span> <span class="nam">dim_diff</span> <span class="op">+</span> <span class="nam">list</span><span class="op">(</span><span class="nam">array</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t64" class="run"><span class="n"><a href="#t64">64</a></span><span class="t"> <span class="nam">rarray</span> <span class="op">=</span> <span class="nam">array</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t65" class="run"><span class="n"><a href="#t65">65</a></span><span class="t"> <span class="key">assert</span> <span class="nam">rarray</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">==</span> <span class="nam">len</span><span class="op">(</span><span class="nam">ij</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t66" class="run"><span class="n"><a href="#t66">66</a></span><span class="t"> <span class="nam">from_order</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="nam">dim_diff</span><span class="op">,</span> <span class="nam">rarray</span><span class="op">.</span><span class="nam">ndim</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t67" class="run"><span class="n"><a href="#t67">67</a></span><span class="t"> <span class="nam">to_order</span> <span class="op">=</span> <span class="op">[</span><span class="nam">ij</span><span class="op">.</span><span class="nam">index</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> <span class="key">for</span> <span class="nam">d</span> <span class="key">in</span> <span class="nam">order</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t68" class="run"><span class="n"><a href="#t68">68</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">debug</span><span class="op">(</span><span class="str">'from_order, to_order'</span><span class="op">,</span> <span class="nam">from_order</span><span class="op">,</span> <span class="nam">to_order</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t69" class="run"><span class="n"><a href="#t69">69</a></span><span class="t"> <span class="nam">sarray</span> <span class="op">=</span> <span class="nam">np</span><span class="op">.</span><span class="nam">moveaxis</span><span class="op">(</span><span class="nam">rarray</span><span class="op">,</span> <span class="nam">from_order</span><span class="op">,</span> <span class="nam">to_order</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t70" class="run"><span class="n"><a href="#t70">70</a></span><span class="t"> <span class="key">return</span> <span class="nam">sarray</span> </span><span class="r"></span></p> + <p id="t71" class="pln"><span class="n"><a href="#t71">71</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t72" class="run"><span class="n"><a href="#t72">72</a></span><span class="t"><span class="key">def</span> <span class="nam">to_8bits</span><span class="op">(</span><span class="nam">array</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t73" class="pln"><span class="n"><a href="#t73">73</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t74" class="pln"><span class="n"><a href="#t74">74</a></span><span class="t"><span class="str"> Converts array to 8 bits by scaling last two dimensions (yx) from 0 to 255.</span> </span><span class="r"></span></p> + <p id="t75" class="pln"><span class="n"><a href="#t75">75</a></span><span class="t"><span class="str"> Function intendent to convert 2D yx, or 3D cyx stacks.</span> </span><span class="r"></span></p> + <p id="t76" class="pln"><span class="n"><a href="#t76">76</a></span><span class="t"><span class="str"> In case of stacks rescaing must be upgraded to preserve inter-z relative intensities.</span> </span><span class="r"></span></p> + <p id="t77" class="pln"><span class="n"><a href="#t77">77</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t78" class="mis show_mis"><span class="n"><a href="#t78">78</a></span><span class="t"> <span class="nam">arr</span> <span class="op">=</span> <span class="nam">array</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">"f"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t79" class="mis show_mis"><span class="n"><a href="#t79">79</a></span><span class="t"> <span class="nam">lim_shape</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">arr</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t80" class="mis show_mis"><span class="n"><a href="#t80">80</a></span><span class="t"> <span class="nam">lim_shape</span><span class="op">[</span><span class="op">-</span><span class="num">2</span><span class="op">:</span><span class="op">]</span> <span class="op">=</span> <span class="op">[</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t81" class="mis show_mis"><span class="n"><a href="#t81">81</a></span><span class="t"> <span class="nam">lim_shape</span> <span class="op">=</span> <span class="nam">tuple</span><span class="op">(</span><span class="nam">lim_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t82" class="mis show_mis"><span class="n"><a href="#t82">82</a></span><span class="t"> <span class="nam">_min</span> <span class="op">=</span> <span class="nam">arr</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">axis</span><span class="op">=</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span><span class="op">-</span><span class="num">2</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">lim_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t83" class="mis show_mis"><span class="n"><a href="#t83">83</a></span><span class="t"> <span class="nam">_max</span> <span class="op">=</span> <span class="nam">arr</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">axis</span><span class="op">=</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span><span class="op">-</span><span class="num">2</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">lim_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t84" class="mis show_mis"><span class="n"><a href="#t84">84</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">debug</span><span class="op">(</span><span class="str">f"min/max: {_min}/{_max}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t85" class="mis show_mis"><span class="n"><a href="#t85">85</a></span><span class="t"> <span class="nam">new_array</span> <span class="op">=</span> <span class="op">(</span><span class="nam">arr</span> <span class="op">-</span> <span class="nam">_min</span><span class="op">)</span> <span class="op">*</span> <span class="num">255</span> <span class="op">/</span> <span class="op">(</span><span class="nam">_max</span> <span class="op">-</span> <span class="nam">_min</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t86" class="mis show_mis"><span class="n"><a href="#t86">86</a></span><span class="t"> <span class="key">return</span> <span class="nam">new_array</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'uint8'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t87" class="pln"><span class="n"><a href="#t87">87</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t88" class="pln"><span class="n"><a href="#t88">88</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t89" class="run"><span class="n"><a href="#t89">89</a></span><span class="t"><span class="key">def</span> <span class="nam">shape</span><span class="op">(</span><span class="nam">sizes</span><span class="op">:</span> <span class="nam">dict</span><span class="op">,</span> <span class="nam">order</span><span class="op">:</span> <span class="nam">str</span> <span class="op">=</span> <span class="str">"tzcyxs"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t90" class="pln"><span class="n"><a href="#t90">90</a></span><span class="t"> <span class="str">"""</span> </span><span class="r"></span></p> + <p id="t91" class="pln"><span class="n"><a href="#t91">91</a></span><span class="t"><span class="str"> Generates a good shape for imagej tif stack.</span> </span><span class="r"></span></p> + <p id="t92" class="pln"><span class="n"><a href="#t92">92</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t93" class="pln"><span class="n"><a href="#t93">93</a></span><span class="t"><span class="str"> Parameters:</span> </span><span class="r"></span></p> + <p id="t94" class="pln"><span class="n"><a href="#t94">94</a></span><span class="t"><span class="str"> -----------</span> </span><span class="r"></span></p> + <p id="t95" class="pln"><span class="n"><a href="#t95">95</a></span><span class="t"><span class="str"> sizes: dict</span> </span><span class="r"></span></p> + <p id="t96" class="pln"><span class="n"><a href="#t96">96</a></span><span class="t"><span class="str"> nd2.sizes dict</span> </span><span class="r"></span></p> + <p id="t97" class="pln"><span class="n"><a href="#t97">97</a></span><span class="t"><span class="str"> order: str</span> </span><span class="r"></span></p> + <p id="t98" class="pln"><span class="n"><a href="#t98">98</a></span><span class="t"><span class="str"> axis order in imagej. Default 'tzcyxs'</span> </span><span class="r"></span></p> + <p id="t99" class="pln"><span class="n"><a href="#t99">99</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p id="t100" class="pln"><span class="n"><a href="#t100">100</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t101" class="run"><span class="n"><a href="#t101">101</a></span><span class="t"> <span class="nam">keys</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">sizes</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t102" class="run"><span class="n"><a href="#t102">102</a></span><span class="t"> <span class="nam">shape</span> <span class="op">=</span> <span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">*</span> <span class="nam">len</span><span class="op">(</span><span class="nam">order</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t103" class="pln"><span class="n"><a href="#t103">103</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t104" class="run"><span class="n"><a href="#t104">104</a></span><span class="t"> <span class="key">for</span> <span class="nam">k</span> <span class="key">in</span> <span class="nam">keys</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t105" class="run"><span class="n"><a href="#t105">105</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t106" class="run"><span class="n"><a href="#t106">106</a></span><span class="t"> <span class="nam">shape</span><span class="op">[</span><span class="nam">order</span><span class="op">.</span><span class="nam">index</span><span class="op">(</span><span class="nam">k</span><span class="op">)</span><span class="op">]</span> <span class="op">=</span> <span class="nam">sizes</span><span class="op">[</span><span class="nam">k</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t107" class="run"><span class="n"><a href="#t107">107</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t108" class="run"><span class="n"><a href="#t108">108</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p id="t109" class="pln"><span class="n"><a href="#t109">109</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t110" class="run"><span class="n"><a href="#t110">110</a></span><span class="t"> <span class="key">return</span> <span class="nam">tuple</span><span class="op">(</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t111" class="pln"><span class="n"><a href="#t111">111</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t112" class="pln"><span class="n"><a href="#t112">112</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t113" class="run"><span class="n"><a href="#t113">113</a></span><span class="t"><span class="key">def</span> <span class="nam">scale_down</span><span class="op">(</span><span class="nam">well</span><span class="op">:</span> <span class="nam">np</span><span class="op">.</span><span class="nam">ndarray</span><span class="op">,</span> <span class="nam">factor</span><span class="op">=</span><span class="num">4</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t114" class="pln"><span class="n"><a href="#t114">114</a></span><span class="t"> <span class="str">"""</span> </span><span class="r"></span></p> + <p id="t115" class="pln"><span class="n"><a href="#t115">115</a></span><span class="t"><span class="str"> Downscales xy coordinates by factor</span> </span><span class="r"></span></p> + <p id="t116" class="pln"><span class="n"><a href="#t116">116</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p id="t117" class="run"><span class="n"><a href="#t117">117</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">debug</span><span class="op">(</span><span class="str">f"scale down well {well.shape} {well.ndim}d"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t118" class="run"><span class="n"><a href="#t118">118</a></span><span class="t"> <span class="nam">vector</span> <span class="op">=</span> <span class="nam">tuple</span><span class="op">(</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">*</span> <span class="op">(</span><span class="nam">well</span><span class="op">.</span><span class="nam">ndim</span> <span class="op">-</span> <span class="num">2</span><span class="op">)</span> <span class="op">+</span> <span class="op">[</span><span class="nam">factor</span><span class="op">]</span> <span class="op">*</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t119" class="run"><span class="n"><a href="#t119">119</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">debug</span><span class="op">(</span><span class="str">f"vector {vector}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t120" class="run"><span class="n"><a href="#t120">120</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t121" class="run"><span class="n"><a href="#t121">121</a></span><span class="t"> <span class="nam">ds_well</span> <span class="op">=</span> <span class="nam">downscale_local_mean</span><span class="op">(</span><span class="nam">well</span><span class="op">,</span> <span class="nam">vector</span><span class="op">)</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">"uint16"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t122" class="mis show_mis"><span class="n"><a href="#t122">122</a></span><span class="t"> <span class="key">except</span> <span class="nam">Exception</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t123" class="mis show_mis"><span class="n"><a href="#t123">123</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">error</span><span class="op">(</span><span class="str">f"unable to downscalse with vector {vector}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t124" class="mis show_mis"><span class="n"><a href="#t124">124</a></span><span class="t"> <span class="key">raise</span> <span class="nam">e</span> </span><span class="r"></span></p> + <p id="t125" class="run"><span class="n"><a href="#t125">125</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">debug</span><span class="op">(</span><span class="str">f"scale xy {well.shape} -> {ds_well.shape}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t126" class="run"><span class="n"><a href="#t126">126</a></span><span class="t"> <span class="key">return</span> <span class="nam">ds_well</span> </span><span class="r"></span></p> + <p id="t127" class="pln"><span class="n"><a href="#t127">127</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t128" class="pln"><span class="n"><a href="#t128">128</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t129" class="run"><span class="n"><a href="#t129">129</a></span><span class="t"><span class="key">def</span> <span class="nam">recursive_downscale</span><span class="op">(</span><span class="nam">file</span><span class="op">:</span> <span class="nam">ND2Reader</span><span class="op">,</span> <span class="nam">axes</span><span class="op">:</span> <span class="nam">list</span><span class="op">,</span> <span class="nam">sizes</span><span class="op">:</span> <span class="nam">dict</span><span class="op">,</span> <span class="nam">mod</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t130" class="pln"><span class="n"><a href="#t130">130</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t131" class="pln"><span class="n"><a href="#t131">131</a></span><span class="t"><span class="str"> recursively reads axes of nd2</span> </span><span class="r"></span></p> + <p id="t132" class="pln"><span class="n"><a href="#t132">132</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t133" class="pln"><span class="n"><a href="#t133">133</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t134" class="mis show_mis"><span class="n"><a href="#t134">134</a></span><span class="t"> <span class="nam">arr</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t135" class="mis show_mis"><span class="n"><a href="#t135">135</a></span><span class="t"> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">axes</span><span class="op">.</span><span class="nam">pop</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t136" class="mis show_mis"><span class="n"><a href="#t136">136</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'ax: {ax}, axes: {axes}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t137" class="mis show_mis"><span class="n"><a href="#t137">137</a></span><span class="t"> <span class="nam">size</span> <span class="op">=</span> <span class="nam">sizes</span><span class="op">[</span><span class="nam">ax</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t138" class="mis show_mis"><span class="n"><a href="#t138">138</a></span><span class="t"> <span class="key">if</span> <span class="nam">len</span><span class="op">(</span><span class="nam">axes</span><span class="op">)</span> <span class="op">></span> <span class="num">0</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t139" class="mis show_mis"><span class="n"><a href="#t139">139</a></span><span class="t"> <span class="key">for</span> <span class="nam">a</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">size</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t140" class="mis show_mis"><span class="n"><a href="#t140">140</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">f'{ax}: {a+1}/{size}'</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t141" class="mis show_mis"><span class="n"><a href="#t141">141</a></span><span class="t"> <span class="nam">file</span><span class="op">.</span><span class="nam">default_coords</span><span class="op">[</span><span class="nam">ax</span><span class="op">]</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> + <p id="t142" class="mis show_mis"><span class="n"><a href="#t142">142</a></span><span class="t"> <span class="nam">res</span> <span class="op">=</span> <span class="nam">recursive_downscale</span><span class="op">(</span><span class="nam">file</span><span class="op">,</span> <span class="nam">axes</span><span class="op">,</span> <span class="nam">sizes</span><span class="op">,</span> <span class="nam">mod</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t143" class="mis show_mis"><span class="n"><a href="#t143">143</a></span><span class="t"> <span class="nam">arr</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">res</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t144" class="mis show_mis"><span class="n"><a href="#t144">144</a></span><span class="t"> <span class="key">return</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="nam">arr</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="nam">res</span><span class="op">.</span><span class="nam">dtype</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t145" class="pln"><span class="n"><a href="#t145">145</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t146" class="mis show_mis"><span class="n"><a href="#t146">146</a></span><span class="t"> <span class="nam">file</span><span class="op">.</span><span class="nam">iter_axes</span> <span class="op">=</span> <span class="nam">ax</span> </span><span class="r"></span></p> + <p id="t147" class="mis show_mis"><span class="n"><a href="#t147">147</a></span><span class="t"> <span class="key">for</span> <span class="nam">yx</span> <span class="key">in</span> <span class="nam">file</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t148" class="mis show_mis"><span class="n"><a href="#t148">148</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="str">'.'</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t149" class="mis show_mis"><span class="n"><a href="#t149">149</a></span><span class="t"> <span class="nam">res</span> <span class="op">=</span> <span class="nam">mod</span><span class="op">(</span><span class="nam">yx</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t150" class="mis show_mis"><span class="n"><a href="#t150">150</a></span><span class="t"> <span class="nam">arr</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">res</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t151" class="mis show_mis"><span class="n"><a href="#t151">151</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">arr</span><span class="op">)</span><span class="op">,</span> <span class="nam">yx</span><span class="op">.</span><span class="nam">shape</span><span class="op">,</span> <span class="str">' -> '</span><span class="op">,</span> <span class="nam">res</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t152" class="mis show_mis"><span class="n"><a href="#t152">152</a></span><span class="t"> <span class="nam">axes</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">ax</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t153" class="mis show_mis"><span class="n"><a href="#t153">153</a></span><span class="t"> <span class="key">return</span> <span class="nam">np</span><span class="op">.</span><span class="nam">array</span><span class="op">(</span><span class="nam">arr</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="nam">yx</span><span class="op">.</span><span class="nam">dtype</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t154" class="pln"><span class="n"><a href="#t154">154</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t155" class="pln"><span class="n"><a href="#t155">155</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t156" class="pln"><span class="n"><a href="#t156">156</a></span><span class="t"> </span><span class="r"></span></p> + <p id="t157" class="run"><span class="n"><a href="#t157">157</a></span><span class="t"><span class="key">def</span> <span class="nam">to_8bits</span><span class="op">(</span><span class="nam">array</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p id="t158" class="pln"><span class="n"><a href="#t158">158</a></span><span class="t"> <span class="str">'''</span> </span><span class="r"></span></p> + <p id="t159" class="pln"><span class="n"><a href="#t159">159</a></span><span class="t"><span class="str"> Converts array to 8 bits by scaling last two dimensions (yx) from 0 to 255.</span> </span><span class="r"></span></p> + <p id="t160" class="pln"><span class="n"><a href="#t160">160</a></span><span class="t"><span class="str"> Function intendent to convert 2D yx, or 3D cyx stacks.</span> </span><span class="r"></span></p> + <p id="t161" class="pln"><span class="n"><a href="#t161">161</a></span><span class="t"><span class="str"> In case of stacks rescaing must be upgraded to preserve inter-z relative intensities.</span> </span><span class="r"></span></p> + <p id="t162" class="pln"><span class="n"><a href="#t162">162</a></span><span class="t"><span class="str"> '''</span> </span><span class="r"></span></p> + <p id="t163" class="mis show_mis"><span class="n"><a href="#t163">163</a></span><span class="t"> <span class="nam">arr</span> <span class="op">=</span> <span class="nam">array</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">"f"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t164" class="mis show_mis"><span class="n"><a href="#t164">164</a></span><span class="t"> <span class="nam">lim_shape</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">arr</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t165" class="mis show_mis"><span class="n"><a href="#t165">165</a></span><span class="t"> <span class="nam">lim_shape</span><span class="op">[</span><span class="op">-</span><span class="num">2</span><span class="op">:</span><span class="op">]</span> <span class="op">=</span> <span class="op">[</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p> + <p id="t166" class="mis show_mis"><span class="n"><a href="#t166">166</a></span><span class="t"> <span class="nam">lim_shape</span> <span class="op">=</span> <span class="nam">tuple</span><span class="op">(</span><span class="nam">lim_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t167" class="mis show_mis"><span class="n"><a href="#t167">167</a></span><span class="t"> <span class="nam">_min</span> <span class="op">=</span> <span class="nam">arr</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">axis</span><span class="op">=</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span><span class="op">-</span><span class="num">2</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">lim_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t168" class="mis show_mis"><span class="n"><a href="#t168">168</a></span><span class="t"> <span class="nam">_max</span> <span class="op">=</span> <span class="nam">arr</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">axis</span><span class="op">=</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span><span class="op">-</span><span class="num">2</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">lim_shape</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t169" class="mis show_mis"><span class="n"><a href="#t169">169</a></span><span class="t"> <span class="nam">logger</span><span class="op">.</span><span class="nam">debug</span><span class="op">(</span><span class="str">f"min/max: {_min}/{_max}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t170" class="mis show_mis"><span class="n"><a href="#t170">170</a></span><span class="t"> <span class="nam">new_array</span> <span class="op">=</span> <span class="op">(</span><span class="nam">arr</span> <span class="op">-</span> <span class="nam">_min</span><span class="op">)</span> <span class="op">*</span> <span class="num">255</span> <span class="op">/</span> <span class="op">(</span><span class="nam">_max</span> <span class="op">-</span> <span class="nam">_min</span><span class="op">)</span> </span><span class="r"></span></p> + <p id="t171" class="mis show_mis"><span class="n"><a href="#t171">171</a></span><span class="t"> <span class="key">return</span> <span class="nam">new_array</span><span class="op">.</span><span class="nam">astype</span><span class="op">(</span><span class="str">'uint8'</span><span class="op">)</span> </span><span class="r"></span></p> +</div> +<div id="footer"> + <div class="content"> + <p> + <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io">coverage.py v5.2.1</a>, + created at 2022-03-15 16:49 +0100 + </p> + </div> +</div> +</body> +</html> diff --git a/cov_html/status.json b/cov_html/status.json new file mode 100644 index 0000000000000000000000000000000000000000..8922350de224cb8f5043fbe2dc8251f3fdb1e9f3 --- /dev/null +++ b/cov_html/status.json @@ -0,0 +1 @@ +{"format":2,"version":"5.2.1","globals":"75e5ff1243c9f69cf68fe05aa620fd7c","files":{"droplet_growth___init___py":{"hash":"8f7b4702f7f2ec415e526897c6d0dc38","index":{"nums":[1,1,0,0,0,0,0],"html_filename":"droplet_growth___init___py.html","relative_filename":"droplet_growth/__init__.py"}},"droplet_growth_count_py":{"hash":"4b76b793019754be5a139a280ce2dac5","index":{"nums":[1,88,0,75,0,0,0],"html_filename":"droplet_growth_count_py.html","relative_filename":"droplet_growth/count.py"}},"droplet_growth_fit_py":{"hash":"74343408cdc2f2d2b624768bcaba4f4c","index":{"nums":[1,166,0,140,0,0,0],"html_filename":"droplet_growth_fit_py.html","relative_filename":"droplet_growth/fit.py"}},"droplet_growth_mic_py":{"hash":"c70e22ba96e411d06fc4efafd472b84d","index":{"nums":[1,187,0,165,0,0,0],"html_filename":"droplet_growth_mic_py.html","relative_filename":"droplet_growth/mic.py"}},"droplet_growth_multiwell_py":{"hash":"4616c57ec3768a6ee54b5aa20b1b4d2a","index":{"nums":[1,253,0,225,0,0,0],"html_filename":"droplet_growth_multiwell_py.html","relative_filename":"droplet_growth/multiwell.py"}},"droplet_growth_poisson_py":{"hash":"b899e00490d9ec985898e6f071687176","index":{"nums":[1,26,0,21,0,0,0],"html_filename":"droplet_growth_poisson_py.html","relative_filename":"droplet_growth/poisson.py"}},"droplet_growth_projections_py":{"hash":"57af64180bd7b615fb837dab59b58dff","index":{"nums":[1,47,0,47,0,0,0],"html_filename":"droplet_growth_projections_py.html","relative_filename":"droplet_growth/projections.py"}},"droplet_growth_register_py":{"hash":"d65a71afda17cdca6d3a91bf46c8bba4","index":{"nums":[1,222,0,194,0,0,0],"html_filename":"droplet_growth_register_py.html","relative_filename":"droplet_growth/register.py"}},"droplet_growth_segment_py":{"hash":"666ff9934cf4ef4f06d2b801979505be","index":{"nums":[1,37,0,26,0,0,0],"html_filename":"droplet_growth_segment_py.html","relative_filename":"droplet_growth/segment.py"}},"nd2tif___init___py":{"hash":"af9d0d0de0ea3b71d198bc63f1499a7d","index":{"nums":[1,0,0,0,0,0,0],"html_filename":"nd2tif___init___py.html","relative_filename":"nd2tif/__init__.py"}},"nd2tif___main___py":{"hash":"4a3f46d65e6115d3e4756c558e819382","index":{"nums":[1,53,0,53,0,0,0],"html_filename":"nd2tif___main___py.html","relative_filename":"nd2tif/__main__.py"}},"nd2tif_read_py":{"hash":"9c73ea316bfe6f0c27925ed25fcb6237","index":{"nums":[1,32,0,10,0,0,0],"html_filename":"nd2tif_read_py.html","relative_filename":"nd2tif/read.py"}},"nd2tif_save_py":{"hash":"bf525fa4270f0b3af455977b066a9314","index":{"nums":[1,11,0,0,0,0,0],"html_filename":"nd2tif_save_py.html","relative_filename":"nd2tif/save.py"}},"nd2tif_transform_py":{"hash":"9bfc5ad5993504312ad49eaccfee52a6","index":{"nums":[1,113,0,56,0,0,0],"html_filename":"nd2tif_transform_py.html","relative_filename":"nd2tif/transform.py"}}}} \ No newline at end of file diff --git a/cov_html/style.css b/cov_html/style.css new file mode 100644 index 0000000000000000000000000000000000000000..3e7f9b66b887b551407cc3ca4c20c1bd492e1913 --- /dev/null +++ b/cov_html/style.css @@ -0,0 +1,291 @@ +@charset "UTF-8"; +/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */ +/* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */ +/* Don't edit this .css file. Edit the .scss file instead! */ +html, body, h1, h2, h3, p, table, td, th { margin: 0; padding: 0; border: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; } + +body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-size: 1em; background: #fff; color: #000; } + +@media (prefers-color-scheme: dark) { body { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { body { color: #eee; } } + +html > body { font-size: 16px; } + +a:active, a:focus { outline: 2px dashed #007acc; } + +p { font-size: .875em; line-height: 1.4em; } + +table { border-collapse: collapse; } + +td { vertical-align: top; } + +table tr.hidden { display: none !important; } + +p#no_rows { display: none; font-size: 1.2em; } + +a.nav { text-decoration: none; color: inherit; } + +a.nav:hover { text-decoration: underline; color: inherit; } + +#header { background: #f8f8f8; width: 100%; border-bottom: 1px solid #eee; } + +@media (prefers-color-scheme: dark) { #header { background: black; } } + +@media (prefers-color-scheme: dark) { #header { border-color: #333; } } + +.indexfile #footer { margin: 1rem 3rem; } + +.pyfile #footer { margin: 1rem 1rem; } + +#footer .content { padding: 0; color: #666; font-style: italic; } + +@media (prefers-color-scheme: dark) { #footer .content { color: #aaa; } } + +#index { margin: 1rem 0 0 3rem; } + +#header .content { padding: 1rem 3rem; } + +h1 { font-size: 1.25em; display: inline-block; } + +#filter_container { float: right; margin: 0 2em 0 0; } + +#filter_container input { width: 10em; padding: 0.2em 0.5em; border: 2px solid #ccc; background: #fff; color: #000; } + +@media (prefers-color-scheme: dark) { #filter_container input { border-color: #444; } } + +@media (prefers-color-scheme: dark) { #filter_container input { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { #filter_container input { color: #eee; } } + +#filter_container input:focus { border-color: #007acc; } + +h2.stats { margin-top: .5em; font-size: 1em; } + +.stats button { font-family: inherit; font-size: inherit; border: 1px solid; border-radius: .2em; color: inherit; padding: .1em .5em; margin: 1px calc(.1em + 1px); cursor: pointer; border-color: #ccc; } + +@media (prefers-color-scheme: dark) { .stats button { border-color: #444; } } + +.stats button:active, .stats button:focus { outline: 2px dashed #007acc; } + +.stats button:active, .stats button:focus { outline: 2px dashed #007acc; } + +.stats button.run { background: #eeffee; } + +@media (prefers-color-scheme: dark) { .stats button.run { background: #373d29; } } + +.stats button.run.show_run { background: #dfd; border: 2px solid #00dd00; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { .stats button.run.show_run { background: #373d29; } } + +.stats button.mis { background: #ffeeee; } + +@media (prefers-color-scheme: dark) { .stats button.mis { background: #4b1818; } } + +.stats button.mis.show_mis { background: #fdd; border: 2px solid #ff0000; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { .stats button.mis.show_mis { background: #4b1818; } } + +.stats button.exc { background: #f7f7f7; } + +@media (prefers-color-scheme: dark) { .stats button.exc { background: #333; } } + +.stats button.exc.show_exc { background: #eee; border: 2px solid #808080; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { .stats button.exc.show_exc { background: #333; } } + +.stats button.par { background: #ffffd5; } + +@media (prefers-color-scheme: dark) { .stats button.par { background: #650; } } + +.stats button.par.show_par { background: #ffa; border: 2px solid #dddd00; margin: 0 .1em; } + +@media (prefers-color-scheme: dark) { .stats button.par.show_par { background: #650; } } + +.help_panel, #source p .annotate.long { display: none; position: absolute; z-index: 999; background: #ffffcc; border: 1px solid #888; border-radius: .2em; color: #333; padding: .25em .5em; } + +#source p .annotate.long { white-space: normal; float: right; top: 1.75em; right: 1em; height: auto; } + +#keyboard_icon { float: right; margin: 5px; cursor: pointer; } + +.help_panel { padding: .5em; border: 1px solid #883; } + +.help_panel .legend { font-style: italic; margin-bottom: 1em; } + +.indexfile .help_panel { width: 20em; min-height: 4em; } + +.pyfile .help_panel { width: 16em; min-height: 8em; } + +#panel_icon { float: right; cursor: pointer; } + +.keyhelp { margin: .75em; } + +.keyhelp .key { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em .35em; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-weight: bold; background: #eee; } + +#source { padding: 1em 0 1em 3rem; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; } + +#source p { position: relative; white-space: pre; } + +#source p * { box-sizing: border-box; } + +#source p .n { float: left; text-align: right; width: 3rem; box-sizing: border-box; margin-left: -3rem; padding-right: 1em; color: #999; } + +@media (prefers-color-scheme: dark) { #source p .n { color: #777; } } + +#source p .n a { text-decoration: none; color: #999; } + +@media (prefers-color-scheme: dark) { #source p .n a { color: #777; } } + +#source p .n a:hover { text-decoration: underline; color: #999; } + +@media (prefers-color-scheme: dark) { #source p .n a:hover { color: #777; } } + +#source p.highlight .n { background: #ffdd00; } + +#source p .t { display: inline-block; width: 100%; box-sizing: border-box; margin-left: -.5em; padding-left: 0.3em; border-left: 0.2em solid #fff; } + +@media (prefers-color-scheme: dark) { #source p .t { border-color: #1e1e1e; } } + +#source p .t:hover { background: #f2f2f2; } + +@media (prefers-color-scheme: dark) { #source p .t:hover { background: #282828; } } + +#source p .t:hover ~ .r .annotate.long { display: block; } + +#source p .t .com { color: #008000; font-style: italic; line-height: 1px; } + +@media (prefers-color-scheme: dark) { #source p .t .com { color: #6A9955; } } + +#source p .t .key { font-weight: bold; line-height: 1px; } + +#source p .t .str { color: #0451A5; } + +@media (prefers-color-scheme: dark) { #source p .t .str { color: #9CDCFE; } } + +#source p.mis .t { border-left: 0.2em solid #ff0000; } + +#source p.mis.show_mis .t { background: #fdd; } + +@media (prefers-color-scheme: dark) { #source p.mis.show_mis .t { background: #4b1818; } } + +#source p.mis.show_mis .t:hover { background: #f2d2d2; } + +@media (prefers-color-scheme: dark) { #source p.mis.show_mis .t:hover { background: #532323; } } + +#source p.run .t { border-left: 0.2em solid #00dd00; } + +#source p.run.show_run .t { background: #dfd; } + +@media (prefers-color-scheme: dark) { #source p.run.show_run .t { background: #373d29; } } + +#source p.run.show_run .t:hover { background: #d2f2d2; } + +@media (prefers-color-scheme: dark) { #source p.run.show_run .t:hover { background: #404633; } } + +#source p.exc .t { border-left: 0.2em solid #808080; } + +#source p.exc.show_exc .t { background: #eee; } + +@media (prefers-color-scheme: dark) { #source p.exc.show_exc .t { background: #333; } } + +#source p.exc.show_exc .t:hover { background: #e2e2e2; } + +@media (prefers-color-scheme: dark) { #source p.exc.show_exc .t:hover { background: #3c3c3c; } } + +#source p.par .t { border-left: 0.2em solid #dddd00; } + +#source p.par.show_par .t { background: #ffa; } + +@media (prefers-color-scheme: dark) { #source p.par.show_par .t { background: #650; } } + +#source p.par.show_par .t:hover { background: #f2f2a2; } + +@media (prefers-color-scheme: dark) { #source p.par.show_par .t:hover { background: #6d5d0c; } } + +#source p .r { position: absolute; top: 0; right: 2.5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; } + +#source p .annotate { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; color: #666; padding-right: .5em; } + +@media (prefers-color-scheme: dark) { #source p .annotate { color: #ddd; } } + +#source p .annotate.short:hover ~ .long { display: block; } + +#source p .annotate.long { width: 30em; right: 2.5em; } + +#source p input { display: none; } + +#source p input ~ .r label.ctx { cursor: pointer; border-radius: .25em; } + +#source p input ~ .r label.ctx::before { content: "▶ "; } + +#source p input ~ .r label.ctx:hover { background: #d5f7ff; color: #666; } + +@media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { background: #0f3a42; } } + +@media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { color: #aaa; } } + +#source p input:checked ~ .r label.ctx { background: #aef; color: #666; border-radius: .75em .75em 0 0; padding: 0 .5em; margin: -.25em 0; } + +@media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { background: #056; } } + +@media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { color: #aaa; } } + +#source p input:checked ~ .r label.ctx::before { content: "▼ "; } + +#source p input:checked ~ .ctxs { padding: .25em .5em; overflow-y: scroll; max-height: 10.5em; } + +#source p label.ctx { color: #999; display: inline-block; padding: 0 .5em; font-size: .8333em; } + +@media (prefers-color-scheme: dark) { #source p label.ctx { color: #777; } } + +#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #aef; border-radius: .25em; margin-right: 1.75em; } + +@media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } } + +#source p .ctxs span { display: block; text-align: right; } + +#index { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.875em; } + +#index table.index { margin-left: -.5em; } + +#index td, #index th { text-align: right; width: 5em; padding: .25em .5em; border-bottom: 1px solid #eee; } + +@media (prefers-color-scheme: dark) { #index td, #index th { border-color: #333; } } + +#index td.name, #index th.name { text-align: left; width: auto; } + +#index th { font-style: italic; color: #333; cursor: pointer; } + +@media (prefers-color-scheme: dark) { #index th { color: #ddd; } } + +#index th:hover { background: #eee; } + +@media (prefers-color-scheme: dark) { #index th:hover { background: #333; } } + +#index th.headerSortDown, #index th.headerSortUp { white-space: nowrap; background: #eee; } + +@media (prefers-color-scheme: dark) { #index th.headerSortDown, #index th.headerSortUp { background: #333; } } + +#index th.headerSortDown:after { content: " ↑"; } + +#index th.headerSortUp:after { content: " ↓"; } + +#index td.name a { text-decoration: none; color: inherit; } + +#index tr.total td, #index tr.total_dynamic td { font-weight: bold; border-top: 1px solid #ccc; border-bottom: none; } + +#index tr.file:hover { background: #eee; } + +@media (prefers-color-scheme: dark) { #index tr.file:hover { background: #333; } } + +#index tr.file:hover td.name { text-decoration: underline; color: inherit; } + +#scroll_marker { position: fixed; right: 0; top: 0; width: 16px; height: 100%; background: #fff; border-left: 1px solid #eee; will-change: transform; } + +@media (prefers-color-scheme: dark) { #scroll_marker { background: #1e1e1e; } } + +@media (prefers-color-scheme: dark) { #scroll_marker { border-color: #333; } } + +#scroll_marker .marker { background: #ccc; position: absolute; min-height: 3px; width: 100%; } + +@media (prefers-color-scheme: dark) { #scroll_marker .marker { background: #444; } } diff --git a/segment/seg.py b/segment/seg.py index 98440484810279566878afa52081d1cdbcb0ea2a..04e63a4a92b999b1755528c0724b67ee0544491b 100644 --- a/segment/seg.py +++ b/segment/seg.py @@ -7,6 +7,7 @@ import matplotlib from nd2_combine import tools import os import logging +from droplet_growth import multiwell matplotlib.logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.DEBUG) @@ -23,3 +24,29 @@ def crop_center(array): return crop +def segment_bf(well, thr=0.2, smooth=10, erode=10, fill=True, plot=False): + ''' + Serments input 2d array using thresholded gradient with filling + Returns SegmentedImage object + ''' + grad = multiwell.get_2d_gradient(well) + sm = multiwell.gaussian_filter(grad, smooth) +# sm = multiwell.gaussian_filter(well, smooth) + + regions = sm > thr * sm.max() + + if fill: + regions = multiwell.binary_fill_holes(regions) + + if erode: + regions = multiwell.binary_erosion(regions, iterations=erode) + + labels, n_labels = multiwell.label(regions) + print(f'{n_labels} region{" s"[n_labels>1]}') + if plot: + fig, ax = multiwell.plt.subplots(1,2) + ax[0].imshow(sm, cmap='gray') + ax[1].imshow(labels) + multiwell.plt.show() + + return labels \ No newline at end of file diff --git a/segment_Nadia.ipynb b/segment_Nadia.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..07aab4ee9f604a54c7c83a0f9a87777373aa52b0 --- /dev/null +++ b/segment_Nadia.ipynb @@ -0,0 +1,637 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from nd2_combine import tools\n", + "from droplet_growth import multiwell\n", + "from segment import seg\n", + "import numpy as np\n", + "import logging\n", + "import os\n", + "import math\n", + "from glob import glob\n", + "import matplotlib.pyplot as plt\n", + "from scipy.ndimage import gaussian_filter1d as gf\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "from functools import partial\n", + "import re\n", + "\n", + "logging.basicConfig(level=logging.DEBUG)\n", + "\n", + "logger = logging.getLogger()\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "PX_SIZE_UM = 1.6" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/Diff-Plate/24h/Diff-24.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/Diff-Plate/14h/2iL-14h001.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/Diff-Plate/39h/Diff-39.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/21L-Plate/24h/2iL-24.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/21L-Plate/14h/2iL-14h.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/21L-Plate/39h/2iL-39.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/Diff-Chip/15h/Diff-15.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/Diff-Chip/24h/Diff-24.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/Diff-Chip/39h/Diff-39.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/2iL-Chip/15h/2iL-15h.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/2iL-Chip/24h/2iL-24.nd2',\n", + " '/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/2iL-Chip/39h/2iL-39.nd2']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nd2_paths = glob('/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/*/*/*.nd2')\n", + "nd2_paths" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def parse_params(path):\n", + " cond, container, hour = re.compile(r'REX1_GFP/(.*)-(.*)/(\\d\\d)h/').findall(path)[0]\n", + " return {'condition': cond, 'container': container, 'hour': int(hour)}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'condition': 'Diff', 'container': 'Plate', 'hour': 24},\n", + " {'condition': 'Diff', 'container': 'Plate', 'hour': 14},\n", + " {'condition': 'Diff', 'container': 'Plate', 'hour': 39},\n", + " {'condition': '21L', 'container': 'Plate', 'hour': 24},\n", + " {'condition': '21L', 'container': 'Plate', 'hour': 14},\n", + " {'condition': '21L', 'container': 'Plate', 'hour': 39},\n", + " {'condition': 'Diff', 'container': 'Chip', 'hour': 15},\n", + " {'condition': 'Diff', 'container': 'Chip', 'hour': 24},\n", + " {'condition': 'Diff', 'container': 'Chip', 'hour': 39},\n", + " {'condition': '2iL', 'container': 'Chip', 'hour': 15},\n", + " {'condition': '2iL', 'container': 'Chip', 'hour': 24},\n", + " {'condition': '2iL', 'container': 'Chip', 'hour': 39}]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(map(parse_params, nd2_paths))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def process_well(well:dict, plot=False, **kwargs):\n", + " # print(well)\n", + " bf,fluo = np.array(well['well'])\n", + " label = seg.segment_bf(bf, thr=.4, plot=plot)\n", + " props = multiwell.regionprops_table(label, intensity_image=fluo, properties=('label', 'centroid', 'bbox','mean_intensity', 'area'))\n", + " biggest_prop_index = np.argmax(props['area'])\n", + " label_of_biggest_object = props['label'][biggest_prop_index]\n", + " mask = label == label_of_biggest_object\n", + " bg_mask = 1 - mask\n", + " if plot:\n", + " plt.imshow(bg_mask)\n", + " bg_props = multiwell.regionprops_table(bg_mask, intensity_image=fluo, properties=('mean_intensity',))\n", + " if plot:\n", + " plt.title(bg_props)\n", + " plt.show()\n", + " good_prop = {**{n: v[biggest_prop_index] for n,v in props.items()}, 'mean_bg': bg_props['mean_intensity'][0]}\n", + " return {**good_prop, 'well_index': well['well_index']}\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def process_nd2(path, plot=False):\n", + " meta = parse_params(path)\n", + " gen = tools.read_nd2(path, bundle_axes='cyx')\n", + " p = partial(process_well, plot=plot)\n", + " out = list(map(p, gen))\n", + " df = pd.DataFrame(out)\n", + " ppp = path.replace('nd2','csv')\n", + " if ppp == path:\n", + " raise ValueError('unable to rename nd2 to csv')\n", + " df.to_csv(ppp, index=None)\n", + " print(f'saved table {ppp}')\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "### test single file\n", + "# process_nd2(nd2_paths[6], plot=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from multiprocessing import Pool" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n", + "/home/aaristov/miniconda3/envs/nd2/lib/python3.8/site-packages/pims/base_frames.py:472: UserWarning: Please call FramesSequenceND.__init__() at the start of thethe reader initialization.\n", + " warn(\"Please call FramesSequenceND.__init__() at the start of the\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 regions\n", + "1 region \n", + "73 regions\n", + "12 regions\n", + "1 region \n", + "13 regions\n", + "9 regions\n", + "5 regions\n", + "1 region \n", + "9 regions\n", + "13 regions\n", + "8 regions\n", + "9 regions\n", + "1 region \n", + "11 regions\n", + "13 regions\n", + "6 regions\n", + "1 region \n", + "11 regions\n", + "5 regions\n", + "5 regions\n", + "12 regions\n", + "1 region \n", + "5 regions\n", + "1 region \n", + "12 regions\n", + "3 regions\n", + "5 regions\n", + "3 regions\n", + "1 region \n", + "9 regions\n", + "10 regions\n", + "9 regions\n", + "3 regions\n", + "1 region \n", + "1 region \n", + "11 regions\n", + "4 regions\n", + "1 region \n", + "18 regions\n", + "5 regions\n", + "1 region \n", + "19 regions\n", + "4 regions\n", + "8 regions\n", + "6 regions\n", + "2 regions\n", + "2 regions\n", + "12 regions\n", + "7 regions\n", + "1 region \n", + "9 regions\n", + "1 region \n", + "1 region \n", + "3 regions\n", + "10 regions\n", + "10 regions\n", + "1 region \n", + "1 region \n", + "1 region \n", + "6 regions\n", + "10 regions\n", + "2 regions\n", + "10 regions\n", + "1 region \n", + "16 regions\n", + "3 regions\n", + "3 regions\n", + "7 regions\n", + "11 regions\n", + "2 regions\n", + "2 regions\n", + "15 regions\n", + "17 regions\n", + "8 regions\n", + "1 region \n", + "19 regions\n", + "9 regions\n", + "1 region \n", + "7 regions\n", + "10 regions\n", + "8 regions\n", + "2 regions\n", + "1 region \n", + "11 regions\n", + "13 regions\n", + "3 regions\n", + "1 region \n", + "24 regions\n", + "20 regions\n", + "10 regions\n", + "11 regions\n", + "10 regions\n", + "1 region \n", + "2 regions\n", + "1 region \n", + "12 regions\n", + "7 regions\n", + "2 regions\n", + "1 region \n", + "7 regions\n", + "4 regions\n", + "1 region \n", + "10 regions\n", + "9 regions\n", + "1 region \n", + "6 regions\n", + "2 regions\n", + "5 regions\n", + "7 regions\n", + "32 regions\n", + "1 region \n", + "26 regions\n", + "5 regions\n", + "10 regions\n", + "7 regions\n", + "5 regions\n", + "1 region \n", + "5 regions\n", + "1 region \n", + "10 regions\n", + "6 regions\n", + "4 regions\n", + "1 region \n", + "44 regions\n", + "7 regions\n", + "3 regions\n", + "8 regions\n", + "3 regions\n", + "1 region \n", + "4 regions\n", + "1 region \n", + "15 regions\n", + "9 regions\n", + "9 regions\n", + "1 region \n", + "7 regions\n", + "12 regions\n", + "2 regions\n", + "19 regions\n", + "1 region \n", + "10 regions\n", + "10 regions\n", + "1 region \n", + "6 regions\n", + "10 regions\n", + "5 regions\n", + "1 region \n", + "3 regions\n", + "6 regions\n", + "3 regions\n", + "9 regions\n", + "2 regions\n", + "15 regions\n", + "3 regions\n", + "1 region \n", + "3 regions\n", + "14 regions\n", + "7 regions\n", + "1 region \n", + "8 regions\n", + "9 regions\n", + "11 regions\n", + "1 region \n", + "3 regions\n", + "10 regions\n", + "10 regions\n", + "3 regions\n", + "9 regions\n", + "4 regions\n", + "7 regions\n", + "1 region \n", + "8 regions\n", + "4 regions\n", + "13 regions\n", + "2 regions\n", + "1 region \n", + "6 regions\n", + "4 regions\n", + "2 regions\n", + "6 regions\n", + "13 regions\n", + "1 region \n", + "1 region \n", + "5 regions\n", + "13 regions\n", + "29 regions\n", + "1 region \n", + "2 regions\n", + "3 regions\n", + "3 regions\n", + "2 regions\n", + "5 regions\n", + "16 regions\n", + "6 regions\n", + "1 region \n", + "10 regions\n", + "5 regions\n", + "8 regions\n", + "3 regions\n", + "4 regions\n", + "5 regions\n", + "6 regions\n", + "1 region \n", + "9 regions\n", + "4 regions\n", + "4 regions\n", + "1 region \n", + "11 regions\n", + "7 regions\n", + "16 regions\n", + "2 regions\n", + "1 region \n", + "4 regions\n", + "1 region \n", + "1 region \n", + "13 regions\n", + "13 regions\n", + "1 region \n", + "1 region \n", + "8 regions\n", + "8 regions\n", + "13 regions\n", + "1 region \n", + "2 regions\n", + "11 regions\n", + "3 regions\n", + "1 region \n", + "10 regions\n", + "6 regions\n", + "1 region \n", + "6 regions\n", + "4 regions\n", + "1 region \n", + "2 regions\n", + "1 region \n", + "3 regions\n", + "6 regions\n", + "3 regions\n", + "1 region \n", + "14 regions\n", + "5 regions\n", + "1 region \n", + "5 regions\n", + "13 regions\n", + "7 regions\n", + "7 regions\n", + "1 region \n", + "6 regions\n", + "18 regions\n", + "5 regions\n", + "1 region \n", + "6 regions\n" + ] + } + ], + "source": [ + "try:\n", + " p = Pool()\n", + " p.map(process_nd2, nd2_paths)\n", + "except Exception as e:\n", + " print(e.args)\n", + "finally:\n", + " p.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "all_csv = glob('/home/aaristov/Multicell/Nadia/Organoids/Rex1Gfp/n1/REX1_GFP/*/*/*.csv')\n", + "all_csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def read_csv(path):\n", + " df = pd.read_csv(path, index_col=None)\n", + " meta = parse_params(path)\n", + " for n, v in meta.items():\n", + " if v == '21L':\n", + " v = '2iL'\n", + " df.loc[:, n] = v\n", + " df.loc[:, 'mean_signal'] = df.mean_intensity - df.mean_bg\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df_all = pd.concat(map(read_csv, all_csv), ignore_index=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pd.unique(df_all.area).shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sns.scatterplot(data=df_all, x='hour', y='mean_signal', hue='condition', style='container', )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(dpi=300)\n", + "sns.lineplot(data=df_all, x='hour', y='mean_intensity', hue='condition', style='container', )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(dpi=300)\n", + "sns.lineplot(data=df_all, x='hour', y='mean_signal', hue='condition', style='container', )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sns.scatterplot(data=df_all.query('container == \"Plate\"'), x='hour', y='mean_intensity', hue='condition', )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sns.scatterplot(data=df_all.query('container == \"Chip\"'), x='hour', y='mean_intensity', hue='condition', )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "csv_save_path = os.path.join(os.path.commonpath(nd2_paths), 'all_conditions.csv')\n", + "csv_save_path" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df_all.to_csv(csv_save_path, index=None)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tox.ini b/tox.ini index ec7bbe969f501063a1d9e2f20e521cef6106c14e..f4f73f1a47dfece3595fa63efc756a429416974c 100644 --- a/tox.ini +++ b/tox.ini @@ -1,8 +1,26 @@ # content of: tox.ini , put in same dir as setup.py [tox] -envlist = py38 - +envlist = clean,py38,py39, report +requires = tox-conda [testenv] -deps = pytest +usedevelop=True commands = + pytest --cov --cov-append --cov-report=term-missing +deps = pytest + pytest-cov +depends = + {py38,py39}: clean + report: py38,py39 + +[testenv:report] +deps = coverage +skip_install = true +commands = + coverage report + coverage html + +[testenv:clean] +deps = coverage +skip_install = true +commands = coverage erase