Bladeren bron

Add first version of Neo introduction

sprenger 2 jaren geleden
bovenliggende
commit
19a96b7d58
37 gewijzigde bestanden met toevoegingen van 76315 en 0 verwijderingen
  1. 1 0
      day_3/create_slides.sh
  2. 1212 0
      day_3/neo_material/IODiagram.eps
  3. BIN
      day_3/neo_material/IODiagram.png
  4. 525 0
      day_3/neo_material/IODiagram.svg
  5. 3105 0
      day_3/neo_material/IODiagram_ext.eps
  6. BIN
      day_3/neo_material/IODiagram_ext.png
  7. 1553 0
      day_3/neo_material/IODiagram_ext.svg
  8. 3573 0
      day_3/neo_material/base_schematic.svg
  9. 489 0
      day_3/neo_material/base_schematic_0.svg
  10. 513 0
      day_3/neo_material/base_schematic_1.svg
  11. 681 0
      day_3/neo_material/base_schematic_2.svg
  12. 1832 0
      day_3/neo_material/base_schematic_3.svg
  13. 1893 0
      day_3/neo_material/base_schematic_4.svg
  14. 2006 0
      day_3/neo_material/base_schematic_5.svg
  15. 2024 0
      day_3/neo_material/base_schematic_6.svg
  16. 3489 0
      day_3/neo_material/base_schematic_7.svg
  17. 3558 0
      day_3/neo_material/base_schematic_8.svg
  18. BIN
      day_3/neo_material/ephys_data_modalities.png
  19. BIN
      day_3/neo_material/ephys_data_sources.png
  20. BIN
      day_3/neo_material/example_data/OpenEphys_SampleData_1/101_CH0.continuous
  21. BIN
      day_3/neo_material/example_data/OpenEphys_SampleData_1/101_CH1.continuous
  22. 12 0
      day_3/neo_material/example_data/OpenEphys_SampleData_1/Continuous_Data.openephys
  23. BIN
      day_3/neo_material/example_data/OpenEphys_SampleData_1/STp106.0n0.spikes
  24. 12 0
      day_3/neo_material/example_data/OpenEphys_SampleData_1/all_channels.events
  25. 2 0
      day_3/neo_material/example_data/OpenEphys_SampleData_1/messages.events
  26. 355 0
      day_3/neo_material/example_data/OpenEphys_SampleData_1/settings.xml
  27. 2 0
      day_3/neo_material/example_data/README.txt
  28. 116 0
      day_3/neo_material/generate_io_overview.py
  29. 202 0
      day_3/neo_material/neo_as_interface.drawio
  30. 3 0
      day_3/neo_material/neo_as_interface.svg
  31. 9221 0
      day_3/neo_material/neo_logo.eps
  32. BIN
      day_3/neo_material/neo_logo.png
  33. BIN
      day_3/neo_material/neo_logo_transparent.png
  34. 27944 0
      day_3/neo_material/neo_logo_transparent.svg
  35. BIN
      day_3/neo_material/neo_logo_transparent_no_border.png
  36. 11010 0
      day_3/neo_material/simple_generated_diagram_with_channelview.svg
  37. 982 0
      day_3/tutorial_1_basics.ipynb

+ 1 - 0
day_3/create_slides.sh

@@ -0,0 +1 @@
+jupyter nbconvert tutorial_1_basics.ipynb --to slides

File diff suppressed because it is too large
+ 1212 - 0
day_3/neo_material/IODiagram.eps


BIN
day_3/neo_material/IODiagram.png


+ 525 - 0
day_3/neo_material/IODiagram.svg

@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Pages: 1 -->
+<svg width="1537pt" height="1537pt"
+ viewBox="0.00 0.00 1536.90 1536.90" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1532.9)">
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1532.9 1532.9,-1532.9 1532.9,4 -4,4"/>
+<text text-anchor="middle" x="764.8023" y="-3.8" font-family="Times,serif" font-size="14.00" fill="#000000">NEO 0.10.0</text>
+<!-- NEO -->
+<g id="node1" class="node">
+<title>NEO</title>
+<ellipse fill="none" stroke="#000000" cx="728.5955" cy="-758.11" rx="88.5" ry="88.5"/>
+<text text-anchor="middle" x="728.5955" y="-745.61" font-family="Arial" font-size="50.00" fill="#000000">NEO</text>
+</g>
+<!-- AlphaOmega -->
+<g id="node2" class="node">
+<title>AlphaOmega</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="352.7627,-600.03 161.7627,-600.03 161.7627,-559.03 352.7627,-559.03 352.7627,-600.03"/>
+<text text-anchor="middle" x="257.2627" y="-572.03" font-family="Arial" font-size="30.00" fill="#000000">AlphaOmega</text>
+</g>
+<!-- NEO&#45;&#45;AlphaOmega -->
+<g id="edge1" class="edge">
+<title>NEO&#45;&#45;AlphaOmega</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M652.5345,-712.8639C603.2533,-685.1746 536.8933,-650.8706 474.7591,-628.42 435.8123,-614.3476 391.4265,-603.4978 352.9522,-595.6353"/>
+</g>
+<!-- AsciiImage IO -->
+<g id="node3" class="node">
+<title>AsciiImage IO</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="354.2934,-1089.2 151.2934,-1089.2 151.2934,-1048.2 354.2934,-1048.2 354.2934,-1089.2"/>
+<text text-anchor="middle" x="252.7934" y="-1061.2" font-family="Arial" font-size="30.00" fill="#000000">AsciiImage IO</text>
+</g>
+<!-- NEO&#45;&#45;AsciiImage IO -->
+<g id="edge2" class="edge">
+<title>NEO&#45;&#45;AsciiImage IO</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M659.687,-813.741C609.4897,-853.2129 539.1346,-906.396 473.8597,-948.24 413.5139,-986.9242 339.7605,-1025.4811 294.5439,-1048.1978"/>
+</g>
+<!-- AsciiSignal -->
+<g id="node4" class="node">
+<title>AsciiSignal</title>
+<polygon fill="none" stroke="#4169e1" stroke-width="6" points="444.1588,-1161.5 280.1588,-1161.5 280.1588,-1120.5 444.1588,-1120.5 444.1588,-1161.5"/>
+<text text-anchor="middle" x="362.1588" y="-1133.5" font-family="Arial" font-size="30.00" fill="#000000">AsciiSignal</text>
+</g>
+<!-- NEO&#45;&#45;AsciiSignal -->
+<g id="edge3" class="edge">
+<title>NEO&#45;&#45;AsciiSignal</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M667.2622,-822.1972C582.9133,-910.3334 435.4885,-1064.3777 382.1426,-1120.1188"/>
+</g>
+<!-- AsciiSpikeTrain -->
+<g id="node5" class="node">
+<title>AsciiSpikeTrain</title>
+<polygon fill="none" stroke="#4169e1" stroke-width="6" points="1030.7122,-1147.2 807.7122,-1147.2 807.7122,-1106.2 1030.7122,-1106.2 1030.7122,-1147.2"/>
+<text text-anchor="middle" x="919.2122" y="-1119.2" font-family="Arial" font-size="30.00" fill="#000000">AsciiSpikeTrain</text>
+</g>
+<!-- NEO&#45;&#45;AsciiSpikeTrain -->
+<g id="edge4" class="edge">
+<title>NEO&#45;&#45;AsciiSpikeTrain</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M769.2538,-836.7297C813.7551,-922.7807 882.2652,-1055.2565 908.4934,-1105.9732"/>
+</g>
+<!-- AxographIO -->
+<g id="node6" class="node">
+<title>AxographIO</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1130.9214,-186.15 954.9214,-186.15 954.9214,-145.15 1130.9214,-145.15 1130.9214,-186.15"/>
+<text text-anchor="middle" x="1042.9214" y="-158.15" font-family="Arial" font-size="30.00" fill="#000000">AxographIO</text>
+</g>
+<!-- NEO&#45;&#45;AxographIO -->
+<g id="edge5" class="edge">
+<title>NEO&#45;&#45;AxographIO</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M753.7016,-673.1924C778.122,-596.5498 819.0533,-482.0474 870.6849,-390.07 894.8463,-347.0285 987.2454,-233.2273 1025.8329,-186.3151"/>
+</g>
+<!-- Axona IO -->
+<g id="node7" class="node">
+<title>Axona IO</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="658.7173,-95.789 517.7173,-95.789 517.7173,-54.789 658.7173,-54.789 658.7173,-95.789"/>
+<text text-anchor="middle" x="588.2173" y="-67.789" font-family="Arial" font-size="30.00" fill="#000000">Axona IO</text>
+</g>
+<!-- NEO&#45;&#45;Axona IO -->
+<g id="edge6" class="edge">
+<title>NEO&#45;&#45;Axona IO</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M687.6549,-679.5073C646.6392,-595.9789 586.2797,-458.7624 562.4721,-332.21 558.5773,-311.5065 552.0531,-303.1198 562.4721,-284.81 573.2088,-265.9418 593.7279,-278.7282 604.4647,-259.86 634.4535,-207.1593 611.4701,-131.9981 597.2651,-96.0262"/>
+</g>
+<!-- Axon -->
+<g id="node8" class="node">
+<title>Axon</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="601.2647,-256.66 516.2647,-256.66 516.2647,-215.66 601.2647,-215.66 601.2647,-256.66"/>
+<text text-anchor="middle" x="558.7647" y="-228.66" font-family="Arial" font-size="30.00" fill="#000000">Axon</text>
+</g>
+<!-- NEO&#45;&#45;Axon -->
+<g id="edge7" class="edge">
+<title>NEO&#45;&#45;Axon</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M688.4492,-678.9258C648.2398,-595.2021 588.6758,-458.0854 562.4721,-332.21 557.1665,-306.7235 556.9504,-276.6316 557.5911,-257.0113"/>
+</g>
+<!-- BCI2000 -->
+<g id="node9" class="node">
+<title>BCI2000</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="439.7513,-341.77 306.7513,-341.77 306.7513,-300.77 439.7513,-300.77 439.7513,-341.77"/>
+<text text-anchor="middle" x="373.2513" y="-313.77" font-family="Arial" font-size="30.00" fill="#000000">BCI2000</text>
+</g>
+<!-- NEO&#45;&#45;BCI2000 -->
+<g id="edge8" class="edge">
+<title>NEO&#45;&#45;BCI2000</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M681.5621,-683.1014C639.23,-617.8565 573.6258,-522.1214 507.1485,-446.14 472.2999,-406.3092 426.1421,-365.4686 398.1272,-341.7804"/>
+</g>
+<!-- Blackrock IO for single nsx -->
+<g id="node10" class="node">
+<title>Blackrock IO for single nsx</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1527.682,-650.86 1157.682,-650.86 1157.682,-609.86 1527.682,-609.86 1527.682,-650.86"/>
+<text text-anchor="middle" x="1342.682" y="-622.86" font-family="Arial" font-size="30.00" fill="#000000">Blackrock IO for single nsx</text>
+</g>
+<!-- NEO&#45;&#45;Blackrock IO for single nsx -->
+<g id="edge9" class="edge">
+<title>NEO&#45;&#45;Blackrock IO for single nsx</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M817.2658,-752.3913C901.0665,-745.6438 1029.8345,-731.7896 1138.8255,-705.12 1194.1162,-691.5906 1255.106,-668.0115 1295.8353,-650.9453"/>
+</g>
+<!-- BLK IO -->
+<g id="node11" class="node">
+<title>BLK IO</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="1080.6989,-347.29 967.6989,-347.29 967.6989,-306.29 1080.6989,-306.29 1080.6989,-347.29"/>
+<text text-anchor="middle" x="1024.1989" y="-319.29" font-family="Arial" font-size="30.00" fill="#000000">BLK IO</text>
+</g>
+<!-- NEO&#45;&#45;BLK IO -->
+<g id="edge10" class="edge">
+<title>NEO&#45;&#45;BLK IO</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M778.7406,-684.9424C847.9233,-583.9968 968.7751,-407.6598 1009.9725,-347.548"/>
+</g>
+<!-- BrainVision -->
+<g id="node12" class="node">
+<title>BrainVision</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="542.0459,-168.26 374.0459,-168.26 374.0459,-127.26 542.0459,-127.26 542.0459,-168.26"/>
+<text text-anchor="middle" x="458.0459" y="-140.26" font-family="Arial" font-size="30.00" fill="#000000">BrainVision</text>
+</g>
+<!-- NEO&#45;&#45;BrainVision -->
+<g id="edge11" class="edge">
+<title>NEO&#45;&#45;BrainVision</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M696.5826,-675.4633C648.8349,-552.2989 564.0602,-334.0709 559.6866,-325.94 542.6598,-294.286 531.4005,-290.7741 513.0647,-259.86 494.8164,-229.0935 477.2354,-191.4183 467.0422,-168.5212"/>
+</g>
+<!-- Brainware DAM File -->
+<g id="node13" class="node">
+<title>Brainware DAM File</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="847.6721,-329.01 565.6721,-329.01 565.6721,-288.01 847.6721,-288.01 847.6721,-329.01"/>
+<text text-anchor="middle" x="706.6721" y="-301.01" font-family="Arial" font-size="30.00" fill="#000000">Brainware DAM File</text>
+</g>
+<!-- NEO&#45;&#45;Brainware DAM File -->
+<g id="edge12" class="edge">
+<title>NEO&#45;&#45;Brainware DAM File</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M724.2772,-669.5519C719.0504,-562.3619 710.5881,-388.8177 707.6863,-329.3088"/>
+</g>
+<!-- Brainware F32 File -->
+<g id="node14" class="node">
+<title>Brainware F32 File</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="784.1087,-1161.5 518.1087,-1161.5 518.1087,-1120.5 784.1087,-1120.5 784.1087,-1161.5"/>
+<text text-anchor="middle" x="651.1087" y="-1133.5" font-family="Arial" font-size="30.00" fill="#000000">Brainware F32 File</text>
+</g>
+<!-- NEO&#45;&#45;Brainware F32 File -->
+<g id="edge13" class="edge">
+<title>NEO&#45;&#45;Brainware F32 File</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M711.0125,-844.9937C692.7945,-935.0155 665.5719,-1069.532 655.2644,-1120.465"/>
+</g>
+<!-- Brainware SRC File -->
+<g id="node15" class="node">
+<title>Brainware SRC File</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="279.9184,-733.43 .9184,-733.43 .9184,-692.43 279.9184,-692.43 279.9184,-733.43"/>
+<text text-anchor="middle" x="140.4184" y="-705.43" font-family="Arial" font-size="30.00" fill="#000000">Brainware SRC File</text>
+</g>
+<!-- NEO&#45;&#45;Brainware SRC File -->
+<g id="edge14" class="edge">
+<title>NEO&#45;&#45;Brainware SRC File</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M640.2212,-751.3217C544.8937,-743.9992 391.7919,-732.2389 280.1302,-723.6618"/>
+</g>
+<!-- Ced -->
+<g id="node16" class="node">
+<title>Ced</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1031.2428,-1219.5 960.2428,-1219.5 960.2428,-1178.5 1031.2428,-1178.5 1031.2428,-1219.5"/>
+<text text-anchor="middle" x="995.7428" y="-1191.5" font-family="Arial" font-size="30.00" fill="#000000">Ced</text>
+</g>
+<!-- NEO&#45;&#45;Ced -->
+<g id="edge15" class="edge">
+<title>NEO&#45;&#45;Ced</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M799.5175,-811.3729C874.1728,-872.3351 987.2169,-979.8053 1033.9122,-1103 1041.3789,-1122.6991 1040.7961,-1130.4898 1033.9122,-1150.4 1030.4065,-1160.5397 1023.8154,-1170.1735 1017.0843,-1178.1495"/>
+</g>
+<!-- Elan -->
+<g id="node17" class="node">
+<title>Elan</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1063.3029,-543.14 986.3029,-543.14 986.3029,-502.14 1063.3029,-502.14 1063.3029,-543.14"/>
+<text text-anchor="middle" x="1024.8029" y="-515.14" font-family="Arial" font-size="30.00" fill="#000000">Elan</text>
+</g>
+<!-- NEO&#45;&#45;Elan -->
+<g id="edge16" class="edge">
+<title>NEO&#45;&#45;Elan</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M798.043,-702.9027C862.3375,-651.7918 954.4926,-578.5332 998.9135,-543.2207"/>
+</g>
+<!-- igorpro -->
+<g id="node18" class="node">
+<title>igorpro</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="926.5337,-1363.5 817.5337,-1363.5 817.5337,-1322.5 926.5337,-1322.5 926.5337,-1363.5"/>
+<text text-anchor="middle" x="872.0337" y="-1335.5" font-family="Arial" font-size="30.00" fill="#000000">igorpro</text>
+</g>
+<!-- NEO&#45;&#45;igorpro -->
+<g id="edge17" class="edge">
+<title>NEO&#45;&#45;igorpro</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M746.2666,-845.1413C760.1505,-917.6171 778.5543,-1023.718 787.3087,-1117.3 788.4619,-1129.6277 786.1065,-1216.9603 790.0413,-1228.7 802.4587,-1265.7486 831.3826,-1301.1349 851.3294,-1322.4647"/>
+</g>
+<!-- Intan -->
+<g id="node19" class="node">
+<title>Intan</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="843.2339,-243.46 760.2339,-243.46 760.2339,-202.46 843.2339,-202.46 843.2339,-243.46"/>
+<text text-anchor="middle" x="801.7339" y="-215.46" font-family="Arial" font-size="30.00" fill="#000000">Intan</text>
+</g>
+<!-- NEO&#45;&#45;Intan -->
+<g id="edge18" class="edge">
+<title>NEO&#45;&#45;Intan</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M759.9079,-675.1695C790.1092,-590.415 833.6951,-454.2846 850.8721,-332.21 853.8074,-311.3488 857.8117,-304.7009 850.8721,-284.81 845.451,-269.2715 834.3152,-254.7103 824.0134,-243.6243"/>
+</g>
+<!-- KlustaKwik -->
+<g id="node20" class="node">
+<title>KlustaKwik</title>
+<polygon fill="none" stroke="#4169e1" stroke-width="6" points="925.6681,-69.231 761.6681,-69.231 761.6681,-28.231 925.6681,-28.231 925.6681,-69.231"/>
+<text text-anchor="middle" x="843.6681" y="-41.231" font-family="Arial" font-size="30.00" fill="#000000">KlustaKwik</text>
+</g>
+<!-- NEO&#45;&#45;KlustaKwik -->
+<g id="edge19" class="edge">
+<title>NEO&#45;&#45;KlustaKwik</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M759.9079,-675.1695C790.1092,-590.415 833.6951,-454.2846 850.8721,-332.21 853.8074,-311.3488 851.1934,-305.8742 850.8721,-284.81 849.6557,-205.0645 846.1292,-110.2196 844.505,-69.252"/>
+</g>
+<!-- Kwik -->
+<g id="node21" class="node">
+<title>Kwik</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="597.6474,-1233.9 517.6474,-1233.9 517.6474,-1192.9 597.6474,-1192.9 597.6474,-1233.9"/>
+<text text-anchor="middle" x="557.6474" y="-1205.9" font-family="Arial" font-size="30.00" fill="#000000">Kwik</text>
+</g>
+<!-- NEO&#45;&#45;Kwik -->
+<g id="edge20" class="edge">
+<title>NEO&#45;&#45;Kwik</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M672.238,-826.7979C619.813,-895.4922 545.3523,-1006.5827 514.9087,-1117.3 509.3233,-1137.6128 507.4845,-1144.9849 514.9087,-1164.7 518.7937,-1175.0168 525.9674,-1184.5715 533.3426,-1192.4358"/>
+</g>
+<!-- MEArec -->
+<g id="node22" class="node">
+<title>MEArec</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1135.6255,-701.92 1012.6255,-701.92 1012.6255,-660.92 1135.6255,-660.92 1135.6255,-701.92"/>
+<text text-anchor="middle" x="1074.1255" y="-673.92" font-family="Arial" font-size="30.00" fill="#000000">MEArec</text>
+</g>
+<!-- NEO&#45;&#45;MEArec -->
+<g id="edge21" class="edge">
+<title>NEO&#45;&#45;MEArec</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M815.3413,-738.8569C876.7129,-725.2355 957.5276,-707.2988 1012.4038,-695.1191"/>
+</g>
+<!-- Maxwell -->
+<g id="node23" class="node">
+<title>Maxwell</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1179.204,-905.96 1054.204,-905.96 1054.204,-864.96 1179.204,-864.96 1179.204,-905.96"/>
+<text text-anchor="middle" x="1116.704" y="-877.96" font-family="Arial" font-size="30.00" fill="#000000">Maxwell</text>
+</g>
+<!-- NEO&#45;&#45;Maxwell -->
+<g id="edge22" class="edge">
+<title>NEO&#45;&#45;Maxwell</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M812.8092,-785.7431C885.3766,-809.5546 988.5002,-843.3925 1053.9989,-864.8846"/>
+</g>
+<!-- Micromed -->
+<g id="node24" class="node">
+<title>Micromed</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="724.5785,-1469.4 577.5785,-1469.4 577.5785,-1428.4 724.5785,-1428.4 724.5785,-1469.4"/>
+<text text-anchor="middle" x="651.0785" y="-1441.4" font-family="Arial" font-size="30.00" fill="#000000">Micromed</text>
+</g>
+<!-- NEO&#45;&#45;Micromed -->
+<g id="edge23" class="edge">
+<title>NEO&#45;&#45;Micromed</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M761.0957,-840.6734C789.1259,-923.9483 820.3114,-1055.4634 787.3087,-1164.7 761.2835,-1250.8413 709.9326,-1250.2862 675.2004,-1333.3 661.9856,-1364.8848 655.7468,-1404.4552 653.0062,-1428.1514"/>
+</g>
+<!-- NIX -->
+<g id="node25" class="node">
+<title>NIX</title>
+<polygon fill="none" stroke="#4169e1" stroke-width="6" points="940.8849,-434.27 873.8849,-434.27 873.8849,-393.27 940.8849,-393.27 940.8849,-434.27"/>
+<text text-anchor="middle" x="907.3849" y="-406.27" font-family="Arial" font-size="30.00" fill="#000000">NIX</text>
+</g>
+<!-- NEO&#45;&#45;NIX -->
+<g id="edge24" class="edge">
+<title>NEO&#45;&#45;NIX</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M769.3893,-679.5431C810.7173,-599.9473 871.9563,-482.0037 896.5668,-434.6052"/>
+</g>
+<!-- neomatlab -->
+<g id="node26" class="node">
+<title>neomatlab</title>
+<polygon fill="none" stroke="#4169e1" stroke-width="6" points="1271.107,-774.29 1116.107,-774.29 1116.107,-733.29 1271.107,-733.29 1271.107,-774.29"/>
+<text text-anchor="middle" x="1193.607" y="-746.29" font-family="Arial" font-size="30.00" fill="#000000">neomatlab</text>
+</g>
+<!-- NEO&#45;&#45;neomatlab -->
+<g id="edge25" class="edge">
+<title>NEO&#45;&#45;neomatlab</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M817.1551,-757.2873C903.4558,-756.4855 1033.3776,-755.2785 1115.8062,-754.5128"/>
+</g>
+<!-- nest -->
+<g id="node27" class="node">
+<title>nest</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="470.6597,-945.04 397.6597,-945.04 397.6597,-904.04 470.6597,-904.04 470.6597,-945.04"/>
+<text text-anchor="middle" x="434.1597" y="-917.04" font-family="Arial" font-size="30.00" fill="#000000">nest</text>
+</g>
+<!-- NEO&#45;&#45;nest -->
+<g id="edge26" class="edge">
+<title>NEO&#45;&#45;nest</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M651.2359,-801.8375C592.9649,-834.7753 515.6847,-878.4579 470.79,-903.8347"/>
+</g>
+<!-- Neuralynx -->
+<g id="node28" class="node">
+<title>Neuralynx</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1227.3337,-543.02 1076.3337,-543.02 1076.3337,-502.02 1227.3337,-502.02 1227.3337,-543.02"/>
+<text text-anchor="middle" x="1151.8337" y="-515.02" font-family="Arial" font-size="30.00" fill="#000000">Neuralynx</text>
+</g>
+<!-- NEO&#45;&#45;Neuralynx -->
+<g id="edge27" class="edge">
+<title>NEO&#45;&#45;Neuralynx</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M806.2239,-714.8992C897.7436,-663.956 1046.0621,-581.3964 1114.7463,-543.1643"/>
+</g>
+<!-- NeuroExplorer -->
+<g id="node29" class="node">
+<title>NeuroExplorer</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1354.7776,-978.31 1145.7776,-978.31 1145.7776,-937.31 1354.7776,-937.31 1354.7776,-978.31"/>
+<text text-anchor="middle" x="1250.2776" y="-950.31" font-family="Arial" font-size="30.00" fill="#000000">NeuroExplorer</text>
+</g>
+<!-- NEO&#45;&#45;NeuroExplorer -->
+<g id="edge28" class="edge">
+<title>NEO&#45;&#45;NeuroExplorer</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M806.5815,-800.0123C870.764,-833.1758 964.8678,-878.8073 1051.004,-909.16 1082.4086,-920.2264 1117.4555,-929.6989 1149.2948,-937.2655"/>
+</g>
+<!-- NeuroScope -->
+<g id="node30" class="node">
+<title>NeuroScope</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="357.0501,-945.99 175.0501,-945.99 175.0501,-904.99 357.0501,-904.99 357.0501,-945.99"/>
+<text text-anchor="middle" x="266.0501" y="-917.99" font-family="Arial" font-size="30.00" fill="#000000">NeuroScope</text>
+</g>
+<!-- NEO&#45;&#45;NeuroScope -->
+<g id="edge29" class="edge">
+<title>NEO&#45;&#45;NeuroScope</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M645.3674,-788.2275C552.1226,-821.9697 403.4878,-875.7558 322.746,-904.9736"/>
+</g>
+<!-- neuroshare -->
+<g id="node31" class="node">
+<title>neuroshare</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="380.1704,-805.8 213.1704,-805.8 213.1704,-764.8 380.1704,-764.8 380.1704,-805.8"/>
+<text text-anchor="middle" x="296.6704" y="-777.8" font-family="Arial" font-size="30.00" fill="#000000">neuroshare</text>
+</g>
+<!-- NEO&#45;&#45;neuroshare -->
+<g id="edge30" class="edge">
+<title>NEO&#45;&#45;neuroshare</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M640.1467,-763.6779C564.0067,-768.471 454.9211,-775.338 380.2349,-780.0396"/>
+</g>
+<!-- NeoNWB IO -->
+<g id="node32" class="node">
+<title>NeoNWB IO</title>
+<polygon fill="none" stroke="#4169e1" stroke-width="6" points="471.5591,-672.62 289.5591,-672.62 289.5591,-631.62 471.5591,-631.62 471.5591,-672.62"/>
+<text text-anchor="middle" x="380.5591" y="-644.62" font-family="Arial" font-size="30.00" fill="#000000">NeoNWB IO</text>
+</g>
+<!-- NEO&#45;&#45;NeoNWB IO -->
+<g id="edge31" class="edge">
+<title>NEO&#45;&#45;NeoNWB IO</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M643.9013,-732.3175C583.7394,-713.9959 504.0351,-689.723 448.1308,-672.6981"/>
+</g>
+<!-- OpenEphys -->
+<g id="node33" class="node">
+<title>OpenEphys</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="351.7952,-442.65 178.7952,-442.65 178.7952,-401.65 351.7952,-401.65 351.7952,-442.65"/>
+<text text-anchor="middle" x="265.2952" y="-414.65" font-family="Arial" font-size="30.00" fill="#000000">OpenEphys</text>
+</g>
+<!-- NEO&#45;&#45;OpenEphys -->
+<g id="edge32" class="edge">
+<title>NEO&#45;&#45;OpenEphys</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M655.878,-707.4506C580.6807,-654.7799 460.1456,-569.558 357.7485,-493.54 335.1156,-476.7377 309.804,-457.1348 291.3951,-442.7261"/>
+</g>
+<!-- OpenEphysBinary -->
+<g id="node34" class="node">
+<title>OpenEphysBinary</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1192.8616,-1426 935.8616,-1426 935.8616,-1385 1192.8616,-1385 1192.8616,-1426"/>
+<text text-anchor="middle" x="1064.3616" y="-1398" font-family="Arial" font-size="30.00" fill="#000000">OpenEphysBinary</text>
+</g>
+<!-- NEO&#45;&#45;OpenEphysBinary -->
+<g id="edge33" class="edge">
+<title>NEO&#45;&#45;OpenEphysBinary</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M799.0474,-811.9658C873.0045,-873.249 985.1737,-980.8144 1033.9122,-1103 1037.4794,-1111.9427 1036.1258,-1180.0032 1036.9,-1189.6 1042.7035,-1261.5349 1055.1337,-1346.3115 1061.0719,-1384.7245"/>
+</g>
+<!-- Phy IO -->
+<g id="node35" class="node">
+<title>Phy IO</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="508.9356,-1234 400.9356,-1234 400.9356,-1193 508.9356,-1193 508.9356,-1234"/>
+<text text-anchor="middle" x="454.9356" y="-1206" font-family="Arial" font-size="30.00" fill="#000000">Phy IO</text>
+</g>
+<!-- NEO&#45;&#45;Phy IO -->
+<g id="edge34" class="edge">
+<title>NEO&#45;&#45;Phy IO</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M682.945,-834.0757C618.6189,-941.119 504.9515,-1130.2698 467.378,-1192.7948"/>
+</g>
+<!-- Python pickle file -->
+<g id="node36" class="node">
+<title>Python pickle file</title>
+<polygon fill="none" stroke="#4169e1" stroke-width="6" points="1330.9169,-382.41 1089.9169,-382.41 1089.9169,-341.41 1330.9169,-341.41 1330.9169,-382.41"/>
+<text text-anchor="middle" x="1210.4169" y="-354.41" font-family="Arial" font-size="30.00" fill="#000000">Python pickle file</text>
+</g>
+<!-- NEO&#45;&#45;Python pickle file -->
+<g id="edge35" class="edge">
+<title>NEO&#45;&#45;Python pickle file</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M786.1678,-690.6511C835.2449,-635.4198 909.3642,-557.178 983.1029,-498.94 1043.6743,-451.1014 1122.2965,-407.2009 1169.4174,-382.5651"/>
+</g>
+<!-- Plexon -->
+<g id="node37" class="node">
+<title>Plexon</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="556.4866,-370.14 448.4866,-370.14 448.4866,-329.14 556.4866,-329.14 556.4866,-370.14"/>
+<text text-anchor="middle" x="502.4866" y="-342.14" font-family="Arial" font-size="30.00" fill="#000000">Plexon</text>
+</g>
+<!-- NEO&#45;&#45;Plexon -->
+<g id="edge36" class="edge">
+<title>NEO&#45;&#45;Plexon</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M685.5339,-680.3185C632.3593,-584.2574 545.1261,-426.6691 513.9815,-370.4058"/>
+</g>
+<!-- RawBinarySignal -->
+<g id="node38" class="node">
+<title>RawBinarySignal</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="478.6193,-1375.3 233.6193,-1375.3 233.6193,-1334.3 478.6193,-1334.3 478.6193,-1375.3"/>
+<text text-anchor="middle" x="356.1193" y="-1347.3" font-family="Arial" font-size="30.00" fill="#000000">RawBinarySignal</text>
+</g>
+<!-- NEO&#45;&#45;RawBinarySignal -->
+<g id="edge37" class="edge">
+<title>NEO&#45;&#45;RawBinarySignal</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M689.2196,-837.6163C641.9054,-926.6174 555.2426,-1070.6542 447.3588,-1164.7 428.7283,-1180.9408 413.1762,-1170.5011 397.7356,-1189.8 363.4066,-1232.707 356.993,-1300.3671 356.0522,-1334.1607"/>
+</g>
+<!-- RawMCS -->
+<g id="node39" class="node">
+<title>RawMCS</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="503.9485,-490.34 360.9485,-490.34 360.9485,-449.34 503.9485,-449.34 503.9485,-490.34"/>
+<text text-anchor="middle" x="432.4485" y="-462.34" font-family="Arial" font-size="30.00" fill="#000000">RawMCS</text>
+</g>
+<!-- NEO&#45;&#45;RawMCS -->
+<g id="edge38" class="edge">
+<title>NEO&#45;&#45;RawMCS</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M665.0645,-696.2689C598.4416,-631.418 497.4798,-533.1416 453.8136,-490.6369"/>
+</g>
+<!-- Spike2 -->
+<g id="node40" class="node">
+<title>Spike2</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="786.4004,-1377.5 678.4004,-1377.5 678.4004,-1336.5 786.4004,-1336.5 786.4004,-1377.5"/>
+<text text-anchor="middle" x="732.4004" y="-1349.5" font-family="Arial" font-size="30.00" fill="#000000">Spike2</text>
+</g>
+<!-- NEO&#45;&#45;Spike2 -->
+<g id="edge39" class="edge">
+<title>NEO&#45;&#45;Spike2</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M754.8987,-842.9616C777.0674,-925.1932 802.8798,-1053.4543 787.3087,-1164.7 778.3328,-1228.8271 753.2933,-1301.5794 740.3592,-1336.3552"/>
+</g>
+<!-- SpikeGadgets -->
+<g id="node41" class="node">
+<title>SpikeGadgets</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="937.8168,-1528.9 733.8168,-1528.9 733.8168,-1487.9 937.8168,-1487.9 937.8168,-1528.9"/>
+<text text-anchor="middle" x="835.8168" y="-1500.9" font-family="Arial" font-size="30.00" fill="#000000">SpikeGadgets</text>
+</g>
+<!-- NEO&#45;&#45;SpikeGadgets -->
+<g id="edge40" class="edge">
+<title>NEO&#45;&#45;SpikeGadgets</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M746.2666,-845.1413C760.1505,-917.6171 778.5543,-1023.718 787.3087,-1117.3 791.9216,-1166.6107 785.4236,-1179.3897 790.0413,-1228.7 799.1938,-1326.4364 821.8809,-1441.7043 831.4493,-1487.8235"/>
+</g>
+<!-- SpikeGLX -->
+<g id="node42" class="node">
+<title>SpikeGLX</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="1192.1,-1186.4 1040.1,-1186.4 1040.1,-1145.4 1192.1,-1145.4 1192.1,-1186.4"/>
+<text text-anchor="middle" x="1116.1" y="-1158.4" font-family="Arial" font-size="30.00" fill="#000000">SpikeGLX</text>
+</g>
+<!-- NEO&#45;&#45;SpikeGLX -->
+<g id="edge41" class="edge">
+<title>NEO&#45;&#45;SpikeGLX</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M789.5694,-822.2758C878.8742,-916.2556 1040.6936,-1086.5462 1096.5332,-1145.3088"/>
+</g>
+<!-- Stimfit -->
+<g id="node43" class="node">
+<title>Stimfit</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="956.9219,-258.6 856.9219,-258.6 856.9219,-217.6 956.9219,-217.6 956.9219,-258.6"/>
+<text text-anchor="middle" x="906.9219" y="-230.6" font-family="Arial" font-size="30.00" fill="#000000">Stimfit</text>
+</g>
+<!-- NEO&#45;&#45;Stimfit -->
+<g id="edge42" class="edge">
+<title>NEO&#45;&#45;Stimfit</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M757.3457,-674.2726C799.6086,-551.0317 876.0597,-328.0959 899.7359,-259.0547"/>
+</g>
+<!-- Tdt -->
+<g id="node44" class="node">
+<title>Tdt</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="852.2413,-1225.5 793.2413,-1225.5 793.2413,-1184.5 852.2413,-1184.5 852.2413,-1225.5"/>
+<text text-anchor="middle" x="822.7413" y="-1197.5" font-family="Arial" font-size="30.00" fill="#000000">Tdt</text>
+</g>
+<!-- NEO&#45;&#45;Tdt -->
+<g id="edge43" class="edge">
+<title>NEO&#45;&#45;Tdt</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M742.1661,-845.7137C755.3554,-925.7062 777.346,-1046.9035 804.5122,-1150.4 807.5061,-1161.806 811.613,-1174.2976 815.1708,-1184.4506"/>
+</g>
+<!-- TIFF IO -->
+<g id="node45" class="node">
+<title>TIFF IO</title>
+<polygon fill="none" stroke="#20b2aa" stroke-width="6" points="1136.6452,-1043.8 1017.6452,-1043.8 1017.6452,-1002.8 1136.6452,-1002.8 1136.6452,-1043.8"/>
+<text text-anchor="middle" x="1077.1452" y="-1015.8" font-family="Arial" font-size="30.00" fill="#000000">TIFF IO</text>
+</g>
+<!-- NEO&#45;&#45;TIFF IO -->
+<g id="edge44" class="edge">
+<title>NEO&#45;&#45;TIFF IO</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M799.1297,-811.7752C876.5098,-870.6489 996.7912,-962.1635 1050.1168,-1002.7357"/>
+</g>
+<!-- WinEdr -->
+<g id="node46" class="node">
+<title>WinEdr</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="782.6328,-141.68 667.6328,-141.68 667.6328,-100.68 782.6328,-100.68 782.6328,-141.68"/>
+<text text-anchor="middle" x="725.1328" y="-113.68" font-family="Arial" font-size="30.00" fill="#000000">WinEdr</text>
+</g>
+<!-- NEO&#45;&#45;WinEdr -->
+<g id="edge45" class="edge">
+<title>NEO&#45;&#45;WinEdr</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M759.9079,-675.1695C790.1092,-590.415 833.6951,-454.2846 850.8721,-332.21 853.8074,-311.3488 851.418,-305.8696 850.8721,-284.81 850.3788,-265.7797 855.9811,-215.7295 846.4339,-199.26 831.2986,-173.1507 803.5361,-154.3213 778.3872,-141.7034"/>
+</g>
+<!-- WinWcp -->
+<g id="node47" class="node">
+<title>WinWcp</title>
+<polygon fill="none" stroke="#008080" stroke-width="6" points="615.8696,-1395.2 487.8696,-1395.2 487.8696,-1354.2 615.8696,-1354.2 615.8696,-1395.2"/>
+<text text-anchor="middle" x="551.8696" y="-1367.2" font-family="Arial" font-size="30.00" fill="#000000">WinWcp</text>
+</g>
+<!-- NEO&#45;&#45;WinWcp -->
+<g id="edge46" class="edge">
+<title>NEO&#45;&#45;WinWcp</title>
+<path fill="none" stroke="#000000" stroke-width="4" d="M672.3922,-826.8406C620.0823,-895.5667 545.7048,-1006.6803 514.9087,-1117.3 511.3386,-1130.1235 512.6852,-1223.9059 514.4474,-1237.1 520.1171,-1279.552 535.2138,-1327.4667 544.4071,-1354.0739"/>
+</g>
+</g>
+</svg>

File diff suppressed because it is too large
+ 3105 - 0
day_3/neo_material/IODiagram_ext.eps


BIN
day_3/neo_material/IODiagram_ext.png


File diff suppressed because it is too large
+ 1553 - 0
day_3/neo_material/IODiagram_ext.svg


File diff suppressed because it is too large
+ 3573 - 0
day_3/neo_material/base_schematic.svg


File diff suppressed because it is too large
+ 489 - 0
day_3/neo_material/base_schematic_0.svg


File diff suppressed because it is too large
+ 513 - 0
day_3/neo_material/base_schematic_1.svg


File diff suppressed because it is too large
+ 681 - 0
day_3/neo_material/base_schematic_2.svg


File diff suppressed because it is too large
+ 1832 - 0
day_3/neo_material/base_schematic_3.svg


File diff suppressed because it is too large
+ 1893 - 0
day_3/neo_material/base_schematic_4.svg


File diff suppressed because it is too large
+ 2006 - 0
day_3/neo_material/base_schematic_5.svg


File diff suppressed because it is too large
+ 2024 - 0
day_3/neo_material/base_schematic_6.svg


File diff suppressed because it is too large
+ 3489 - 0
day_3/neo_material/base_schematic_7.svg


File diff suppressed because it is too large
+ 3558 - 0
day_3/neo_material/base_schematic_8.svg


BIN
day_3/neo_material/ephys_data_modalities.png


BIN
day_3/neo_material/ephys_data_sources.png


BIN
day_3/neo_material/example_data/OpenEphys_SampleData_1/101_CH0.continuous


BIN
day_3/neo_material/example_data/OpenEphys_SampleData_1/101_CH1.continuous


+ 12 - 0
day_3/neo_material/example_data/OpenEphys_SampleData_1/Continuous_Data.openephys

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<EXPERIMENT version="0.4000000000000000222" number="1" separatefiles="0">
+  <RECORDING number="0" samplerate="40000">
+    <PROCESSOR id="101">
+      <CHANNEL name="CH0" bitVolts="0.050000000745058059692" filename="101_CH0.continuous"
+               position="1024"/>
+      <CHANNEL name="CH1" bitVolts="0.050000000745058059692" filename="101_CH1.continuous"
+               position="1024"/>
+    </PROCESSOR>
+  </RECORDING>
+</EXPERIMENT>

BIN
day_3/neo_material/example_data/OpenEphys_SampleData_1/STp106.0n0.spikes


+ 12 - 0
day_3/neo_material/example_data/OpenEphys_SampleData_1/all_channels.events

@@ -0,0 +1,12 @@
+header.format = 'Open Ephys Data Format'; 
+header.version = 0.4; 
+header.header_bytes = 1024;
+header.description = 'each record contains one 64-bit timestamp, one 16-bit sample position, one uint8 event type, one uint8 processor ID, one uint8 event ID, one uint8 event channel, and one uint16 recordingNumber'; 
+header.date_created = '3-Oct-2018 131650';
+header.channel = 'GUI Messages';
+header.channelType = 'Continuous';
+header.sampleRate = 40000;
+header.blockLength = 1024;
+header.bufferSize = 1024;
+header.bitVolts = 1;
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

+ 2 - 0
day_3/neo_material/example_data/OpenEphys_SampleData_1/messages.events

@@ -0,0 +1,2 @@
+51979 Software time: 51979@1000000000Hz
+51968 Processor: File Reader Id: 101 subProcessor: 0 start time: 51968@40000Hz

+ 355 - 0
day_3/neo_material/example_data/OpenEphys_SampleData_1/settings.xml

@@ -0,0 +1,355 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<SETTINGS>
+  <INFO>
+    <VERSION>0.4.4</VERSION>
+    <PLUGIN_API_VERSION>5</PLUGIN_API_VERSION>
+    <DATE>3 Oct 2018 13:16:50</DATE>
+    <OS>Mac OSX 10.12.6</OS>
+    <MACHINE>moondog</MACHINE>
+  </INFO>
+  <SIGNALCHAIN>
+    <PROCESSOR name="Sources/File Reader" insertionPoint="1" pluginName="File Reader"
+               pluginType="-1" pluginIndex="2" libraryName="" libraryVersion="-1"
+               isSource="1" isSink="0" NodeId="101">
+      <CHANNEL name="0" number="0">
+        <SELECTIONSTATE param="1" record="1" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="1" number="1">
+        <SELECTIONSTATE param="1" record="1" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="2" number="2">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="3" number="3">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="4" number="4">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="5" number="5">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="6" number="6">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="7" number="7">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="8" number="8">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="9" number="9">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="10" number="10">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="11" number="11">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="12" number="12">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="13" number="13">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="14" number="14">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="15" number="15">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <EDITOR isCollapsed="0" displayName="File Reader" Type="FileReader">
+        <FILENAME path="/Users/Josh/GitHub/open-ephys/DataFiles/data_stream_16ch_cortex.kwd"
+                  recording="1"/>
+        <TIME_LIMITS start_time="0" stop_time="4999"/>
+      </EDITOR>
+    </PROCESSOR>
+    <PROCESSOR name="Utilities/Splitter" insertionPoint="1" pluginName="Splitter"
+               pluginType="-1" pluginIndex="1" libraryName="" libraryVersion="-1"
+               isSource="0" isSink="0" NodeId="103">
+      <EDITOR isCollapsed="0" displayName="Splitter"/>
+    </PROCESSOR>
+    <PROCESSOR name="Sinks/LFP Viewer Beta" insertionPoint="1" pluginName="LFP Viewer Beta"
+               pluginType="1" pluginIndex="9" libraryName="LFP viewer Beta"
+               libraryVersion="1" isSource="0" isSink="1" NodeId="102">
+      <CHANNEL name="0" number="0">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="1" number="1">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="2" number="2">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="3" number="3">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="4" number="4">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="5" number="5">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="6" number="6">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="7" number="7">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="8" number="8">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="9" number="9">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="10" number="10">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="11" number="11">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="12" number="12">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="13" number="13">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="14" number="14">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="15" number="15">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <EDITOR isCollapsed="0" displayName="LFP Viewer Beta" Type="Visualizer">
+        <TAB Active="1"/>
+        <WINDOW Active="0"/>
+        <LFPDISPLAY Range="1000,2000,10.0" Timebase="2.0" Spread="50" colorGrouping="1"
+                    isInverted="0" drawMethod="0" EventButtonState="255" ChannelDisplayState="1111111111111111"
+                    ScrollX="0" ScrollY="0"/>
+      </EDITOR>
+    </PROCESSOR>
+    <SWITCH number="1"/>
+    <PROCESSOR name="Filters/Bandpass Filter" insertionPoint="1" pluginName="Bandpass Filter"
+               pluginType="1" pluginIndex="7" libraryName="Bandpass Filter"
+               libraryVersion="1" isSource="0" isSink="0" NodeId="105">
+      <CHANNEL name="0" number="0">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="1" number="1">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="2" number="2">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="3" number="3">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="4" number="4">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="5" number="5">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="6" number="6">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="7" number="7">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="8" number="8">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="9" number="9">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="10" number="10">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="11" number="11">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="12" number="12">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="13" number="13">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="14" number="14">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <CHANNEL name="15" number="15">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+        <PARAMETERS highcut="6000" lowcut="300" shouldFilter="1"/>
+      </CHANNEL>
+      <EDITOR isCollapsed="0" displayName="Bandpass Filter" Type="FilterEditor">
+        <VALUES HighCut="6000" LowCut="300" ApplyToADC="0"/>
+      </EDITOR>
+    </PROCESSOR>
+    <PROCESSOR name="Filters/Spike Detector" insertionPoint="1" pluginName="Spike Detector"
+               pluginType="1" pluginIndex="1" libraryName="Basic Spike Display"
+               libraryVersion="1" isSource="0" isSink="0" NodeId="106">
+      <ELECTRODE name="Stereotrode 1" numChannels="2" prePeakSamples="8" postPeakSamples="32"
+                 electrodeID="1">
+        <SUBCHANNEL ch="0" thresh="50" isActive="1"/>
+        <SUBCHANNEL ch="1" thresh="50" isActive="1"/>
+      </ELECTRODE>
+      <CHANNEL name="0" number="0">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="1" number="1">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="2" number="2">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="3" number="3">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="4" number="4">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="5" number="5">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="6" number="6">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="7" number="7">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="8" number="8">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="9" number="9">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="10" number="10">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="11" number="11">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="12" number="12">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="13" number="13">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="14" number="14">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="15" number="15">
+        <SELECTIONSTATE param="0" record="0" audio="0"/>
+      </CHANNEL>
+      <SPIKECHANNEL name="0" number="0"/>
+      <EDITOR isCollapsed="0" displayName="Spike Detector"/>
+    </PROCESSOR>
+    <PROCESSOR name="Sinks/Spike Viewer" insertionPoint="1" pluginName="Spike Viewer"
+               pluginType="1" pluginIndex="2" libraryName="Basic Spike Display"
+               libraryVersion="1" isSource="0" isSink="1" NodeId="107">
+      <CHANNEL name="0" number="0">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="1" number="1">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="2" number="2">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="3" number="3">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="4" number="4">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="5" number="5">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="6" number="6">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="7" number="7">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="8" number="8">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="9" number="9">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="10" number="10">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="11" number="11">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="12" number="12">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="13" number="13">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="14" number="14">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <CHANNEL name="15" number="15">
+        <SELECTIONSTATE param="1" record="0" audio="0"/>
+      </CHANNEL>
+      <SPIKECHANNEL name="0" number="0"/>
+      <EDITOR isCollapsed="0" displayName="Spike Viewer" Type="Visualizer">
+        <TAB Active="1"/>
+        <WINDOW Active="0"/>
+        <SPIKEDISPLAY LockThresholds="0" InvertSpikes="0">
+          <PLOT>
+            <AXIS thresh="0" range="250"/>
+            <AXIS thresh="0" range="250"/>
+          </PLOT>
+        </SPIKEDISPLAY>
+      </EDITOR>
+    </PROCESSOR>
+  </SIGNALCHAIN>
+  <AUDIO bufferSize="1024"/>
+  <GLOBAL_TIMESTAMP selected_index="0" selected_sub_index="0"/>
+  <CONTROLPANEL isOpen="1" recordPath="/Users/Josh/Documents/open-ephys" prependText=""
+                appendText="" recordEngine="OPENEPHYS"/>
+  <AUDIOEDITOR isMuted="0" volume="0" noiseGate="0"/>
+  <RECORDENGINES>
+    <ENGINE id="OPENEPHYS" name="Open Ephys">
+      <PARAMETER id="0" type="bool" value="0"/>
+      <PARAMETER id="1" type="bool" value="0"/>
+      <PARAMETER id="2" type="string" value="CH"/>
+    </ENGINE>
+    <ENGINE id="RAWBINARY" name="Binary">
+      <PARAMETER id="0" type="bool" value="1"/>
+    </ENGINE>
+    <ENGINE id="KWIK" name="Kwik"/>
+    <ENGINE id="NWB" name="NWB">
+      <PARAMETER id="0" type="string" value=""/>
+    </ENGINE>
+  </RECORDENGINES>
+  <PROCESSORLIST>
+    <COLOR ID="801" R="59" G="59" B="59"/>
+    <COLOR ID="804" R="241" G="90" B="41"/>
+    <COLOR ID="802" R="0" G="174" B="239"/>
+    <COLOR ID="803" R="0" G="166" B="81"/>
+    <COLOR ID="805" R="147" G="149" B="152"/>
+  </PROCESSORLIST>
+  <UICOMPONENT isProcessorListOpen="1" isEditorViewportOpen="1"/>
+</SETTINGS>

+ 2 - 0
day_3/neo_material/example_data/README.txt

@@ -0,0 +1,2 @@
+Data from https://gin.g-node.org/NeuralEnsemble/ephy_testing_data
+- `OpenEphys_SampleData_1` is provided by josh.siegle@gmail.com from open ephys project.

+ 116 - 0
day_3/neo_material/generate_io_overview.py

@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+
+"""
+This generate diagram of the (raw)ios and formats
+
+
+Author: Julia Sprenger
+"""
+
+import pygraphviz
+import neo
+# from datetime import datetime
+#
+# import numpy as np
+# import quantities as pq
+# from matplotlib import pyplot
+# from matplotlib.patches import Rectangle, ArrowStyle, FancyArrowPatch
+# from matplotlib.font_manager import FontProperties
+#
+# from neo.test.generate_datasets import fake_neo
+#
+# line_heigth = .22
+# fontsize = 10.5
+# left_text_shift = .1
+# dpi = 100
+
+
+default_style = {'shape': 'rectangle',
+                 'color': 'black',
+                 'fontcolor': 'black'}
+IO_style = default_style.copy()
+IO_style['fontsize'] = '30'
+IO_style['penwidth'] = 6
+
+styles = {'IO': {'ro': IO_style.copy(),
+                 'rw': IO_style.copy(),
+                 'raw': IO_style.copy()
+                 },
+          'main': default_style.copy(),
+          'ext': default_style.copy()}
+
+styles['IO']['ro']['color'] = '#20B2AA '
+styles['IO']['rw']['color'] = '#4169E1 '
+styles['IO']['raw']['color'] = '#008080 '
+styles['ext']['shape'] = 'circle'
+styles['ext']['fillcolor'] = 'red'
+styles['ext']['style'] = 'filled'
+# styles['ext']['fixedsize'] = 'True'
+
+
+def generate_diagram(filename, plot_extensions=False):
+    dia = pygraphviz.AGraph(strict=False, splines='true')
+    G=dia
+    G.node_attr['fontname'] = 'Arial'
+    # G.node_attr['shape'] = 'circle'
+    # G.node_attr['fixedsize'] = 'true'
+    # G.node_attr['sep'] = '-100'
+    G.node_attr['fixedsize'] = 'False'
+    # G.graph_attr['overlap'] = 'False'
+    G.graph_attr['packMode'] = 'clust'
+    # G.graph_attr['levelsgap'] = -500
+    G.node_attr['fontsize'] = '20'
+    G.edge_attr['minlen'] = '0'
+    # G.node_attr['style'] = 'filled'
+    # G.graph_attr['outputorder'] = 'edgesfirst'
+    # G.graph_attr['splines'] = "compound"
+    G.graph_attr['label'] = "NEO {}".format(neo.__version__)
+    G.graph_attr['ratio'] = '1.0'
+    # G.edge_attr['color'] = '#1100FF'
+
+
+    G.edge_attr['style'] = 'setlinewidth(4)'
+
+    dia.add_node('NEO', shape='circle', fontsize=50)
+
+    for io in neo.io.iolist:
+        io_name = io.name
+        rawio = False
+        if issubclass(io, neo.io.basefromrawio.BaseFromRaw):
+            rawio = True
+            if io_name == 'BaseIO':
+                io_name = io.__name__.rstrip('RawIO')
+        if io_name is None:
+            try:
+                io_name = io.__name__.rstrip('IO')
+            except:
+                continue
+        if 'example' in io_name:
+            continue
+
+        if io.is_writable and io.is_readable:
+            mode = 'rw'
+        elif io.is_readable:
+            mode = 'ro'
+        if rawio:
+            mode = 'raw'
+
+        dia.add_node(io_name, **styles['IO'][mode])
+        dia.add_edge('NEO', io_name)
+
+        if plot_extensions:
+            for ext in io.extensions:
+                dia.add_node(ext, **styles['ext'])
+                dia.add_edge(io_name, ext, minlen=0)
+
+    dia.layout(prog='fdp') #neato, dot, twopi, circo, fdp, nop, wc, acyclic, gvpr, gvcolor,
+    # ccomps, sccmap, tred, sfdp.
+    for ext in ['png', 'svg', 'eps']:
+        dia.draw('{}.{}'.format(filename, ext))
+
+
+
+if __name__ == '__main__':
+    generate_diagram('IODiagram', plot_extensions=False)
+    generate_diagram('IODiagram_ext', plot_extensions=True)
+    # pyplot.show()

File diff suppressed because it is too large
+ 202 - 0
day_3/neo_material/neo_as_interface.drawio


File diff suppressed because it is too large
+ 3 - 0
day_3/neo_material/neo_as_interface.svg


File diff suppressed because it is too large
+ 9221 - 0
day_3/neo_material/neo_logo.eps


BIN
day_3/neo_material/neo_logo.png


BIN
day_3/neo_material/neo_logo_transparent.png


File diff suppressed because it is too large
+ 27944 - 0
day_3/neo_material/neo_logo_transparent.svg


BIN
day_3/neo_material/neo_logo_transparent_no_border.png


File diff suppressed because it is too large
+ 11010 - 0
day_3/neo_material/simple_generated_diagram_with_channelview.svg


+ 982 - 0
day_3/tutorial_1_basics.ipynb

@@ -0,0 +1,982 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "591a5673",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "# <p align=\"center\">Introduction to\n",
+    "![Neo](./neo_material/neo_logo.png)\n",
+    "<p align=\"center\">Representing electrophysiology data in Python"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d02e9275",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "## Data sources in electrophysiology\n",
+    "\n",
+    "![Data sources](./neo_material/ephys_data_sources.png)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "dee2a771",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "## Data modalities in electrophysiology\n",
+    "\n",
+    "![Data sources](./neo_material/ephys_data_modalities.png)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "4c7b4932",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "How can these diverse data types and formats by treated in a common framework to \n",
+    "- allow combined analyses\n",
+    "- facilitate reproducibility\n",
+    "- simplify scientific workflows"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b80bdd60",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "...without inventing yet another file format standard?"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c09c4aac",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "##  Neo - Generic representation of common ephys modalities\n",
+    "- Standardized representation of ephys data during runtime\n",
+    "- Efficient handling of large data arrays thanks to `numpy`\n",
+    "- Description of physical units and unit conversion thanks to `quantities`"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "6e5df85c",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "import neo\n",
+    "import numpy as np\n",
+    "import quantities as pq"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9242b2de",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "## Data Classes\n",
+    "- `AnalogSignal`: Continuous data sampled in **regular** intervals"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7f8c47d0",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "*essential metadata*: physical unit of samples, time stamps of the samples (first timestamp & sampling interval)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "id": "ecfbe500",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "anasig = neo.AnalogSignal(np.zeros((50,2)), units='uV',\n",
+    "                sampling_rate=10000*pq.Hz,\n",
+    "                t_start=120*pq.ms)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "fa04abd6",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "-"
+    }
+   },
+   "source": [
+    "Note the dimensions of `Analogsignal` object: (`time`, `channel`)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "710a0eb7",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "#### Accessing metadata"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 37,
+   "id": "9ba68d73",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "units: 1.0 uV\n",
+      "sampling_rate: 10000.0 Hz\n",
+      "sampling_period: 0.0001 s\n",
+      "t_start & t_stop: (array(120.) * ms, array(125.) * ms)\n",
+      "times: [120.  120.1 120.2 120.3 120.4 120.5 120.6 120.7 120.8 120.9 121.  121.1\n",
+      " 121.2 121.3 121.4 121.5 121.6 121.7 121.8 121.9 122.  122.1 122.2 122.3\n",
+      " 122.4 122.5 122.6 122.7 122.8 122.9 123.  123.1 123.2 123.3 123.4 123.5\n",
+      " 123.6 123.7 123.8 123.9 124.  124.1 124.2 124.3 124.4 124.5 124.6 124.7\n",
+      " 124.8 124.9] ms\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(f'units: {anasig.units}')\n",
+    "print(f'sampling_rate: {anasig.sampling_rate}')\n",
+    "print(f'sampling_period: {anasig.sampling_period.simplified}')\n",
+    "print(f't_start & t_stop: {anasig.t_start, anasig.t_stop}')\n",
+    "print(f'times: {anasig.times}')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "afdf47c2",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "\n",
+    "![AnalogSignal](./neo_material/base_schematic_0.svg)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9171b1f5",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "## Data Classes\n",
+    "- `AnalogSignal`: Continuous data sampled in **regular** intervals\n",
+    "- `IrregularlySampledSignal`: Continuous data sampled in **irregular** intervals\n",
+    "- `ImageSequence`: Continuous 2D **frames** sampled in regular intervals"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "cec7e8c0",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "![ImageSequence](./neo_material/base_schematic_2.svg)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0bfb4ac8",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "## Data Classes\n",
+    "- `AnalogSignal`: Continuous data sampled in **regular** intervals\n",
+    "- `IrregularlySampledSignal`: Continuous data sampled in **irregular** intervals\n",
+    "- `ImageSequence`: Continuous 2D **image frames** sampled in regular intervals\n",
+    "- `SpikeTrain`: Time point data (& optional waveform snippet)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0534eb6b",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "*essential metadata* time values, physical units of times, (& waveform sampling rate, waveform offset to corresponding time value)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "id": "d7efe06e",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "spiketrain: [1.  4.  5.7] ms\n",
+      "t_start & t_stop: (array(0.) * ms, array(300.) * ms)\n"
+     ]
+    }
+   ],
+   "source": [
+    "st = neo.SpikeTrain([1, 4, 5.7], units='ms', name='#001', t_start=0*pq.ms, t_stop=300*pq.ms)\n",
+    "print(f'spiketrain: {st}')\n",
+    "print(f't_start & t_stop: {st.t_start, st.t_stop}')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d5ad23e7",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "![SpikeTrain](./neo_material/base_schematic_3.svg)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d0456d48",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "## Data Classes\n",
+    "- `AnalogSignal`: Continuous data sampled in **regular** intervals\n",
+    "- `IrregularlySampledSignal`: Continuous data sampled in **irregular** intervals\n",
+    "- `ImageSequence`: Continuous 2D **image frames** sampled in regular intervals\n",
+    "- `SpikeTrain`: Time point data (& optional waveform snippet)\n",
+    "- `Event`: Experiment reference time points (e.g. trigger, trial start, ...)\n",
+    "- `Epoch`: Experiment reference time ranges (e.g. trial, stimulation, ...)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "759eee37",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "![Epoch](./neo_material/base_schematic_5.svg)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b1d5a21d",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Additional metadata attributes\n",
+    "- human readable label of objects via `name` attribute\n",
+    "- custom metadata annotations via `annotation` and `array_annotation` attributes\n",
+    "- `Event` and `Epoch` can be used to `label` each time point / time period"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "id": "321dc012",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "name: electrode 1A\n",
+      "annotations: {'signal_quality': 'good'}\n",
+      "number of channels: 2\n",
+      "array_annotations: {'channel_id': array([1, 2])}\n"
+     ]
+    }
+   ],
+   "source": [
+    "anasig.name = 'electrode 1A'\n",
+    "anasig.annotate(signal_quality='good')\n",
+    "anasig.array_annotate(channel_id=[1,2])\n",
+    "print(f'name: {anasig.name}')\n",
+    "print(f'annotations: {anasig.annotations}')\n",
+    "print(f'number of channels: {anasig.shape[-1]}')\n",
+    "print(f'array_annotations: {anasig.array_annotations}')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c2062418",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Neo objects provide utility functions\n",
+    "Some usefull utility attributes and methods of neo data objects are\n",
+    "- `.times` to get array of corresponding time values\n",
+    "- `.time_slice()` to crop to a specific time range\n",
+    "- `.merge()` to combine multiple objects of the same type\n",
+    "- `.concatenate()` to append multiple signal objects\n",
+    "- `.downsample()` to create a new signal with a different sampling rate\n",
+    "- `.magnitude` to extract the underlying numpy array\n",
+    "- check out the [documentation](https://neo.readthedocs.io/en/latest/core.html) to discover more!"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0b7a117b",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "## Relations between data objects\n",
+    "- `ChannelView`: select a subset of channels of a signal, e.g. all even channels of an `AnalogSignal`\n",
+    "- **`Segment`**: contains data objects with a shared clock, e.g. a trial\n",
+    "- `Group`: groups data objects logically (no common clock required, e.g. `SpikeTrain`s of a neuronal unit)\n",
+    "- **`Block`**: contains all objects of a recording"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "635213d6",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "![Block](./neo_material/base_schematic.svg)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "63624385",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Neo structure\n",
+    "\n",
+    "```\n",
+    "Block 0\n",
+    "    .segments\n",
+    "        Segment 0\n",
+    "            .analogsignals\n",
+    "                AnalogSignal 0\n",
+    "                AnalogSignal 1\n",
+    "            .spiketrains\n",
+    "                SpikeTrain 0\n",
+    "                SpikeTrain 1\n",
+    "                SpikeTrain 2\n",
+    "        Segment 1\n",
+    "            .analogsignals\n",
+    "                AnalogSignal 0\n",
+    "                AnalogSignal 1\n",
+    "            .spiketrains\n",
+    "                SpikeTrain 0\n",
+    "                SpikeTrain 1\n",
+    "                SpikeTrain 2\n",
+    "Block 1\n",
+    "    .segments\n",
+    "        Segment 0\n",
+    "    ...\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1130f965",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Neo Class Overview\n",
+    "![neo_uml](./neo_material/simple_generated_diagram_with_channelview.svg)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d46c3064",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "# Automatic generation of Neo objects\n",
+    "<img src=\"./neo_material/IODiagram.svg\" alt=\"IODiagram\" style=\"width: 500px;\"/>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9afd13ea",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Loading a recording session\n",
+    "- generation of a complete neo structure requires only **2 lines of code** and the name of the original recording system."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 51,
+   "id": "27a022ab",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Block with 1 segments, 1 groups\n",
+       "annotations: {'openephys_version': '0.4'}\n",
+       "file_origin: './neo_material/example_data/OpenEphys_SampleData_1'\n",
+       "# segments (N=1)\n",
+       "0: Segment with 1 analogsignals, 1 events, 1 spiketrains\n",
+       "   annotations: {'openephys_version': '0.4',\n",
+       "     'date_created': \"'3-Oct-2018 131650'\",\n",
+       "     'openephys_segment_index': 1}\n",
+       "   # analogsignals (N=1)\n",
+       "   0: AnalogSignal with 2 channels of length 423936; units V; datatype float32 \n",
+       "      name: 'Signals CH'\n",
+       "      annotations: {'stream_id': 'CH'}\n",
+       "      sampling rate: 40000.0 Hz\n",
+       "      time: 1.2992 s to 11.8976 s"
+      ]
+     },
+     "execution_count": 51,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "recording_folder = './neo_material/example_data/OpenEphys_SampleData_1'\n",
+    "io = neo.io.OpenEphysIO(recording_folder)\n",
+    "block = io.read_block()\n",
+    "block"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "82d2f42a",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Accessing data objects\n",
+    "- child objects can be accessed the corresponding attribute based on the class name (plural!). E.g. `.segments`, `.analogsignals`, `.spiketrains`\n",
+    "- child objects are stored in *lists*"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 60,
+   "id": "da4d5648",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "AnalogSignal with 2 channels of length 423936; units V; datatype float32 \n",
+       "name: 'Signals CH'\n",
+       "annotations: {'stream_id': 'CH'}\n",
+       "sampling rate: 40000.0 Hz\n",
+       "time: 1.2992 s to 11.8976 s"
+      ]
+     },
+     "execution_count": 60,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# accessing the list of Segments\n",
+    "block.segments\n",
+    "# accessing the first AnalogSignal of a single Segment\n",
+    "segment = block.segments[0]\n",
+    "segment.analogsignals[0]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d8faf977",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "Inspecting a spiketrain object"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 67,
+   "id": "18359d77",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "SpikeTrain name: 'STp106.0n0#0' annotations: {'id': 'STp106.0n0#0'}"
+      ]
+     },
+     "execution_count": 67,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "spiketrain = segment.spiketrains[0]\n",
+    "spiketrain"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 70,
+   "id": "3eed0a74",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Number of spikes: 454\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "array([1.30545 , 1.403875, 1.415325, 1.422425, 1.428775, 1.45465 ,\n",
+       "       1.4658  , 1.5147  , 1.51905 , 1.521725, 1.546   , 1.563975,\n",
+       "       1.566525, 1.568325, 1.573275, 1.58005 , 1.588125, 1.59505 ,\n",
+       "       1.599125, 1.654425]) * s"
+      ]
+     },
+     "execution_count": 70,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "print(f'Number of spikes: {len(spiketrain)}')\n",
+    "spiketrain.times[:20]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b338dc98",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Dealing with large datasets\n",
+    "How to load only required data\n",
+    "\n",
+    "- some IOs are based on `RawIO` concept for efficient reading of data\n",
+    "- `RawIO`s require additional symmetries in the dataset for efficient loading\n",
+    "- *lazy* data objects (ProxyObjects) can be loaded using `io.read_block(`**`lazy=True`**`)`\n",
+    "- ProxyObjects provide a `.load(t_start, t_stop)` method that loads requested data in memory and returns complete neo data object."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 109,
+   "id": "e516de90",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "AnalogSignalProxy name: 'Signals CH' annotations: {'stream_id': 'CH'}"
+      ]
+     },
+     "execution_count": 109,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "recording_folder = './neo_material/example_data/OpenEphys_SampleData_1'\n",
+    "io = neo.io.OpenEphysIO(recording_folder)\n",
+    "block = io.read_block(lazy=True)\n",
+    "lazy_anasig = block.segments[0].analogsignals[0]\n",
+    "lazy_anasig"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9a6a885a",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "#### Loading data from a Proxy object\n",
+    "- ProxyObjects contain metadata and shape information\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 90,
+   "id": "f50bc7a3",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "signal shape: (423936, 2)\n",
+      "signal sampling rate: 40000.0 Hz\n",
+      "signal annotations: {'stream_id': 'CH'}\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(f'signal shape: {lazy_anasig.shape}')\n",
+    "print(f'signal sampling rate: {lazy_anasig.sampling_rate}')\n",
+    "print(f'signal annotations: {lazy_anasig.annotations}')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e4ef7c39",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "- data of a specific channel and time range can be loaded selectively into a new neo object"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 85,
+   "id": "2aa4d7e9",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [],
+   "source": [
+    "anasig = lazy_anasig.load(time_slice=(5*pq.s,6*pq.s), channel_indexes=[0])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 93,
+   "id": "7a4dca6d",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "signal shape: (40000, 1)\n",
+      "signal sampling rate: 40000.0 Hz\n",
+      "signal annotations: [5.       5.000025 5.00005  ... 5.999925 5.99995  5.999975] s\n",
+      "signal values: [[13.45]\n",
+      " [13.1 ]\n",
+      " [10.8 ]\n",
+      " ...\n",
+      " [12.3 ]\n",
+      " [13.05]\n",
+      " [14.15]]\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(f'signal shape: {anasig.shape}')\n",
+    "print(f'signal sampling rate: {anasig.sampling_rate}')\n",
+    "print(f'signal annotations: {anasig.times}')\n",
+    "print(f'signal values: {anasig.magnitude}')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1f2d38e9",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### How to save data?"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "32c21898",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "- selected open formats are supported for writing\n",
+    " - **NIX**[<sup>1</sup>](#fn1)\n",
+    " - NWB[<sup>1</sup>](#fn1)\n",
+    " - Matlab[<sup>2</sup>](#fn2)\n",
+    " - Ascii[<sup>2</sup>](#fn2)\n",
+    " - Numpy Pickle[<sup>3</sup>](#fn3)\n",
+    " \n",
+    "<sup>1</sup><span id=\"fn1\"> Support of neo-compatible format aspects</span>\n",
+    "\n",
+    "<sup>2</sup><span id=\"fn2\"> Does not capture complete set of metadata</span>\n",
+    "\n",
+    "<sup>3</sup><span id=\"fn3\"> Strong dependency on Numpy and Neo version</span>"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 119,
+   "id": "18593599",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[<AnalogSignal(array([[-95.6 ,  26.55],\n",
+      "       [-92.3 ,  27.8 ],\n",
+      "       [-92.  ,  26.65],\n",
+      "       ...,\n",
+      "       [  0.  ,   0.  ],\n",
+      "       [  0.  ,   0.  ],\n",
+      "       [  0.  ,   0.  ]], dtype=float32) * V, [1.2992 s, 11.8976 s], sampling rate: 40000.0 Hz)>]\n"
+     ]
+    }
+   ],
+   "source": [
+    "filename = 'my_first_neo_dataset.nix'\n",
+    "with neo.io.NixIO(filename, 'ow') as io:\n",
+    "    io.write_block(block)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ffaaba4d",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
+   "source": [
+    "### Why two NixIOs in Neo?\n",
+    "`neo.io.NixIO`\n",
+    "- non-RawIO implementation\n",
+    "- can read and write arbitrary Neo object structures\n",
+    "\n",
+    "`neo.io.NixIOFr`\n",
+    "- RawIO implementation\n",
+    "- can very efficiently read specific Neo-Nix files that contain symmetric objects"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "6f7915d3",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "# Time for ...\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "78a0901c",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "- Questions"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "3283b41c",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "- Break\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a66e0e79",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "- Interactive exploration of neo structures!"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d9e8db03",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
+   "source": [
+    "<table><tr>\n",
+    "<td> <img src=\"./neo_material/simple_generated_diagram_with_channelview.svg\" width=\"500\"/> </td>\n",
+    "<td> <img src=\"./neo_material/base_schematic.svg\" width=\"500\"/> </td>\n",
+    "</tr></table>"
+   ]
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Slideshow",
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.9.6"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}