<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[tigue.com]]></title><description><![CDATA[John Tigue's tech blog]]></description><link>http://tigue.com</link><generator>GatsbyJS</generator><lastBuildDate>Tue, 16 Jun 2020 17:02:26 GMT</lastBuildDate><item><title><![CDATA[Whiteboarder: A Two Bit Image Processor]]></title><description><![CDATA[Whiteboarder is a two bit image processor, tuned for whiteboard
captures. The four most common dry erase marker colors are recognized:
black…]]></description><link>http://tigue.com/whiteboarder_a_two_bit_photo_processor/</link><guid isPermaLink="false">http://tigue.com/whiteboarder_a_two_bit_photo_processor/</guid><pubDate>Tue, 26 May 2020 23:00:00 GMT</pubDate><content:encoded>&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1000px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 32.612507305669205%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsSAAALEgHS3X78AAAB/ElEQVQozx2R3UtTcRjHz18hkTcRlkkEGkQvFxHSRUYXUtd1U1QX3UiIUIK7kgqEggiFQIxlS/Si+Zamczs7Z9O5TXc059nZu8dznEu34aT1Ap9+efHh+fLwPA98v4+kyjKLgQBLRwRRfDLpZJLff/5SKpWoVCocHFQ5rB5SrVapCl37WaNW+yWoHen/s8ViEUPXkU4cq+PcqQaaG0/T0nSGhvrjdHd1YdsFPo+O4XSNMOaeYGx8klH3OO6vs6S2tslaO0dk8iaWVWBu3sPzHgfSxMl6/JfOEr52npXrF4hcbCT+wkHa3iW9qpH0yhiChDhkfJsnObdARlbIygFSop9eXSNjF0l4/dhv3yG9vH2F/odtDHW04+y8w+CTG8wO9ZHbLrCuaUQDKrHQIjFVQVMU1n0+tNASKwEFY2mZdDxBThxcVlU+DbxGanpzn9bBp9wcfsYtVzetzk56F5xYOYvw5jrTmoLnewjfZgRPPIxqxPDrUabWghimiSns7gjkDY1HU++R6tqGab47w+UHfq4+DtJyT6GnP4Zt5VleSfFldoM5v86MV8cbMJhe0Jn06ERjWUyRZTprirxtPEGDjr4IkmMgRO+HNV65dPpGEvR+FAtqnnJpj21hJZndIZUriFogs7UrEN/M7mLaP9gvldnbL1MuV0jli8hRi3+L5r72ecPNxQAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;header&quot; title=&quot;header&quot; src=&quot;/static/bec870d60e8e69daae9e571afa8025ee/5d675/header.png&quot; srcset=&quot;/static/bec870d60e8e69daae9e571afa8025ee/1abb1/header.png 250w,
/static/bec870d60e8e69daae9e571afa8025ee/7217d/header.png 500w,
/static/bec870d60e8e69daae9e571afa8025ee/5d675/header.png 1000w,
/static/bec870d60e8e69daae9e571afa8025ee/b0eb8/header.png 1500w,
/static/bec870d60e8e69daae9e571afa8025ee/405f6/header.png 1711w&quot; sizes=&quot;(max-width: 1000px) 100vw, 1000px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;
	&amp;#xA0; 
&lt;p&gt;Whiteboarder is a two bit image processor, tuned for whiteboard
captures. The four most common dry erase marker colors are recognized:
black, red, green, and blue. Four colors, ergo two bit color images.&lt;/p&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1000px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 75.03467406380028%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAQFAQP/xAAUAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAGl2mPC2aJ//8QAGxAAAgEFAAAAAAAAAAAAAAAAAAECAxEhIzL/2gAIAQEAAQUCshconLNJ6Ef/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPwGH/8QAFhABAQEAAAAAAAAAAAAAAAAAARAA/9oACAEBAAY/AsUZ/8QAGhAAAgMBAQAAAAAAAAAAAAAAABEBMXFhwf/aAAgBAQABPyFmiw4oSpgzo9KUj//aAAwDAQACAAMAAAAQ8w//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAwEBPxBZ/8QAFxEAAwEAAAAAAAAAAAAAAAAAARARIf/aAAgBAgEBPxARq//EABsQAQADAQADAAAAAAAAAAAAAAEAESFRQXGx/9oACAEBAAE/EDBTbYFA4unuCic7CIeYs+2l9QIbC4T/2Q==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;brightfield cuboid packager&quot; title=&quot;brightfield cuboid packager&quot; src=&quot;/static/46b841cff30353b436e809fa057b2a64/7e3f6/brightfield_cuboid_packager.jpg&quot; srcset=&quot;/static/46b841cff30353b436e809fa057b2a64/74ce1/brightfield_cuboid_packager.jpg 250w,
/static/46b841cff30353b436e809fa057b2a64/c635c/brightfield_cuboid_packager.jpg 500w,
/static/46b841cff30353b436e809fa057b2a64/7e3f6/brightfield_cuboid_packager.jpg 1000w,
/static/46b841cff30353b436e809fa057b2a64/29ca2/brightfield_cuboid_packager.jpg 1442w&quot; sizes=&quot;(max-width: 1000px) 100vw, 1000px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;
 
&amp;#xA0; 
&lt;p&gt;I have long wanted a tool dedicated to cleaning up whiteboard capture
images. There are commercial tools but nothing made me happy. Of late
I’ve been coding a lot of image processing in a machine learning
context. So, Whiteboarder just kinda happened over this last month by
hacking on a Jupyter notebook to see what could be cooked up with the
tools I was already using for a different purpose.&lt;/p&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1000px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 33.3950046253469%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAHABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAMEBf/EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAG1oEsgo//EABYQAQEBAAAAAAAAAAAAAAAAAAIAIv/aAAgBAQABBQIOOjf/xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAwEBPwFn/8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQIBAT8BJ//EABQQAQAAAAAAAAAAAAAAAAAAABD/2gAIAQEABj8Cf//EABgQAAMBAQAAAAAAAAAAAAAAAAABESEx/9oACAEBAAE/IcDJeFSP/9oADAMBAAIAAwAAABB3z//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QH//EABURAQEAAAAAAAAAAAAAAAAAABAx/9oACAECAQE/EKP/xAAZEAEAAwEBAAAAAAAAAAAAAAABABEhMXH/2gAIAQEAAT8QanLiU0Ub6Rw7P//Z&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;red kneecap&quot; title=&quot;red kneecap&quot; src=&quot;/static/9bab29f6d065c7cfb7ccb24177e3fff1/7e3f6/red_kneecap.jpg&quot; srcset=&quot;/static/9bab29f6d065c7cfb7ccb24177e3fff1/74ce1/red_kneecap.jpg 250w,
/static/9bab29f6d065c7cfb7ccb24177e3fff1/c635c/red_kneecap.jpg 500w,
/static/9bab29f6d065c7cfb7ccb24177e3fff1/7e3f6/red_kneecap.jpg 1000w,
/static/9bab29f6d065c7cfb7ccb24177e3fff1/db64a/red_kneecap.jpg 1500w,
/static/9bab29f6d065c7cfb7ccb24177e3fff1/7ef33/red_kneecap.jpg 2000w,
/static/9bab29f6d065c7cfb7ccb24177e3fff1/be821/red_kneecap.jpg 2162w&quot; sizes=&quot;(max-width: 1000px) 100vw, 1000px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;
&amp;#xA0; 
&lt;p&gt;Note: this is very much not an end-user tool. The tech is simply not
mature enough for full auto-pilot. But the results can be impressive
with a touch of human intelligence in the mix. So, Whiteboarder is for
folks who are comfortable seeing what is going on under the
hood. There will be code.&lt;/p&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1000px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 37.597503900156006%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAIEBf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHRskTFf//EABgQAQADAQAAAAAAAAAAAAAAAAEAAiEx/9oACAEBAAEFAi2HBn//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAWEAADAAAAAAAAAAAAAAAAAAAAARD/2gAIAQEABj8CFP/EABgQAQEBAQEAAAAAAAAAAAAAAAEAESFR/9oACAEBAAE/ISU3RY57bF//2gAMAwEAAgADAAAAEP8Az//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/EGf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAZEAADAQEBAAAAAAAAAAAAAAAAARFBMVH/2gAIAQEAAT8QbiprPTcxWBHORw//2Q==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;git and jupyter book&quot; title=&quot;git and jupyter book&quot; src=&quot;/static/a9dac730c427607d3411b575c0fc852b/7e3f6/git_and_jupyter_book.jpg&quot; srcset=&quot;/static/a9dac730c427607d3411b575c0fc852b/74ce1/git_and_jupyter_book.jpg 250w,
/static/a9dac730c427607d3411b575c0fc852b/c635c/git_and_jupyter_book.jpg 500w,
/static/a9dac730c427607d3411b575c0fc852b/7e3f6/git_and_jupyter_book.jpg 1000w,
/static/a9dac730c427607d3411b575c0fc852b/8fc29/git_and_jupyter_book.jpg 1282w&quot; sizes=&quot;(max-width: 1000px) 100vw, 1000px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;
&amp;#xA0; 
&lt;p&gt;Additionally, the project is an experiment with Jupyter as a
development platform. The question is: just how far can a Jupyter
notebook’s UI be morphed into an end-user-ish utility tool? The code is
&lt;a href=&quot;https://github.com/JohnTigue/whiteboarder&quot;&gt;available on GitHub.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Whiteboard can read your own images: specify an URL, upload a file, or
take a picture in-browser. To take Whiteboarder for a test drive on
Colab click below:&lt;/p&gt;
&lt;center&gt;
&lt;a href=&quot;https://colab.research.google.com/github/JohnTigue/whiteboarder/blob/master/whiteboarder.ipynb&quot;&gt;&lt;img src=&quot;https://colab.research.google.com/assets/colab-badge.svg&quot; width=&quot;23%&quot;&gt;&lt;/a&gt;
&lt;/center&gt;</content:encoded></item><item><title><![CDATA[Eight Bit Gauges in Jupyter]]></title><description><![CDATA[Over the last few weeks I have written so many variants on “eight bit
gauges” in Jupyter that I thought I might as well corral them all…]]></description><link>http://tigue.com/eight_bit_gauges/</link><guid isPermaLink="false">http://tigue.com/eight_bit_gauges/</guid><pubDate>Mon, 27 Apr 2020 23:28:01 GMT</pubDate><content:encoded>&lt;img src=&quot;https://reconstrue.github.io/shell/ui/eight_bit_dual_gauge.png&quot;&gt;
&lt;p&gt;Over the last few weeks I have written so many variants on “eight bit
gauges” in Jupyter that I thought I might as well corral them all
together in a menagerie. By eight big gauges I mean histograms with
256 bins.&lt;/p&gt;
&lt;p&gt;For example, the above image is for grayscale images as
implied by the gray gradient on the face of the histogram. The red
line is the same data but as a cumulative distribution, starting at
zero and marching monotonically to 100% total luminance.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 401px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 73.56608478802991%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsSAAALEgHS3X78AAAB8ElEQVQ4y41Tv4saQRjdP8kkas7d+FsQ8Q+wtLEWrCysUlhYi5ZaCoJFrhLBwsacGrnkVuTgkCjcQYqcetldk11/vOw3MktW13AfvJ35Zt68eTPfrLDb7bDf7x3B5wzDuMj5l0chUOdwODiCiBSTyQSz2Yz1L/E5V6DkUnBSs9lEq9WyjV3iWoJOu263WzZXrVZRLBatha9y+D9SpVJBKpXCer22js3X8NZRkMepYKlUgsvlQrvdtrl04gqnQpzMXVCF0+k03G438vm8zd2rHNLlr1Yra5P5fI5YLIZAIIBwOIxcLodut3tWcZsgf08UhUIB9XodmqaxvFwuw+v1IhKJIBgMQhRFJBIJyLJsu09LkA9QjEYjdvl+v585qdVqiMfjLA+FQgzRaBQejwfZbNbm0hKkj6IoaDQalgs6GjkhZzwnMWoJJCpJEjqdzlkhheVyiUwmgzdv3+H9lQ8+UcKVTzQFJXPRByZ8ChIjl8lkEtPplBnabDZHh4vFAr1eD7dfbiDfDnA3vrHwzcRoOMBgcI7hcIh+v4/xeAzSUFX1KKiqGg47A58XZoWnwPU98On+2H40i/n92bybvQHdfD7GCehP0nWdiVHOBKmayq8XPPzY4OujgbtHnUF+0nEt/8HTTw2/NcU8lsoWXgIX/AsfSRJqyRiTpQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;range selector&quot;
        title=&quot;range selector&quot;
        src=&quot;/static/fec9124d192e5b2bce3e7431319b7006/29ab6/range_selector.png&quot;
        srcset=&quot;/static/fec9124d192e5b2bce3e7431319b7006/1abb1/range_selector.png 250w,
/static/fec9124d192e5b2bce3e7431319b7006/29ab6/range_selector.png 401w&quot;
        sizes=&quot;(max-width: 401px) 100vw, 401px&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;The code is all Python using common plotting libraries (Bokeh, Plotly,
Matplotlib, etc.). In particular, the code has been well tested on
Colab, including working out full-screenable versions which perform well
as “slides.” I’ve licensed the code under the Apache 2 license. So, peruse
the menagerie and maybe take one home.&lt;/p&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1000px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 31.540565177757525%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAAAxUlEQVQY042Q2Q6CUAxE+f9PUkBBcYmYGCUoIAHZRBASd95GW9REH5SHSdPe9szkCvH+ima6cA2zE9wwf/ffEprAorw+ToobnE0GfWbC9tLn/PJhKDRJRqDN9gDbT2FYHlRtDG2kYx3k2JYVp34DyeWfkqKC4++g9EfoqgOIsoKWKGNuugwxLJ9NafdnwuTh7sUlTCfAcDJjCMGkjspV6Q15TkaLlVcDo/yMKDtz7GB3rJXWooXpfIm21GXItwhKby8T+oI7orC1S7KddiAAAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;simple wide&quot; title=&quot;simple wide&quot; src=&quot;/static/f8cdafe3ad636719ec039f3a43ca74be/5d675/simple_wide.png&quot; srcset=&quot;/static/f8cdafe3ad636719ec039f3a43ca74be/1abb1/simple_wide.png 250w,
/static/f8cdafe3ad636719ec039f3a43ca74be/7217d/simple_wide.png 500w,
/static/f8cdafe3ad636719ec039f3a43ca74be/5d675/simple_wide.png 1000w,
/static/f8cdafe3ad636719ec039f3a43ca74be/54149/simple_wide.png 1097w&quot; sizes=&quot;(max-width: 1000px) 100vw, 1000px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;
&lt;p&gt;There is a pre-run and runnable copy on Colab,
&lt;a href=&quot;https://colab.research.google.com/drive/1bMv3ya7rJzSi8tdmGAuT-Xm4TToBfxmB?usp=sharing&quot;&gt;eight_bit_gauges.ipynb&lt;/a&gt;,
which can also be found on GitHub in &lt;a href=&quot;https://github.com/reconstrue/shell/blob/master/ui/eight_bit_gauges.ipynb&quot;&gt;the shell repo&lt;/a&gt;. To
load it from from GitHub and run your own copy:  &lt;/p&gt;
&lt;center&gt;
&lt;a href=&quot;https://colab.research.google.com/github/reconstrue/shell/blob/master/ui/eight_bit_gauges.ipynb&quot;&gt;&lt;img src=&quot;https://colab.research.google.com/assets/colab-badge.svg&quot; width=&quot;23%&quot; style=&quot;padding-top:10px&quot;&gt;&lt;/a&gt;
&lt;/center&gt;</content:encoded></item><item><title><![CDATA[Jupyter Books' Many Manifestations of a Notebook]]></title><description><![CDATA[This is an addendum to my 2020-01 post entitled, 
Jupyter Book to Colab. Jupyter Book is a
tool which generates static HTML renderings of…]]></description><link>http://tigue.com/jupyter_book_notes/</link><guid isPermaLink="false">http://tigue.com/jupyter_book_notes/</guid><pubDate>Tue, 03 Mar 2020 18:33:58 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 640px;&quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/74d039ad4fe7d25fcdf76c90f10c7278/70d1f/four_reps_of_ipynb.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsSAAALEgHS3X78AAACEklEQVQ4y5VTaXeiQBD0//+o3U1W45m4iKggcg3IDV7EeNb2zAYTiPmw/d68nsG2pqq7poFaXK9XkU+nEzzmgFkGjPkMgcfobCPPUiRRiPP5XKkvo/Et4PGImP6oazNYCx3MNqFOFWzWa6zXKxzp9/8C5AxsYmcZOszFv7XKc6xXKyRxJBSU9Z9BG1WwD8BdUcAliRxEGY+gyBImlDkY/1aXXOZvAbkk17ERBj4BOwj8pciWacA2TWxJeh3sBljS/rx4hEEgALM0QZLEIqdJAt/3keQZ0jSt1PPcqN9Q7ovdDlEY4V5kWY4jrgSe4nA4VCXfhkBNFpIvF3FO4hi77VYUXt6/8dhuNsQ6JLYZmOOInhbU7wpD3uCl66Hb7mDQ6+OlP4A0/AN1pgrg0kb+0ofnLWHbNp6ppvnwCE1V4RDwF8m6pqP71Ea31UaH1liS0e/04VgOQpLuENDh7Q2MuWQnC8ZigbmmQZYk2hu3qQtAnxo9mUzJFgoVyJgqU5K2hUesmc2wIenFe6+iKIKiKBhJZKXJRKhgDqsCnujAb/n98wGPP34Rsx4Z2SDbMLpgVHmOfBBc8lzVMBgOiTE9SdcVM6gMhT+pgOzAbRFHsdjzKe/3+4o1Aj8QrFrNJsYjGcPnF5hGTXL9Pd6LD0AfPRrejFrU63Tx1GyJAX6xzT1z3zP7a/FKL4aJ6fPFVXALlfEXyEp39DUrnYoAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;four reps of ipynb&quot;
        title=&quot;four reps of ipynb&quot;
        src=&quot;/static/74d039ad4fe7d25fcdf76c90f10c7278/70d1f/four_reps_of_ipynb.png&quot;
        srcset=&quot;/static/74d039ad4fe7d25fcdf76c90f10c7278/1abb1/four_reps_of_ipynb.png 250w,
/static/74d039ad4fe7d25fcdf76c90f10c7278/7217d/four_reps_of_ipynb.png 500w,
/static/74d039ad4fe7d25fcdf76c90f10c7278/70d1f/four_reps_of_ipynb.png 640w&quot;
        sizes=&quot;(max-width: 640px) 100vw, 640px&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This is an addendum to my 2020-01 post entitled,
&lt;a href=&quot;http://tigue.com/jupyter_book_to_colab/&quot;&gt;Jupyter Book to Colab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://jupyterbook.org/features/interact.html&quot;&gt;Jupyter Book&lt;/a&gt; is a
tool which generates static HTML renderings of Jupyter &lt;code class=&quot;language-text&quot;&gt;.ipynb&lt;/code&gt; files.
It can optionally generate links to live Python kernels which can run
the code in the original &lt;code class=&quot;language-text&quot;&gt;.ipynb&lt;/code&gt; files. This is called the “interact”
button.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;http://tigue.com/jupyter_book_to_colab/&quot;&gt;my earlier post&lt;/a&gt; I
described how I extended the interact button to work with Colab rather
than one of Jupyter Books’ already built-out interacts to Jupyer services
(e.g. &lt;a href=&quot;https://mybinder.org/&quot;&gt;Binder&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;While discussing this little hack, I have found this whiteboard sketch
helps explain what is going on under the hood. In the context of
Jupyter-Book-interact-Colab deploy, any given Jupyter notebook
&lt;code class=&quot;language-text&quot;&gt;.ipynb&lt;/code&gt; file can have four manifestions. &lt;/p&gt;
&lt;p&gt;Let’s walk through the five steps.&lt;/p&gt;
&lt;h2&gt;1. The source notebook at home&lt;/h2&gt;
&lt;p&gt;A git repository is archived somewhere, say, Microsoft GitHub (but it
could be any git repo). In the context of this post the repo is one
built out to work with Jupyter Book, which means is it essentially
just a collection of Jupyter notebooks and markdown files.&lt;/p&gt;
&lt;h2&gt;2. Pre-run notebook as HTML&lt;/h2&gt;
&lt;p&gt;For step 2, the repo has been fetched from GitHub and run through
Jupyter Book with the output being a bunch of static web content
(HTML, JavaScript, CSS, and images).&lt;/p&gt;
&lt;p&gt;Static web sites are the simplest kind of web site: they are simply
file servers talking HTTP. In this diagram the example static site is
&lt;a href=&quot;http://static-bar.com&quot;&gt;http://static-bar.com&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;3. Hand off to Colab&lt;/h2&gt;
&lt;p&gt;This is what in Jupyter Book is referred to as interacting, moving
from a static web page rendering of an (optionally pre-run) notebook
to something backed by a live Jupyter kernel. Normally, Jupyter Book
will hand off to Binder for provisioning Jupyter kernels. In my hack,
open source Binder is replaced with commercial
&lt;a href=&quot;https://colab.research.google.com/&quot;&gt;Google Colab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The hand off is simply an &lt;code class=&quot;language-text&quot;&gt;http://&lt;/code&gt; URL to Colab, which includes/ends-with a
map to the &lt;code class=&quot;language-text&quot;&gt;.ipynb&lt;/code&gt; file that Colab should load from GitHub. That mapping
will result in an URL of the form:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;https://colab.research.google.com/github/my_org/my_repo/blob/my_branch/my_file.ipynb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;4. Colab kernel spin-up&lt;/h2&gt;
&lt;p&gt;Next, the web browser follows the &lt;code class=&quot;language-text&quot;&gt;http://colab.research.google.com&lt;/code&gt; URL,
loading a new web page. At Colab, an HTTP GET arrives and the URL is
parsed. When colab sees the &lt;code class=&quot;language-text&quot;&gt;/github/&lt;/code&gt; part, it knows that the user is
requesting that an &lt;code class=&quot;language-text&quot;&gt;.ipynb&lt;/code&gt; file be fetched from GitHub. The tail of
the URL provides the organization, repo name, and relative file
path. Colab then fetches the specified file from &lt;code class=&quot;language-text&quot;&gt;github.com&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Behind the scene Colab spins up a new virtual machine to provide a
Jupyter kernel for the request. (Anyone with a gMail email address can
have up to two VMs running simultaneously.)&lt;/p&gt;
&lt;p&gt;Eventually (quickly) the HTTP response goes down to the browser where
the user sees the notebook and can run the code. &lt;/p&gt;
&lt;h2&gt;5. Persisting a modified version&lt;/h2&gt;
&lt;p&gt;“Playground mode” is the Colab term for a transient, unpersisted
version of a notebook running in a Colab VM.  If a reader wants to
play with and run the code (read: modify the input notebook) and keep
a copy, exiting playground mode will save a copy of the modified
&lt;code class=&quot;language-text&quot;&gt;.ipynb&lt;/code&gt; in the users Google Drive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The take away is&lt;/strong&gt; that open source tools make it possible to have a
static web site showing HTML rendering of &lt;code class=&quot;language-text&quot;&gt;.ipynb&lt;/code&gt; files. Those static
HTML files can then link to Colab (or Binder) to on-demand hook the
notebook up to a new VM. &lt;strong&gt;A static web site linking to free compute.&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Monocle3 on Colab]]></title><description><![CDATA[Monocle 3 is “an analysis toolkit for single-cell RNA-seq.” It is MIT code out of Seattle’s Seattle Lake Union area. The source code is all…]]></description><link>http://tigue.com/monocle3_on_colab/</link><guid isPermaLink="false">http://tigue.com/monocle3_on_colab/</guid><pubDate>Sun, 02 Feb 2020 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1000px;&quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d6a84a5aeb8836fc30602127f3e10b52/f5429/monocle_cover_image.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 33.63197794624397%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsSAAALEgHS3X78AAABfElEQVQoz02RW28TMRCF9/8/8YTUH4CgEqISCIoq+lARgkgl1FahLaQtASXZTcJeEnvX6/Xlw+tFoiNbMz72mZnjSSxgncUaDT4s7+PuLcbOYZxhQIjn3kwAfi1yfAg2+1WPRDyZb5ak+TqELY/Ne0cXuE2Tsd5+wagcp0VMrKs/vLt4y5ODM9S3kjc3rzh6P6FdSZLb5W9GozEPP+Y0VYXuiX3HzqNkTr4akxdTmvQcI9NYbDX9xMnpAdtKokvBfXrH6cdbVLYn6R9cX11xdvwBWZSIQmI6HTtRP0eI7R1S7Sg3E3wtcF2L7gbZVSFoZBPjVujQiCexnaJIZ5x//Uy9b8IfES5cTOjbFlMVaL1BtRlqcozNgxdrXo+f8vzogt1si8Ty7PASMS9IjKoC1ZGJkqJUwP+B9LZ/+QJ9Mx0wa6Pf5Quuv4+oRE0X1Ii65mGZhQHZQXLfkbHDlDz+36QHWfp+hlkuHhXx4X8DJ+TudEgmBG1QYk2HC5y//8UUo8MoomIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;monocle cover image&quot;
        title=&quot;monocle cover image&quot;
        src=&quot;/static/d6a84a5aeb8836fc30602127f3e10b52/5d675/monocle_cover_image.png&quot;
        srcset=&quot;/static/d6a84a5aeb8836fc30602127f3e10b52/1abb1/monocle_cover_image.png 250w,
/static/d6a84a5aeb8836fc30602127f3e10b52/7217d/monocle_cover_image.png 500w,
/static/d6a84a5aeb8836fc30602127f3e10b52/5d675/monocle_cover_image.png 1000w,
/static/d6a84a5aeb8836fc30602127f3e10b52/f5429/monocle_cover_image.png 1451w&quot;
        sizes=&quot;(max-width: 1000px) 100vw, 1000px&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cole-trapnell-lab.github.io/monocle3/&quot;&gt;Monocle 3&lt;/a&gt; is “an analysis toolkit for single-cell RNA-seq.” It is &lt;a href=&quot;https://github.com/cole-trapnell-lab/monocle3/blob/master/LICENSE.md&quot;&gt;MIT&lt;/a&gt; code out of Seattle’s Seattle Lake Union area. The source code is all R.&lt;/p&gt;
&lt;p&gt;I hacked on Colab to see if I could get it to run Monocle3. The experiment went pretty well.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1Pj62n18qRb9DxPKM6L-PRdxV0-LYWk-P#scrollTo=DVxk3ON3J7Gy&quot; &gt;&lt;img alt=&quot;Open In Colab&quot; src=&quot;https://colab.research.google.com/assets/colab-badge.svg&quot; width=&quot;23%&quot;&gt;&lt;/p&gt;
&lt;p&gt;Migth as well use the above OpenInColab button to check it out but
the code can also be found on GitHub in the repo, [@reconstrue/single&lt;em&gt;cell&lt;/em&gt;on&lt;em&gt;colab](https://github.com/reconstrue/single&lt;/em&gt;cell&lt;em&gt;on&lt;/em&gt;colab/tree/master/tools/monocle)&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Traing Data for Neuron Reconstructors]]></title><description><![CDATA[651806289 MinIP The Cell Types Database is one of the major data products of The Allen Institute for Brain Science. In the Cell Types…]]></description><link>http://tigue.com/allensdk_for_training_skeletonizers/</link><guid isPermaLink="false">http://tigue.com/allensdk_for_training_skeletonizers/</guid><pubDate>Mon, 27 Jan 2020 18:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/651806289_minip_cubehelix_wide.png&quot; alt=&quot;651806289 MinIP&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://celltypes.brain-map.org/&quot;&gt;The Cell Types Database&lt;/a&gt; is one of the major data products of The Allen Institute for Brain Science. In the Cell Types
project, the Allen is constructing an altas of all type of cells found in brains of mice and humans. &lt;/p&gt;
&lt;p&gt;There are multiple ways different cells are represented in the Database: electrophysiology spike train recordings, simulation models (GLIF or perisomatic), etc. Of particular interest for &lt;a href=&quot;http://reconstrue.com&quot;&gt;the Reconstrue project&lt;/a&gt; is the morphology data – the skeletons in the &lt;code class=&quot;language-text&quot;&gt;*.swc&lt;/code&gt; files.&lt;/p&gt;
&lt;p&gt;The Allen has created &lt;a href=&quot;http://celltypes.brain-map.org/data?donor__species=Mus%20musculus&amp;#x26;nr__reconstruction_type=%5Bfull,dendrite-only%5D&quot;&gt;about 500 SWC files for mouse neurons&lt;/a&gt;. In the following Venn diagram of all The Allen’s mouse cells, those ~500 SWC files are grouped inside the red circle.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/brain_map_venn.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;The main problem from The Allen’s perspective is that they would like to have the red circle be as big as the main outer circle. Each SWC files represents many hours of manual labor by trained specialists reviewing and editing the SWC file. The Allen processes hundreds of such cells a year. Creating skeleton reconstructions is currently a serious manual labor bottleneck.&lt;/p&gt;
&lt;p&gt;The header image of this post is an example brightfield imaged neuron from The Cell Types Database. This would seem like the sort of object recognition that CNNs and friends (RNNs, FFNs, U-Net, etc.) could automate. This is proving to be nontrivial. &lt;/p&gt;
&lt;h2&gt;Model training data&lt;/h2&gt;
&lt;p&gt;The image stack is the input to the machine to be built, and the SWC file is the output. &lt;/p&gt;
&lt;p&gt;From a model training perspective, the skeleton in an SWC file can be seen as the “labels” (labeling each voxel in a volume as either inside or outside the cell) for “the training data” (read: the brightfield image stacks). As such, for the purpose of training reconstruction models, we’re only interested in the subset of cells in the atlas Cell Types Database that have skeletons and a microscopy image stack. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;!pip install &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;quiet allensdk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Query the Cell Types DB for files with skeletons a.k.a. reconstructions&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# via https://allensdk.readthedocs.io/en/latest/cell_types.html#cell-types-cache&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; allensdk&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;core&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cell_types_cache &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; CellTypesCache

ctc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; CellTypesCache&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;manifest_file&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;cell_types/manifest.json&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# a list of cell metadata for cells with reconstructions, download if necessary&lt;/span&gt;
cells &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ctc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get_cells&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;require_reconstruction&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Number of cells with SWC files: %i&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cells&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;Number of cells with SWC files: 637&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Some of those are human cells, atop the roughly 500 mouse cells. Humans brains are much bigger than mouse brains. Training should focus on one species. The Allen has many more mouse neurons than human neurons. So, train on mouse neurons only.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; allensdk&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;api&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;queries&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cell_types_api &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; CellTypesApi

&lt;span class=&quot;token comment&quot;&gt;# We want mouse cells that have images and skeletons, both.&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# Former is data; latter is training labels a.k.a. gold standards.&lt;/span&gt;
cells &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ctc&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get_cells&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;require_reconstruction&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; require_morphology&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; species&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;CellTypesApi&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;MOUSE&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Number of mouse cells with images and SWC files: %i&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cells&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;Number of mouse cells with images and SWC files: 485&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;So, for brightfield reconstructor training, The Allen’s Cell Types Database can be used as a labeled training dataset consisting of about 500 samples. That’s somewhere on the order of
ten petabytes of training data.&lt;/p&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://help.brain-map.org/display/celltypes/Physiology+and+Morphology&quot;&gt;Cell Types DB Physiology and Morphology whitepaper&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://allensdk.readthedocs.io/en/latest/allensdk.core.cell_types_cache.html#allensdk.core.cell_types_cache.CellTypesCache.get_cells&quot;&gt;cell types cache docs&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Brightfield colormapping]]></title><description><![CDATA[Brightfield data is single channel. It is not color data, which is triple band data (Red, Green, Blue or such). Therefore there is the…]]></description><link>http://tigue.com/colormapping/</link><guid isPermaLink="false">http://tigue.com/colormapping/</guid><pubDate>Mon, 20 Jan 2020 18:00:00 GMT</pubDate><content:encoded>&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/minip_four_up.png&quot; width=&quot;100%&quot;&gt;
&lt;p&gt;Brightfield data is single channel. It is not color data, which is triple band data (Red, Green, Blue or such). Therefore there is the opportunity to colorize the images according to some map. Pseudocoloring can be seen as some of the simpliest form of image processing for brightfield microscopy. As can be seen in this page’s header imageset, different colormaps bring out different features of an image.&lt;/p&gt;
&lt;p&gt;The whole goal of this project is to make tools which make it easier to gain insights from the raw images off the microscope. Colormapping is about as basic as it gets but it should be addressed in the current Jupyter-based context of Python on the server and JavaScript on the client.&lt;/p&gt;
&lt;h2&gt;Colormaps&lt;/h2&gt;
&lt;p&gt;This code is being written in 2020 so let’s color these micrographs like it’s 2020, with decent color maps that work well with brihtfield images. In particular 2019 saw the publication of the Turbo colormap by Google AI which looks good – loud but effective at separating the foreground from backfield (e.g., it’s the reddish image at the top of this page).&lt;/p&gt;
&lt;p&gt;Further, this codebase is Jupyter-based. As used in this project, that means Python on the Jupyter server and JavaScript in the browser. It would be nice to use the same colormaps in images produced by both Python and JavaScript. As such, this project has been built out using a few colormaps that seem to work well.&lt;/p&gt;
&lt;h3&gt;Jet =&gt; Turbo&lt;/h3&gt;
&lt;p&gt;Jet is the default “rainbow” colormap in Python-land. Jet is a lame implementation. There are other rainbow colormaps, say, Turbo.&lt;/p&gt;
&lt;p&gt;Some folks really don’t like Jet. For example, &lt;a href=&quot;https://jakevdp.github.io/blog/2014/10/16/how-bad-is-your-colormap/&quot;&gt;How Bad Is Your Colormap? Or, Why People Hate Jet – and You Should Too&lt;/a&gt;:
&lt;img src=&quot;http://jakevdp.github.io/figures/jet.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;The above article also has a useful snippet of code to test a colormap:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grayify_cmap&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cmap&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token triple-quoted-string string&quot;&gt;&quot;&quot;&quot;Return a grayscale version of the colormap&quot;&quot;&quot;&lt;/span&gt;
    cmap &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; plt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cm&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get_cmap&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cmap&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    colors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; cmap&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;np&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;arange&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cmap&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;N&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    
    &lt;span class=&quot;token comment&quot;&gt;# convert RGBA to perceived greyscale luminance&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# cf. http://alienryderflex.com/hsp.html&lt;/span&gt;
    RGB_weight &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.299&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.587&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.114&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    luminance &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; np&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sqrt&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;np&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dot&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;colors&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;**&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; RGB_weight&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    colors&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; luminance&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; np&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;newaxis&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; cmap&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;from_list&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cmap&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;_grayscale&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; colors&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; cmap&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;N&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Turbo&lt;/h3&gt;
&lt;p&gt;The Turbo colormap is a new and improved Jet, introduced in a mid-2019 Google AI blog post, &lt;a href=&quot;https://ai.googleblog.com/2019/08/turbo-improved-rainbow-colormap-for.html&quot;&gt;Turbo, An Improved Rainbow Colormap for Visualization&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Turbo, a new colormap that has the desirable properties of Jet while also addressing some of its shortcomings, such as false detail, banding and color blindness ambiguity. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Turbo is a slot-in replacement for Jet, and is intended for day-to-day tasks where perceptual uniformity is not critical, but one still wants a high contrast, smooth visualization of the underlying data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The following juxtaposition illustrates Jet’s flaws (images are from Google’s post).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Turbo:&lt;/strong&gt;&lt;br/&gt;
&lt;img src=&quot;https://1.bp.blogspot.com/-T2q4LV_VaTA/XVWYfIwvOVI/AAAAAAAAEcQ/aUciAXkV_QAuuZ1y5DcbstBcDr-Umw4kgCLcBGAs/s1600/image10.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jet:&lt;/strong&gt;&lt;br/&gt;
&lt;img src=&quot;https://1.bp.blogspot.com/-sPUhv6GioHA/XVWYnfT5VcI/AAAAAAAAEcU/QI-YZsI3h7sWeAhCAMc47HvZ3_mXOXm3gCLcBGAs/s1600/image6.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;In a simulated 3D environment (Turbo on the left, Jet on the right):
&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/turbo_juxt_jet.png&quot; width=&quot;100%&quot;&gt;&lt;/p&gt;
&lt;p&gt;In an actually brightfield MinIP (Turbo on the left, Jet on the right):
&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/turbo_juxt_jet_brightfield.png&quot; width=&quot;100%&quot;&gt;&lt;/p&gt;
&lt;p&gt;So, it’s not a complete win but Turbo is easier to look at than Jet and brings out more features that Jet.&lt;/p&gt;
&lt;p&gt;Turbo is not yet distributed with Python’s Matplotlib. But adding a new colormap for use by Matplotlib is only a handful of lines of code. At its core a Matplotlib colormap is just an array of 256 values, each a color (a RGB triplet) which Matplotlib wants normalized into a float between 0 and 1, rather than an 8-bit 0 to 255 range which is what HTML expects.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;turbo_colormap_data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.18995&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.07176&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23217&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19483&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.08339&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26149&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19956&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09498&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.29024&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20415&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10652&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.31844&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20860&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.11802&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.34607&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21291&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.12947&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.37314&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21708&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.14087&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.39964&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22111&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.15223&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.42558&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22500&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.16354&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.45096&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22875&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.17481&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.47578&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23236&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.18603&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.50004&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23582&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19720&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.52373&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23915&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20833&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.54686&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.24234&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21941&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.56942&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.24539&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23044&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.59142&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.24830&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.24143&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.61286&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.25107&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.25237&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.63374&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.25369&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26327&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.65406&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.25618&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27412&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.67381&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.25853&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.28492&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.69300&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26074&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.29568&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.71162&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26280&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.30639&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.72968&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26473&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.31706&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.74718&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26652&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.32768&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.76412&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26816&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.33825&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.78050&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26967&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.34878&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.79631&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27103&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.35926&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.81156&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27226&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.36970&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.82624&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27334&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.38008&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.84037&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27429&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.39043&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.85393&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27509&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.40072&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.86692&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27576&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.41097&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.87936&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27628&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.42118&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89123&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27667&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.43134&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.90254&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27691&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.44145&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.91328&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27701&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.45152&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.92347&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27698&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.46153&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93309&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27680&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.47151&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94214&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27648&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.48144&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95064&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27603&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.49132&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95857&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27543&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.50115&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96594&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27469&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.51094&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97275&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27381&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.52069&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97899&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27273&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.53040&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98461&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27106&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.54015&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98930&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26878&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.54995&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99303&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26592&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.55979&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99583&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26252&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.56967&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99773&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.25862&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.57958&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99876&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.25425&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.58950&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99896&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.24946&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.59943&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99835&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.24427&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.60937&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99697&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23874&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.61931&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99485&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23288&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.62923&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99202&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22676&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.63913&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98851&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22039&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.64901&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98436&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21382&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.65886&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97959&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20708&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.66866&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97423&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20021&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.67842&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96833&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19326&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.68812&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96190&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.18625&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.69775&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95498&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.17923&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.70732&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94761&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.17223&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.71680&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93981&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.16529&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.72620&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93161&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.15844&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.73551&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.92305&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.15173&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.74472&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.91416&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.14519&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.75381&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.90496&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.13886&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.76279&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89550&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.13278&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.77165&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.88580&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.12698&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.78037&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.87590&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.12151&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.78896&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.86581&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.11639&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.79740&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.85559&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.11167&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.80569&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.84525&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10738&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.81381&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.83484&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10357&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.82177&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.82437&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10026&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.82955&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.81389&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09750&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.83714&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.80342&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09532&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.84455&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.79299&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09377&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.85175&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.78264&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09287&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.85875&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.77240&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09267&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.86554&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.76230&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09320&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.87211&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.75237&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09451&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.87844&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.74265&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09662&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.88454&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.73316&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09958&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89040&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.72393&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10342&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89600&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.71500&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10815&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.90142&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.70599&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.11374&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.90673&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.69651&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.12014&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.91193&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.68660&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.12733&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.91701&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.67627&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.13526&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.92197&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.66556&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.14391&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.92680&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.65448&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.15323&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93151&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.64308&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.16319&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93609&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.63137&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.17377&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94053&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.61938&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.18491&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94484&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.60713&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19659&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94901&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.59466&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20877&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95304&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.58199&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22142&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95692&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.56914&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23449&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96065&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.55614&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.24797&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96423&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.54303&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26180&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96765&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.52981&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27597&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97092&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.51653&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.29042&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97403&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.50321&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.30513&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97697&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.48987&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.32006&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97974&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.47654&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.33517&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98234&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.46325&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.35043&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98477&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.45002&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.36581&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98702&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.43688&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.38127&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98909&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.42386&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.39678&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99098&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.41098&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.41229&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99268&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.39826&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.42778&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99419&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.38575&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.44321&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99551&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.37345&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.45854&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99663&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.36140&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.47375&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99755&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.34963&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.48879&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99828&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.33816&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.50362&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99879&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.32701&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.51822&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99910&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.31622&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.53255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99919&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.30581&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.54658&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99907&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.29581&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.56026&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99873&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.28623&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.57357&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99817&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27712&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.58646&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99739&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26849&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.59891&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99638&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26038&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.61088&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99514&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.25280&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.62233&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99366&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.24579&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.63323&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99195&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23937&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.64362&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98999&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23356&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.65394&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98775&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22835&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.66428&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98524&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22370&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.67462&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98246&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21960&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.68494&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97941&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21602&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.69525&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97610&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21294&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.70553&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97255&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21032&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.71577&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96875&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20815&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.72596&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96470&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20640&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.73610&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96043&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20504&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.74617&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95593&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20406&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.75617&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95121&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20343&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.76608&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94627&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20311&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.77591&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94113&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20310&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.78563&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93579&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20336&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.79524&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93025&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20386&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.80473&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.92452&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20459&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.81410&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.91861&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20552&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.82333&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.91253&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20663&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.83241&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.90627&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20788&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.84133&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89986&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20926&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.85010&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89328&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21074&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.85868&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.88655&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21230&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.86709&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.87968&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21391&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.87530&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.87267&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21555&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.88331&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.86553&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21719&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89112&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.85826&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21880&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89870&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.85087&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22038&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.90605&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.84337&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22188&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.91317&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.83576&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22328&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.92004&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.82806&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22456&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.92666&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.82025&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22570&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93301&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.81236&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22667&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93909&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.80439&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22744&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94489&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.79634&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22800&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95039&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.78823&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22831&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95560&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.78005&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22836&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96049&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.77181&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22811&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96507&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.76352&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22754&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96931&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.75519&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22663&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97323&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.74682&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22536&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97679&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.73842&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22369&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.73000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22161&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98289&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.72140&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21918&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98549&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.71250&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21650&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98781&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.70330&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21358&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98986&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.69382&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21043&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99163&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.68408&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20706&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99314&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.67408&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20348&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99438&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.66386&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19971&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99535&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.65341&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19577&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99607&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.64277&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19165&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99654&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.63193&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.18738&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99675&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.62093&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.18297&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99672&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.60977&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.17842&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99644&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.59846&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.17376&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99593&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.58703&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.16899&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99517&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.57549&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.16412&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99419&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.56386&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.15918&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99297&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.55214&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.15417&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.99153&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.54036&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.14910&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98987&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.52854&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.14398&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98799&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.51667&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.13883&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98590&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.50479&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.13367&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98360&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.49291&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.12849&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.98108&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.48104&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.12332&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97837&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.46920&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.11817&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97545&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.45740&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.11305&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.97234&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.44565&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10797&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96904&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.43399&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10294&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96555&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.42241&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09798&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.96187&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.41093&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09310&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95801&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.39958&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.08831&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.95398&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.38836&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.08362&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94977&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.37729&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.07905&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94538&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.36638&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.07461&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.94084&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.35566&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.07031&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93612&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.34513&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.06616&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.93125&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.33482&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.06218&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.92623&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.32473&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.05837&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.92105&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.31489&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.05475&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.91572&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.30530&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.05134&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.91024&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.29599&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.04814&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.90463&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.28696&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.04516&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89888&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.27824&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.04243&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.89298&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26981&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.03993&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.88691&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.26152&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.03753&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.88066&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.25334&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.03521&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.87422&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.24526&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.03297&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.86760&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.23730&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.03082&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.86079&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22945&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.02875&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.85380&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.22170&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.02677&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.84662&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.21407&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.02487&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.83926&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.20654&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.02305&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.83172&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19912&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.02131&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.82399&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.19182&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01966&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.81608&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.18462&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01809&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.80799&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.17753&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01660&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.79971&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.17055&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01520&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.79125&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.16368&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01387&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.78260&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.15693&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01264&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.77377&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.15028&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01148&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.76476&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.14374&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01041&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.75556&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.13731&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00942&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.74617&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.13098&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00851&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.73661&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.12477&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00769&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.72686&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.11867&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00695&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.71692&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.11268&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00629&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.70680&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10680&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00571&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.69650&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.10102&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00522&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.68602&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.09536&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00481&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.67535&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.08980&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00449&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.66449&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.08436&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00424&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.65345&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.07902&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00408&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.64223&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.07380&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00401&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.63082&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.06868&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00401&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.61923&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.06367&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00410&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.60746&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.05878&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00427&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.59550&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.05399&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00453&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.58336&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.04931&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00486&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.57103&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.04474&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00529&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.55852&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.04028&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00579&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.54583&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.03593&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00638&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.53295&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.03169&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00705&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.51989&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.02756&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00780&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.50664&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.02354&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00863&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.49321&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01963&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.00955&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.47960&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01583&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.01055&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
turbo_cmap&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ListedColormap&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;turbo_colormap_data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#ListedColormap is a Matplotlib thing&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Viridis&lt;/h3&gt;
&lt;p&gt;Viridis is the default colormap for Matplotlib. It doesn’t suck.&lt;/p&gt;
&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/713686035.minip.viridis.png&quot; width=&quot;100%&quot; align=&quot;center&quot;&gt;
&lt;h3&gt;Cubehelix&lt;/h3&gt;
&lt;p&gt;Cubehelix is a modern colormap that works well with brightfield because the top end of the colormap fades out to white, much like the bright field in brightfield.&lt;/p&gt;
&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/cubehelix.png&quot; width=&quot;100%&quot;&gt;
&lt;p&gt;“Cubehelix was created to vary smoothly in both lightness and hue, but appears to have a small hump in the green hue area.” Seems to be a 2011 thing out of the &lt;a href=&quot;http://astron-soc.in/bulletin/11June/289392011.pdf&quot;&gt;astronomy world&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/713686035.minip.cubehelix.png&quot; width=&quot;100%&quot;&gt;
&lt;p&gt;In the end, Turbo seems like a good default.&lt;/p&gt;
&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/713686035.minip.turbo.png&quot; width=&quot;100%&quot;&gt;</content:encoded></item><item><title><![CDATA[Jupyter Book to Colab]]></title><description><![CDATA[Like any developer with a blog, I occasionally talk about blog
tooling. Sorry. I just went through ye olde blog overhaul for the
first time…]]></description><link>http://tigue.com/jupyter_book_to_colab/</link><guid isPermaLink="false">http://tigue.com/jupyter_book_to_colab/</guid><pubDate>Tue, 07 Jan 2020 07:48:28 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;&quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d61d46c29725f1c0d1a8bb6dfbaf9ca1/11d19/jupyter_book_to_colab.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAC4jAAAuIwF4pT92AAABbElEQVQoz41STUvDQBDt/xIRvHgSvIgYv2q19KBCoR5bUOvJD1rryZMKXj0IYtWU5lBEwZQguRgFFbUIofhRTWNMdp+b1DSNLbQDm9nszLx9M/sCYEYphestywIh9iK+804t0K6oMe7tCftYbLmeusk1QDdR0zRcikWIouh4vVp1zm3WHiip7Ztv9hi6BYdHWXB9XVga7kFoaABn5xctmdPvO+DjBDDugfcDgFT9DO152ZZaX8MUN4hoeBzz0Tmc8jl2mQlFUZBOp7Gzu8eyKiA3M6Bv+8BLHChvAw+Lf4DEm+EXa3c2EsYC14tIfzeSyWXIsuzECoUCEok4VlZT7O8V5HoatJIDHmPA8xZwG/MYuuwkSQI3MorQxBgmg0FsZDahqmq9TV3Xndd36rQr1ipj+FkEnjLAT7mZYalUwnE2i3xegCAI4HkehmE4MdM0G2bf5lH+S8ZixX6A1rKhddmYzbJppUM/QOfC/gWOE+kg+haK9AAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;jupyter book to colab&quot;
        title=&quot;jupyter book to colab&quot;
        src=&quot;/static/d61d46c29725f1c0d1a8bb6dfbaf9ca1/11d19/jupyter_book_to_colab.png&quot;
        srcset=&quot;/static/d61d46c29725f1c0d1a8bb6dfbaf9ca1/1abb1/jupyter_book_to_colab.png 250w,
/static/d61d46c29725f1c0d1a8bb6dfbaf9ca1/7217d/jupyter_book_to_colab.png 500w,
/static/d61d46c29725f1c0d1a8bb6dfbaf9ca1/11d19/jupyter_book_to_colab.png 800w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Like any developer with a blog, I occasionally talk about blog
tooling. Sorry. I just went through ye olde blog overhaul for the
first time in years, so the sensitive should stop reading now and the
rest of you have been warned. Stick around for a short story about a
small “good” hack for blogging about Jupyter notebooks.&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Static Site Generators (SSGs) have been around for a while and are the
bee’s knees.  But now they are becoming the next generation markdown
files – the front end explorable explanations to repos, which can
optionally be wired up to kernel VMs for execution by the more curious
reader.&lt;/p&gt;
&lt;p&gt;For this rebuild, I used two SSGs: Gatsby and Jupyter Book. The Gatsby
part is just another story of a classic &lt;a href=&quot;https://www.gatsbyjs.org/blog/2017-11-08-migrate-from-jekyll-to-gatsby/&quot;&gt;Jekyll to Gatsby
migration&lt;/a&gt;
so let’s not talk about it.&lt;/p&gt;
&lt;p&gt;The other part of the SSG story is about &lt;a href=&quot;https://jupyterbook.org/intro&quot;&gt;Jupyter
Book&lt;/a&gt;, which is used in the rebuild to SSG
git repos that are full of Jupyter notebook *.ipynb files. This is the
part of the story that is interesting because it is about emerging tech, to
be described herein.&lt;/p&gt;
&lt;h2&gt;The novelty&lt;/h2&gt;
&lt;p&gt;I’m only going to go over the truly novel bit, which as the title
implies is the integration of Jupyter Book and &lt;a href=&quot;https://colab.research.google.com/&quot;&gt;Google’s
Colab&lt;/a&gt;, their free Jupyter hosting
service. That is, Jupyter Book renders Jupyter notebook files
(*.ipynb) for static hosting on tigue.com. Additionally, links into
Colab are made available to spin up a kernel VM for any reader wishing
to execute a notebook they read on tigue.com.&lt;/p&gt;
&lt;p&gt;The contextual goal is a static site for a software developer. The
site’s front consists of a blog and set of projects. The latter
involves a lot of Jupyter notebooks, which are static hostly on the
static site as HTML snapshots of pre-run notebooks. Additionally,
reader can easily execute the notebooks, without any admin hassles nor
costs for me, by clicking through to Google Colab.&lt;/p&gt;
&lt;p&gt;The “clicking through to Google Colab” hack is the novel bit. Jupyter
Book usually clicks through to JupyterHub or Binder via the Interact
buttons on the top of the page, not to Colab. &lt;/p&gt;
&lt;p&gt;(Of course, if executing on Colab, it would be really helpful and more
interesting if those notebooks being clicked through to had been
previously tested to run on Colab; but that topic is out of the scope
of this post.)&lt;/p&gt;
&lt;h2&gt;Context&lt;/h2&gt;
&lt;p&gt;I’ve been a long time believer in static site generators (SSGs). For
this blog rebuild, I’m using two SSG tools: Gatsby and Jupyter Book. I
use Gastby to SSG the blog, and I use Jupyter Book to SSG repos of
notebook which act as the demo/web presence for the code projects. The
SSG notebooks have links into Google Colab if folks want to actually
run a given notebook on a VM, rather than just read a static notebook
rendering.&lt;/p&gt;
&lt;p&gt;Gatsby was the obvious choice since I’ve been using React and GraphQL
for a while now. And Jupyter Book is simply the best in class for its
task (notebook SSGing). I can report that SSG tooling has come along
nicely over the last few years.&lt;/p&gt;
&lt;p&gt;Jupyter Book generates the “static site” for a given git repo full of
notebooks (*.ipynb files). The static site will have pre-run notebook
web pages i.e. cell outputs will be included to demonstrate what the
software can do.&lt;/p&gt;
&lt;p&gt;Additionally if the reader wishes they can interact with the notebook:
a link in the Jupyter Book generated notebook pages will have a link
to Colab which will grab the notebook clean from GitHub and provision
a virtual machine within which to run and interact with the notebook.&lt;/p&gt;
&lt;p&gt;Combined these two SSG tools enable a projects-and-blog web presence
for a developer to be run completely staticly, without involving say
Medium for blog hosting and MSFT GitHub for notebook rendering, yet
code can also be run “dynamically” on Colab. It makes for a low hassle
yet high functionality coder’s blog.&lt;/p&gt;
&lt;h2&gt;Interactivity for Jupyter Book&lt;/h2&gt;
&lt;p&gt;I want readers to be able to expeditiously run and interact with
the code in said notebooks statically hosted on tigue.com. And I don’t
want to manage that nor pay for the provioning of VMs, thank you very
much. Google Colab fits the bill perfectly.&lt;/p&gt;
&lt;p&gt;Jupyter Book has a lot of nice functionality already. I don’t know of
a better equivalent. Nonetheless, for my React-based blog there is
functionality overlap between Gatsby and Jupyter Book. E.g., the
latter uses Jekyll for static page generation, which the former is
also doing.&lt;/p&gt;
&lt;p&gt;Conceivably, much of Jupyter Book could be reproduced by
Gatsby. But Gatsby is JavaScript; that’s getting away from the Python
world so it’s unlikely in the short term. So for now: blog is Gastby
based and repo-of-notebooks is Jupyter Book based.&lt;/p&gt;
&lt;h2&gt;Linking Jupyter Book and Colab&lt;/h2&gt;
&lt;p&gt;So, with the context set, the solution boils down to a small hack of
the HTML templates in Jupyter Book. It’s not even really a hack, just
an unexpected novel use, which good technologies enable.&lt;/p&gt;
&lt;p&gt;Jupyter Book already has a customization hook for providing a button
uses can click to be taken to some site where JupyterHub (or Docker)
is running. The code where the hook is used in in the
&lt;a href=&quot;https://github.com/jupyter/jupyter-book/blob/master/jupyter_book/book_template/_includes/buttons/jupyterhub.html#L9&quot;&gt;jupyterhub.html&lt;/a&gt;
template. It’s a bit gruesome but the point is all the info needed
to build the equivalent URL for Colab is there: site, repo, branch, etc.:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;html&quot;&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;{% capture interact_url_jupyterhub %}hub/user-redirect/git-pull?repo={{ site.binder_repo_base }}/{{ site.binder_repo_org }}/{{ site.binder_repo_name }}&lt;span class=&quot;token entity&quot; title=&quot;&amp;amp;&quot;&gt;&amp;amp;amp;&lt;/span&gt;branch={{ site.binder_repo_branch }}&lt;span class=&quot;token entity&quot; title=&quot;&amp;amp;&quot;&gt;&amp;amp;amp;&lt;/span&gt;subPath={{ page.interact_link | url_encode }}&lt;span class=&quot;token entity&quot; title=&quot;&amp;amp;&quot;&gt;&amp;amp;amp;&lt;/span&gt;app={{ hub_app }}{% endcapture %}
{% capture interact_icon_jupyterhub %}{{ site.images_url | relative_url }}/logo_jupyterhub.svg{% endcapture %}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ site.jupyterhub_url }}/{{ interact_url_jupyterhub }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;interact-button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;interact-button-jupyterhub&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;interact-button-logo&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ interact_icon_jupyterhub }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Interact&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;{{ site.jupyterhub_interact_text }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;So, the “hack” is simply a modification of one of the HTML templates that are in the content repo, not part of the jupyter-book tool’s repo. So this is a good hack. Just change the above to:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;html&quot;&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;{% capture interact_url_jupyterhub %}{{ site.binder_repo_org }}/{{ site.binder_repo_name }}/blob/{{ site.binder_repo_branch }}/{{ page.interact_link }}{% endcapture %}
{% capture interact_icon_jupyterhub %}https://colab.research.google.com/assets/colab-badge.svg{% endcapture %}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ site.jupyterhub_url }}/github/{{ interact_url_jupyterhub }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;interact-button&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;interact-button-jupyterhub&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;interact-button-logo&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;{{ interact_icon_jupyterhub }}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;Interact&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;{{ site.jupyterhub_interact_text }}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Brightfield Challenge Dataset Manifest]]></title><description><![CDATA[This Jupyter notebook (read: blog post) provides a high level overview of the files in The Allen Institute’s Brightfield Auto-Reconstruction…]]></description><link>http://tigue.com/brightfield_challenge_data_manifest/</link><guid isPermaLink="false">http://tigue.com/brightfield_challenge_data_manifest/</guid><pubDate>Fri, 20 Sep 2019 08:00:00 GMT</pubDate><content:encoded>&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/651806289_minip_turbo_banner.png&quot; width=&quot;100%&quot;&gt;
&lt;p&gt;This Jupyter notebook (read: blog post) provides a high level overview of the files in The Allen Institute’s &lt;a href=&quot;http://localhost:8000/brightfield_reconstruction_challenge/&quot;&gt;Brightfield Auto-Reconstruction Challenge&lt;/a&gt; dataset. The dataset is about 2.5 terabyte of data. This notebook looks at the dataset from a file system level. To this notebook the dataset is just files, not image stacks.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;http://reconstrue.com/projects/brightfield_neurons/challenge_dataset/specimens_manifest.json&quot;&gt;JSON manifest file&lt;/a&gt; is produced, which is used as a convenience by other notebooks in this project.&lt;/p&gt;
&lt;p&gt;For more context see the project’s main notebook on Colab, &lt;a href=&quot;https://colab.research.google.com/drive/1qvwT-SxHpZSLQ88VeIOkR296pbZfQqTK&quot;&gt;brightfield neuron reconstruction challenge.ipynb&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Overview of files&lt;/h2&gt;
&lt;p&gt;This doesn’t get into higher level domain specific stuff (i.e. the main goal of innovating actual ML-assisted microscopy) rather the topic here is to take stock of the files and partition them into useful subsets small enough that compute can happen on Colab (answer: download and process all of one specimen’s files at a time, but only one at a time).&lt;/p&gt;
&lt;p&gt;Creating a manifest of the dataet is something that needs to (theoretically) be done only once. Programmatically walking the bucket is just an annoyance; it’s quicker/easier to just load a pre-built manifest. Later other notebooks, e.g. &lt;a href=&quot;https://colab.research.google.com/drive/1ZxzDwD1UdYqhuTxckPLiOUYHin0MZmFQ#scrollTo=TaREcuFG6SSQ&quot;&gt;initial&lt;em&gt;dataset&lt;/em&gt;visualization.ipynb&lt;/a&gt;, will simply read the file &lt;code class=&quot;language-text&quot;&gt;specimens_manifest.json&lt;/code&gt; to know what files are in the dataset.&lt;/p&gt;
&lt;p&gt;actually visualizes the dataset on a digital microscopy level (read: show images), by deep diving on a single specimen cell’s data (image stack and SWC skeleton).&lt;/p&gt;
&lt;h2&gt;Access info&lt;/h2&gt;
&lt;p&gt;The challenge dataset is hosted on Wasabi Cloud Storage, which mimics the APIs of AWS S3 so all the regular ways of accessing data on S3 can be used to access the data&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Service endpoint address: s3.wasabisys.com&lt;/li&gt;
&lt;li&gt;Storage region: us-west-1&lt;/li&gt;
&lt;li&gt;bucket name: brightfield-auto-reconstruction-competition  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Overview of bucket’s contents&lt;/h2&gt;
&lt;p&gt;There are two parts to the data&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Training data (105 neurons, with manual SWCs): 2.2 TB&lt;/li&gt;
&lt;li&gt;Test data (10 neurons, no SWCs): 261.3 GB&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each neuron is in its own folder off the root of the bucket. So the are over 100 folders with names like &lt;code class=&quot;language-text&quot;&gt;647225829&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;767485082&lt;/code&gt;, and &lt;code class=&quot;language-text&quot;&gt;861519869&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Each neuron’s data is in a separate folder. Each folder consists of&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the input: a few hundred TIFF image files&lt;/li&gt;
&lt;li&gt;the output: one SWC manually traced skeleton file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is one unusual sub-root folder, &lt;code class=&quot;language-text&quot;&gt;TEST_DATA_SET&lt;/code&gt;, which contains the data for the ten neurons used during the challenge’s evaluation phase. These ten neuron image stacks &lt;em&gt;DO NOT&lt;/em&gt; have SWC files.&lt;/p&gt;
&lt;p&gt;The goal is that some software will read the image stack  and auto reconstruct the SWC, without a human having to manually craft a SWC skeleton file (or at least minimize the human input time).&lt;/p&gt;
&lt;p&gt;So, the idea is a two phase challenge: first train with answers (SWC files), then submit 10 SWC files the program generates on the ten neurons in &lt;code class=&quot;language-text&quot;&gt;TEST_DATA_SET&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;sfirst train a auto reconstruction program using the roughly 100 neurons in the training data set, and check your results against the human traced SWC skeletons that each neuron’s image stack comes with. Then for the evaluation phase&lt;/p&gt;
&lt;p&gt;Each image stack has its own image count, seemingly a few hunderd TIFF images each (e.g., 270, 500, 309, etc.). Each stack’s images are all the same size but the sizes differ between stacks (e.g. 33MB images, 58MB images, etc.). Seemingly, on the order of 30 to 50 MB per image. &lt;/p&gt;
&lt;p&gt;One TEST&lt;em&gt;DATA&lt;/em&gt;SET sample neuron’s data is a folder, named &lt;code class=&quot;language-text&quot;&gt;665856925&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Full of about 280 TIFF images&lt;/li&gt;
&lt;li&gt;All files named like:&lt;code class=&quot;language-text&quot;&gt;reconstruction_0_0539044525_639962984-0007.tif&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;The only thing that changes is the last four characters in the filename root, after the hyphen.&lt;/li&gt;
&lt;li&gt;Each file is about 33 MB in size&lt;/li&gt;
&lt;li&gt;One neuron’s data is on the order of 10 gigabyte&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Colab can handle one neuron’s data at a time&lt;/h2&gt;
&lt;p&gt;Consider one large neuron, Name/ID of &lt;code class=&quot;language-text&quot;&gt;647225829&lt;/code&gt;. This one has 460 images, each 57.7MB. So, an average neuron’s data can be as big as, say, 25 gigabytes. They range from ~6GB to ~60GB (specimen 687746742 is 59.9GB)&lt;/p&gt;
&lt;p&gt;Fortuneately, Google’s Colab has that much file system. They give out 50GB file systems by default. And if you ask for a GPU they actually give you 350GB. &lt;/p&gt;
&lt;p&gt;350GB is enough file system to process the largest specimen in the dataset. Additionally, the U-Net implementation can use the T4 GPU. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;# Get some stats on the file system:
!!df -h .&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;[&amp;#39;Filesystem      Size  Used Avail Use% Mounted on&amp;#39;,
 &amp;#39;overlay          49G   25G   22G  54% /&amp;#39;]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The default file system on Colab is 50G, but a 360G file system can be requested, simply by configuring the runtime to have a GPU (yup).&lt;/p&gt;
&lt;p&gt;So, on the default (25G) file system, half the file system is already used by the OS and other pre-installed software. A big neuron’s data would consume the remaining 25G. So &lt;strong&gt;probably a good idea to request a GPU&lt;/strong&gt; which will also come with ~360G file system.&lt;/p&gt;
&lt;h2&gt;Overview of the dataset&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The goal here&lt;/strong&gt; is to have a bit of utility code that completely maps the dataset’s file system, programmatically walking the file system. &lt;/p&gt;
&lt;p&gt;All this tedius code makes two things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;training&lt;em&gt;neurons: dictionary (105 neurons) keyed by neuron&lt;/em&gt;id &lt;/li&gt;
&lt;li&gt;testing&lt;em&gt;neurons: dictionary (10 neurons) keyed by neuron&lt;/em&gt;id&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All 115 neurons and all their files (names and sizes) programmatically indexed into a convenient data structure with which to build out manifest files for, say, ShuTu or some U-Net reconstructor to process. I.e. this will make it easier for folks to massage the data into whatever tool they decide to run with.&lt;/p&gt;
&lt;p&gt;The data is stored on Wasabi Cloud Storage, which mimics the AWS S3 APIs, so AWS’s Python client, boto3, can be used to access the data. boto3 comes preinstalled on Colab. Here’s Wasabi’s how-to doc, &lt;a href=&quot;https://wasabi-support.zendesk.com/hc/en-us/articles/115002579891-How-do-I-use-the-AWS-SDK-for-Python-boto3-with-Wasabi-&quot;&gt;How do I use the AWS SDK for Python (boto3) with Wasabi?
&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Set up shop&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; boto3
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; json
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; os
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; numpy &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; np
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; seaborn &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; sns
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; time
&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; IPython&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;display &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; HTML&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; display

sns&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;color_codes&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# A Colab progress bar&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;progress&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; HTML&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token triple-quoted-string string&quot;&gt;&quot;&quot;&quot;
        &amp;lt;progress
            value=&apos;{value}&apos;
            max=&apos;{max}&apos;,
            style=&apos;width: 100%&apos;
        &gt;
            {value}
        &amp;lt;/progress&gt;
    &quot;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Map the 105 training data neurons&lt;/h3&gt;
&lt;p&gt;This only pulls down the keys and metadata, not the actual images nor SWC files.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Tweaked out code via https://stackoverflow.com/a/49361727 and https://stackoverflow.com/a/14822210&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# TODO: test this. 2.5 vs. 2.7 TB was seen?&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;format_bytes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# 2**10 = 1024&lt;/span&gt;
    power &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;
    n &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
    power_labels &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;K&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;M&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;G&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;T&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; size &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; power&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        size &lt;span class=&quot;token operator&quot;&gt;/=&lt;/span&gt; power
        n &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; power_labels&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;n&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;B&apos;&lt;/span&gt;
    
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sumObjectsForPrefix&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_prefix&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;sums gigabytes of file system occupied by all objects is a directory)&quot;&lt;/span&gt;
  tots &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  tots &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; _ &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; bucket&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;objects&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Prefix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a_prefix&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; tots

s3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; boto3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;resource&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;s3&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
     endpoint_url &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;https://s3.us-west-1.wasabisys.com&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
     aws_access_key_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;2G7POM6IZKJ3KLHSC4JB&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
     aws_secret_access_key &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;0oHD5BXPim7fR1n7zDXpz4YoB7CHAHAvFgzpuJnt&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;  
bucket &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; s3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Bucket&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;brightfield-auto-reconstruction-competition&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; bucket&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;client&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;list_objects&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Bucket&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;bucket&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                                         Delimiter&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Total root subfolders = &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; _ &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;CommonPrefixes&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;. Mapping training image stacks, one at a time...&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Walk the dataset file system. First the 105 training TIFF stacks, with SWCs                    &lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# TODO: kill this off once find bug. [What bug, damnit]&lt;/span&gt;
total_bytes_in_training_specimens &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
total_files_in_training_cells &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Set up a progress indicator for this slow task:&lt;/span&gt;
progressIndicator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; display&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;progress&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; display_id&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
progressIndicator_count &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
progressIndicator_end &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;105&lt;/span&gt;

training_neurons &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; o &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;CommonPrefixes&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  progressIndicator_count &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
  progressIndicator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;update&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;progress&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;progressIndicator_count&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; progressIndicator_end&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  a_prefix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Prefix&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# 106 lines of random numbers: &lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;#print(a_prefix)&lt;/span&gt;
  
  &lt;span class=&quot;token comment&quot;&gt;# Enumerate all files&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# print(&quot;----------------&quot;)&lt;/span&gt;
  imagestack_bytes &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  imagestack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  swc_key &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;None&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; s3_object &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; bucket&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;objects&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Prefix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a_prefix&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# print(s3_object.key + &quot;= &quot; + str(s3_object.size))&lt;/span&gt;
    total_files_in_training_cells &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;not&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;endswith&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;.swc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;key &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; a_prefix&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;# if == it&apos;s the directory itself, not a file in it so ignore&lt;/span&gt;
        imagestack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;append&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        imagestack_bytes &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;size
        total_bytes_in_training_specimens &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;size
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      swc_key &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;key
  
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; a_prefix &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;TEST_DATA_SET/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    specimen_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a_prefix&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# get rid of trailing /&lt;/span&gt;
    training_neurons&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;specimen_id&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;prefix&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; a_prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;swc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; swc_key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;imagestack&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; imagestack&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; imagestack_bytes&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Training neurons mapped: &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;training_neurons&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;    
training_files_size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; training_files_units &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; format_bytes&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;total_bytes_in_training_specimens&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Summed file size of all training cells: %s %s (%d bytes, %d files)&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt;  &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;{:4.1f}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;training_files_size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; training_files_units&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; total_bytes_in_training_specimens&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; total_files_in_training_cells&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;Total root subfolders = 106. Mapping training image stacks, one at a time...
...
Training neurons mapped: 105
Summed file size of all training cells:  2.5 TB (2713760166906 bytes, 53926 files)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;106 folders for 105 training neurons and the last folder is &lt;code class=&quot;language-text&quot;&gt;TEST_DATA_SET&lt;/code&gt; which contains 10 neuron image stacks in subfolders (without SWC answers).&lt;/p&gt;
&lt;p&gt;Whelp, time and space are limited on Colab so let’s figure out which neurons are the smallest ergo the fasted to process (hopefully).&lt;/p&gt;
&lt;h3&gt;List training neurons by file size&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# bitwize shift 30 converts bytes to gigabytes&lt;/span&gt;
training_cell_sizes &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; np&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;array&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;cell&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; cell &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; training_neurons&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;values&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
sizes_histogram &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; sns&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;distplot&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;training_cell_sizes&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; bins&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; kde&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; rug&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;set_title&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Training cells image stacks (gigabytes)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 383px;&quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b2acaceeb8dfaddf290a1c8449c28ffa/b4d9b/index_15_0.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 69.71279373368147%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsSAAALEgHS3X78AAACUUlEQVQ4y32UiW7aQBCGef/HqFS16q02SqtQpWkISYQSCE25w+nbGJ/rAxP6d2ZtEI3aWlpmPLDf/DOzSwX755f8XK/XUBQFhqHDsizpW5YJVVWhaZq0HJ/P55hOp9B1HXm+3jMqaZoiSRLEcQbfTxAECZZLH7OFDdN0Ydu+fDcMh0AevRdL05b0/Ur6nhfLvczYAzloWQFtDmFaIU4bM2hGAMeJKBaRFdLu/MNl0e95r+/HqIRhSKoCqYyDritwdafg49mQwAXQpiScyLaLxdDChmWSIs6MSpZlSNNESpZBynJ+M8en7yMMJ0u0ugZWq2gPOwQ+9SVQCAFeYZhiprjoj5eotxY4ImBnZKHeXEjVh9D/ArnkMIogogyDsS1hXDIr7I5sXLdVuCsh1Zplj5+W/AeQS2aFESlkIAN2PRyQWra9BxtnNCRF80rIYfmFLYZCwO12i5imLKIU45mDS4JdtgrgaOrg1UlP9pFjqu7BKSf9T4V8kCMqmem3P3W8Px3g7dc+jmsPEvi62kO7Z+CCerlTuJv6X4F5vkFKCm06Hh++DfCuBLLC6tUEb6p9tPumVGiageynR0Nq/KCbo/s0LLGHl8BcAi3KwOW9/NLF8+MOXrD93MGzo3u0OjpOLie4pnbwcDpDS1YwV1ypTKNWqFpxYyoZlSy4ZBrKBamoNeeokWX//Jb8poIJbWzcq2j1TExVF/W7BVqk2vUEFIIpdKPGixVWpFwOhVXys33MkcSi9DeIRSj9R/KjKJD+ZpPTiSh8/lMIAr+IE8PzPPwGnzIOO+2GTKYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;png&quot;
        title=&quot;png&quot;
        src=&quot;/static/b2acaceeb8dfaddf290a1c8449c28ffa/b4d9b/index_15_0.png&quot;
        srcset=&quot;/static/b2acaceeb8dfaddf290a1c8449c28ffa/1abb1/index_15_0.png 250w,
/static/b2acaceeb8dfaddf290a1c8449c28ffa/b4d9b/index_15_0.png 383w&quot;
        sizes=&quot;(max-width: 383px) 100vw, 383px&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# List cell sorted by fileset size (z-stack and SWC), plus averages and total&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sizer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; training_neurons&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

size_sorted &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;sorted&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;training_neurons&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; key &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; sizer&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 
total_bytes_in_training_dataset &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;    
total_training_specimens &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;  
  
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; a_neuron_name &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; size_sorted&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  total_training_specimens &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
  a_neuron &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; training_neurons&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;a_neuron_name&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  fileSize&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; fileUnits &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; format_bytes&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_neuron&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  total_bytes_in_training_dataset &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; a_neuron&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_neuron_name &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;: &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_neuron&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;imagestack&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; files = &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;{:4.1f}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fileSize&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; fileUnits &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

average_specimen_size &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; total_bytes_in_training_dataset &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; total_training_specimens
average_size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; averages_unit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; format_bytes&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;average_specimen_size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

total_file_size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; total_file_unit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; format_bytes&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;total_bytes_in_training_dataset&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;\nNumber of cells in training dataset = %d&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; total_training_specimens&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Average cell data size = &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;{:4.1f}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;average_size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; averages_unit &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; (&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;average_specimen_size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; bytes)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Total size of training dataset = &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;{:4.1f}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;total_file_size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; total_file_unit &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; (&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;total_bytes_in_training_dataset&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; bytes)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;651806289: 291 files =  6.0 GB
647289876: 228 files =  7.0 GB
651748297: 336 files =  7.0 GB
...
697851947: 850 files = 45.7 GB
699189400: 650 files = 53.8 GB
687746742: 608 files = 59.9 GB

Number of cells in training dataset = 105
Average cell data size = 21.6 GB (23172964855 bytes)
Total size of training dataset =  2.2 TB (2433161309799 bytes)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In summary, there are 105 training neurons. The specimens’ size range from 6.0 GB to 59.9 GB. Seven specimens are smaller than 10 GB.&lt;/p&gt;
&lt;h3&gt;Map the 10 testing neuron&lt;/h3&gt;
&lt;p&gt;The final part of the challenge data set to be mapped is the sub-root directory, &lt;code class=&quot;language-text&quot;&gt;TEST_DATA_SET&lt;/code&gt;, which has 10 neurons laid out like with the training data, except the SWC files are missing i.e. no reconstruction answers given (because, that is what the challenger is supposed to demonstrate: the capability to generate quality SWC files).&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;client &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; boto3&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;client&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;s3&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
     endpoint_url &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;https://s3.us-west-1.wasabisys.com&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
     aws_access_key_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
     aws_secret_access_key &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
paginator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; client&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get_paginator&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;list_objects&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
result &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; paginator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;paginate&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    Bucket&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;brightfield-auto-reconstruction-competition&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
    Prefix&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;TEST_DATA_SET/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
    Delimiter&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# See https://stackoverflow.com/a/36992023&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# A response can contain CommonPrefixes only if you specify a delimiter. When you do, CommonPrefixes contains all (if there are any) keys between Prefix and the next occurrence of the string specified by delimiter. In effect, CommonPrefixes lists keys that act like subdirectories in the directory specified by Prefix.&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;#for prefix in result.search(&apos;CommonPrefixes&apos;):&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;#    print(prefix.get(&apos;Prefix&apos;))&lt;/span&gt;
    
testing_neurons &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Set up a progress indicator for this slow but not too slow task:&lt;/span&gt;
progressIndicator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; display&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;progress&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; display_id&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
progressIndicator_count &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
progressIndicator_end &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; o &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;search&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;CommonPrefixes&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  progressIndicator_count &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
  progressIndicator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;update&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;progress&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;progressIndicator_count&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; progressIndicator_end&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  a_prefix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Prefix&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_prefix&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  
  &lt;span class=&quot;token comment&quot;&gt;# Enumerate all files&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# print(&quot;----------------&quot;)&lt;/span&gt;
  imagestack_bytes &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  imagestack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  swc_key &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;None&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; s3_object &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; bucket&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;objects&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Prefix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a_prefix&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;# print(s3_object.key + &quot;= &quot; + str(s3_object.size))&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;not&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;endswith&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;.swc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;key &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; a_prefix&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;# if == it&apos;s the directory itself, not a file in it so ignore&lt;/span&gt;
        imagestack&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;append&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        imagestack_bytes &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;size
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      swc_key &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;key
  
  &lt;span class=&quot;token comment&quot;&gt;# Strip the &quot;TEST_DATA_SET/&quot; and trailing &quot;/&quot; from Prefix&lt;/span&gt;
  neuron_id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a_prefix&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;TEST_DATA_SET/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  
  testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;neuron_id&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;prefix&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; a_prefix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;swc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; swc_key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;imagestack&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; imagestack&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; imagestack_bytes&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;# testing neurons mapped: &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;\nSorted by size of image stack:&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;    
    
&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;testing_sizer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

size_sorted_testing_neurons &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;sorted&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; key &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; testing_sizer&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 
total_bytes_in_testing_dataset &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; a_neuron_name &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; size_sorted_testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  a_neuron &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;a_neuron_name&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  fileSize&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; fileUnits &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; format_bytes&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_neuron&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  total_bytes_in_testing_dataset &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; a_neuron&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_neuron_name &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;: &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_neuron&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;imagestack&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; files = &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;{:4.1f}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fileSize&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; fileUnits &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

fileSize&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; fileUnits &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; format_bytes&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;total_bytes_in_testing_dataset&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;\nTotal size of testing dataset = &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;{:4.1f}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fileSize&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; fileUnits &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;  &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;TEST_DATA_SET/665856925/
TEST_DATA_SET/687730329/
TEST_DATA_SET/691311995/
TEST_DATA_SET/715953708/
TEST_DATA_SET/741428906/
TEST_DATA_SET/751017870/
TEST_DATA_SET/761936495/
TEST_DATA_SET/827413048/
TEST_DATA_SET/850675694/
TEST_DATA_SET/878858275/
# testing neurons mapped: 10
Sorted by size of image stack:
665856925: 281 files =  8.6 GB
715953708: 340 files = 10.4 GB
751017870: 465 files = 18.9 GB
687730329: 497 files = 20.3 GB
850675694: 438 files = 23.5 GB
827413048: 424 files = 28.3 GB
761936495: 529 files = 28.5 GB
691311995: 441 files = 29.4 GB
741428906: 591 files = 39.4 GB
878858275: 541 files = 54.0 GB

Total size of testing dataset = 261.3 GB&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# bitwize shift 30 converts bytes to gigabytes&lt;/span&gt;
testing_cell_sizes &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; np&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;array&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;cell&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; cell &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;values&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
sizes_histogram &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; sns&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;distplot&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;testing_cell_sizes&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; bins&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; kde&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; rug&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;set_title&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Test cells image stacks (gigabytes)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 383px;&quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d110bc725bc2a706d9ab7ac80e68eeb1/b4d9b/index_20_0.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 69.71279373368147%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsSAAALEgHS3X78AAACQUlEQVQ4y42U627TQBCF8/5PgfgBQkICCURLSVtB0zSlLRAlhSbkZqfxJV5fd51ry2FmXEcJVIhIG429M9+cmZ11BY/8oiiC4zhwXRe+72M8tuF5Hmzb3jxb1oiWhSRJHqJ+yX9lNpvJS2OWcPwUWTYnoMZ0mkCpFCGtoeXDcUME01jeOU5ACRTBI4ShlpgkmSHPF6gYY5AS0J1mOKj3CZTJCgItKwoN6l9v0R0qxFEue0oZAhnZL/09L0Uc56jM53PMcgNvqlFtDKG2nIIgE+DpFxvdQSD29l5pK1XEJAkB8zwnhTE8AlXPBjuO/wbqv2wBcg+1zgqFfwCnAtT/BfSp/xuFjwHZiUuJo0LhT+phCWSfskwpmftdKtSaTymFv1Uyr7NvY+yf9tHu+mIf1AcSHBLo6tqBNY7ELqGN5i0UJRSFudE7Cjk7w56+beOcHBn4snpTnCQp/nhhoTdS0g6G+TIhlJBEydhkaboLpI0PZD/bu8ZFayLAV0cdAXLZJ1cW+qNwo5CBhzQhAtQMfCj58Hwo6tix2hjg+f53XLYnUs7r4440nhXWqKcDKxR42fMjig2UKMxhqI+un2Gv1iuaTuvdSQ9P3rREXY0UvXj/g65iIsmOP4/kkDg5J/EollvkUVwly3g0FJJsQc2eUPk8RnM0Ox4+cWl2hB6tenNMN8FQvxe4oRGaeHRd9UKuHb9vdT3EFFtZr9dYrVZysQ2NDz/z7/5uTcHZ5oPBB7dcLovPwP0dQaLNniZRq+VC7N8TwhHZ1Y8tVAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;png&quot;
        title=&quot;png&quot;
        src=&quot;/static/d110bc725bc2a706d9ab7ac80e68eeb1/b4d9b/index_20_0.png&quot;
        srcset=&quot;/static/d110bc725bc2a706d9ab7ac80e68eeb1/1abb1/index_20_0.png 250w,
/static/d110bc725bc2a706d9ab7ac80e68eeb1/b4d9b/index_20_0.png 383w&quot;
        sizes=&quot;(max-width: 383px) 100vw, 383px&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;Total dataset summary stats&lt;/h1&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Note: specimen 741428906 is in both the training and testing datasets.&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# This next line will keep the testing one, with prefix = &apos;TEST_DATA_SET/741428906/&apos;.&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# I.e. the training version of 741428906 is dropped from the manifest. We only&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# have 10 test neurons, don&apos;t want to lose one. Although not much of a test if&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# the answers are in the test question.&lt;/span&gt;
all_specimens &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;**&lt;/span&gt;training_neurons&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;**&lt;/span&gt; testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

bytes_accum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; specimen_name &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; all_specimens&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  specimen &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; all_specimens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;specimen_name&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  bytes_accum &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; specimen&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# TODO: there must be a more elegant way to reduce an array in Python&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Total bytes: %s&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; bytes_accum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;


grand_total_file_size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; grand_total_file_unit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; format_bytes&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bytes_accum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Number of cells in dataset manifest = %d&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;all_specimens&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Total size of training dataset = &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;{:4.1f}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;grand_total_file_size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; grand_total_file_unit &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; (&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bytes_accum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; bytes)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;Total bytes: 2671458682941
Number of cells in dataset manifest = 114
Total size of training dataset =  2.4 TB (2671458682941 bytes)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Double check those numbers: just total every single object&lt;/span&gt;
total_bytes_for_all_objects &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; s3_object &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; bucket&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;objects&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  total_bytes_for_all_objects &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; s3_object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;size
  
recheck_size&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; recheck_unit &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; format_bytes&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;total_bytes_for_all_objects&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Total size of all files in dataset = &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;{:4.2f}&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;recheck_size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; recheck_unit &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; (&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;total_bytes_for_all_objects&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; bytes)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;Total size of all files in dataset = 2.47 TB (2713810170427 bytes)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Write specimens_manifest.json&lt;/h2&gt;
&lt;p&gt;The rest of the notebooks in this project make use of &lt;code class=&quot;language-text&quot;&gt;specimens_manifest.json&lt;/code&gt; which is just a semantically organized manifest of all the files in the dataset, organized by specimen, as image stack, catalogued by specimen&lt;em&gt;id. The head of `specimens&lt;/em&gt;manifest.json` looks like:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;647225829&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;647225829&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;bucket_prefix&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;647225829/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;swc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;647225829/647225829.swc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;bytes&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;26559180540&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token string&quot;&gt;&quot;image_stack&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
            &lt;span class=&quot;token string&quot;&gt;&quot;647225829/reconstruction_0_0539044533_639893239-0001.tif&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token string&quot;&gt;&quot;647225829/reconstruction_0_0539044533_639893239-0002.tif&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The file specimens_manifest.json is a logical view of the (~6K) physical files in the dataset. File names within the manifest are relative to the root of the dataset. This file can be used later to provide a clean interface to the library of specimens as well as maintain a per-specimen download cache (useful for notebooks that only process a single specimen because of file system size limitations). Having a download cache is very handy to speed up repeated notebook &lt;code class=&quot;language-text&quot;&gt;Runtime | Run all&lt;/code&gt; because each specimen’s data is 6GB to 60GB in size, which is boring to watch happen repeatedly unneccessarily &lt;/p&gt;
&lt;p&gt;The specimens in the manifest JSON are listed in a flat dictionary, keyed by specimen ID. Filenames in the manifest are relative to the root of the bucket where the specimen dataset resides. &lt;/p&gt;
&lt;p&gt;(Note by file naming relative to the root of the original source dataset bucket (rather than Colab file system absolute names) folks could also use the specimens_manifest.json file outside the context of Colab. It is a reusable convenience for experimentation on other platforms.)&lt;/p&gt;
&lt;p&gt;Each specimen has two properties, the local full filename to the .swc file (if any), and the array of full local filenames to the TIFF files in the z-stack.&lt;/p&gt;
&lt;p&gt;The contents of specimens_manifest.json plus the directory name of root of the local file system cache of files from the dataset is sufficient to resolve to full file names of specimens files, with all the data corralling hassles already taken care of for code that actually does something with these files.&lt;/p&gt;
&lt;p&gt;Might as well list the specimens sorted by size, smallest first. This way a casual tire kicker will grab the easiest/smallest specimen first. And files might as well be listed sorted alphbetically, which Python APIs do not guarantee.&lt;/p&gt;
&lt;p&gt;Note: a copy of &lt;code class=&quot;language-text&quot;&gt;specimens_manifest.json&lt;/code&gt; is stored on reconstrue.com. This is used by default by other notebooks in this project. That file was created by the following code cell:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Goal: write specimens_manifest.json&lt;/span&gt;
specimens_manifest &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Set up data_dir, where to write to:&lt;/span&gt;
data_dir &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/content/brightfield_data/&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;not&lt;/span&gt; os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isdir&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data_dir&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mkdir&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data_dir&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
manifest_file_name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;join&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data_dir&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;specimens_manifest.json&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; specimen_name &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; all_specimens&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  specimen &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; all_specimens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;specimen_name&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  specimens_manifest&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;specimen_name&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; specimen_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;bucket_prefix&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; specimen&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;prefix&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;swc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; specimen&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;swc&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;bytes&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; specimen&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;size&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;image_stack&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; specimen&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;imagestack&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; 
  &lt;span class=&quot;token comment&quot;&gt;# fields: {&quot;imagestack&quot;: imagestack, &quot;size&quot;: imagestack_bytes}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;manifest_file_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;w+&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; mani&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  json&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dump&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;specimens_manifest&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; mani&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Appendix #1: The curious case of specimen 741428906&lt;/h1&gt;
&lt;p&gt;Looks like 741428906 got into both the training and test datasets.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Notice how len(all_specimens) &amp;lt; len(training_neurons) + len(testing_neurons)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# There seems to be one missing&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;training_neurons&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;all_specimens&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;# Notice how 741428906 is in both training and test subsets&lt;/span&gt;
aSet &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;training_neurons&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
bSet &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;testing_neurons&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; name &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; aSet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;intersection&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bSet&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; all_specimens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;105
10
114
741428906 {&amp;#39;prefix&amp;#39;: &amp;#39;TEST_DATA_SET/741428906/&amp;#39;, &amp;#39;swc&amp;#39;: None, &amp;#39;imagestack&amp;#39;: [&amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0001.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0002.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0003.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0004.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0005.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0006.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0007.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0008.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0009.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0010.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0011.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0012.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0013.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0014.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0015.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0016.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0017.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0018.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0019.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0020.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0021.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0022.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0023.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0024.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0025.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0026.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0027.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0028.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0029.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0030.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0031.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0032.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0033.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0034.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0035.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0036.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0037.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0038.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0039.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0040.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0041.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0042.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0043.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0044.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0045.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0046.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0047.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0048.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0049.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0050.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0051.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0052.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0053.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0054.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0055.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0056.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0057.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0058.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0059.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0060.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0061.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0062.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0063.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0064.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0065.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0066.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0067.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0068.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0069.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0070.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0071.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0072.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0073.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0074.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0075.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0076.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0077.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0078.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0079.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0080.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0081.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0082.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0083.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0084.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0085.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0086.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0087.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0088.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0089.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0090.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0091.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0092.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0093.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0094.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0095.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0096.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0097.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0098.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0099.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0100.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0101.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0102.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0103.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0104.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0105.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0106.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0107.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0108.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0109.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0110.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0111.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0112.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0113.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0114.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0115.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0116.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0117.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0118.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0119.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0120.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0121.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0122.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0123.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0124.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0125.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0126.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0127.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0128.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0129.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0130.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0131.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0132.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0133.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0134.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0135.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0136.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0137.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0138.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0139.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0140.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0141.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0142.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0143.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0144.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0145.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0146.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0147.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0148.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0149.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0150.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0151.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0152.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0153.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0154.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0155.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0156.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0157.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0158.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0159.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0160.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0161.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0162.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0163.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0164.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0165.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0166.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0167.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0168.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0169.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0170.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0171.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0172.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0173.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0174.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0175.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0176.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0177.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0178.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0179.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0180.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0181.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0182.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0183.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0184.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0185.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0186.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0187.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0188.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0189.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0190.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0191.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0192.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0193.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0194.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0195.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0196.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0197.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0198.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0199.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0200.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0201.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0202.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0203.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0204.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0205.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0206.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0207.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0208.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0209.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0210.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0211.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0212.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0213.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0214.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0215.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0216.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0217.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0218.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0219.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0220.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0221.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0222.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0223.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0224.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0225.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0226.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0227.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0228.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0229.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0230.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0231.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0232.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0233.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0234.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0235.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0236.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0237.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0238.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0239.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0240.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0241.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0242.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0243.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0244.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0245.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0246.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0247.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0248.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0249.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0250.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0251.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0252.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0253.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0254.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0255.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0256.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0257.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0258.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0259.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0260.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0261.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0262.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0263.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0264.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0265.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0266.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0267.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0268.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0269.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0270.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0271.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0272.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0273.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0274.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0275.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0276.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0277.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0278.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0279.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0280.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0281.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0282.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0283.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0284.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0285.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0286.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0287.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0288.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0289.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0290.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0291.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0292.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0293.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0294.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0295.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0296.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0297.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0298.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0299.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0300.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0301.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0302.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0303.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0304.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0305.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0306.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0307.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0308.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0309.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0310.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0311.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0312.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0313.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0314.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0315.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0316.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0317.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0318.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0319.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0320.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0321.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0322.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0323.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0324.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0325.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0326.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0327.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0328.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0329.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0330.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0331.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0332.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0333.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0334.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0335.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0336.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0337.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0338.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0339.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0340.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0341.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0342.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0343.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0344.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0345.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0346.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0347.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0348.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0349.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0350.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0351.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0352.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0353.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0354.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0355.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0356.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0357.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0358.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0359.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0360.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0361.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0362.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0363.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0364.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0365.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0366.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0367.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0368.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0369.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0370.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0371.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0372.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0373.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0374.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0375.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0376.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0377.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0378.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0379.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0380.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0381.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0382.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0383.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0384.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0385.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0386.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0387.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0388.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0389.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0390.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0391.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0392.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0393.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0394.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0395.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0396.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0397.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0398.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0399.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0400.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0401.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0402.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0403.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0404.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0405.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0406.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0407.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0408.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0409.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0410.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0411.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0412.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0413.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0414.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0415.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0416.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0417.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0418.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0419.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0420.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0421.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0422.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0423.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0424.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0425.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0426.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0427.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0428.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0429.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0430.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0431.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0432.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0433.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0434.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0435.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0436.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0437.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0438.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0439.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0440.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0441.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0442.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0443.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0444.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0445.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0446.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0447.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0448.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0449.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0450.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0451.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0452.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0453.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0454.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0455.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0456.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0457.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0458.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0459.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0460.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0461.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0462.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0463.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0464.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0465.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0466.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0467.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0468.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0469.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0470.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0471.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0472.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0473.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0474.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0475.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0476.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0477.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0478.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0479.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0480.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0481.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0482.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0483.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0484.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0485.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0486.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0487.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0488.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0489.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0490.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0491.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0492.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0493.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0494.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0495.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0496.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0497.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0498.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0499.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0500.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0501.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0502.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0503.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0504.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0505.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0506.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0507.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0508.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0509.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0510.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0511.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0512.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0513.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0514.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0515.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0516.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0517.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0518.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0519.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0520.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0521.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0522.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0523.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0524.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0525.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0526.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0527.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0528.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0529.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0530.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0531.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0532.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0533.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0534.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0535.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0536.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0537.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0538.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0539.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0540.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0541.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0542.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0543.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0544.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0545.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0546.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0547.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0548.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0549.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0550.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0551.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0552.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0553.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0554.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0555.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0556.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0557.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0558.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0559.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0560.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0561.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0562.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0563.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0564.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0565.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0566.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0567.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0568.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0569.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0570.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0571.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0572.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0573.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0574.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0575.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0576.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0577.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0578.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0579.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0580.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0581.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0582.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0583.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0584.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0585.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0586.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0587.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0588.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0589.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0590.tif&amp;#39;, &amp;#39;TEST_DATA_SET/741428906/reconstruction_0_0500371379_714485370-0591.tif&amp;#39;], &amp;#39;size&amp;#39;: 42301483965}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Check the file on the file system.&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# On the file system, specimens_manifest.json is a bit long for display (&gt; 5K lines). &lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# So, here&apos;s the first 20 lines; the rest is similar.&lt;/span&gt;
!python &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;m json&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;tool &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;manifest_file_name&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;manifest_file_name&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;.pretty.json&quot;&lt;/span&gt;
!echo &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;data_dir&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
!ls &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;l &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;data_dir&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
!head &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;manifest_file_name&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;.pretty.json&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;/content/brightfield_data/
total 7012
-rw-r--r-- 1 root root 3266153 Nov 18 10:29 specimens_manifest.json
-rw-r--r-- 1 root root 3910364 Nov 18 10:29 specimens_manifest.json.pretty.json
{
    &amp;quot;647225829&amp;quot;: {
        &amp;quot;id&amp;quot;: &amp;quot;647225829&amp;quot;,
        &amp;quot;bucket_prefix&amp;quot;: &amp;quot;647225829/&amp;quot;,
        &amp;quot;swc&amp;quot;: &amp;quot;647225829/647225829.swc&amp;quot;,
        &amp;quot;bytes&amp;quot;: 26559180540,
        &amp;quot;image_stack&amp;quot;: [
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0001.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0002.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0003.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0004.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0005.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0006.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0007.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0008.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0009.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0010.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0011.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0012.tif&amp;quot;,
            &amp;quot;647225829/reconstruction_0_0539044533_639893239-0013.tif&amp;quot;,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# To download specimens_manifest.json&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# from google.colab import files&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# files.download(manifest_file_name)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Brightfield Auto-Reconstruction Challenge]]></title><description><![CDATA[Abstract For the BioImage Informatics 2019 Conference, the Allen Institute issued a Brightfield Auto-Reconstruction Challenge. Neuron object…]]></description><link>http://tigue.com/brightfield_reconstruction_challenge/</link><guid isPermaLink="false">http://tigue.com/brightfield_reconstruction_challenge/</guid><pubDate>Sun, 25 Aug 2019 08:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Abstract&lt;/h2&gt;
&lt;p&gt;For &lt;a href=&quot;https://alleninstitute.org/events-training/bioimage-informatics-2019/&quot;&gt;the BioImage Informatics 2019 Conference&lt;/a&gt;, the Allen Institute issued a &lt;a href=&quot;https://alleninstitute.org/events-training/bioimage-informatics-2019/reconstruction-competition/&quot;&gt;Brightfield Auto-Reconstruction Challenge&lt;/a&gt;. Neuron object recognition in brightfield microscopy is an open problem, currently necessitating many hours of manual neurite tracing. The Challenge’s ~2.5 terabyte dataset is available for use in research on brightfield microscopy neuron reconstruction. &lt;/p&gt;
&lt;p&gt;This project is a collection of Jupyter notebooks that perform data analysis on the Challenge dataset. These notebooks were developed on and are hosted on Google Colab and so can be re-run by anyone wishing to reproduce the same analysis, without any software tooling set-up.&lt;/p&gt;
&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/colormapped_turbo.png&quot; width=&quot;100%&quot;&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;For the Brightfield Auto-Reconstruction Challenge, the Allen Institute assembled a dataset containing 115 cells for use in an evalution competition. The dataset is about 2.5 terabytes in size, consisting of raw brightfield microscopy image stacks produced by the Allen Institute. &lt;/p&gt;
&lt;p&gt;The dataset also includes SWC files for 105 of those 115 cells. These SWCs contain neuron skeletons manually traced by human experts. These stick figures are the labels for the trainging data – the so called gold standards i.e. the best answers as manually generated by human experts involving many hours of tedious data entry a.k.a neurite tracing. &lt;/p&gt;
&lt;p&gt;That works out to a roughly 90%/10% split of the datase into train and test subsets. The challenge is to generate SWCs for the ten cells in the test set.&lt;/p&gt;
&lt;p&gt;This project presents the code for multiple methods of neuron reconstruction including ShuTu and U-Net, two methods used in the original Challenge at BioImage 2019. Current research is exploring ResNet and Flood-filling Networks (FFNs) techniques.&lt;/p&gt;
&lt;p&gt;The first step with any dataset is exploratory data analysis and visualization. For a hands-on visual exploration of one cell’s data, see the notebook &lt;a href=&quot;https://colab.research.google.com/drive/1BVoQ1sKxzcpIlDx-TISCLbSadxpETIf6&quot;&gt;initial&lt;em&gt;dataset&lt;/em&gt;visualization.cell_651806289.ipynb&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/demo_images/651806289_cubehelix.png&quot; width=&quot;100%&quot; alt=&quot;MinIP(713686035, Turbo)&quot;&gt;
&lt;h3&gt;Target audience&lt;/h3&gt;
&lt;p&gt;This project uses the Brightfield Challenge dataset to train models for brightfield neuron skeletonization, which can subsequently be used in production. Both training and inference are computed on Colab, for free. &lt;/p&gt;
&lt;p&gt;The target audience has two parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Computer vision researchers building object recognizer (read: training)&lt;/li&gt;
&lt;li&gt;Lab scientists processing raw brightfield z-stacks into SWC files (read: inference)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first audience is the computer vision software developers. This project provides Jupyter notebooks that perform data ETL, manifesting, and triaging. These notebooks perform set up and grunt data wrangling for using the dataset for training. Additionally, ample visualization tools are provided specific to the nature of data. These tools enables a developer to quickly get to the interesting part, with the tools to introspect the models and their output. For example, these notebooks: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Access and download the dataset&lt;/li&gt;
&lt;li&gt;Process the data to generate SWC skeleton files&lt;/li&gt;
&lt;li&gt;Juxtapose new reconstruction SWCs alongside manual gold standard SWCs&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The second audience is the sole researcher with a raw image stack off of a microscope desiring to produce a SWC, as well as other visualization. This person doesn’t want to train neural networks, they simply wish to upload their images and run software (with pre-trained ML models) that will make an SWC file and related renderings. This is the inference phase.&lt;/p&gt;
&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;The goal of auto-reconstruction is to automate neurite tracing, traditionally performed manually. The following image is taken from &lt;a href=&quot;https://alleninstitute.org/events-training/bioimage-informatics-2019/reconstruction-competition/&quot;&gt;the challenge’s home page on alleninstitute.org&lt;/a&gt;. It illustrates the objective of this exercise: the input is grayscale microscope images of an individual neuron; the output is a 3D stick figure of the neuron. &lt;/p&gt;
&lt;p&gt;In this image there are three examples, each in a separate column. The pairs of images consist of one grayscale camera image (a projection of the input) and one corresponding skeleton (the output) rendered in neon color on a dark field.&lt;/p&gt;
&lt;img src=&quot;https://alleninstitute.org/files/resources/1564545471/2651/&quot; alt=&quot;(c) Allen Institute&quot; width=&quot;100%&quot;&gt;
&lt;h3&gt;Brightfield modality&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The majority of dendritic and axonal morphology reconstructions to date are based on bright-field microscopy (Halavi et al., 2012), due to its broad compatibility with histological staining methods…
Moreover, the ability to enhance the signal intensity by counterstaining renders bright-field microscopy largely unsurpassed for reconstructions of whole axonal arbors up to the very thin (and typically faint) terminals. [&lt;a href=&quot;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3653619/&quot;&gt;Parekh and Ascoli, 2013&lt;/a&gt;]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In &lt;a href=&quot;https://en.wikipedia.org/wiki/Bright-field_microscopy&quot;&gt;brightfield microscopy&lt;/a&gt;, a single neuron is pumped full of biocytin to stain its insides black, while the rest of the specimen’s brain tissue is chemically cleared to be translucent. In other words, there is a single dark/opaque foreground object – a biocytin stained neuron, the object of interest – which is imaged upon some essentially translucent background (or “field”). The field is bright (because of light shining through it) and the foreground is more opaque and so appears dark, ergo “brigthfield.”&lt;/p&gt;
&lt;p&gt;For a quick-and-dirty overview of the actual wet bench rigmarole involved in generating the biocytin stained samples, see the 8 minute vidoe in &lt;a href=&quot;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5264554/&quot;&gt;Immunostaining of Biocytin-filled and Processed Sections for Neurochemical Markers&lt;/a&gt; (2016). There is also &lt;a href=&quot;https://www.jove.com/video/58592/biocytin-recovery-3d-reconstructions-filled-hippocampal-ca2&quot;&gt;an 11 minute 2018 video on JoVE&lt;/a&gt;, walking through the nitty-gritty wet bench protocol for imaging neurons with biocytin, which demonstrates manual neuron tracing via Neurolucida.&lt;/p&gt;
&lt;p&gt;For a backgrounder, see the 2007 article out of the Max Planck Institute, &lt;a href=&quot;https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-12/issue-06/064029/Transmitted-light-brightfield-mosaic-microscopy-for-three-dimensional-tracing-of/10.1117/1.2815693.full?SSO=1&quot;&gt;Transmitted light brightfield mosaic microscopy for three-dimensional tracing of single neuron morphology&lt;/a&gt;, or see PubMed for more on &lt;a href=&quot;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3368650/&quot;&gt;using biocytin to stain and trace neurons&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Reconstruction: an unsolved problem&lt;/h3&gt;
&lt;p&gt;Brightfield neuron reconsturction is an open image processing problem, and a rate limiting factor in brightfield microscopy. Currently, brightfield neuron reconstruction involves manual labor comprising many hours of manually tracing skeletons from the raw brightfield image stacks. &lt;/p&gt;
&lt;p&gt;Brightfield microscopes are the simplest and most common type of microscope, so solving this problem could enable many labs to perform image analysis more quickly. This means that brightfield reconstruction software is more widely used, compared to other microscopy modalities. Brightfield is a relatively low tech microscopy modality that produces great results.&lt;/p&gt;
&lt;p&gt;From the computer vision perspective, &lt;a href=&quot;https://www.scientificamerican.com/article/no-bones-about-it-people-recognize-objects-by-visualizing-their-skeletons/&quot;&gt;natural intelligence object recognition may be based on skeletons&lt;/a&gt; so this problem for neuroscience may feedback to the artificial intelligence community, specifically the visual object recongition folks. Recurrent networks are a promising candidate for this mode of microscopy data.&lt;/p&gt;
&lt;p&gt;For a backgrounder, check out &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S0896627313002328&quot;&gt;Neuronal Morphology Goes Digital: A Research Hub for Cellular and System Neuroscience&lt;/a&gt; Parekh &amp;#x26; Ascoli (2013, in Neuron). Here’s an image from that paper illustrating the diversity of neuron morphologies across species:&lt;/p&gt;
&lt;img src=&quot;https://ars.els-cdn.com/content/image/1-s2.0-S0896627313002328-gr1.jpg&quot; width=&quot;100%&quot;&gt;
&lt;h2&gt;Dataset analysis&lt;/h2&gt;
&lt;p&gt;In this project, Google Colab is used as a platform for reproducable research, specifically image analysis of biocytin stained neurons imaged via brightfield microscopy.&lt;/p&gt;
&lt;h3&gt;Platform: Google Colab&lt;/h3&gt;
&lt;p&gt;This project consists of Jupyter notebooks tuned up to run on Google Colab. The Colab service is Google’s free Jupter hosting service, packaged silimar to Google Sheets and Docs. An optional Nvidia GPU can be requested, useful for, say, &lt;a href=&quot;https://ngc.nvidia.com/catalog/model-scripts/nvidia:unet_industrial_for_tensorflow&quot;&gt;GPU accelerated U-Net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Jupyter notebooks are a popular medium for doing data science. Notebooks are a medium within which both computer programmers and neuroscientist are comfortable. &lt;/p&gt;
&lt;p&gt;Colab is used to both perform analysis (e.g. generate projects and skeletons) and to publish results in pre-run notebooks. The curious can also re-run the notebooks to reproduce the results, or use the notebooks as workflow vignettes to spin off of.&lt;/p&gt;
&lt;h3&gt;Dataset specifics&lt;/h3&gt;
&lt;p&gt;The data is collected from a slice of brain sandwiched between a glass slide and a cover slip. The microscope’s field of view is much smaller than the slide so the slice is imaged tile by overlapping tile. The tiles are then stitched together to make a single 2D image, a virtual plate. &lt;/p&gt;
&lt;p&gt;The third dimension of the image stack is created as the neuron is moved through the microscopes’s field of view by a motorized stage upon which the specimen slide is mounted. The stage drops about 5 micrometers at a step.&lt;/p&gt;
&lt;p&gt;An artifact of this technique is that the images at the top and the bottom of the stack seem blurry, which is caused by the darkly stained neuron being out-of-focus – the so called &lt;a href=&quot;https://en.wikipedia.org/wiki/Bokeh&quot;&gt;bokeh effect&lt;/a&gt;, “the way the lens renders out-of-focus points of” darkness.&lt;/p&gt;
&lt;p&gt;The specifics of how the data in the Challenge dataset was collected can be found in The Allen’s documentation, Allen Cell Types Database whitepaper, Cell Morphology And Histology, &lt;a href=&quot;http://help.brain-map.org/download/attachments/8323525/CellTypes_Morph_Overview.pdf?version=4&amp;#x26;modificationDate=1528310097913&amp;#x26;api=v2&quot;&gt;CellTypes&lt;em&gt;Morph&lt;/em&gt;Overview.pdf&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Serial images (63X magnification) through biocytin-filled neurons…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Individual cells were imaged at higher resolution for the purpose of automated and manual reconstruction.
Series of 2D images of single neurons were captured with a 63X objective lens (Zeiss Plan APOCHROMAT
63X/1.4 oil, 39.69x total magnification, and an n oil-immersion condenser 1.4 NA), using the Tile &amp;#x26; Position and
Z-stack ZEN 2012 SP2 software modules (Zeiss). The composite 2D tiled images with X-Y effective pixel size
of 0.114 micron x 0.114 micron were acquired at an interval of 0.28 µm along the Z-axis. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Initial dataset exploration&lt;/h3&gt;
&lt;p&gt;So, what does this data actually look like? Here are two Jupyter notebooks that perform initial exploration and visualization of the challenge dataset:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1_zv9mgrKVCMa5jTnN1CADZFRi3UES6_P#scrollTo=FQQb1m85EkvC&quot;&gt;dataset_manifest.ipynb&lt;/a&gt;: file level overview of dataset; creates &lt;code class=&quot;language-text&quot;&gt;specimens_manifest.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1ZxzDwD1UdYqhuTxckPLiOUYHin0MZmFQ#scrollTo=TaREcuFG6SSQ&quot;&gt;initial-dataset-visualization.ipynb&lt;/a&gt;: visual deep dive of a single specimen’s imagery; uses &lt;code class=&quot;language-text&quot;&gt;specimens_manifest.json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;http://reconstrue.com/projects/brightfield_neurons/colormapped_viridis.png&quot; width=&quot;100%&quot; alt=&quot;Viridis colormap example&quot;&gt;</content:encoded></item><item><title><![CDATA[Using AllenSDK on Colab]]></title><description><![CDATA[The Allen Institute for Brain Science (Allen Institute) maintains an SDK, called , for working with their resources (data and services…]]></description><link>http://tigue.com/allensdk_on_colab/</link><guid isPermaLink="false">http://tigue.com/allensdk_on_colab/</guid><pubDate>Sat, 27 Jul 2019 20:03:15 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;&quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/4dbf1f3dcc5646afe522234ecc90f119/11d19/allensdk_on_colab.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAC4jAAAuIwF4pT92AAABLklEQVQoz62SvU8CQRDF+WPtLGmvsdUCYmelJrYWdppYqI0XjEYwUY67CEGIFsjHAR7g7v7cvdvjOCy0YJK593ZuZ/Jmdgps2ApKqZgYjLlBe2YNMy71R2hPMYkbLGRJSVBqHrs0LuN/BrOilq9Ls0WXCnU+s4X4V1tq9gqjC5g3YXimk78yhWnBz3BC1esStLo0Ox+8BG0qNY/xZIrfaFAulzg6PtE3Q2RjGzU4hXcHeofQ2rEFZdLyQggegieefY9avcXV7SM3lRrn13f0ByNc18VxHHb3Svp2H1nfQoWX0C5C5wD84qrCtBFJOB4mzM7MTCrtIIoiHU9GoqZV3apWOL6Ht32tqLeqUNlhkyum7GsbE0KszP6PR8nO6dpkPL8q+bVRy7X5/r02m7QffUoHSjSMUBIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;allensdk on colab&quot;
        title=&quot;allensdk on colab&quot;
        src=&quot;/static/4dbf1f3dcc5646afe522234ecc90f119/11d19/allensdk_on_colab.png&quot;
        srcset=&quot;/static/4dbf1f3dcc5646afe522234ecc90f119/1abb1/allensdk_on_colab.png 250w,
/static/4dbf1f3dcc5646afe522234ecc90f119/7217d/allensdk_on_colab.png 500w,
/static/4dbf1f3dcc5646afe522234ecc90f119/11d19/allensdk_on_colab.png 800w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.alleninstitute.org/&quot;&gt;Allen Institute for Brain Science&lt;/a&gt; (Allen Institute) maintains an SDK, called &lt;a href=&quot;https://github.com/AllenInstitute/AllenSDK&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;the Allen SDK&lt;/code&gt;&lt;/a&gt;, for working with their resources (&lt;a href=&quot;http://portal.brain-map.org/&quot;&gt;data&lt;/a&gt; and services). This notebook, &lt;a href=&quot;https://github.com/JohnTigue/colab-utils/blob/master/tools/allensdk_on_colab.ipynb&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;allensdk_on_colab.ipynb&lt;/code&gt;&lt;/a&gt;, is focused on nothing except the installation of the Allen SDK on &lt;a href=&quot;https://colab.research.google.com&quot;&gt;Colab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following snippets were tested on Colab in new notebooks, for both options available on Colab: Python 2 and Python 3.&lt;/p&gt;
&lt;p&gt;Herein, &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;allensdk&lt;/code&gt; refer to the Python package that gets imported, which is distinct from “the Allen SDK” which is &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; plus further documentation, example code, etcetera that can be found in &lt;a href=&quot;https://github.com/AllenInstitute/AllenSDK&quot;&gt;the Allen Instutute’s repository&lt;/a&gt;. &lt;/p&gt;
&lt;h2&gt;Motivation&lt;/h2&gt;
&lt;p&gt;This notebook was built out while working through – on Colab – the Allen Institute’s pedagogical Jupyter notebooks in both the Allen SDK and their &lt;a href=&quot;https://github.com/AllenInstitute/SWDB_2018&quot;&gt;Summer Workshop on the Dynamic Brain repository on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Allen SDK documentation includes example Jupyter notebooks for &lt;a href=&quot;https://alleninstitute.github.io/AllenSDK/examples.html&quot;&gt;how to use &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Separately, the Allen Institute holds an annual two week retreat, the Summer Workshop on the Dynamic Brain (SWDB), where they train up promising new neuroscientist on how to do science with the Allen Institute’s data and tools. The main pedagogical medium in AllenSDK and SWDB repos is Jupyter notebooks, which can be found on GitHub, &lt;a href=&quot;https://github.com/AllenInstitute/AllenSDK/blob/master/doc_template/examples.rst&quot;&gt;AllenInstitute/AllenSDK&lt;/a&gt; and &lt;a href=&quot;https://github.com/AllenInstitute/SWDB_2018&quot;&gt;AllenInstitute/SWDB_2018&lt;/a&gt;, respectively.&lt;/p&gt;
&lt;p&gt;The SWDB notebooks assume that &lt;a href=&quot;http://alleninstitute.github.io/AllenSDK/install.html#installation-with-docker-optional&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; is preinstalled&lt;/a&gt;. That is, in order to get an arbitrary, as-found-on-GitHub SWDB notebook to work in Colab, a &lt;code class=&quot;language-text&quot;&gt;!pip install allensdk&lt;/code&gt; is required first.&lt;/p&gt;
&lt;p&gt;On Colab, a single user is provided a single virtual machine (VM) which has a file system. Both the VM and it’s file system are transient, with a maximum lifetime of 12 hours (supposedly) but they can get killed off in as little as 60 minutes due to being idle (the only persistant info is the notebook itself, stored on Google Drive not the local file system). But for the lifetime of a given VM, the AllenSDK only need be installed once, after which any notebook can &lt;code class=&quot;language-text&quot;&gt;import allensdk&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;(Note: in Colab both Python 2 and Python 3 notebooks can be run. Installing &lt;code class=&quot;language-text&quot;&gt;allensdk&lt;/code&gt; in a Python 2 notebook does not make &lt;code class=&quot;language-text&quot;&gt;import allensdk&lt;/code&gt; work in a Python 3 notebook on the same Colab VM, and vice versa.)&lt;/p&gt;
&lt;p&gt;This file makes it trivial to repeat (and debug) &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; installs as needed – which can be rather frequent on Colab. The &lt;code class=&quot;language-text&quot;&gt;pip install&lt;/code&gt; is just one line of code; the real value here is this text and the collection of debug tools that can come in handy if set-up does not going well.&lt;/p&gt;
&lt;h2&gt;Install This File as Colab Custom Snippets&lt;/h2&gt;
&lt;p&gt;This notebook reads well enough as one sequential story but the text is really designed to read well as individual snippets, in Colab’s code snippet insert dialog.&lt;/p&gt;
&lt;p&gt;To “install” these snippets in your Colab snippets library:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Load this file in Colab&lt;/li&gt;
&lt;li&gt;Copy the URL (~&lt;code class=&quot;language-text&quot;&gt;https://colab.research.google.com/...&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;In any Colab page, from the menus select &lt;code class=&quot;language-text&quot;&gt;Tools=&amp;gt;Preferences...&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;In &lt;code class=&quot;language-text&quot;&gt;Custom snippet notebook URL&lt;/code&gt;, paste the URL&lt;/li&gt;
&lt;li&gt;Press &lt;code class=&quot;language-text&quot;&gt;Save&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Reload&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note: Colab does allow for multiple simultaneous &lt;code class=&quot;language-text&quot;&gt;Custom snippet notebook URLs&lt;/code&gt;… sometimes and sometimes not.&lt;/p&gt;
&lt;p&gt;After the above set-up, it’s trivial to insert cells that install and test &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt;.  For example, load in Colab a SWDB notebook, say &lt;a href=&quot;https://github.com/AllenInstitute/SWDB_2018/blob/master/DynamicBrain/BrainObservatory.ipynb&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;BrainObservatory.ipynb&lt;/code&gt;&lt;/a&gt;, then simply select &lt;code class=&quot;language-text&quot;&gt;Insert =&amp;gt; Code snippet...&lt;/code&gt; and search for &lt;code class=&quot;language-text&quot;&gt;allensdk&lt;/code&gt; and the following come up:&lt;/p&gt;
&lt;img src=&quot;https://raw.githubusercontent.com/JohnTigue/colab-ing/master/images/allensdk_snippets_in_colab.png&quot; width=&quot;300px&quot; alt=&quot;AllenSDK snippets in Colab sidebar&quot;&gt;
&lt;p&gt;Select &lt;code class=&quot;language-text&quot;&gt;Install AllenSDK&lt;/code&gt; and run the resulting code cell, after which the Allen notebooks should work on Colab. Your modification will not persist in the GitHub hosted repo’s copy of BrainObservatory.ipynb (i.e. the notebook is in playground mode). &lt;/p&gt;
&lt;p&gt;Ergo, these snippets provide a relatively easy way to play with the Allen pedogogical notebooks on Colab, short of forking the original repo… which is one of the things Colab is really useful for.&lt;/p&gt;
&lt;h1&gt;Install AllenSDK&lt;/h1&gt;
&lt;p&gt;Installing AllenSDK is pretty trivial and it pulls in a bunch of code not pre-installed on Colab, which does have tons of stuff pre-installed but not the AllenSDK.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# One liner install of AllenSDK&lt;/span&gt;
!pip install allensdk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;TODO:&lt;/strong&gt; maybe only &lt;code class=&quot;language-text&quot;&gt;!pip&lt;/code&gt; if detect &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; not installed.&lt;/p&gt;
&lt;h1&gt;Uninstall AllenSDK&lt;/h1&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# One liner uninstall of AllenSDK, --yes only works with pip &gt;= 7.1.2&lt;/span&gt;
!pip uninstall &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;yes allensdk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that if AllenSDK is not installed then &lt;code class=&quot;language-text&quot;&gt;pip uninstall -yes allensdk&lt;/code&gt; will return: “Skipping allensdk as it is not installed” as expected.&lt;/p&gt;
&lt;p&gt;The —yes option works with pip version 7.1.2 and above, and is used here to avoid things hanging at a confirmation dialog (A “Do ya really wanna uninstall all these dependencies?” sort of thing.)&lt;/p&gt;
&lt;p&gt;Note that the following sort of sequence can be confusing:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; (&lt;code class=&quot;language-text&quot;&gt;pip install allensdk&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Instantiate some class, say, &lt;code class=&quot;language-text&quot;&gt;allensdk.api.queries.rma_api&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Uninstall &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; (&lt;code class=&quot;language-text&quot;&gt;pip uninstall allensdk&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Instantiate again &lt;code class=&quot;language-text&quot;&gt;allensdk.api.queries.rma_api&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It may come as a surprise that step #4 does not throw a &lt;code class=&quot;language-text&quot;&gt;ModuleNotFoundError&lt;/code&gt;. Point is &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; was uninstalled but the Python runtime still had classes already parsed into the runtime. Those classes will persist until a runtime restart. So, if you really want to uninstall &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; you might want to consider a runtime restart to really flush out the system. (This issue is true of Python in general; it is not an &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; thing.) &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TODO:&lt;/strong&gt; confirm the above again, with some more testing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TODO:&lt;/strong&gt; Maybe &lt;a href=&quot;https://docs.python.org/3.4/library/importlib.html&quot;&gt;importlib&lt;/a&gt; can improve this via, say, &lt;code class=&quot;language-text&quot;&gt;invalidate_cache()&lt;/code&gt;.&lt;/p&gt;
&lt;h1&gt;Check If AllenSDK Is Installed (Python2)&lt;/h1&gt;
&lt;p&gt;Colab supports both Python 2 and Python 3. Detecting installed packages on Python 2 is not particularly elegant but it does the job.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Python2: Check If AllenSDK Is Installed&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# via https://stackoverflow.com/a/14050282&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; imp
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; pkg_resources

&lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    imp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;find_module&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;allensdk&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    found &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;except&lt;/span&gt; ImportError&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    found &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;False&lt;/span&gt;
    
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; found &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; allensdk
    vers &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; allensdk&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__version__
    message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;AllenSDK is installed. Version: &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; vers
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;message&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;AllenSDK is NOT installed&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;AllenSDK is installed. Version: 0.16.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Check If AllenSDK Is Installed (Python3)&lt;/h1&gt;
&lt;p&gt;Colab supports both Python 2 and Python 3. This snippet checks if the AllenSDK is installed on Python 3. This will not work on Python 2.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Python3: Check If AllenSDK Is Installed&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; importlib&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;util
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; pkg_resources
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; sys

&lt;span class=&quot;token comment&quot;&gt;# See https://stackoverflow.com/a/41815890&lt;/span&gt;
package_name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;allensdk&quot;&lt;/span&gt;
spec &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; importlib&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;util&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;find_spec&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;package_name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; spec &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;package_name &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot; is NOT installed&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;%s (version: %s) is installed.&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;package_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; pkg_resources&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;get_distribution&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;allensdk&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;version&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;allensdk is NOT installed&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that this can return a false result if &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; classes were instantiated followed by a &lt;code class=&quot;language-text&quot;&gt;pip uninstall allensdk&lt;/code&gt;. In that case this test will still report that &lt;code class=&quot;language-text&quot;&gt;allensdk is installed,&lt;/code&gt; until the runtime is restarted.&lt;/p&gt;
&lt;p&gt;Note, if this Python3 code is run inside Python2 notebook, then the result will be &lt;code class=&quot;language-text&quot;&gt;ImportError: No module named util&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TODO:&lt;/strong&gt; Guess this should be enhanced to first check if the user is using the appropriate test version (python2 vs python3). Or maybe even combine both tests into one. That sounds more elegant and foolproof.&lt;/p&gt;
&lt;h1&gt;Probe File System for AllenSDK Files&lt;/h1&gt;
&lt;p&gt;From the output of the above &lt;code class=&quot;language-text&quot;&gt;pip install&lt;/code&gt; is seems packages are getting installed in &lt;code class=&quot;language-text&quot;&gt;/usr/local/lib/python3.6/dist-packages&lt;/code&gt; (or similar for python2) so might be interesting to see what &lt;code class=&quot;language-text&quot;&gt;allensdk&lt;/code&gt; related stuff shows up after a &lt;code class=&quot;language-text&quot;&gt;pip install allensdk&lt;/code&gt;. Two items usually show up, &lt;code class=&quot;language-text&quot;&gt;allensdk&lt;/code&gt; and an &lt;code class=&quot;language-text&quot;&gt;allensdk-0.xy.z.dist-info&lt;/code&gt; where x,y,z are digit charters corresponding to the version number installed. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Probe File System for AllenSDK Files&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; os
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; platform
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; site

allensdk_was_found &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;False&lt;/span&gt;

sites &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; site&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;getsitepackages&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; a_site_dir_name &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; sites&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isdir&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_site_dir_name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        maybe_allensdk_install_dir &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;join&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_site_dir_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;allensdk&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isdir&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;maybe_allensdk_install_dir&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
            allensdk_was_found &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;True&lt;/span&gt;

            a_message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;AllenSDK looks to be installed in:\n  &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; maybe_allensdk_install_dir &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;\n&quot;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_message&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      
            &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; allensdk
            vers &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; allensdk&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;__version__
            vers_message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;AllenSDK installed version seems to be:\n  &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; vers &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;\n&quot;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;vers_message&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

            dist_info_dir_name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;allensdk-&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; vers &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;.dist-info&quot;&lt;/span&gt;
            full_path_dist_info_dir_name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; os&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;join&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a_site_dir_name&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; dist_info_dir_name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 
            another_message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;AllenSDK dist-info directory name:\n  &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; full_path_dist_info_dir_name &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;\n\nContents of dist-info dir:&quot;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;another_message&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            !ls &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;full_path_dist_info_dir_name&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; allensdk_was_found &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    failed_message &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;AllenSDK does not appear to be installed for Python &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; platform&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;python_version&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;failed_message&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;Test AllenSDK Install Sanity&lt;/h1&gt;
&lt;p&gt;This is a trivial sanity checker to confirm that &lt;a href=&quot;https://github.com/AllenInstitute/AllenSDK&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt;&lt;/a&gt; is installed and working within a machine. This can be quite useful on Colab (and the like) where VMs are getting tossed away on a regular, frequent schedule. Just run this cell and if &lt;code class=&quot;language-text&quot;&gt;fetched_data&lt;/code&gt; is an array with one more elements and there are no errors, one can assume &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; is a happy camper.&lt;/p&gt;
&lt;p&gt;If this next cell throws &lt;code class=&quot;language-text&quot;&gt;ModuleNotFoundError&lt;/code&gt; that is an indication that &lt;code class=&quot;language-text&quot;&gt;AllenSDK&lt;/code&gt; is not installed.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Perform a simple test query against the Allen Institute public RESTful API&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# TODO: Intentionally defeated cache? or complexing issues, are we here?&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;#   Maybe a network test snippet would be good. With random string in the query criteria&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; allensdk&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;api&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;queries&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rma_api &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; RmaApi

rma &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; RmaApi&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

fetched_data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; rma&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;model_query&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Atlas&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; criteria&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;[name$il&apos;*Human*&apos;]&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fetched_data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Length of fetched_data: &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fetched_data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;WARNING: Zero data records fetched. Probably a failure.&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;Length of fetched_data:  6&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[tSNE: Better Faster Cheaper]]></title><description><![CDATA[I’ll be giving a poster presentation on June 3rd at Fred Hutch
at Brotman Baty Institue’s 2019 Single Cell Symposium.  The poster is…]]></description><link>http://tigue.com/tsne_better_faster_cheaper/</link><guid isPermaLink="false">http://tigue.com/tsne_better_faster_cheaper/</guid><pubDate>Thu, 16 May 2019 20:33:15 GMT</pubDate><content:encoded>&lt;p&gt;I’ll be giving a poster presentation on June 3rd at Fred Hutch
at &lt;a href=&quot;https://brotmanbaty.org/event/single-cell-symposium/&quot;&gt;Brotman Baty Institue’s 2019 Single Cell Symposium&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;The poster is entitled &lt;a href=&quot;http://reconstrue.com/tsne/2019_06_bbi_scs_poster.svg&quot;&gt;tSNE Better Faster Cheaper poster&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://reconstrue.com/tsne/2019_06_bbi_scs_poster.svg&quot;&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Stefano Buliani: Serverless Cheatsheet]]></title><description><![CDATA[On June 8th, 2017 at AWS’s offices, there was 
a Meetup of AWS Seattle.
Stefano Buliani, a Solutions Architect at AWS, gave the talk…]]></description><link>http://tigue.com/stefano_buliani_serverless_cheat_sheet/</link><guid isPermaLink="false">http://tigue.com/stefano_buliani_serverless_cheat_sheet/</guid><pubDate>Fri, 09 Jun 2017 17:25:41 GMT</pubDate><content:encoded>&lt;p&gt;On June 8th, 2017 at AWS’s offices, there was
&lt;a href=&quot;https://www.meetup.com/AWS-Seattle-OfficialEvents/events/240214828/&quot;&gt;a Meetup of AWS Seattle&lt;/a&gt;.
&lt;a href=&quot;https://twitter.com/sapessi&quot;&gt;Stefano Buliani&lt;/a&gt;, a Solutions Architect at AWS, gave the talk,
“Serverless Cheat Sheet: Best Practices for Building Serverless
Applications.”&lt;/p&gt;
&lt;p&gt;I recorded the seminar. Please accept my apologies for the low quality
of the recording but the content absolutely compensates.  The talk
lasted over an hour. YouTube throttled my video uploads at a max of one
hour, so the recording is on YouTube as two separate videos:
&lt;a href=&quot;https://youtu.be/fl7wwgX8kYk&quot;&gt;Part 1&lt;/a&gt; and &lt;a href=&quot;https://youtu.be/TDuf9WbgLKQ&quot;&gt;Part 2&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;div style=&quot;position:relative;height:0;padding-bottom:56.25%&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/fl7wwgX8kYk?ecver=2&quot; frameborder=&quot;0&quot; style=&quot;position:absolute;width:100%;height:100%;left:0; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;div style=&quot;position:relative;height:0;padding-bottom:56.25%&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/TDuf9WbgLKQ?ecver=2&quot; frameborder=&quot;0&quot; style=&quot;position:absolute;width:100%;height:100%;left:0; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt;</content:encoded></item><item><title><![CDATA[Omolumeter.com is live]]></title><description><![CDATA[Omolumeter v0.4.2 has been released. This release coincides with the launch of omolumeter.com, which is where future releases will be…]]></description><link>http://tigue.com/omolumeter_live/</link><guid isPermaLink="false">http://tigue.com/omolumeter_live/</guid><pubDate>Thu, 05 May 2016 07:59:59 GMT</pubDate><content:encoded>&lt;p&gt;Omolumeter v0.4.2 has been released. This release coincides with the launch of &lt;a href=&quot;http://omolumeter.com&quot;&gt;omolumeter.com&lt;/a&gt;, which is where future releases will be published from now on.&lt;/p&gt;
&lt;p&gt;&lt;a title=&apos;Omolumeter v0.4.2&apos; href=&apos;http://omolumeter.com/&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAAB10lEQVQoz3VTiY7iMAzt/0sghITE8U+zIAqdGabc2kKPtElDj6XNWzvLMoMEkV6dy47fs+v0+30MBgN0u110Oh30ej1MJhOMx2NrX4HPh8MhRqPRAxzP8zCfzzGdTjGbzSwWiwWWyyVc17Vztj/n87mLj49P+Os1fN9/gNO2LbTWkEoiz3NkWQallN1L0xRSSrKZhVI5rTPITACmwbPhtKZFVVW4Vlc0zfNLP0drgKIGdGmQX1rkxSMcQwHjJMXb7AubzRp1XZOTgbHgBxoQCegCOAuDIDFIcwaewjH0ZEY0Mp1aSlVV2kwoHi40jbIWm9MF23OCQJyR6hCy+IYqIov/a6sha3anRNnE0uBEMu3OAvswgCoFGlPebhjLgP2ewQaUNmBLWRp8HkijCshryriIb68QcdKsrQ3qyx9ocUGe6Du00Pc9p2m4ysqKHEn2rVHVGr9PB8gox/7riO1qh62/xcpbIQmTe6ZPq8xFEanENrgiSWP4Ow+H4w6F+kfxQLR/uR6OxwO8dw9hFN40fhGQP6lU2B33dDmg9vluHXYSQmBDDcz9yHOZyZvWLzTkQy6KIgemX9WVbR1ucG7skkrNQcqyRJIkiKLInnPvsuWfIY5ju2b8BY4fhEPSchfdAAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Omolumeter v0.4.2&quot; title=&quot;Omolumeter v0.4.2&quot; src=&quot;/static/8d91791b2a05982020b8ad37fbd31889/b8ccf/omolumeter_v042.png&quot; srcset=&quot;/static/8d91791b2a05982020b8ad37fbd31889/1abb1/omolumeter_v042.png 250w,
/static/8d91791b2a05982020b8ad37fbd31889/7217d/omolumeter_v042.png 500w,
/static/8d91791b2a05982020b8ad37fbd31889/b8ccf/omolumeter_v042.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Omolumeter is liberally licensed open source software for visualizing epidemic outbreaks. Compared to the previous significant release, v0.4.2 has
two new visualizations: &lt;a href=&quot;http://omolumeter.com/timeseries&quot;&gt;a time series table&lt;/a&gt; with national flags, and &lt;a href=&quot;http://omolumeter.com/epicurves&quot;&gt;an epicurve&lt;/a&gt; which charts the deaths over time in the countries most heavily affected.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Omolumeter: epidemic outbreak visualization web-app]]></title><description><![CDATA[This post defines the word “omolumeter” and introduces sofware, called Omolumeter, which is a web-app for visualizing epidemics, historical…]]></description><link>http://tigue.com/omolumeter_defined/</link><guid isPermaLink="false">http://tigue.com/omolumeter_defined/</guid><pubDate>Fri, 08 Apr 2016 07:59:59 GMT</pubDate><content:encoded>&lt;p&gt;This post defines the word “omolumeter” and introduces sofware, called Omolumeter, which is a web-app for visualizing epidemics, historical or simulated.&lt;/p&gt;
&lt;p&gt;My main side project over the last many months is in response to what I saw during the last big Ebola outbreak which – sadly – is still &lt;a href=&quot;http://www.nytimes.com/2016/03/30/health/emergency-over-ebola-has-ended-who-says.html?_r=1&quot;&gt;simmering along&lt;/a&gt; such that “flare-ups of cases continue” despite the emergency having been officially declared over.
The first piece of software to come out of that side project is called an omolumeter (&lt;a href=&quot;http://tigue.com/projects/omolumeter/src/apps/omolumeter/&quot;&gt;live demo of v0.1.0&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a title=&apos;Omolumeter v0.1.0&apos; href=&apos;http://tigue.com/projects/omolumeter/src/apps/omolumeter/&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAAByElEQVQoz51TXY+aUBDl/78UFbRJ2wd/yir2sa1b0CbtrmtEKCj4/YUyp3PurmTrvjSd5GTmzp0583HBms/nRZZlSJNEptMQs9kMWTZHkvxWJEjTlHeVnS8WyKnjyMQ+I5UwDBFFkViT8ej88+ERD48j+R4Mcd/vwx/+gE/bDzAYqg4GCIIAvA+jGL98H9P+V4zHTxiNnvDl2z2Gg4EMNdb69PFDYds12LWaOI6L960W3um54Thw3Sbq9Trv1HaNz7Zt2PUGGs0mHBPjwm22hLrdbovleV7xuddDz/NEgZ7a3W4X6ld00el0DOirQN/d3Zs75lqXy8XsMM9zWeh+aBOr1Qr/I9bhcChOpxMUcj6f8WKjKAqUZfnPEBGTZx2Px2K320HJhBW0AHh+LQy+BUVzDSjMof2GkGNPJhPEcczPAPpZYb1eY7lcmjVwiishYzebzV/kZmQ6r4Tb7Zb7NMkkuVZm59TX8W4JGceYW0LRsyiZaFeifmNrooEWECUUeWY0Z22gyiNIeCa7vnbVOgvQR9DmyNT7/b7aKYUTcCIKH8R0qEEnVtIOS/WXmljq71Tq7kod3UC7q7S+Pls0sfRpMWNTK1f5BwjreSMTDJ/NAAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Omolumeter v0.1.0&quot; title=&quot;Omolumeter v0.1.0&quot; src=&quot;/static/74daea767f1649c0aa7c00a9ef990c5f/b8ccf/omolumeter_v010.png&quot; srcset=&quot;/static/74daea767f1649c0aa7c00a9ef990c5f/1abb1/omolumeter_v010.png 250w,
/static/74daea767f1649c0aa7c00a9ef990c5f/7217d/omolumeter_v010.png 500w,
/static/74daea767f1649c0aa7c00a9ef990c5f/b8ccf/omolumeter_v010.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Earlier I completed &lt;a href=&quot;http://tigue.com/by-time/2014/12/28/ebola-open-data-analysis-completed/&quot;&gt;analysis of the open data on the Ebola 2014 West Africa outbreak&lt;/a&gt;.
Currently, building on that analysis, I am working on a data format I am calling the &lt;a href=&quot;https://github.com/JohnTigue/outbreak_time_series/wiki/Outbreak-Time-Series-Specification-Overview&quot;&gt;Outbreak Time Series Specification&lt;/a&gt; (“the Spec”).
The API design is actually leveraging the recently completed W3C Recommendation, &lt;a href=&quot;https://www.w3.org/2013/csvw/wiki/Main_Page&quot;&gt;CSV on the Web&lt;/a&gt; (CSVW).
In parallel I am writing software which reads files (or in HTTP terminology, resources) that are formatted compliant to the Spec.&lt;/p&gt;
&lt;p&gt;The software is called an omolumeter, a word I just made up.
It’s a meter for Omolu, the African orisha (“god”) of epidemics who both brings and takes away diseases.
It will be the first app that reads outbreak data compliant to the Spec.
Currently all it does is parse a CSV that contains outbreak data and renders it in a table view.
Fancier visualizations such as charts and maps are to be added in later versions of the omolumeter.
Everything will be implemented using liberally licensed web technology, no flash or native apps just HTML and JavaScript (and CSS, and SVG, and…).
This will be the codebase that is the reference implementation for the Spec.
I am building this out as I write the spec in order to prove it is easy to implement software which works with the Spec.&lt;/p&gt;
&lt;p&gt;The omolumeter code is just a single web page with a lot of JavaScript, known as a Single Page App (SPA).
Specifically it is based on the AngularJS framework (v1.5) with a Material Design look-and-feel user experience.
The same code can be packaged as a native app for iOS and Android (so same user experiences as a native app but it is not technically a native app; it is web technology packaged for a native deploy).
It currently works in Chrome Mobile and Safari Mobile.&lt;/p&gt;
&lt;p&gt;Internet Explorer is not going to be supported. (Yeah, I said it.) Well, not by me.
If anyone wants to join the party, pull requests are welcome on &lt;a href=&quot;https://github.com/JohnTigue/outbreak_time_series&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Seattle ISP quality monitor]]></title><description><![CDATA[Back in April 2015, I started working with the City of Seattle on a very interesting project which just went live at version 1.0 (press…]]></description><link>http://tigue.com/seattle_speed_testing/</link><guid isPermaLink="false">http://tigue.com/seattle_speed_testing/</guid><pubDate>Fri, 19 Feb 2016 07:59:59 GMT</pubDate><content:encoded>&lt;p&gt;Back in April 2015, I started working with the City of Seattle on a very interesting project which just went live at version 1.0 (&lt;a href=&quot;https://www.newamerica.org/oti/seattle-launches-broadband-speed-test-in-partnership-with-oti/&quot;&gt;press release&lt;/a&gt;).
Note: here “1.0” means it has been publicly deployed and is collecting data but 2.0 will be slicker still.
I am really excited about this technology and more importantly the long term legal implications.&lt;/p&gt;
&lt;p&gt;I was the project lead on this.
&lt;a href=&quot;https://www.newamerica.org/oti&quot;&gt;Open Technology Institute&lt;/a&gt; was the “vendor.”
Bruce Blood, Open Data Manager for the City, was the point man inside the government.
Bruce is a good guy and he is doing great work; it will be a civic loss when he retires later this year.&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;ISP quality map&quot; href=&apos;http://www.seattle.gov/broadband-speed-test&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACkUlEQVQoz02T227bRhRF9f+vRf+gBfoUFEjRSHIiObYsx5EoXoYz5JAc3kXd5fzB6rEcBH04wLzMmr332TOq+w1157M2NdPoxFSduVMnmfNtJtEZP0lpq4zKhsSJ5VtS0jWG0iXUWcj+fKY4vNKcfjCqO4WtYjZZxiw+3GD/h07CI5FRlDbGmQ2F3nCvOmwRUVeWQ2u5vl6ZJjuK/ZXRc9rylHTkjZZRct4yji434Dg84esMa0LSOCA3Ac5GLOOaudphyoaDKJ2pkj9XHX+8NIwmcnmu9zS9putjHvTA5CdwGh0xkUcSrjAPH0jW9wJUVM7wOdrxku649inlTtwke1blgdFnuWhrTbsVC50R4O6W21RmbTRp+IwWYLa5x4pKa2Jeopx/gjOPyYnWyQP7Ax+jLetKgEvToZyl3wa0vb1ZfoNN1JVH3+ISjyLx8cIItV6gnz/xxXMsdYtzKadmzTJvmNsjE7NnZMsSL8/Ero/NUlZJ82spb+C5GvCVKFXPWP8rib/gX/9InFdcBse5S7hejqzc/mZ9FGQ5q8yJ3YCqkcCT9tdS3rY8Vq98Ci943+fE3iNhrBkHB77oK6ro6aqEYci5HmpS5xjpwklunQTckNUKX9Teqct7J0XhInTM4yNeZHDf/ibYLJn5Nco6PNuyFRFdHbPtSzZ5JxnqnlBU6qpmYXqWpnrvn0Dvo55iMyMvHdunvxhmv6NTw12wRRc1VWmJlGQv5d5JfbI8lR7qkmEb4honii7vlYl+llpqEyZOyvyV9uE33OIDWWbx4vQWTZw7ojRj6CyDKOwbAW6Hgv0+xbXNDbZMnfyYnSzm3Xbw/Umq80SjPzKUY7r0EV/sB3mLFnhqLTthdL2h7iP+A2iXSd/yUqUpAAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;ISP quality map&quot; title=&quot;ISP quality map&quot; src=&quot;/static/d785f1c02b4b4dd2c4dd49a060e53a4a/b8ccf/isp-monitor.png&quot; srcset=&quot;/static/d785f1c02b4b4dd2c4dd49a060e53a4a/1abb1/isp-monitor.png 250w,
/static/d785f1c02b4b4dd2c4dd49a060e53a4a/7217d/isp-monitor.png 500w,
/static/d785f1c02b4b4dd2c4dd49a060e53a4a/b8ccf/isp-monitor.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The City is calling the tool the &lt;a href=&quot;http://www.seattle.gov/broadband-speed-test&quot;&gt;“Broadband Speed Test”&lt;/a&gt;.
Personally I label it as an “ISP quality monitor.”
(“Broadband” sounds so highfalutin that the term must have come out of some marketing department.)
We already have air quality monitors and the County mails out pamphlets regularly which enumerate quality measures for the drinking water.
The goal is of this project is that one day we will have laws regulating net neutrality and quality.
In such a regulatory scheme we will need ISP quality monitoring tools.&lt;/p&gt;
&lt;p&gt;Clearly we do not currently have laws for this but even it the government simply collects and disseminates network quality information that is a big win.
And now for the first time in the USA we have the government (albeit only a municipal government) collecting this sort of information.
Hopefully efforts like this will lead to federal legislation.&lt;/p&gt;
&lt;p&gt;Even without regulatory laws, simply governmental monitoring of the network may well lead to the situation improving.
An analogy can be made to commercial airlines.
The federal Department of Transportation collects performance data on airlines.
For example, “Gate Departure Time” data is collected.
Then &lt;a href=&quot;https://www.rita.dot.gov/bts/sites/rita.dot.gov.bts/files/press_releases/airline_ontime_statistics.html&quot;&gt;reports of delays per airline&lt;/a&gt; are periodically published.&lt;/p&gt;
&lt;p&gt;Simply collecting and making available such data was sufficient to get the airline corporations to improve those numbers.
(Ironically, this is one of the reasons that we Americans now spend so much time parked on runways: the numbers reflect when an aircraft pushed off from its gate, not when the airplane started flying.)
Based on IP addresses collected during network speed testing, we can determine which ISP the test is being run over and then later generate quality reports per ISP.
Hopefully, similar to the airline departure times, we will see an improvement in the performance numbers of ISPs now that we are starting to collect the relevant information.&lt;/p&gt;
&lt;p&gt;So, legally this may well prove to be interesting stuff in the long term. Moving on to the technological aspects of this project, that is currently interesting.
&lt;a href=&quot;http://www.measurementlab.net/tools/ndt/&quot;&gt;NDT&lt;/a&gt; (Network Diagnostic Test) is the very core of this technology package.
NDT is the bit-pushing speed tester.
The code is &lt;a href=&quot;https://github.com/ndt-project/ndt/blob/master/COPYING&quot;&gt;liberally licensed&lt;/a&gt;.
This is the code which actually generates a fake file and sends it to the server for upload timing.
Then the server sends a fake file to the client for download timing.&lt;/p&gt;
&lt;p&gt;The map UI is based on two high-quality JavaScript GIS libraries: &lt;a href=&quot;http://leafletjs.com/&quot;&gt;Leaflet&lt;/a&gt; for the base map and &lt;a href=&quot;http://turfjs.org/&quot;&gt;Turf&lt;/a&gt; for aggregating results within US Census Block Groups.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/opentechinstitute/piecewise&quot;&gt;Piecewise&lt;/a&gt; is the name of the web app that runs the tests and generates the reports and provides the user interface.
Unfortunately &lt;a href=&quot;https://github.com/opentechinstitute/piecewise/blob/master/LICENSE&quot;&gt;Piecewise is licensed under GPL3&lt;/a&gt;, rather than Apache or MIT, but that detail is not a show stopper.&lt;/p&gt;
&lt;p&gt;If you want further information, I put a lot of work into &lt;a href=&quot;https://github.com/openseattle/seattlespeeds/wiki&quot;&gt;a wiki&lt;/a&gt; and you can also see some of &lt;a href=&quot;http://tigue.com/seattlespeeds/&quot;&gt;my project management artifacts.&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Generating TopoJSON debug]]></title><description><![CDATA[(Update: since originally posting this, I have learned a trick or two which avoids some of the problems discussed here. 
Nonetheless, this…]]></description><link>http://tigue.com/generating_topojson/</link><guid isPermaLink="false">http://tigue.com/generating_topojson/</guid><pubDate>Mon, 14 Dec 2015 08:00:01 GMT</pubDate><content:encoded>&lt;p&gt;(&lt;strong&gt;Update:&lt;/strong&gt; since originally posting this, I have learned a trick or two which avoids some of the problems discussed here.
Nonetheless, this post still stands as potentially helpful to anyone walking the same path I did.
See below for details.)&lt;/p&gt;
&lt;p&gt;This is one of those posts that a confounded developer hopes to find in a time of need.
The situation: generating &lt;a href=&quot;https://github.com/mbostock/topojson&quot;&gt;TopoJSON&lt;/a&gt; files.
Presented here are two attempts to generate a TopoJSON file; the first one failed, the second worked for me, &lt;a href=&quot;https://en.wiktionary.org/wiki/YMMV&quot;&gt;YMMV&lt;/a&gt;.
The fail path is due to a naive attempt to do the conversion in one step. The successful path is one I eventually figured out that involves two steps.
The two step process consists of using &lt;code class=&quot;language-text&quot;&gt;topojson&lt;/code&gt; and then &lt;a href=&quot;http://www.gdal.org/&quot;&gt;GDAL&lt;/a&gt; (on OSX, it can be installed via &lt;code class=&quot;language-text&quot;&gt;brew install gdal&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;As part of the &lt;a href=&quot;http://tigue.com/by-time/2015/12/09/seattle-boundaries/&quot;&gt;seattle-boundaries&lt;/a&gt; project, I needed to translate a
shapefile for the Seattle City Council Districts to TopoJSON.
I got the shapefile, &lt;a href=&quot;https://data.seattle.gov/City-Business/City-Council-Districts/th8u-8xnq&quot;&gt;Seattle&lt;em&gt;City&lt;/em&gt;Council_Districts.zip&lt;/a&gt;, from
&lt;a href=&quot;https://data.seattle.gov/&quot;&gt;the City of Seattle’s open data site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;TopoJSON is from the mind of Mike Bostock. As part of that effort he created a &lt;a href=&quot;https://en.wikipedia.org/wiki/Unix_philosophy#Origin&quot;&gt;“small, sharp tool”&lt;/a&gt; for generating TopoJSON files.
The command line tool is appropriately called &lt;a href=&quot;https://github.com/mbostock/topojson/wiki/Command-Line-Reference&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;topojson&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My naive and doomed first attempt was to generate the TopoJSON directly from the shapefile, which is advertised as possible.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;topojson --out seattle-city-council-districts-as-topojson.bad.json City_Council_Districts.shp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(&lt;strong&gt;Update:&lt;/strong&gt; turns out the mistake I made was not using the &lt;code class=&quot;language-text&quot;&gt;--spherical&lt;/code&gt; option. Inspecting the &lt;code class=&quot;language-text&quot;&gt;*.prj&lt;/code&gt; file that came with the &lt;code class=&quot;language-text&quot;&gt;*.shp&lt;/code&gt; file revealed that the data was on a spherical projection. Re-running original command as &lt;code class=&quot;language-text&quot;&gt;topojson --spherical ...&lt;/code&gt; worked like a charm.)&lt;/p&gt;
&lt;p&gt;Below is the generated file, uploaded to GitHub. Notice the orange line at the north pole. That is the TopoJSON rendered (read: FAIL).&lt;/p&gt;
&lt;p&gt;&lt;a title=&apos;TopoJSON fail&apos; href=&apos;https://github.com/JohnTigue/nodeio/blob/master/data/generating-topojson/seattle-city-council-districts-as-topojson.bad.json&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.73333333333333%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABaklEQVQoz7WQ2XaCMBCG8/7P1da6VOtWtW6gKIr7QiAJ9O9MkAtse2dzzs9M5pvMgjDG4JES/EmSBPf2t1j+6K98lviXCR9bMElp1BSGxy/YzLfMFGMFVshPIRIloWOJlOyXJqszy0pUCBMXY7lvYmLqJxMD74TF9oKOe0TLOaLp3Oz0iLF/xjy42HvO2jfrrM9W90x0lzHcnUHVkej5CvO9QXMeoenF6K8UpluN8kRiFGjK02jMIrSI8X0YKFSm0uaMNxp1YmJzMSiNr5jtFPhEOkXdDeFsFby9QpnY+qQtO4QGNSfE8qAxCWJUp6GN8fGP2r4TH8sILA58rmK8zyReqQg36fkR+n7GepTTIFYaXWniEAPKZTHreMRciRdigrvwhQs8D6+2a430RP4bTcPiIvm9MskYN2Y/f1d3s0EEd2l70q68PhvsrsZ2bM6lnaC7iGh1jQ2xgMSFOotsct6M19/Sb8tWlvgGEDCUWCkD88gAAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Generated TopoJSON which does not work&quot; title=&quot;Generated TopoJSON which does not work&quot; src=&quot;/static/609951dfea5705e4eeb75de462eb13cd/b8ccf/topojson-fail.png&quot; srcset=&quot;/static/609951dfea5705e4eeb75de462eb13cd/1abb1/topojson-fail.png 250w,
/static/609951dfea5705e4eeb75de462eb13cd/7217d/topojson-fail.png 500w,
/static/609951dfea5705e4eeb75de462eb13cd/b8ccf/topojson-fail.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The tool, &lt;code class=&quot;language-text&quot;&gt;topojson&lt;/code&gt;, can read from multiple file formats, including shapefiles (*.shp), but there were problems with it converting the Seattle City Council District file.
The root of the problem is in the JSON with the nutty &lt;code class=&quot;language-text&quot;&gt;bbox&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;transform&lt;/code&gt; which clearly are not latitude and longitude numbers:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;bbox&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
  &lt;span class=&quot;token number&quot;&gt;1244215.911418721&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token number&quot;&gt;183749.53649789095&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token number&quot;&gt;1297226.8887299001&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token number&quot;&gt;271529.74938854575&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;
translate&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
  &lt;span class=&quot;token number&quot;&gt;1244215.911418721&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token number&quot;&gt;183749.53649789095&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On the other hand, if this file is uploaded to &lt;a href=&quot;http://www.mapshaper.org/&quot;&gt;mapshaper.org&lt;/a&gt; then it renders well. Note though that there is no geographic “context” for the rendering, i.e., no global map and the Seattle City Districts are scaled to take up the full window’s allocated pixels. Perhaps mapshaper is not using the &lt;code class=&quot;language-text&quot;&gt;bbox&lt;/code&gt; and such, which enables it to render.&lt;/p&gt;
&lt;p&gt;I explored the &lt;code class=&quot;language-text&quot;&gt;topojson&lt;/code&gt; command line switches but was not getting anywhere, so I went to Plan B which eventually got me better results. This involved two stages: first use GDAL’s ogr2ogr to translate the shapefile to GeoJSON, and then feed the GeoJSON to &lt;code class=&quot;language-text&quot;&gt;topojson&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ogr2ogr -f GeoJSON -t_srs crs:84 seattle-city-council-districts-as-geojson.json City_Council_Districts.shp
topojson --out seattle-city-council-districts-as-topojson.good.json seattle-city-council-districts-as-geojson.json&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The resulting TopoJSON renders on GitHub as follows.&lt;/p&gt;
&lt;p&gt;&lt;a title=&apos;TopoJSON win&apos; href=&apos;https://github.com/JohnTigue/nodeio/blob/master/data/generating-topojson/seattle-city-council-districts-as-topojson.good.json&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACdklEQVQozzVT527bMBj0+79P/xco2jhN07pJ2gzLjiwP2dYiJQ6RlHQ9KqgAQgu87xYXadGj6jzu3zsUnYEPA8IQkFUWX986ZKWFDQ7K9bDeI0wT/DjCjYH3CYFr4HvcNwwjFlnZc5PDoXFw3Gh9gPYaZedwk3RILwqllBD241/TtvMyoZ+BDL8HAsXnaSJgLjySUwvZRYaWoB5vZ4XHvcbt1uBhc0Z1fMHhuIe0FrVo0AgBTxXKGFR1AyJhjEwjw7MkwFFCSoGL7LGjxFw6rDKNm3WL/fYvdLbEJblFdjrBDrRkGgjoqIR2eLJ0frbDhYDFaqdQqQDHiYaSnnYC602C+3WBX68ZZHqDcvONgEv8eU3ot0JKtnUrEa8wTLRHzYBR9qL3caJDSmaN6ZELjUtV4mEncZcIbJMXXF8/I33+jk0u0DkDoTWyq0CrOrKzDMwSeMBE2YuBD+9ZivunNQ7XElmtcRIGLzk9ZCi/nzdI7j7hbfWF3xSHKtTKYH2oUTdcqpmlRnbRx0Vg3F2nUTUN1mRwqC22V4071uhHUuOariBSeri9x/5cotI9raESaVinKJN+EtB6pk2sReyPJ0ulLZJ9ztRKFK3Dz1RimSjkKUPJH1Gmv7DdZVB+QuNK1LakVDOzs86hKCvsjgcyJJhlWoYrBqP4s+t7pIVldQyeNjmklugo7Xg6oBQtCz3MCXeuw8iqOIY5sjqHyxGLkdo1J/2fFvt1kQxIORxZ9uVa4FwUaHuHRht0RqMPsRX0bAIGltnSghiI9SYyHD+aPowf0RMwb3qydEy8n2UXPJrSGrLycwdbGwj6cdzy4gxhBGK4hb7gH4V4kfMYxJe2AAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Generated TopoJSON which does work&quot; title=&quot;Generated TopoJSON which does work&quot; src=&quot;/static/a2b3b3f0c3590ce3cfef09930b5b2f3d/b8ccf/topojson-win.png&quot; srcset=&quot;/static/a2b3b3f0c3590ce3cfef09930b5b2f3d/1abb1/topojson-win.png 250w,
/static/a2b3b3f0c3590ce3cfef09930b5b2f3d/7217d/topojson-win.png 500w,
/static/a2b3b3f0c3590ce3cfef09930b5b2f3d/b8ccf/topojson-win.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notice how the districts are colored orange, similar to the TopoJSON “North Pole line” in the bad file.&lt;/p&gt;
&lt;p&gt;I guess &lt;code class=&quot;language-text&quot;&gt;ogr2ogr&lt;/code&gt; is better at handling shapefiles. TopoJSON was invented in order to make a more efficient geo-info JSON format that the rather “naive” GeoJSON, so it stands to reason that Bostock’s tool is better at &lt;code class=&quot;language-text&quot;&gt;GeoJSON to TopoJSON&lt;/code&gt; than it is at &lt;code class=&quot;language-text&quot;&gt;Shapefile to TopoJSON&lt;/code&gt;. Or at least that is my guess. I have no ability to judge the quality of the input Shapefile; maybe the thing was funky to start with.&lt;/p&gt;
&lt;p&gt;For more information and all the files related to this task, check out &lt;a href=&quot;https://github.com/JohnTigue/nodeio/tree/master/data/generating-topojson&quot;&gt;my GitHub repo on this topic&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;
Take 2 of the work in the post used &lt;code class=&quot;language-text&quot;&gt;topojson@1.6.20&lt;/code&gt; and I am not sure which version was used for Take 1 but that version of &lt;code class=&quot;language-text&quot;&gt;topojson&lt;/code&gt; was installed over six months earlier.&lt;/p&gt;
&lt;p&gt;Also, the City now has UI for exporting (read: downloading) their datasets as GeoJSON, which leads to another option: use &lt;code class=&quot;language-text&quot;&gt;topojson&lt;/code&gt; to convert the City’s GeoJSON to TopoJSON, no shapefile involved at all.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Seattle map boundaries repository]]></title><description><![CDATA[This year some of my projects needed maps of Seattle, in particular while working with Open Seattle and the City of Seattle. 
Specifically I…]]></description><link>http://tigue.com/seattle_boundaries/</link><guid isPermaLink="false">http://tigue.com/seattle_boundaries/</guid><pubDate>Thu, 10 Dec 2015 07:59:50 GMT</pubDate><content:encoded>&lt;p&gt;This year some of my projects needed maps of Seattle, in particular while working with &lt;a href=&quot;http://openseattle.org/&quot;&gt;Open Seattle&lt;/a&gt; and &lt;a href=&quot;http://www.seattle.gov/&quot;&gt;the City of Seattle&lt;/a&gt;.
Specifically I have needed &lt;a href=&quot;http://www.seattle.gov/cityclerk/municipal-code-and-city-charter/council-districts&quot;&gt;City Council District&lt;/a&gt; and census-related maps.
The &lt;a href=&quot;https://www.census.gov/geo/reference/&quot;&gt;census geographic hierarchy&lt;/a&gt; has three levels for Seattle:
Census Blocks are the smallest areas which are then aggregated into Census Block Groups which in turn are combined into Census Tracks.
Of course, there are other administrative geographic units into which Seattle has be subdivided: neighborhoods, zips code areas, school districts, etc.&lt;/p&gt;
&lt;p&gt;The City of Seattle actually does a good job of making this information available as shapefiles on its &lt;a href=&quot;https://data.seattle.gov/&quot;&gt;open data site&lt;/a&gt;.
Nonetheless, what web developers want is to have the data extremely readily available in a source code repository (for modern open source, read: a git repo) and in formats that are immediately usable in web apps, specifically GeoJSON and TopoJSON. &lt;/p&gt;
&lt;p&gt;So, in Open Seattle we have been building out such a repository of JSON files and hosting it on GitHub.
That repository is called &lt;a href=&quot;https://github.com/openseattle/seattle-boundaries&quot;&gt;seattle-boundaries&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;Some Seattle boundaries&quot; href=&apos;https://who-ocr.github.io/ebola-data/&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsTAAALEwEAmpwYAAACcElEQVQozx2SSW/aQACF/evbW6X02GPVqkuqRkqTtmoSMMQBY4w38O6Z8YzHCxhsjBdsoGlpr096etL3PmbitzzYeZh4GMdZkdZHE1LWqSSwwjSAlCblYbUtBSsagRoEFNIoKapVfay7jhmjZgSbZYya1F6FAG1yBwc9u577abm069TBGET5WrTDR9hFxK1DOSVzZ5kdfh+YEWplsCqJWIfSDosOXUteNHB2xJZaNKipuHYnHoIjMxbAttS/nayrVru0yHKzPzFPoI5945BoKVH3kUKRdiPgmQ5bOqvIdOuxeyoYs/45jF352fiyW1yf9E/U5ERcMQrABRxs4TiFfAaeziO3PEDGsPRHufe4dtgcS+ps2h9Pd9ZNJX/Mje/l/CrQOQ40jAC3G7KoMJ96/MZhdZJxBl1YbhMq23PT6YfOZGF73ALn5l2rfsiUr7l2pfoblB/OwNqht1cWc6TexTYvwu1wQYZuzVuxLfdX2q1vyRNnyc7pE+oMZbxhX5W9l6K7hPl/2iqIFVly+GtXGShhy+lkbKeGaZn8z2D03hHvFX/zoIaqG0qi4D+8ie4vZFKqUcucT94QrUaDwh9XycKGgWCGmum00SxHkzoU13Cqu4A3aD59145fVx7bmNe6h1dlx3CwAwjuQyFzB/tQiqDGG8HISvNArfC4gPw+1lxTfTTXWGVP3Itq9vakX0bzXrJrGQ4dPOA9J9KOKjmRKdR7SsBZaUGUY6KeUReB7Mynv5QY6MKfyUWtfa6sH7HOKrT7J8nMXRZZ0hy7rMy7lSXrzllPhEDbbIuu3eVxQdSBRiQ3Lpeg6eqsKppgGiTpXyhQanHaRQF+AAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Some Seattle boundaries&quot; title=&quot;Some Seattle boundaries&quot; src=&quot;/static/93866c1b6583be3dc8dcc872fbce0a80/b8ccf/3-seattles.png&quot; srcset=&quot;/static/93866c1b6583be3dc8dcc872fbce0a80/1abb1/3-seattles.png 250w,
/static/93866c1b6583be3dc8dcc872fbce0a80/7217d/3-seattles.png 500w,
/static/93866c1b6583be3dc8dcc872fbce0a80/b8ccf/3-seattles.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As a further convenience, &lt;a href=&quot;http://sethvincent.com/&quot;&gt;Seth Vincent&lt;/a&gt; has packaged up the data for distribution via &lt;a href=&quot;https://www.npmjs.com/package/seattle-boundaries&quot;&gt;npm&lt;/a&gt;.
Additionally, he has also taken the maps and made available an API service, &lt;a href=&quot;http://boundaries.seattle.io/&quot;&gt;boundaries.seattle.io&lt;/a&gt;.
This service will reverse-geocode a point into a list containing one entry for each map in the repo, where the list items are the GeoJSON feature to which the point belongs.
For example, let us say you already know where in town the best place for dim sum is (read: you have a point) and you are curious as to which regions it belongs.
The URL to fetch from is:&lt;br&gt;
&lt;a href=&quot;http://boundaries.seattle.io/boundaries?long=-122.323334&amp;#x26;lat=47.598109&quot;&gt;http://boundaries.seattle.io/boundaries?long=-122.323334&amp;#x26;lat=47.598109&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Ebola open data analysis completed]]></title><description><![CDATA[Over the last few weeks I surveyed every bit of available data on the 2014 Ebola Outbreak in West Africa that I could find. There were two…]]></description><link>http://tigue.com/ebola_data_analysis_completed/</link><guid isPermaLink="false">http://tigue.com/ebola_data_analysis_completed/</guid><pubDate>Mon, 29 Dec 2014 04:21:25 GMT</pubDate><content:encoded>&lt;p&gt;Over the last few weeks I surveyed every bit of available data on the 2014 Ebola Outbreak in West Africa that I could find. There were two major sub-tasks to the survey: broad-search and then dig-into-the-good-stuff.&lt;/p&gt;
&lt;p&gt;&lt;a title=&apos;Various ebola visualizations&apos; href=&apos;https://johntigue.github.io/ebola-viz-twumbshots/&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsTAAALEwEAmpwYAAACEklEQVQoz0VSy27TQBT193fDskuQaMUCkVYoQkLdQEMEVdVAktpNEz9i147fHj/HM+MXx2kLdzGax73nnHvuSIfDwXGcruv6YwzD0Lbt8Bqc841pRkVBas7LaGCRELwZQ3SNkPI8D8MQaxRFKCuKwvM87MuyrKpKcPZ+8uFkcvF2KX+dX6Y/3vjWxjT0nbpVHjcSsEErhEgJAXMQBNBycF3DMGzbZjU9u/h4Mrl8d3NzOvv5afbl2/LXlax8Xi7P7xYSyvquj3e7xDShM/H9++vv29XSMk3XdSmlTkJkTd8Y+wfduDcsLQitNLVJ6hAyMjfooypjx0ExJUT/vXhcr/eapitKVRQ1pUkUhb5fVxUSkBwHgW1ZSRiOzILxwvcdRYZsxhgyAtuW53NDU8s850IUZRknSUVrPCF9NChOcCnVdY2abvRPYNFUNU3TjJDQNB3LgmfjII7O9/3LCHDuj0eJEIJsKKnyDC0IzlEA1JGkabI8L7IM4vM0o3XNjgE+PgaT4AoGkyRJ23VH+P55A1DIg8id/XS7kS3P+089DIyzFnOGn4DkbUsZq8ZtTbIcAwei7/vgUbzDwt7TRozQr8VFUQJdyrIsjWOy12mW8poOL+31oMWHedb5jxAPosrbpl/vrtWntYSU2PXuplf66sH1SZRT2IakOI7x8yAEncNwGNHg27ZicX56Oz2b/Zmq29Vf51ub6/P20IwAAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Various ebola visualizations&quot; title=&quot;Various ebola visualizations&quot; src=&quot;/static/7d6af4e4c52fd6ce4abc8bb88d830fdc/b8ccf/grid-of-some-twumbshots.png&quot; srcset=&quot;/static/7d6af4e4c52fd6ce4abc8bb88d830fdc/1abb1/grid-of-some-twumbshots.png 250w,
/static/7d6af4e4c52fd6ce4abc8bb88d830fdc/7217d/grid-of-some-twumbshots.png 500w,
/static/7d6af4e4c52fd6ce4abc8bb88d830fdc/b8ccf/grid-of-some-twumbshots.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For the first sub-task, the work started with cataloging the datasets on &lt;a href=&quot;http://eboladata.org&quot;&gt;eboladata.org&lt;/a&gt;. I sifted through those 36 (&lt;a href=&quot;http://eboladata.org/dataset?sort_by=changed&amp;#x26;sort_order=DESC&quot;&gt;and growing&lt;/a&gt;) datasets. My analysis of those can be found on the EbolaMapper wiki at &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/Datasets-Listed-on-eboladata.org&quot;&gt;Datasets Listed on eboladata.org&lt;/a&gt;. An additional part of this first sub-task was to catalog the datasets available at &lt;a href=&quot;https://data.hdx.rwlabs.org/&quot;&gt;HDX&lt;/a&gt; and &lt;a href=&quot;http://nethope.org/&quot;&gt;NetHope&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have posted the conclusions of sub-task #1 on the wiki at &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/Recommendations-for-Data-to-Use-in-Web-Apps&quot;&gt;Recommendations for Data to Use in Web Apps&lt;/a&gt;. The humanitarian community seems most comfortable with CSV and Excel spreadsheets. Coming from a web services background I expected a JSON or XML based format, but the humanitarians are not really thinking about web services, although the folks at HDX started on &lt;a href=&quot;http://docs.hdx.rwlabs.org/an-api-for-ebola-data/&quot;&gt;an effort which shows promise&lt;/a&gt;. Finally, for data interchange, the best effort within the CVS/spreadsheet space is &lt;a href=&quot;http://docs.hdx.rwlabs.org/standards/&quot;&gt;#HXL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The second major sub-task centered on hunting down any “hidden” JSON: finding the best visualizations on the web and dissecting them with various web dev-tools in order to ferret out the JSON. That which was found could be considered “private” APIs; it seems that there has not yet been any attempt to come up with a API (JSON and/or XML) for infectious disease records. At best, folks just pass around non-standard but relatively simple CSVs and then manually work out the &lt;a href=&quot;https://en.wikipedia.org/wiki/Extract,_transform,_load&quot;&gt;ETL&lt;/a&gt; hassles. My analysis of the web service-y bits can be found on EbolaMapper wiki as well at &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/JSON-Ebola2014-Data-Found-on-the-Web&quot;&gt;JSON Ebola2014 Data Found on the Web&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My conclusion from the second sub-task is that the world needs a standard data format for outbreak time series, one which is friendly to both the humanitarian community and to web apps, especially for working with mapping software (read: &lt;a href=&quot;http://leafletjs.com/&quot;&gt;Leaflet&lt;/a&gt;). Someone should &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/Outbreak-Time-Series-Specification-Overview&quot;&gt;do something about that&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Frontline signifiers of success in the ebola response]]></title><description><![CDATA[The EbolaMapper project is all about coming up with computer graphics (charts, interactives, maps, etc.) for visualizing infectious disease…]]></description><link>http://tigue.com/ebola_progress_metrics/</link><guid isPermaLink="false">http://tigue.com/ebola_progress_metrics/</guid><pubDate>Sat, 20 Dec 2014 21:15:18 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;thub.com/JohnTigue/EbolaMapper&quot;&gt;The EbolaMapper project&lt;/a&gt; is all about coming up with computer graphics (charts, interactives, maps, etc.) for visualizing infectious disease outbreaks. &lt;/p&gt;
&lt;p&gt;A sign of excellent news for any given outbreak is when the bullseye plot animations go static. For example, consider &lt;a href=&quot;https://who-ocr.github.io/ebola-data/&quot;&gt;the WHO’s visualization&lt;/a&gt; shown below which is plotting data for the 2014 Ebola Outbreak in West Africa.&lt;/p&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/e10e66a21fb63b91abbede8d6f09b215/b8ccf/who-ebola-data.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACuklEQVQoz0WTS08TYRSG59e48xe4MzEuNJq4McaFcasLNm5cuTAmJioGA9YLykUFRI0aryiXghqhwHR6r/QyIL0y7UzLtNMW0cczg+Dizel3vnOenss3yqIaZEkUEH2fnSXg60W7f4enZ07x+eIFImMjlBMJSvEYZmqFSiqFUSyIipRWdbmLUwqH2JiZxJrzoyypGnvQoMaC38/rrnMMnDjCQk83ywIvaEFq2TSVH0nKyQQVw6BWr5PL5Si6voXvVHaBHiy4A11cVlFjCca6zvPw2GG+XL3C15vXMaSKQiRMMRrBymQwyiWMikFG1z2g9XUOa2ZKoFM7wICAAsu7VmU+ECDwbJzL+/fRffAA1kqSXEgjH1SpSJu5Qp6MgIulEsV0itTUJPnpSar+aRQtHCEajxOJxfYUdm0iyYvLlxg7exrd/Xc9iy7QdDhMqVxGX1sjFImyrIVQZYYhTcP8Nofy8t0EPfeG8Q2McPvhE3r7H3vWOz96zstXb4mrMopQ2FucOx4PFAx5dmJ61svpGxil/94QysyXBa73DeIbeoZvcJzeB2MSMCp2lBvi/zw3j9NqY1k16vVNTNOiWjWp1eo4jiPVxen2DXs5tyVf2dra4s/vP7QsCRJtyva2t7fF99vTL7lvNh1JbtG0bdbl2azn8rTbHRqNJp1Ox4vbduMaDRTbbmDbTYryxjRp58dKih3ffzVETQFuSExSBp9eXfN8LtDeta0OK+k0intwKzDlbSVkEZlM1gtqit+7E5Aj1bSB6PAAqiiZXcXetL08V+5v91lVZevKrtOdU+ufHKftgVzZloWVz6PP+pk4eZz5WzfIVy2cf9W1tn5hZHWeHj1E9N0baVkuajLwmmliiczyBsbPn3KW4ecLpD59IDY+QvBuH0vXrhD/+B5D4vc6cCuUZa0vLWLIl/MXPAtAt3REglIAAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;who ebola data&quot; title=&quot;who ebola data&quot; src=&quot;/static/e10e66a21fb63b91abbede8d6f09b215/b8ccf/who-ebola-data.png&quot; srcset=&quot;/static/e10e66a21fb63b91abbede8d6f09b215/1abb1/who-ebola-data.png 250w,
/static/e10e66a21fb63b91abbede8d6f09b215/7217d/who-ebola-data.png 500w,
/static/e10e66a21fb63b91abbede8d6f09b215/b8ccf/who-ebola-data.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;p&gt;Each bullseye shows two datum: the outer circle is cumulative deaths and the inner circle is new deaths in the last 21 days. &lt;a href=&quot;http://www.virology.ws/2014/10/16/the-quarantine-period-for-ebola-virus/&quot;&gt;21 days is the accepted incubation period&lt;/a&gt; and that is why &lt;a href=&quot;https://twitter.com/HansRosling/status/532346099462598656&quot;&gt;Hans Rosling tracks new cases for the last 21 days&lt;/a&gt;. When the inner circles shrink to zero the outbreak is over. &lt;/p&gt;
&lt;p&gt;Yet there are much lower tech ways of presenting information to people that can be quite affecting. On the grim side there are &lt;a href=&quot;http://www.npr.org/blogs/goatsandsoda/2014/12/02/367838698/one-villages-story-how-ebola-began-and-how-it-ends&quot;&gt;the graves&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&apos;http://www.npr.org/blogs/goatsandsoda/2014/12/02/367838698/one-villages-story-how-ebola-began-and-how-it-ends&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsTAAALEwEAmpwYAAACsUlEQVQozw3NWU/aAAAA4P6SeSAgLS3QuxRogdIL2nLLoQWBWqFKPZg6Z2accxoTr2l0ydyhS1zMFh982dte97e27w98gGfKSzIsOA3C075IwJtVcs7y0GrX2/XSoDfXqGV7I3vWMgezOUNTy7WaJvAFhStWNEESASQIa3oxhIQ9Ex40CJaMQkFRk2RE5ZiWIRxuWFvu4Py1e/NmtGI2nIY+w4a6ZWNluNataAA4OQZPvsCh/60/iQcbMShHQhkCNXhajhNpCsXB6SwZXmvki3FSDQfqHG3n5Y7CG2gAoP3juM+ToQkjxSURb4EC5/lwR2JbImMKdE9kbDm6rpKLMa+rJ5yi7Gp8nQqUGHhWTACtZvv9h8eDy8e9o48xcCIGejJhf4WGahSkw+NdTbo4vro8vTnc3jGjYJXwd+NBm4MdAd3QYwBPkTlRVhJRGoEYaIoBvRwa4GG/EIFY0KtxiaEzGi5vLnesEgU3o6CTDq9K2LqEbqkYQPrHM6FJAfXhAQ8B+mOQLx2aZiF/NBhIhyAJ8QnQmBSaqjFQk8NaScLKUI6IbxrsboUDSlG4m8F7ImEwQREHMxgooZCMw+kwqGBQJY5tVVJuge8K9NDgN2fkPVN7a2aHCtNXooCrEr1UyEwgtoy1RbzOoSU2PJcmezK7ludO2tLtIHdjq/tNYbua3jelg5a638m/LKeW9ATQl9AlOWKLmCVRlkS0BbwaQ/oZdJTDz+a4b33x1ExcdcVrO/tuTtqpJHeqyWFZWcqnN8o8YAuIm43s1tn1IlNgEFsiHQnrp5CTBf3LRuv7nnvmtk+b8a8D5awtnMzL527zqFe8WCycWyrQEjBHxVd1csWgLSF0NBp8v//1+fbh6fnP/ePvh+e/Tz+eDsrUQZk+biY+LYh3a9Wfr+p3rn69kP0HfMfhnt+Oxk8AAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;graves&quot; title=&quot;graves&quot; src=&quot;/static/83ab02d525c7d13c4934ca47a688438c/b8ccf/graves.png&quot; srcset=&quot;/static/83ab02d525c7d13c4934ca47a688438c/1abb1/graves.png 250w,
/static/83ab02d525c7d13c4934ca47a688438c/7217d/graves.png 500w,
/static/83ab02d525c7d13c4934ca47a688438c/b8ccf/graves.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sadder still are memorials such as &lt;a href=&quot;http://www.thelancet.com/journals/lancet/article/PIIS0140-6736(14)62417-X/fulltext&quot;&gt;The Lancet’s obituary for health care workers who died of ebola&lt;/a&gt;  while caring for others — true fallen heroes.&lt;/p&gt;
&lt;p&gt;On the other hand there are signs of positive progress.
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/1a31afdfc408cf540d7a2760cb696524/b8ccf/physical-signifiers.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAADc0lEQVQozxWSa0ybBRSGa0xcoiy6GBRDnDgVlOBwCCiT4ToEyoAx1hUQKBSBcS2sQrkMhGYgAyItBii0VBY2FhnIZNAVKKWUFtpBgS1eQtRk8b5kmrlMTFxi8vjtx8n59+R5z3lFI8ODTF2ZYHrGzFff/sDPv//Fnbv/cm/nP+7/84B7fz/g1k8/Yjgfx7nuFyg6FYCyMpSyslDKP3wN+fFg6quTkFeJCXhdhGhi7CIzX47jWl5kyTbHqtPBptfL9vZ3/PLbHW7/scPX39xCU5fA8JCEPn0enToJ2Vkv0W8oIDstDMOnatr7MnkxRABaZ6dxORbxrrnxXl/F61nB41oSxo7damFxfpZ5YeRp4Xw+qsM42sYZzbuclPmTn3eI9IQgetrz0Q8oKCmLQrTitAuQVW5uedlcd7O1scbGmocbXg/OJRuTly9hMmkprxSTm/o2GnU8HS0x1KiiSJb4IT0SwLmWWIzGY3S11iO6ueJm9aHRspM1jxevEHljzYXHcx2H3crMlTFMgz0UFEipUQbziSIYWUwoFYVvoaw5RkNxCqb+UzS2yGhQ1yFanZzEPTXOypIHx5wDx/wC65Yp5i1WFpwrguE4w4MGdF2F5GaGoW09Q0GchBMhIVz+zIi2IZ+8cikHxdF0nu0WnvKFGcf0LJuC4bLFgtNmY/2aGZd1jmmrG/OkhUsDvYJlBMXHD9KiqEAjTaE4NQFxwF4y417hnX3+xES8QWGJCpFbuJ/N4cVuc+K0XmV5cQnL3LJQpWsCZJhenY4qZSGK/FfRJ4oxVSqpio8j9bSMxOgojh54DtX7sRwuVaBuakQ0pNdzYUBHW2sbTQ2NmAb6aGmspf1sMx+pK9E0qVGpSjmcsJ/OmEM0FEZQJIlEnBNOd28tH1dnUF+aRVqBnAz5aUStzWqMeh0jQ32MGHRCXWwsmCcY6OmgsboMWUosiSlSAvOvkhadw5vp9WS9d4IkSSCGwTr6tR3UyjL4IFKMXCFEtprHsM+OMz5qpE2AF+VIORIVxj7/Z/Ddsxufxx7B99nnOVC3TUX2RZI1v5KeqiekxEGk2k7a0QxKI0Opy8zhhtuMKDo8mP1Bewl4CNj9OE/tehRfn1347fHB7+knhf0EgS8Hkd71PUX6P6m5cB9V5xbJ3XeJ1+6Qnl1DbWYSytxmZl23+R/uvV1HbZUMiAAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;physical signifiers&quot; title=&quot;physical signifiers&quot; src=&quot;/static/1a31afdfc408cf540d7a2760cb696524/b8ccf/physical-signifiers.png&quot; srcset=&quot;/static/1a31afdfc408cf540d7a2760cb696524/1abb1/physical-signifiers.png 250w,
/static/1a31afdfc408cf540d7a2760cb696524/7217d/physical-signifiers.png 500w,
/static/1a31afdfc408cf540d7a2760cb696524/b8ccf/physical-signifiers.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The image on the left is from &lt;a href=&quot;https://twitter.com/MSF/status/535149025922940930/photo/1&quot;&gt;a MSF tweet&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;The best part about battling #Ebola is seeing our patients recover. Here, hand prints are left in Monrovia #Liberia&lt;/blockquote&gt; 
&lt;p&gt;The image on the right is from &lt;a href=&quot;https://twitter.com/UNMEER/status/545802992956346369/photo/1&quot;&gt;an UNMEER tweet&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;Survivor Tree in Maforki, #SierraLeone holds piece of cloth for each patient who left ETU Ebola-free. #EbolaResponse&lt;/blockquote&gt;
&lt;p&gt;Those must be quite uplifting reminders on the front lines of the ebola response. Likewise EbolaMapper should have positive messages, say turning bulls-eyes green when there are no new cases. That will need to be kept in mind.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Prepping for La Grippe]]></title><description><![CDATA[What a strange and disturbing journey this whole ebola research project has proved to be. As one CDCer said of ebola:
“It’s a gruesome and…]]></description><link>http://tigue.com/la_grippe/</link><guid isPermaLink="false">http://tigue.com/la_grippe/</guid><pubDate>Mon, 08 Dec 2014 08:46:12 GMT</pubDate><content:encoded>&lt;p&gt;What a strange and disturbing journey this whole ebola research project has proved to be.&lt;/p&gt;
&lt;p&gt;As one CDCer said of ebola:
&lt;a href=&quot;http://fedscoop.com/cdcs-big-data-defense-ebola/&quot;&gt;“It’s a gruesome and merciless diseases”&lt;/a&gt; but if
&lt;a href=&quot;http://news.nationalgeographic.com/news/2014/10/141025-ebola-epidemic-perspective-history-pandemic/&quot;&gt;put in its historical context ebola is weak&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But the medical details of the disease are not what I am talking
about. What freaks me out how there woefully underprepared we are as a
global society for epidemiological outbreaks. When it comes to global
health defense systems, there is no there there.&lt;/p&gt;
&lt;p&gt;A major take away may well be that those preppers types are on to
something, sadly they underestimate the scale of the problem, as
illustrated in &lt;a href=&quot;http://crofsblogs.typepad.com/h5n1/files/ComingPandemic.pdf&quot;&gt;Preparing for the Coming Influenza
Pandemic&lt;/a&gt;,
written by a doctor. If you want to read more about the big flu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://virus.stanford.edu/uda/&quot;&gt;The Influenza Pandemic of 1918&lt;/a&gt;,
Stanford has a good page which includes “Graphs of the Influenza Epidemic
Impact.”&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.flutrackers.com/forum/showthread.php?t=3546&quot;&gt;A flutracker page&lt;/a&gt; also has The Grim Reaper by Louis Raemaekers and scanned charts from Kansas 1918&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldwar1.com/tgws/rel002.htm%5D&quot;&gt;It All Started in Kansas&lt;/a&gt; by David Brownm an article from Washington Post Weekly Edition Vol. 9, Num. 21, March 23-30, 1992&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ssCrJ-SVQHI&quot;&gt;Squirrel Nut Zippers - La Grippe&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Ebola Report to Africa Open Data]]></title><description><![CDATA[As part of the EbolaMapper project, I reported on the state of the ebola open data landscape to the Africa Open Data Group.
That report is…]]></description><link>http://tigue.com/report_to_africa_open_data/</link><guid isPermaLink="false">http://tigue.com/report_to_africa_open_data/</guid><pubDate>Thu, 04 Dec 2014 08:00:01 GMT</pubDate><content:encoded>&lt;p&gt;As part of the EbolaMapper project, I reported on the state of the ebola open data landscape to the Africa Open Data Group.
&lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/AODG-Report-1-from-John-Tigue&quot;&gt;That report&lt;/a&gt; is currently the best overview of the EbolaMapper project, including its goals and deliverables
i.e. open source tools for visualizing epidemiological outbreaks via &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/Outbreak-Time-Series-Specification-Overview&quot;&gt;the Outbreak Time Series Specification data APIs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a title=&apos;the state of government open data&apos; href=&apos;http://index.okfn.org/?utm_content=buffer1e3c2&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsTAAALEwEAmpwYAAACoElEQVQoz0WRy08TURTG519wx8a4Up5KgBhi4k4SExOjO9gQXSghURdEibAROp1pS1ugiREooaQobS1NaTvT58zcezsd+i5VFGzKo/YpLS+Rhy51BJHkbM7J+X3fyXew9WhtKtI07jMZvKTSw3pT3/WxTTkT1kBBCspm7qHFd3fDdvOAaj2irh07Gg6p5kOq5YBqOaSasEysNh1t1AETF3jkDvRK2JIMZglUJtg07pzXufoYGj+iW3866nYdNypU25Gj4dhe88t+Zd/RjCWE+sWF6o9C/WfhKu3tHGKTBPpGwpyCW1XT3e656g2uPxcdW7O3xwQqGouk7U9WOFWKkWzrrmNIuMQFLocCF6y+DtybEjGxpGhzhI3amefjZrne+JILSp3MO18wHfYYd7W3isbHWWPX0lQHxrB3BL7ZALrVLE+ibRn8KoM53F/W2kBxaWGpsOdyekKqztD8TCwMUp623OTF/cnG36+r7JYRbJRbdMPBEWdI4lzHQZFEBTnMDsJCjLb90JLLS4nKcjxlnUoOdWnfcxa+ywieInrGbVAoXUlMArcIUFDR0bfuYTM7J2fTErCFBzZNY1PCi/bgcE84nkyEIrP+T6/QzhCXJNGGxsZrKF4xjzAxWxLlZSDvZ/rzocaV8G0D0uGgTPClAb4y7QoGfXSk94FSjAPlSZgnYGmYSegdsyorxMRe5HFYnEYrH/x9+/Eqe0A9AHYVMCNhs/p4aW20xzOpGeWzJMiexknAIsll3rATZzAqa5hgea7OxzwToz4Z5iSgMCFkcuZ7Wg8rR6UTUjTPSmFFDQJuVPMPHkB7JvfEF+t9glsVDzvbK4gOGhQ+ccuT51WUgbSSC53DFkqu81CD/h3xW//3ZLBAgBIJTrVyZ6J/dUWPPxIY5aYplkpNAAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;the state of government open data&quot; title=&quot;the state of government open data&quot; src=&quot;/static/53f37e5ed37a9b76a4aff38531810abf/b8ccf/africa-openness-by-okfn-org.png&quot; srcset=&quot;/static/53f37e5ed37a9b76a4aff38531810abf/1abb1/africa-openness-by-okfn-org.png 250w,
/static/53f37e5ed37a9b76a4aff38531810abf/7217d/africa-openness-by-okfn-org.png 500w,
/static/53f37e5ed37a9b76a4aff38531810abf/b8ccf/africa-openness-by-okfn-org.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The project name, EbolaMapper, has become misleading as there is nothing ebola specific about the project (although ebola data is used for testing).
That name was chosen during the ebola outbreak in West Africa before the project’s scope expanded beyond just a specific ebola crisis.
So, a better name is needed to go with the description “reusable tools and data standard for tracking infectious disease outbreaks, with the intent of helping to modernize the global outbreak monitoring infrastructure, especially by decentralizing the network.”&lt;/p&gt;
&lt;p&gt;(When the project started, there was a serious dearth of open data on the crisis.
The project eventually outgrew the immediate need of curating data on the outbreak.
&lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/AODG-Report-1-from-John-Tigue#survey-of-the-webs-ebola-2014-outbreak-data-and-visualizations&quot;&gt;Eventually&lt;/a&gt; the UN started publishing ebola statistics,
and independently &lt;a href=&quot;https://github.com/cmrivers/ebola/&quot;&gt;Caitlin Rivers’ efforts&lt;/a&gt; seeded the open data collection effort.)&lt;/p&gt;
&lt;p&gt;If the report is &lt;a href=&quot;https://en.wikipedia.org/wiki/Wikipedia:Too_long;_didn%27t_read&quot;&gt;tl;dr&lt;/a&gt; then perhaps just check out &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/Gallery-of-Ebola-Visualizations-Found-Across-the-Web&quot;&gt;the interactive Ebola visualizations&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Nat Geo uses a pictorial calendar for ebola visualization]]></title><description><![CDATA[National Geographic sure knows the power of good visuals. Their ebola tracking report has one particularly neat yet unusual view: a…]]></description><link>http://tigue.com/nat_geo_ebola_tracking/</link><guid isPermaLink="false">http://tigue.com/nat_geo_ebola_tracking/</guid><pubDate>Sun, 16 Nov 2014 01:10:02 GMT</pubDate><content:encoded>&lt;p&gt;National Geographic sure knows the power of good visuals. Their &lt;a href=&quot;http://news.nationalgeographic.com/news/2014/09/140925-mapping-the-spread-of-ebola/&quot;&gt;ebola tracking report&lt;/a&gt; has one particularly neat yet unusual view: a graphical calendar of 2014, one map per week.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://news.nationalgeographic.com/news/2014/09/140925-mapping-the-spread-of-ebola/&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACRklEQVQozz1T127cMBDU//9GHgP4LQUB8uCnFNhOXGM7Z19ToaSTRBVKVJ3M8nwhQGi5s9wyHHnGGIS+j6Yx0EUBpRS6rsMhTZDnOdq2hQpD4g2qskSsInTWIk0SZFnmYgWv6xpVVcIb+x7+3yeUdGgGv1z/gp1m6M0r1H6HYRgQ3VxBVzW67AD/7trh+eoRarvGSFsRL1isyzN4PRNaVpznGVhmtFXFoAk9Ox/plzXbDuM4OHtsDRYxphFD19I/Op98ZXkVE2SFJj7CDtzy5Rg5K/Y8S6DpB4zstKfd0p6YvCUmuKOisy5OcM+aBvv7G5QEdBRgd3+LjkDy/Adx4KNlp7urn9CCB3sXK8nU3W9HiSXH+8sf0EIZ4z3ME8rNCqbtsJgaxXqFia3byIdOlBujIl+GXS+VRvHyBBneblfQ/o40LahuL4/3iXuOD+FJErOKnBdyeVonXHwneyDv7TC8+ZdTwJFDGcnJwhxlE8cx0sMBKoqOsqE/ppTSQ+akklJOTlZiMy5NUyS8I1yWvO+NTYXw0xlKEmtXDwi/fkCUF9ivX13SoS6hzt4hoFYjFg43a1g2k398D//iG6IsR/C6QsmRzdMdOZRueUlk0xQ5ulRBBpZX1Vofp8liTL11I5fy+iKR4oCRW5ZMUbNDzHxlw1eq+tH9ETlbrllJJCQvWTNQRhHZCG7ezo5DZjeMaakSY1r3p0guryEn/vkXhBwn4rOHuy1aCjr5fo7g+RFBpNyYgp+24PH5ZwQPtwhUjHC7+Y/9A8QQkmzWx3GPAAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;nat-geo&quot; title=&quot;nat-geo&quot; src=&quot;/static/516d3ea6a2b76535b603ff3804e8b255/b8ccf/nat-geo-calendar.png&quot; srcset=&quot;/static/516d3ea6a2b76535b603ff3804e8b255/1abb1/nat-geo-calendar.png 250w,
/static/516d3ea6a2b76535b603ff3804e8b255/7217d/nat-geo-calendar.png 500w,
/static/516d3ea6a2b76535b603ff3804e8b255/b8ccf/nat-geo-calendar.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[HDX has the best ebola dashboard]]></title><description><![CDATA[The Humanitarian Data Exchange is doing great work and they have a well defined road map they are plugging away at. The sub-national time…]]></description><link>http://tigue.com/hdxs_ebola_dashboard/</link><guid isPermaLink="false">http://tigue.com/hdxs_ebola_dashboard/</guid><pubDate>Sat, 15 Nov 2014 23:01:26 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://data.hdx.rwlabs.org/&quot;&gt;The Humanitarian Data Exchange&lt;/a&gt; is doing great work and they have &lt;a href=&quot;https://data.hdx.rwlabs.org/about&quot;&gt;a well defined road map&lt;/a&gt; they are plugging away at.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://data.hdx.rwlabs.org/dataset/rowca-ebola-cases&quot;&gt;The sub-national time series dataset&lt;/a&gt; hosted there is the first data feed I am using to test &lt;a href=&apos;https://github.com/JohnTigue/EbolaMapper/wiki/&apos;&gt;EbolaMapper&lt;/a&gt; against.&lt;/p&gt;
&lt;p&gt;They have a very nice, interactive &lt;a href=&quot;https://data.hdx.rwlabs.org/ebola&quot;&gt;ebola dashboard&lt;/a&gt;. The story of &lt;a href=&quot;http://docs.hdx.rwlabs.org/a-new-ebola-crisis-page-built-with-open-data/&quot;&gt;how the dashboard came to be&lt;/a&gt; is impressive but I want to work to make that tortured path not have to be traveled for future outbreaks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://data.hdx.rwlabs.org/ebola&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACVklEQVQoz2WS228SQRTG9x/2ycQH9UHT2Acf2gdTE0RsgV6i1dq0jUrFimjpcllg25Jy2+3CXrjTkhBhF9jPMyMIppN8OXP5zXfOnF3hRSiM5d0PWA2F4E0k4RVFrMUl/PgexO/wA/TE5+jmXsM0K7DMKup1A6alQzcquLi4hKFX0G7VSHUUrvIQXm2u4P7SUzz2rcOXkrihJ55EMBZB4XQV/f1HsKIBaLoBpZBHMX8FpVRERVOhKiUUaU+ldbNhodOuQ1h7dg8Pl5fwxB+ET0rDI8bhjSfgSaTwUkwjcrKBbtYLvXqOknaNdO4CRTWP2LmM3ZgI389THKRSsHSNGA3Cm719rLx9h7UvIayfiQjQs1n0U6V+MvaKEj6lIziWU9jJyNhJZ7AnywhS8oCUwVZWxnYmi5PLHL5RFGL0lM3QMd5Ho1g/OMRuJIItMt84OsLO1zACFH2Hn/FRTCBpmDirVLniVZ1EsfJXv641nJZVCEPHwYDJtjEcjeZxus/mjLF5nO8zjmvGTSXAddFoNGAaBlrNJjW2zdc1y4I7mWBxOHTB0HXUajX6CA366ia6nQ6qVGmv1+OMYFMWiy53u12uJpny+c0NB1xKyMRGm5L1+33c3t5Cnxq3Wq3/OIFlZYfMRFVVyNTwcrlM/515x1BRFM4yE0mSkM1miS3NOVYhm4zHYy6HquVPY/0a2ncMJ9SCwWAA9qrRyOFyqK/seMYIiz1iW/ZoAmdMptS+yRRyMb8wWxPGZTN27P5LzitkG0M6ZWajyawi926FFO0pNyaOaZFj4w+nBmmRKwAEsAAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;hdx-dashboard&quot; title=&quot;hdx-dashboard&quot; src=&quot;/static/b94fe40712e2bfb80baa5f8a2045ed92/b8ccf/hdx-dashboard.png&quot; srcset=&quot;/static/b94fe40712e2bfb80baa5f8a2045ed92/1abb1/hdx-dashboard.png 250w,
/static/b94fe40712e2bfb80baa5f8a2045ed92/7217d/hdx-dashboard.png 500w,
/static/b94fe40712e2bfb80baa5f8a2045ed92/b8ccf/hdx-dashboard.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;They do not have case mapped to locations over time. For that &lt;a href=&apos;/by-time/2014/11/13/nytimes-the-pace-car/&apos;&gt;The New York Times is the best&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Quality ebola data; shown in Google tools]]></title><description><![CDATA[I have finally found quality outbreak data with which to work: I came to this dataset via a long, convoluted hunt. The difficulty of this…]]></description><link>http://tigue.com/googles_public_data_viewer/</link><guid isPermaLink="false">http://tigue.com/googles_public_data_viewer/</guid><pubDate>Sat, 15 Nov 2014 20:55:42 GMT</pubDate><content:encoded>&lt;p&gt;I have finally found quality outbreak data with which to work:&lt;/p&gt;
&lt;blockquote&gt;Sub-national time series data on Ebola cases and deaths in Guinea, Liberia, Sierra Leone, Nigeria, Senegal and Mali since March 2014&lt;/blockquote&gt;
&lt;a href=&quot;https://data.hdx.rwlabs.org/dataset/rowca-ebola-cases&quot;&gt;The dataset&lt;/a&gt; comes from &lt;a href=&quot;https://data.hdx.rwlabs.org/&quot;&gt;The Humanitarian Data Exchange&lt;/a&gt;. Those HDX folks are doing great work. More on them later.
&lt;p&gt;I came to this dataset via a long, convoluted hunt. The difficulty of this search has led me to understand that the problem I am working on is one of data, as well as of code. This will need to be addressed, with APIs and discoverability but for now it is time to move on to coding (finally).&lt;/p&gt;
&lt;p&gt;After I concluded that the data was usable, I started poking around on its page on HDX a bit more. On the left side of the page there are links to various visualizations of the data. This is how I discovered &lt;a href=&quot;http://www.google.com/publicdata/directory&quot;&gt;Google’s Public Data Explorer&lt;/a&gt; which is quite a nice tool. Below is one view of the HDX data in the Explorer. Click through the image to interactively explore the data over at Google.
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.google.com/publicdata/explore?ds=eq10po6kah9si_&amp;amp;ctype=m&amp;amp;strail=false&amp;amp;bcs=d&amp;amp;nselm=s&amp;amp;met_s=cases_cum&amp;amp;scale_s=lin&amp;amp;ind_s=false&amp;amp;ifdim=district&amp;amp;tunit=D&amp;amp;pit=1412892000000&amp;amp;hl=en&amp;amp;dl=en&amp;amp;ind=false&amp;amp;xMax=-5.891764156250019&amp;amp;xMin=-18.94352196875002&amp;amp;yMax=4.0345925292218&amp;amp;yMin=11.99141057995339&amp;amp;mapType=t&amp;amp;icfg=eq10po6kah9si_%253A2%253Adistrict%26%264:-71:-40:%7Ceq10po6kah9si_%253A2%253Adistrict%26%2611:24:-45:&amp;amp;iconSize=0.47&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACjElEQVQoz3WT247aVhiFeco+SW/zBL2MIlXKTRspaRQ17Uw4OWjGIRyHkw/Y2AZjczYDk0xHA4FSjL7+MIk6F+nF0t5blr69/rW8E6XejpQZ87Z2T7bURL0qYzgmllPF7uq4fRfTL+OPi0zmfa4/jfBDm/HMZ3odEi1GLJYRQegznoQkLtwDSQFmrQPPckvymovWaZGsGfTHHl7YZjTpCWxEdB3ghh7DiUc48pgtQqbzQPauGGgRyJpQvQOpdkxKW5FsbXhx6fM8+fHkrKxXKDRU8tUCJUvng65h+Q690KHjaSeHU7lkvhwyv5ELFwMBisPjyO9qN2Tq1zx53eWnNwrtTp13H3K8UdI8+TXDs7TKS/WSUdTD61s4Esd47gloeFIkbqPlN2D7QNaGjOjcgJI3YxBZ5M0Gv+RyFE2Fp0oB3clTNMqUmtUTsNNt0tSrtIwapt2SsbVvwJiMKN3ekzb3vG1sUYxbaq5Fw7nE7qtcuRVS9RJNt0hbQMHQleycU26dboN620Qz64+AUkq6fVR80p86nDW3JCs6Pzy94GdFpdapyFmlYTdYStvT5QQv8CSeJt2+Le13HgMfoCd9PR/Br8orfvxtyO+FEu8L5+RrCi1xa3p1vGFTMvXFbVdKMplEwX8ZPsDiR3oAZ+0DuQ4o1gY9NLAHRYygTM0po3sZpguHxac+s3mPqRSWuHTjU8sPjg7f0fH7nj+0A2fahqLjUXU+YvTkZx8YdCXLVn9G3l3x3vpCouLvUe01F9Za3MQo35N1XI+FxZzrMpF+x1V3QMEcc1Yek6pGpBp/kW3dkvCDITef79juYlabHevNP/+v7Y4vovtNzN06Zv038moWTCZj9rstm/WKfwFxCkg7HgfsdQAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;google-pd-viewer&quot; title=&quot;google-pd-viewer&quot; src=&quot;/static/973d6b9f166c1f5ebadb1ba069c5b0e0/b8ccf/google-pub-data.png&quot; srcset=&quot;/static/973d6b9f166c1f5ebadb1ba069c5b0e0/1abb1/google-pub-data.png 250w,
/static/973d6b9f166c1f5ebadb1ba069c5b0e0/7217d/google-pub-data.png 500w,
/static/973d6b9f166c1f5ebadb1ba069c5b0e0/b8ccf/google-pub-data.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also among the visualizations on the HDX page was, to my surprise, &lt;a href=&quot;http://ebolalobe.com/2014/11/nytimes-sets-the-bar/&quot;&gt;the NYTimes visualization&lt;/a&gt;. Low and behold that visualization credits their data source as the HDX:&lt;/p&gt;
&lt;blockquote&gt;Source: United Nations Office for the Coordination of Humanitarian Affairs, The Humanitarian Data Exchange&lt;/blockquote&gt;
So, that is good enough for me: the data hunt over. It is time to code.</content:encoded></item><item><title><![CDATA[MissingMaps.org and the long term solution]]></title><description><![CDATA[The Economist has a story, Off The Map, about the launch of MissingMaps.org which is a development out of OpenStreetMaps. OpenStreetMaps is…]]></description><link>http://tigue.com/missing_maps/</link><guid isPermaLink="false">http://tigue.com/missing_maps/</guid><pubDate>Fri, 14 Nov 2014 07:48:28 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.economist.com/news/international/21632520-rich-countries-are-deluged-data-developing-ones-are-suffering-drought&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACyElEQVQozyWTbW/bVBiG8+eZBkxsEhKaNITGVIZgI2mbdm2TuG1e7cSOY/vY5/g1dpKmXSmV+AcXT8SHW7K/3M/9dlpHwxG/jyd8HE04Gt5S5zFftU1thmwbzfPXhn8eappqxd/3mu2mRpuYzESEsWIwGjFfusxcR/5DWj8PLLqux1+2w4vOMYvIYxPO2W9iNhvF437N031FrEPywmBMgkliTOxxf9+gUs3FzTXO0uP5+YnW9yenvDk75/XZGd8dn+DFKwpvytM+4uEup2ky6ialMAFxtCLTkZAp0tgW1QV1VaLjmKoseNg3tA4kB/xw2uWVwFm57MKpkBmqOmUt2O9yUmUTeDaJ8oljsevfkIQORrmEwRSj56SC1redE46uLd50z3gliJXHY75kuyuo1oYsU3K5EIWSkT8WEpeVOIhWY/LMECcBafH/0fttTuul5Pb28pJfrT6/9HusF0OqcMA6nfK4DtkWPk0hVtUYbz5Eqzn+4hYtOapEi4CIQCXipmB/V0qGYvd1t8vb3hXWdY+nVMLeZcRZjtaGIvV5qCPyfpvFjSW4ZDm7FOKENEklzwOhQRktlqXlb9odfjy/4HOvh3X1hYXSFOsSNy6xox1uUvIks6n/fI8KVniLBXb/HH82wYQBXqBw/JBaFtCUKa133TaT8Sm3VptP/SGTqMFRtZBtmMm3LnLZ4Ro1uMQPfFGjmHseq2GPMg8IdCo5RmzrnF1T0PKlrX/LYwr3PccXJwyWBYHZM1c7RisjLRvudg22yvFNRWRyUZ/ieY5kOZWtaqpC7Ms+Kzne+jg4Jlj+QaVPWE4+89OFRd8ztCc+p/aMM2cqajWLUKArFkkhWzV4SkpZ2ITODa5jy2yUtK5pvegcSvnCp2EHM/0NazLgw82Ed1cX8uzklYhdaxlwPp2zFIVzIXSTDC/JCbOSlWR6KCtbOpQm5D/kyS7h8pRpXgAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;osm-of-monrovia&quot; title=&quot;osm-of-monrovia&quot; src=&quot;/static/a73e0eb0872cc63dc714761d9a9ae07f/b8ccf/economist-on-missingmaps.png&quot; srcset=&quot;/static/a73e0eb0872cc63dc714761d9a9ae07f/1abb1/economist-on-missingmaps.png 250w,
/static/a73e0eb0872cc63dc714761d9a9ae07f/7217d/economist-on-missingmaps.png 500w,
/static/a73e0eb0872cc63dc714761d9a9ae07f/b8ccf/economist-on-missingmaps.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Economist has a story, &lt;a href=&quot;http://www.economist.com/news/international/21632520-rich-countries-are-deluged-data-developing-ones-are-suffering-drought&quot;&gt;Off The Map&lt;/a&gt;, about the launch of &lt;a href=&quot;http://missingmaps.org&quot;&gt;MissingMaps.org&lt;/a&gt; which is &lt;a href=&quot;http://wiki.openstreetmap.org/wiki/Missing_Maps_Project&quot;&gt;a development out of OpenStreetMaps&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;On November 7th a group of charities including MSF, Red Cross and HOT unveiled MissingMaps.org, a joint initiative to produce free, detailed maps of cities across the developing world—before humanitarian crises erupt, not during them.&lt;/blockquote&gt;
I mention this here for multiple reasons.
&lt;ol&gt;
&lt;li&gt;OpenStreetMaps is a great resource and &lt;a href=&quot;http://hotosm.org/&quot;&gt;HOT&lt;/a&gt; has been active with the ebola response. OpenStreetMaps is the source for maps in the EbolaMapper project I am working on.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Although the current focus is the ebola outbreak, these open source tools that I am calling EbolaMapper can be easily repurposed for any future outbreaks, as they read their data via the generic &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/Outbreak-Time-Series-Specification-Overview&quot;&gt;Outbreak Time Series Specification Overview&lt;/a&gt; APIs I am developing. Next time (and statistically that is likely to occur before 2020) there should be free, quality tools at the ready for people to quickly get started on outbreak monitoring without having to wait for large organizations to mobilize.&lt;/p&gt;
&lt;p&gt;As I have gotten to know some of the folks who have been involved with responding to previous epidemic outbreaks, they sound like they are living through a nightmare version of Groundhog Day (Swine flu in 2009, SARS, etc.). Yet now this type of problem can be solved generic, mature, widely available Web technology i.e. it does not require complex novel technology that needs to be scaled massively. (On the other hand, we do need to be mindful that currently in Liberia “less than one percent of the population is connected to the internet.” [&lt;a href=&quot;https://news.vice.com/article/how-cell-phones-could-help-liberia-win-the-fight-against-ebola&quot;&gt;Vice News&lt;/a&gt;]). &lt;/p&gt;
&lt;p&gt;With the current established culture of open source it would be shameful for this type of flatfooted, delayed response to occur again. We have the technology to enable local actors to immediately get started by themselves the next time there is an epidemic outbreak.&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;This is a perfect example of one way that funding in this weird space can be successful. Folks (private and public) trying to effectively allocate money can find open source and/or open data projects that are already working and then juice them with cash for scaling, which is always an aspect of the large success stories in open source.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is a bizarre but exciting variant of the thinking of Steve Blank and the lean start-up folks as applied to open source business models. I say bizarre because the customers (those benefiting from public health and disaster relief projects like the ebola response) cannot pay and have no obvious monetizable value as users. Here the open-source community has found a successful model and now that it is proven out the funding organizations are providing the cash to accelerate tech development to scale, where normally that cash would come via a series A round with venture capitalists.&lt;/p&gt;
&lt;p&gt;In many successful open source projects, tech companies are paying talent to produce code that will immediately be placed in essentially the public domain. The value of doing so is expertise status with paying customers and keeping that scarce talent in-house to service those customers.&lt;/p&gt;
&lt;p&gt;As &lt;a href=&quot;https://twitter.com/pmarca/status/478335427376869378&quot;&gt;Marc Andreessen quipped on twitter&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&quot;The best minds of my generation are thinking about how to make people buy support contracts for free software.&quot; --Anonymous&lt;/blockquote&gt;
But who is going to do the funding in disaster relief contexts, specifically for the maps and do so proactively? So, this is MissingMaps.org situations is great news.
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;This blog loves a good map visualization related to the ebola response. The &lt;a href=&quot;http://www.economist.com/news/international/21632520-rich-countries-are-deluged-data-developing-ones-are-suffering-drought&quot;&gt;Off The Map&lt;/a&gt; story has a neat one. In the above picture the red handle can be dragged left and right to see the before versus after map.&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title><![CDATA[Rosling on which stats matter]]></title><description><![CDATA[Hans Rosling was recently interviewed on the BBC’s More or Less. He was doing he regular excellent job of entertainingly engaging the public…]]></description><link>http://tigue.com/rosling_on_stats/</link><guid isPermaLink="false">http://tigue.com/rosling_on_stats/</guid><pubDate>Thu, 13 Nov 2014 23:43:45 GMT</pubDate><content:encoded>&lt;p&gt;Hans Rosling was recently interviewed on &lt;a href=&quot;http://www.bbc.co.uk/programmes/p029twnn&quot;&gt;the BBC’s More or Less&lt;/a&gt;. He was doing he regular excellent job of entertainingly engaging the public via statistics. The full interview is less than ten minutes. The BBC also did a &lt;a href=&quot;http://www.bbc.com/news/magazine-30011521&quot;&gt;write up of the interview&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bbc.com/news/magazine-30011521&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAADYElEQVQozy2SfUzUdRzHf3DAHWDeLqYgWBxunabNuTkQCnMOH3JrZVmbUtkpIiyDmOwC6nR4lhQrw3ZKdKWFjcUQOjAQOJ7uhO7izoOTJ28XPhDIcXdqNbdq/PHq29Uf7+37z/f1eX/en7fU51mgfyyAdTyIbTLE1akQg0K2qSD2X37nsn2aQ0WVQicwD01j8z2kyxOkfSSI2RkQ8mN2zdPsnKPR8SuSdTzA0I3Q/xIQIYfvHs6bD7CN3+XVfW+RpHqMNFUKOVk7aOgcwer9g67RIJ0C3OYK0Ory03ptnqafZ5GGhJN+zyw/TfkZ9oX+A3nu4PIFudg2xNG8Co4dKcNo+JiDu3M5dsqEe24RiydAz3iIrrEgHaMB2gTw0vAcku36LG2WCc63eugX8G8uufjgvW8xVrdgMNSzZ9cBKkv0VJa+T0FuKaa6ZtwzD0UkIfon72MZv8cV4fSy20+LWFvqcc3Q3D1Bk3WGs80edEVfc/gNIyWF5ynJO0PeCwV8WKyn+t3jGPU1WNptOG89EDmL7N3TdLpu0z0WEi4XwllKA6PzdNi83L77JzUNoxQfMlKgraVQW8fJ8ib0B/WcyC+l3nCaRpOZSf8i3oVFHN4FhifEduJQPeKwlusBfhwRQIc3SI/7DjdmfqPLHaTonQsU55soyjOyf6+e57cfoaqwnNrjNZRV1FFx6gu+bOzlu5Z+7APX+KrBSvdIgF4B7XALoG0iIOoSoOn7TpyOKUrK6tCs2UayOp3ImEdZnVXKK29+jrbgE3a+/imSJAnFkZ6xE9/VYc6YusPAPo+fK/8C7d771NX+QNWLeynfd4CU1PXIlyQRuzSF6FgV67O0PJdrZIV6K6maHOQxccgiY0lL1TDYYeVc/QB9IsNe0eV2p+jh4K2/0b19mrKtL7N59QYxPZo4hVJ8fES8I0hVZ7Jth44ViRtITs4QsGiiZAoeT0nDYu7hgv4jLlYYsDpnsd/8C2m/rhrNui3sWpPNRvWTAhKDIiae6KhYIiQZiYlreSb7MMsS1pGQoCEyIioMTE5SsznzWV7btJ2TOS9RpfuMo4azSErlE8jlKpYpl6OIViCTyVHI44XD+LAb5dKVbMrMZ9XKjSiXLCciDIwRwyLDeapVarQZe3h67RbSn8rmH7W7bBa/fTCWAAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;rosling&quot; title=&quot;rosling&quot; src=&quot;/static/cb291d86d1811e5acb08555e2e3b7e8b/b8ccf/rosling.png&quot; srcset=&quot;/static/cb291d86d1811e5acb08555e2e3b7e8b/1abb1/rosling.png 250w,
/static/cb291d86d1811e5acb08555e2e3b7e8b/7217d/rosling.png 500w,
/static/cb291d86d1811e5acb08555e2e3b7e8b/b8ccf/rosling.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Rosling reported that in Liberia at the peak of the outbreak daily infections were about 75 per day and are now stuck at around 25 per day. He believes the current (second) stage of the outbreak could well be labeled as &lt;a href=&quot;http://en.wikipedia.org/wiki/Endemic_(epidemiology)&quot;&gt;endemic&lt;/a&gt; , an intermediate level epidemic that will take some time to put out.&lt;/p&gt;
&lt;p&gt;A statistic that he says is important is &lt;a href=&quot;https://www.youtube.com/watch?v=sYVUs2_F5Kg&quot;&gt;the reproductive number&lt;/a&gt;. At the peak of the outbreak it was almost 2.0; currently it is closer to 1.0. The point is that the reproductive number is a key stat that needs to be tracked.&lt;/p&gt;
&lt;p&gt;Later, five minutes into the interview, he has a go at main stream media’s reportage, specifically the use of cumulative numbers:&lt;/p&gt;
&lt;blockquote&gt;It is a bad habit of media. Media just wants as many zeros as possible, you know. So, they would prefer them to tell that in Liberia we have had about 2,700 cases or 3,000 case. The important thing is that it was 28 yesterday. We have to follow cases per day.
&lt;p&gt;I can take Lofa province, for instance, that has had 365 cases cumulative and the last week it was zero, zero, zero, zero every day. That is really hopeful that we can see the first infected [county] is where we now have very low numbers because everyone is aware.&lt;/blockquote&gt;
Notice that &lt;a href=&quot;http://tigue.com/blog/2014/12/03/nytimes-the-pace-car/&quot;&gt;the NYTimes ebola viz&lt;/a&gt; uses cases-per-week. We can build out visualization tools which provide a similar level headed overview of a situation, which might even help to reduce anxiety in the public compared to cumulative-cases representations.&lt;/p&gt;
&lt;p&gt;Take away: the two statistics he pointed out, cases-per-day and reproductive-number, will be visualized in this open source epidemic monitoring dashboard tool set being built out here.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[NYTimes: the pace car]]></title><description><![CDATA[The New York Times’ ebola visualization sets the bar for high quality interactivity.  That makes sense as Mike Bostock works at the Times…]]></description><link>http://tigue.com/nyt_is_viz_pace_car/</link><guid isPermaLink="false">http://tigue.com/nyt_is_viz_pace_car/</guid><pubDate>Thu, 13 Nov 2014 22:39:47 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.nytimes.com/interactive/2014/07/31/world/africa/ebola-virus-outbreak-qa.html&quot;&gt;The New York Times’ ebola visualization&lt;/a&gt; sets the bar for high quality interactivity.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.nytimes.com/interactive/2014/07/31/world/africa/ebola-virus-outbreak-qa.html&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACC0lEQVQoz21Ta4+TUBDl//8KY0z8ZIwxmmjcqLFq7aZsd21taQtL4VLoiwKFLn3Q48wst2rjJJNcYObMOecOxnQ6RRiG8H1fsigKHI9HzOdzxHGM0+kEHWVZguvX67XU8fNlGNy0XC4RRZEAbzYb7Pd7eZfnuRTtdjsBWSwWCIJAQJVS0sPvkySRPsYymM3hcBBWOrnQNE0p5Ci2W2Gv1fB3Tn7WqWgQ1xjcwLI0WFVVwijLMmGqI01TaQyoKSB2UwJmcMuy0O/3EdbDjIQK2Y+/40SgRbz6xzu2IJy4UJMJ3NEQPp2174qH1FYYWzb34QHV8YA9ndX1Dzgfr+C1mig3mQAyc2Yb+x7urj7AfP8O3e/fYPW6cF337L/yvEfJEsSqJGPzKMTMHqPztYGC2MsnsiRSPm7fvkHz6RPcNhr42WphSHJtSmFI6dLZYK8yBrqQfdDy67VhG9KAvBuPMSV5brcLTwAHGJOH3cYXjDs3MHIGo8zo+ksCz2czhB0Td8+fYTm0zmBnf+sLCkie/asnt+vRkPvRiLwd/ZFckUfsYZkmCGnqNfmU0xBcMNWxpU3off4E8/UreI4DRR46LJmX938bX+z20BB8w81mE+12+7GWwBNS45HUm5cv0CbgwWAA37FhpPXaMAPOim70xDtJjLVUXnCHWNi2LYCr1Ur+Ch1smXLvEZFdvwGIzIh1X35mOgAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;nyt&quot; title=&quot;nyt&quot; src=&quot;/static/d71507a47df516168b60866000061542/b8ccf/nytimes.png&quot; srcset=&quot;/static/d71507a47df516168b60866000061542/1abb1/nytimes.png 250w,
/static/d71507a47df516168b60866000061542/7217d/nytimes.png 500w,
/static/d71507a47df516168b60866000061542/b8ccf/nytimes.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That makes sense as Mike Bostock works at the Times. He is one the creators of &lt;a href=&quot;https://github.com/mbostock/d3&quot;&gt;D3.js&lt;/a&gt; which is the open source engine behind most of the gorgeous data-driven visualizations on the Web these days. If you have not yet seen it, &lt;a href=&quot;https://github.com/mbostock/d3/wiki/Gallery&quot;&gt;the D3.js examples gallery&lt;/a&gt; is a whole lot of eye candy.&lt;/p&gt;
&lt;p&gt;Take this outbreak visualization as confirmation that any open-source white label outbreak widget should be based on D3.js.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Tweets about deadly diseases]]></title><description><![CDATA[Graphs ‘N’ Waffles is a twitter feed that delivers just what the name implies. This recently tweeted graph is worth a gander. That is quite…]]></description><link>http://tigue.com/tweets_about_deadly_diseases/</link><guid isPermaLink="false">http://tigue.com/tweets_about_deadly_diseases/</guid><pubDate>Thu, 13 Nov 2014 20:33:15 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://twitter.com/Graphsnwaffles&quot;&gt;Graphs ‘N’ Waffles&lt;/a&gt; is a twitter feed that delivers just what the name implies. This recently tweeted graph is worth a gander. That is quite an uptick the blue line took.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/Graphsnwaffles/status/532287187044536323&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABiklEQVQoz52S207CQBCG+/6v4a2Jl3qnwSAeOQRFoMXaQAv0sLtlW8GefqdLOZqY4CaTmfw7+WZ2ZjWceIqiUJ5FCdIs32obXfsvcOTGyPLiAFjaycC8AvYdCdOLN1W296cDq64eRhznT9OqCBCvEiyXyx2w2Kvy+5m7nA3wnoBn9ckaSLOcjW14rgdt//0b6LG2r+8/+eJlivArBakYuxZs2153+BfoGKo6pJjFCVpWiPowULoQkkxAy/Ny9QXSNFP+rxN9Z9vYdjhmvsQHWx3kaBPTh6W7MHoOJmYAfybhWAyuE4J7ERhtsvTeNMTVk4NPWyIUKzzeGWjWdTQaJpZVIfVtTP0No+ErjLcWLHOAkfEO3ehh2OtAH3RhUKxT3LitodXt4KHZxmX9Gdc3NfTbDXSaz1jIaAdkwgUnC8hCGSDgcwjpg4cexMJfa3QnVyGYmCOKA9IpNwpIW2ARM5prugOmSaYGnaU5rZ+GTyNNklSNs9RUYo7tfZZVnmbOmcB87oFzrhZSnh8gE6FyHJ9xlAAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;graphs-n-whaffles&quot; title=&quot;graphs-n-whaffles&quot; src=&quot;/static/19b86942324e3710d8a0d3c1d94f78da/b8ccf/graphs-n-whaffles.png&quot; srcset=&quot;/static/19b86942324e3710d8a0d3c1d94f78da/1abb1/graphs-n-whaffles.png 250w,
/static/19b86942324e3710d8a0d3c1d94f78da/7217d/graphs-n-whaffles.png 500w,
/static/19b86942324e3710d8a0d3c1d94f78da/b8ccf/graphs-n-whaffles.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another ebola factoid was reported by &lt;a href=&quot;http://www.thelancet.com/journals/lancet/article/PIIS0140-6736%2814%2962016-X/fulltext&quot;&gt;The Lancet&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;During October, there were 21,037,331 tweets about Ebola in the USA, compared with 13,480 about Ebola in Guinea, Liberia, and Sierra Leone combined.&lt;/blockquote&gt;</content:encoded></item><item><title><![CDATA[Three interactive ebola visualizations]]></title><description><![CDATA[Visualizations on the Web can be classified as interactive or static. The split is not quite binary; is a zoomable map really “interactive…]]></description><link>http://tigue.com/interactive_ebola_viz/</link><guid isPermaLink="false">http://tigue.com/interactive_ebola_viz/</guid><pubDate>Wed, 12 Nov 2014 01:22:37 GMT</pubDate><content:encoded>&lt;p&gt;Visualizations on the Web can be classified as interactive or static. The split is not quite binary; is a zoomable map really “interactive”?&lt;/p&gt;
&lt;p&gt;I want to produce both interactive and static viz, with hopefully the former being used to generate the latter. SVG is good for exporting static raster images to file or paper. D3.js uses SVG, so interactive D3.js-based visualizations should be able to export excellent static maps and charts (we will see). Some users of this information will be on limited machines so bandwidth-light static info should be readily available.&lt;/p&gt;
&lt;p&gt;I have found very few highly interactive ebola visualizations. Please point out any that I have missed in the comments. The best three found so far are listed here.
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://who-ocr.github.io/ebola-data/&quot;&gt;The WHO’s ebola-data&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;WHO&apos;s Ebola-data viz&quot; href=&quot;https://who-ocr.github.io/ebola-data/&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACuklEQVQoz0WTS08TYRSG59e48xe4MzEuNJq4McaFcasLNm5cuTAmJioGA9YLykUFRI0aryiXghqhwHR6r/QyIL0y7UzLtNMW0cczg+Dizel3vnOenss3yqIaZEkUEH2fnSXg60W7f4enZ07x+eIFImMjlBMJSvEYZmqFSiqFUSyIipRWdbmLUwqH2JiZxJrzoyypGnvQoMaC38/rrnMMnDjCQk83ywIvaEFq2TSVH0nKyQQVw6BWr5PL5Si6voXvVHaBHiy4A11cVlFjCca6zvPw2GG+XL3C15vXMaSKQiRMMRrBymQwyiWMikFG1z2g9XUOa2ZKoFM7wICAAsu7VmU+ECDwbJzL+/fRffAA1kqSXEgjH1SpSJu5Qp6MgIulEsV0itTUJPnpSar+aRQtHCEajxOJxfYUdm0iyYvLlxg7exrd/Xc9iy7QdDhMqVxGX1sjFImyrIVQZYYhTcP8Nofy8t0EPfeG8Q2McPvhE3r7H3vWOz96zstXb4mrMopQ2FucOx4PFAx5dmJ61svpGxil/94QysyXBa73DeIbeoZvcJzeB2MSMCp2lBvi/zw3j9NqY1k16vVNTNOiWjWp1eo4jiPVxen2DXs5tyVf2dra4s/vP7QsCRJtyva2t7fF99vTL7lvNh1JbtG0bdbl2azn8rTbHRqNJp1Ox4vbduMaDRTbbmDbTYryxjRp58dKih3ffzVETQFuSExSBp9eXfN8LtDeta0OK+k0intwKzDlbSVkEZlM1gtqit+7E5Aj1bSB6PAAqiiZXcXetL08V+5v91lVZevKrtOdU+ufHKftgVzZloWVz6PP+pk4eZz5WzfIVy2cf9W1tn5hZHWeHj1E9N0baVkuajLwmmliiczyBsbPn3KW4ecLpD59IDY+QvBuH0vXrhD/+B5D4vc6cCuUZa0vLWLIl/MXPAtAt3REglIAAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;whos-ebola-data&quot; title=&quot;whos-ebola-data&quot; src=&quot;/static/e10e66a21fb63b91abbede8d6f09b215/b8ccf/who-ebola-data.png&quot; srcset=&quot;/static/e10e66a21fb63b91abbede8d6f09b215/1abb1/who-ebola-data.png 250w,
/static/e10e66a21fb63b91abbede8d6f09b215/7217d/who-ebola-data.png 500w,
/static/e10e66a21fb63b91abbede8d6f09b215/b8ccf/who-ebola-data.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.pbs.org/wgbh/pages/frontline/health-science-technology/ebola-outbreak/map-how-the-ebola-outbreak-spread-through-africa/&quot;&gt;PBS Frontline’s map: how the ebola outbreak spread through Africa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.pbs.org/wgbh/pages/frontline/health-science-technology/ebola-outbreak/map-how-the-ebola-outbreak-spread-through-africa/&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAADKUlEQVQozyWSSWgkdRTGq7ureqvuqk71Wr3vnaSXdKfTnYU2mWw6ZhnHNoMOUSIzuMwgwuAGMiiagIILaphR0BzHZVS8eFUQHC+KePA0F7cRFMGDoBcHfr7Ew6OK///V733f90p5fvdxXn3lOQYzOdZXxhiutdm4dQa7MM7Kao9TpzZQAgmufvQ+/968yfL6Fo6ATX+2RzxXxeWzCFo2ViJDvVVE+era53z73TfUm1EWBmXaEzlSpXEKYw1mZjoUxyZQFB/P7r3AG28eyLsTf1h6ChUCsQJ+K8nC4jKT3RZT/S7K/qWXeO/qO4w14nR7BertAk6zQCRdYmmxQa1VRw3E8RoJLLuIFojhNpI49TiamcFvRlE9OsGQTqfbQenMFOjMpVjZbHHL6gSTszma7QzZaoGm3A3mqyTyORzeCC6vJbAEmi4QicG08yTLKVRvgGgiQtQOozT74wyWSpw5W2e4XaExbVNuxsVukhNzRUr1NNnRAj4ri+a3UKU0XeAeEz2copTNkkyGyJdj9KbrKMl8kp2tMZ46P+CxR6ZY3MiR6Wa4c77GtTtmyQjMH80IMC1KQmi+EG6x7fAYjJgRLtSL1NKGZJpg4VgfxU7HOdgd8vreNm89usaXd82ycbrPwglRWynKhxYud1AUGfIMHKlzGzZOt4EVjrDQzqGqGk5Nxx8MytJUnXM7x/lk/14+fXHI7rDF3FqO0ak0its4gqmeQ2AA1TeCKvm5/SMoTh2vFePpc8fY3zvNxSfuYarXlnOZ7DMTnL//Nt7df4BKd1QaE2Rbk3iMuEz2CVQXqCFAyVAGOERpdSTOa2dP8s/1y/z54xX+/uEyP31/RUT4TNleCH0kzfrmNJODBuFcnmi5iZUu49CCRxBVsjvKUGCKS+dgdR4uXuDnD1/m16/f5o/rH/DXjY9RVK8hFkJHv4RTFFjJGNVuDTORxS6mSJVLstkIDlWgXhNN7CsuP6O5Cr89vMMvT97NjYdu5/e9M3zx2TMomig8LPdh2HoMpycs4BjJaoXN7T4rJzvUemUZYItt8/8tSx1ClzMZ7puusdkd58HjXZa2KvwHgC55XfWE+CcAAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;frontline-1&quot; title=&quot;frontline-1&quot; src=&quot;/static/710c5b5bf3c7709272bd8ad276439576/b8ccf/pbs-frontline.png&quot; srcset=&quot;/static/710c5b5bf3c7709272bd8ad276439576/1abb1/pbs-frontline.png 250w,
/static/710c5b5bf3c7709272bd8ad276439576/7217d/pbs-frontline.png 500w,
/static/710c5b5bf3c7709272bd8ad276439576/b8ccf/pbs-frontline.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://healthmap.org/ebola/#timeline&quot;&gt;HealthMap’s Ebola timeline&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://healthmap.org/ebola/#timeline&quot;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACYklEQVQoz41TTWsTYRDeX+PBu6A3f4G/QP+CN8GLFUR7isTisVKwUEqoKK2tYrC9VEyJWE36kaT5dL83+51NNsluNo8zr43UmwPDO/My8+wzz7wrabICufcLfduG47rQNR3JNEE2y5BlGZLJlOIZ2DhP0xQzyufzuXCRky9Mqh9X4PcdNMo/0D6uwrzoIL0EYLO7CoZegISagiBAFEVIkkSAz67UsfG9ZFoWNF2HqqiwiN2EGLm6hernQ2I6FeBxHAsgZsPneDwWzTMCHQ2HmE4myIjtYDAgQNOEYZno1hroVGqw200cbWxBOW8io69OqJjdJkkYyPM80cgW0mSlwnvBdCGHZBoGXBrlrFTGizv3sLv0GNvPnuNk/4toGl9hNyXGvu9jQDmbfFLH161dzClOk1R8+A9DAnUCH9vLOTy6fhMPrt1C4eFTpFQ6pJEYcOEM5uomXEXHkGLf9QQ4j80flCzSkF0nHZ0gRHFtE09u3Mbech7RKEYYhkJDXgg7A37/sA+j1cPh6zdol38KaSKSgSWRVFWFQWADn7QJyKMQWquN4sor0qiPcBCib/UFO56G63mRrOnH/Cq+7RQxSaZCW3aJt+WHEY6qtIxqCx3VQkuz0TY8NHoGRvH4r35cy/HiXBgvhe/4XUp8oTkh7uff4u7SGtb3SnhZOEBu/RNWNg/ghSPRtHjI7Lg8+cHPabvijmsoFoAuUS2824E7JDaUx2mGmP6UOP334f6PCUCbtFrN5aHXLqCdNmA22uK0uzIc2qbVkdGnWKFnIldr0GotESundahnDRjNLlzNgFw5x28wvHnu1dRpOQAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;healthmap-org&quot; title=&quot;healthmap-org&quot; src=&quot;/static/3b98181f0c9fbe4aa39f7f8b7a853fb0/b8ccf/healthmap-map.png&quot; srcset=&quot;/static/3b98181f0c9fbe4aa39f7f8b7a853fb0/1abb1/healthmap-map.png 250w,
/static/3b98181f0c9fbe4aa39f7f8b7a853fb0/7217d/healthmap-map.png 500w,
/static/3b98181f0c9fbe4aa39f7f8b7a853fb0/b8ccf/healthmap-map.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;All three’s features, pros, and cons are analyzed on &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/Gallery-of-Ebola-Visualizations-Found-Across-the-Web&quot;&gt;the EbolaMapper wiki&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Gallery of ebola visualizations]]></title><description><![CDATA[A major goal of this EbolaMapper project is to create the very best visualizations of ebola on the Web. Which leads to the question: what is…]]></description><link>http://tigue.com/ebola_visualizations/</link><guid isPermaLink="false">http://tigue.com/ebola_visualizations/</guid><pubDate>Tue, 11 Nov 2014 20:01:08 GMT</pubDate><content:encoded>&lt;p&gt;A major goal of this EbolaMapper project is to create the very best visualizations of ebola on the Web. Which leads to the question: what is the high bar? [&lt;strong&gt;Update&lt;/strong&gt;: Spoiler, the answer is &lt;a href=&apos;http://tigue.com/by-time/2014/11/13/nytimes-the-pace-car/&apos;&gt;The New York Times’ visualization&lt;/a&gt;.]&lt;/p&gt;
&lt;p&gt;To answer that question I will be curating a collection of links to the best visualizations found on the Web.&lt;/p&gt;
&lt;p&gt;For example, The Economist is doing good work:&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;The Economist: The toll of a tragedy&quot; href=&apos;http://www.economist.com/blogs/graphicdetail/2014/11/ebola-graphics&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACyUlEQVQoz02Ty2sTYRTF58/wH3AlrkRcuxBXuhVcuXGlgrgRRFQQwS58gC5EfIAKIvioglTro9Wqido0z8nMZN6TmSZNk3Rik7RpHj+/b4rghTsfDPOde849Z5TQ1HAcG8uyaDabbG1t4bs2ZcvlyU+PjOEThSFhGBFFkTjDpJeXl6lUKpTLZYqFAkEQJK1YPz5TKOSp1esMBpv41ZBsQaVo2Fx9lebGTA7TC3BMA8/zcF2XarWKbdv4vo+macl7CW6aJoqnq7RWGsiK45hMOs2rtMaDzArv8y5eVKOku2TNkIrt4IvLkolUJBnLAblcjlKpRLvdRmEyJn9viuq3WUZs13fN5+mXPEapgG5UuP98hjdzKRxxWbLx/ABdk6ty0HU9AZdMB4MBSq9e5dL+XczfvQa9mGbqHeuhgxOI6UL+yloHO6qLPeVxBdj0b4eHKZfXC0voaknIDshls4n8yWSCMhyOmJ1+gaMWqD+7QeXyccJHU4w2enT0Jf7Mv6TnG7iCzVc9ZOrJey48fMt8ycUyNFRhijRpPB4nrUzEI6lBn+L1M9w8tJfirXNsaL8oXzvNhxOHce6cp+EYpKw6dz/muTidYS6rY+plIVVnOBwmENuAguZ4tL297MxLrhw5SP7TW/pqituH9nBq306eHjvAulVMdmi7PrOlkLzhYJsVbMG82+3S7/cZCRyF/6rRatNai2m0Y0bdmMenjnJy9w5mrp6l14nRdIPA97ArOoYwI7O4mOSwVqslMZIZVmR2ZIYS14RbtmXSbKwkA1ZrER9ePGOj12VTOFhW1eRbKVO6uigA10RUpPPS8YSh/DsCGVS/iuGISETL9LdGyK30h2MG4twUa14XsmTu/l2WLclIEGlKq9VKSChxp0PcXKVrLNEp/yZWf7FWTNMW3cgusJr9xurSAp16SFsEXxUBluwkmAyyLAn6z+W/L4RRPuLl9F4AAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;economists ebola graphic&quot; title=&quot;economists ebola graphic&quot; src=&quot;/static/198ce947c7efaeb70ead19c96aff4120/b8ccf/economists-ebola-graphic.png&quot; srcset=&quot;/static/198ce947c7efaeb70ead19c96aff4120/1abb1/economists-ebola-graphic.png 250w,
/static/198ce947c7efaeb70ead19c96aff4120/7217d/economists-ebola-graphic.png 500w,
/static/198ce947c7efaeb70ead19c96aff4120/b8ccf/economists-ebola-graphic.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The curated links can be found on &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/wiki/Gallery-of-Ebola-Visualizations-Found-Across-the-Web&quot;&gt;the EbolaMapper wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note: EbolaMapper is the working title for this project; really it is more like “Reusable Outbreak Monitoring Web Components for a Global Outbreak Monitoring Network Organization.” Right, so EbolaMapper is the working title until a better name comes along, if one did not just pass by a moment ago…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[First success indicator: a working EbolaMapper]]></title><description><![CDATA[The thing that got me moving on this (ebola) outbreak project was the WHO’s Ebola Portal, specifically the rather well implemented Web…]]></description><link>http://tigue.com/ebolamapper_initial_release/</link><guid isPermaLink="false">http://tigue.com/ebolamapper_initial_release/</guid><pubDate>Tue, 11 Nov 2014 07:59:50 GMT</pubDate><content:encoded>&lt;p&gt;The thing that got me moving on this (ebola) outbreak project was &lt;a href=&quot;https://extranet.who.int/ebola/&quot;&gt;the WHO’s Ebola Portal&lt;/a&gt;, specifically the rather well implemented &lt;a href=&quot;https://who-ocr.github.io/ebola-data/&quot;&gt;Web visualization of the 2014 ebola outbreak&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;WHO&apos;s Ebola-data&quot; href=&apos;https://who-ocr.github.io/ebola-data/&apos;&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 750px;&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 61.86666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACuklEQVQoz0WTS08TYRSG59e48xe4MzEuNJq4McaFcasLNm5cuTAmJioGA9YLykUFRI0aryiXghqhwHR6r/QyIL0y7UzLtNMW0cczg+Dizel3vnOenss3yqIaZEkUEH2fnSXg60W7f4enZ07x+eIFImMjlBMJSvEYZmqFSiqFUSyIipRWdbmLUwqH2JiZxJrzoyypGnvQoMaC38/rrnMMnDjCQk83ywIvaEFq2TSVH0nKyQQVw6BWr5PL5Si6voXvVHaBHiy4A11cVlFjCca6zvPw2GG+XL3C15vXMaSKQiRMMRrBymQwyiWMikFG1z2g9XUOa2ZKoFM7wICAAsu7VmU+ECDwbJzL+/fRffAA1kqSXEgjH1SpSJu5Qp6MgIulEsV0itTUJPnpSar+aRQtHCEajxOJxfYUdm0iyYvLlxg7exrd/Xc9iy7QdDhMqVxGX1sjFImyrIVQZYYhTcP8Nofy8t0EPfeG8Q2McPvhE3r7H3vWOz96zstXb4mrMopQ2FucOx4PFAx5dmJ61svpGxil/94QysyXBa73DeIbeoZvcJzeB2MSMCp2lBvi/zw3j9NqY1k16vVNTNOiWjWp1eo4jiPVxen2DXs5tyVf2dra4s/vP7QsCRJtyva2t7fF99vTL7lvNh1JbtG0bdbl2azn8rTbHRqNJp1Ox4vbduMaDRTbbmDbTYryxjRp58dKih3ffzVETQFuSExSBp9eXfN8LtDeta0OK+k0intwKzDlbSVkEZlM1gtqit+7E5Aj1bSB6PAAqiiZXcXetL08V+5v91lVZevKrtOdU+ufHKftgVzZloWVz6PP+pk4eZz5WzfIVy2cf9W1tn5hZHWeHj1E9N0baVkuajLwmmliiczyBsbPn3KW4ecLpD59IDY+QvBuH0vXrhD/+B5D4vc6cCuUZa0vLWLIl/MXPAtAt3REglIAAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;WHO&amp;apos;s ebola-data&quot; title=&quot;WHO&amp;apos;s ebola-data&quot; src=&quot;/static/e10e66a21fb63b91abbede8d6f09b215/b8ccf/who-ebola-data.png&quot; srcset=&quot;/static/e10e66a21fb63b91abbede8d6f09b215/1abb1/who-ebola-data.png 250w,
/static/e10e66a21fb63b91abbede8d6f09b215/7217d/who-ebola-data.png 500w,
/static/e10e66a21fb63b91abbede8d6f09b215/b8ccf/who-ebola-data.png 750w&quot; sizes=&quot;(max-width: 750px) 100vw, 750px&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br/&gt;
That sort of thing is exactly what the world needs. As for technical implementation details, they made the right choice basing it on interactive JavaScript libraries rather than Flash. They planned to make the data available:
&lt;blockquote&gt;&quot;Data will be made available for open access in the coming days. All data will be made available via open format downloads as well as through an open access API.&quot;&lt;/blockquote&gt;
&lt;p&gt;Sadly the visualization’s development and, more importantly, its data seems to have stalled. The data was last updated on September 14, 2014 (almost three months old as I type this). &lt;a href=&quot;https://github.com/who-ocr/ebola-data&quot;&gt;The code is on github&lt;/a&gt; with &lt;a href=&quot;https://github.com/who-ocr/ebola-data/commit/e15404902e1ffb159bcd79d13508ebcff84a46e2&quot;&gt;the last commit on September 27th&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[&lt;strong&gt;Update&lt;/strong&gt;: By mid-December 2014 the main site, &lt;a href=&apos;https://extranet.who.int/ebola/&apos;&gt;extranet.who.int/ebola/&lt;/a&gt;, had been taken down; I guess they did not realize that &lt;a href=&quot;https://who-ocr.github.io/ebola-data/&quot;&gt;the visualization lives on at GitHub&lt;/a&gt;.]&lt;/p&gt;
&lt;p&gt;I cannot find anything more about the planned open access APIs. Unfortunately I could not find any licensing information in the repository. I want to move their vision forward but using open source and open data. Or let us think big: why do we even need to wait around for the WHO to come down from on high with the numbers? Surely there is a better way…&lt;/p&gt;
&lt;p&gt;These guys obviously did good work. I will try to get in contact with them. I will report back in an future post.&lt;/p&gt;
&lt;p&gt;Nonetheless, this thing (“ebola-data” is its name on github) is what inspired me. If only it were clearly licensed and the data was fresh (and licensed openly). If such a thing were widget-ized and made freely available the Web would have a many more eyeballs taking in quality visualizations of the crisis. &lt;/p&gt;
&lt;p&gt;I am calling such a thing EbolaMapper. (The name is a bit misleading; the code is reusable in that there is nothing ebola specific about it but “Outbreak Visualization Widgets” is not a catchy at this time, even though that is what this is all about. I will get around to explaining all that in the long run.)&lt;/p&gt;
&lt;p&gt;So, I started digging around and found out about &lt;a href=&quot;http://eboladata.org/&quot;&gt;the Ebola Open Data Jam&lt;/a&gt; that took place on October 18th. Well, that there is the open data problem getting worked on.&lt;/p&gt;
&lt;p&gt;Next I found &lt;a href=&quot;http://www.meetup.com/Africa-Open-Data/events/210071892/&quot;&gt;the Africa Open Data meetup&lt;/a&gt;. On the conference call of November 7th it became clear that data validation was the current step, blocking quality visualizations. What better way to validate the data than to run it through a visualization on a world map?&lt;/p&gt;
&lt;p&gt;So, I’ve started &lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper&quot;&gt;a repository on github for EbolaMapper&lt;/a&gt; which will be a clean room re-implementation of the WHO’s ebola-data viz with a clear open source license (&lt;a href=&quot;https://github.com/JohnTigue/EbolaMapper/blob/master/LICENSE&quot;&gt;Apache 2.0&lt;/a&gt;). I will use some data found by the Ebola Open Data Jam. What is really needed is a standard for data interchange — APIs and such.&lt;/p&gt;
&lt;p&gt;When EbolaMapper can do what the WHO ebola-data visualization does, and more, via data from a standard API, that will be the first major milestone in this project.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Tao of open source applied to outbreaks]]></title><description><![CDATA[The real heroes in the ebola response story are the medical folks on the front line (damn, if MSF is not just a bunch of straight talk bad…]]></description><link>http://tigue.com/open_source_for_outbreaks/</link><guid isPermaLink="false">http://tigue.com/open_source_for_outbreaks/</guid><pubDate>Mon, 10 Nov 2014 22:03:31 GMT</pubDate><content:encoded>&lt;p&gt;The real heroes in the ebola response story are the medical folks on the front line (damn, if MSF is not just a bunch of straight talk bad asses). Yet as this sad story has developed I can see a need for help from the software community in terms of tech talent in order to bring the latest Web tech to bear in the global ebola response. And let us think big: not just this rather small, tragic outbreak but what about the global infrastructure for all future outbreaks? Is that really going to be WHO gather data and slowly publishing via HTML and PDFs? &lt;/p&gt;
&lt;p&gt;This thought has been bothering me for a while and now I’ve decided to try and help as I see a clear path forward on a specific tech issue: getting the numbers and dates out (lots more to come on this).&lt;/p&gt;
&lt;p&gt;As the press has asked, &lt;a href=&quot;http://www.thedailybeast.com/articles/2014/10/08/is-silicon-valley-sitting-out-the-fight-against-ebola.html&quot;&gt;Why Isn’t Silicon Valley Doing More to Fight Ebola?&lt;/a&gt; And, well, there have been some private financial donations big and small, the biggest being:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$126MM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.nytimes.com/2014/10/24/business/paul-allen-to-give-100-million-to-tackle-ebola-crisis.html&quot;&gt;Allen&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$50MM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.gatesfoundation.org/Media-Center/Press-Releases/2014/09/Gates-Foundation-Commits-$50%20Million-to-Support-Emergency-Response-to-Ebola&quot;&gt;Gates&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$25MM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.forbes.com/sites/luisakroll/2014/10/14/mark-zuckerberg-is-giving-25-million-to-fight-ebola/&quot;&gt;Zuckerberg&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$15MM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://bigstory.ap.org/article/81558961df604e70a2a269795f3c748f/google-ceo-donate-ebola-fight&quot;&gt;Page&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Making it rain is great and good on them. That money will go through the old and some new channels to buy &lt;a href=&quot;http://www.usnews.com/news/articles/2014/10/22/private-funding-from-zuckerberg-others-aids-ebola-fight&quot;&gt;“materials and services and provide swift action where it is needed”&lt;/a&gt;. What I see though is a need for better software (“have hammer, see nails” I guess) and new channels — Internet channels.&lt;/p&gt;
&lt;p&gt;So, let’s see if the tao of open source can be brought to bear on this problem (a ludicrously outdated global outbreak monitoring infrastructure) and if some tech talent can be rallied to the cause.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[val blogging = true]]></title><description><![CDATA[I have something I want to express; time to blog up. So, tooling: what to use these days? I am completely addicted to org-mode. The syntax…]]></description><link>http://tigue.com/blogging_starts_again/</link><guid isPermaLink="false">http://tigue.com/blogging_starts_again/</guid><pubDate>Mon, 10 Nov 2014 18:53:33 GMT</pubDate><content:encoded>&lt;p&gt;I have something I want to express; time to blog up. So, tooling: what to use these days?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I am completely addicted to &lt;a href=&quot;http://orgmode.org/&quot;&gt;org-mode&lt;/a&gt;. The syntax org uses is kind of a markdown variant. It has become my native written English “dialect.” So, blogging in org syntax is a major goal. Org has excellent export capabilities. Perhaps exporting will not even come &lt;a href=&quot;http://orgmode.org/worg/org-tutorials/org-ruby.html&quot;&gt;into&lt;/a&gt; &lt;a href=&quot;https://gist.github.com/abhiyerra/7377603&quot;&gt;play&lt;/a&gt; but it is a nice fallback to have in store. &lt;/li&gt;
&lt;li&gt;When architecting, I love to use static content as much as possible so a static site generator seems like the right type of machinery to choose for blogging.&lt;/li&gt;
&lt;li&gt;I’m all about that open source so GitHub is in the picture. GitHub uses &lt;a href=&quot;http://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; to host static pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, Plan A is: org to &lt;a href=&quot;http://octopress.org/&quot;&gt;Octopress&lt;/a&gt; to Jekyll, with &lt;a href=&quot;http://kaworu.github.io/octostrap3/&quot;&gt;Octostrap&lt;/a&gt; to make it pretty via Bootstratp. Here, Bootstrap is dailed in to look a lot like GitHub. So, that is Octopress looking like Github via Bootstrap. Let’s call it… &lt;a href=&quot;https://github.com/JohnTigue/octopussy&quot;&gt;octopussy&lt;/a&gt; &lt;a href=&quot;http://pando.com/2013/07/08/original-github-octocat-designer-simon-oxley-on-his-famous-creation-i-dont-remember-drawing-it/&quot;&gt;in deference to Oxley’s original intent&lt;/a&gt;, more on that later.&lt;/p&gt;</content:encoded></item></channel></rss>