Index: doc/html/_modules/PDW.html
===================================================================
--- doc/html/_modules/PDW.html	(revision 1e781baa9d163260df25c9e14575de1efe80daeb)
+++ 	(revision )
@@ -1,322 +1,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>PDW &#8212; RadarDex 0.314 documentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
-    <link rel="index" title="Index" href="../genindex.html" />
-    <link rel="search" title="Search" href="../search.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
-  <h1>Source code for PDW</h1><div class="highlight"><pre>
-<span></span><span class="kn">import</span> <span class="nn">struct</span>
-<span class="kn">import</span> <span class="nn">math</span>
-<span class="kn">import</span> <span class="nn">datetime</span>
-
-<span class="c1"># TODO: Use BitArray module in future versions</span>
-
-
-<div class="viewcode-block" id="PDW"><a class="viewcode-back" href="../PDW.html#PDW.PDW">[docs]</a><span class="k">class</span> <span class="nc">PDW</span><span class="p">():</span>
-
-    <span class="sd">&quot;&quot;&quot;</span>
-
-<span class="sd">    I store information from a single ppdw data block</span>
-
-<span class="sd">    .. automethod:: __init__</span>
-
-<span class="sd">    &quot;&quot;&quot;</span>
-
-<div class="viewcode-block" id="PDW.from_bytes"><a class="viewcode-back" href="../PDW.html#PDW.PDW.from_bytes">[docs]</a>    <span class="nd">@classmethod</span>
-    <span class="k">def</span> <span class="nf">from_bytes</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">byte_string</span><span class="p">):</span>
-
-        <span class="sd">&quot;&quot;&quot;</span>
-
-<span class="sd">        I create an instance of class PDW from data body (8 * 32 bits)</span>
-
-<span class="sd">        :param byte_string: a byte string containing a single data body read from a ppdw file</span>
-<span class="sd">        :type byte_string: byte string</span>
-
-<span class="sd">        :return: an instance of class PDW with attributes set according to the data of a data body</span>
-<span class="sd">        :rtype: PDW</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-
-        <span class="k">assert</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">byte_string</span><span class="p">)</span> <span class="o">==</span> <span class="mi">32</span><span class="p">)</span>
-
-        <span class="n">parts</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s1">&#39;Q4s4s4s4s4s4s&#39;</span><span class="p">,</span> <span class="n">byte_string</span><span class="p">)</span>
-        <span class="n">seconds</span> <span class="o">=</span> <span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-        <span class="n">time_of_arrival</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">seconds</span> <span class="o">/</span> <span class="mi">1000000000</span><span class="p">)</span>
-
-        <span class="n">third_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
-        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">third_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
-        <span class="n">third_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">third_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
-        <span class="n">pdw_format_identifier</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">third_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">6</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
-        <span class="n">center_frequency</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">third_entry_bit_string</span><span class="p">[</span><span class="mi">5</span><span class="p">:</span><span class="mi">32</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
-
-        <span class="n">fourth_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
-        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">fourth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
-        <span class="n">fourth_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">fourth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
-        <span class="n">is_valid</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
-        <span class="n">is_pulse</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
-        <span class="n">level_unit</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
-        <span class="n">signal_start_missing</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span>
-        <span class="n">signal_end_missing</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">4</span><span class="p">]))</span>
-        <span class="n">pulse_width</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">7</span><span class="p">:</span><span class="mi">33</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
-
-        <span class="n">fifth_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
-        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">fifth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
-        <span class="n">fifth_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">fifth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
-        <span class="n">frequency_shift_or_bandwidth</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">fifth_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">20</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
-        <span class="c1"># FIXME: You have to scale me to the range from -200.0 to 200.0 in 0.1 steps</span>
-        <span class="n">pulse_level_or_pulse_field_strength</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fifth_entry_bit_string</span><span class="p">[</span><span class="mi">20</span><span class="p">:</span><span class="mi">32</span><span class="p">],</span> <span class="mi">2</span><span class="p">))</span> <span class="o">/</span> <span class="mi">10</span>
-
-        <span class="n">sixth_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
-        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">sixth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
-        <span class="n">sixth_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sixth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
-        <span class="n">region_of_interest</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">sixth_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
-        <span class="c1"># FIXME: You have to scale me to a range from 0.0 to 6.2 in steps of 0.1 - 6.3 means unknown</span>
-        <span class="n">azimuth_confidence</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">sixth_entry_bit_string</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">7</span><span class="p">],</span> <span class="mi">2</span><span class="p">))</span> <span class="o">/</span> <span class="mi">10</span>
-        <span class="n">modulations</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s1">&#39;Unknown&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s1">&#39;Unmodulated&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s1">&#39;FM&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="s1">&#39;LFM&#39;</span><span class="p">,</span> <span class="mi">4</span><span class="p">:</span> <span class="s1">&#39;PSK-2&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s1">&#39;PSK-3&#39;</span><span class="p">,</span> <span class="mi">6</span><span class="p">:</span> <span class="s1">&#39;PSK-4&#39;</span><span class="p">,</span>
-                       <span class="mi">7</span><span class="p">:</span> <span class="s1">&#39;PSK-m&#39;</span><span class="p">,</span> <span class="mi">8</span><span class="p">:</span> <span class="s1">&#39;NLFM&#39;</span><span class="p">,</span> <span class="mi">9</span><span class="p">:</span> <span class="s1">&#39;SFM&#39;</span><span class="p">,</span> <span class="mi">10</span><span class="p">:</span> <span class="s1">&#39;TFM&#39;</span><span class="p">,</span> <span class="mi">11</span><span class="p">:</span> <span class="s1">&#39;Pulse too short&#39;</span><span class="p">}</span>
-        <span class="n">modulation</span> <span class="o">=</span> <span class="n">modulations</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">sixth_entry_bit_string</span><span class="p">[</span><span class="mi">7</span><span class="p">:</span><span class="mi">12</span><span class="p">],</span> <span class="mi">2</span><span class="p">)]</span>
-        <span class="n">sector</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sixth_entry_bit_string</span><span class="p">[</span><span class="mi">28</span><span class="p">:</span><span class="mi">32</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
-
-        <span class="n">seventh_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
-        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">seventh_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
-        <span class="n">seventh_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">seventh_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
-        <span class="n">polarities</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s1">&#39;Horizontal/Unknown&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s1">&#39;Vertical&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s1">&#39;Counter clockwise&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="s1">&#39;Clockwise&#39;</span><span class="p">}</span>
-        <span class="n">polarity</span> <span class="o">=</span> <span class="n">polarities</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">seventh_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">],</span> <span class="mi">2</span><span class="p">)]</span>
-        <span class="n">df_quality</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">seventh_entry_bit_string</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">9</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
-        <span class="c1"># FIXME: You have to scale me from -90 to 90 in 0.1 degree steps</span>
-        <span class="n">elevation</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">seventh_entry_bit_string</span><span class="p">[</span><span class="mi">9</span><span class="p">:</span><span class="mi">20</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
-        <span class="c1"># FIXME: You have to check me for a range from 0.0 to 359.9 in steps of 0.1</span>
-        <span class="n">azimuth</span> <span class="o">=</span> <span class="mf">0.1</span> <span class="o">*</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">seventh_entry_bit_string</span><span class="p">[</span><span class="mi">20</span><span class="p">:</span><span class="mi">32</span><span class="p">],</span> <span class="mi">2</span><span class="p">))</span>
-
-        <span class="n">eighth_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
-        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">eighth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
-        <span class="n">eighth_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">eighth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
-        <span class="n">channel</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">eighth_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
-
-        <span class="k">return</span> <span class="n">PDW</span><span class="p">(</span><span class="n">time_of_arrival</span><span class="p">,</span> <span class="n">pdw_format_identifier</span><span class="p">,</span> <span class="n">center_frequency</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">,</span> <span class="n">is_pulse</span><span class="p">,</span> <span class="n">level_unit</span><span class="p">,</span>
-                   <span class="n">signal_start_missing</span><span class="p">,</span> <span class="n">signal_end_missing</span><span class="p">,</span> <span class="n">pulse_width</span><span class="p">,</span> <span class="n">frequency_shift_or_bandwidth</span><span class="p">,</span>
-                   <span class="n">pulse_level_or_pulse_field_strength</span><span class="p">,</span> <span class="n">region_of_interest</span><span class="p">,</span> <span class="n">azimuth_confidence</span><span class="p">,</span> <span class="n">modulation</span><span class="p">,</span>
-                   <span class="n">sector</span><span class="p">,</span> <span class="n">polarity</span><span class="p">,</span> <span class="n">df_quality</span><span class="p">,</span> <span class="n">elevation</span><span class="p">,</span> <span class="n">azimuth</span><span class="p">,</span> <span class="n">channel</span><span class="p">)</span></div>
-
-<div class="viewcode-block" id="PDW.__init__"><a class="viewcode-back" href="../PDW.html#PDW.PDW.__init__">[docs]</a>    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time_of_arrival</span><span class="p">,</span> <span class="n">pdw_format_identifier</span><span class="p">,</span> <span class="n">center_frequency</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">,</span> <span class="n">is_pulse</span><span class="p">,</span>
-                 <span class="n">level_unit</span><span class="p">,</span> <span class="n">signal_start_missing</span><span class="p">,</span> <span class="n">signal_end_missing</span><span class="p">,</span> <span class="n">pulse_width</span><span class="p">,</span> <span class="n">frequency_shift_or_bandwidth</span><span class="p">,</span>
-                 <span class="n">pulse_level_or_pulse_field_strength</span><span class="p">,</span> <span class="n">region_of_interest</span><span class="p">,</span> <span class="n">azimuth_confidence</span><span class="p">,</span> <span class="n">modulation</span><span class="p">,</span>
-                 <span class="n">sector</span><span class="p">,</span> <span class="n">polarity</span><span class="p">,</span> <span class="n">df_quality</span><span class="p">,</span> <span class="n">elevation</span><span class="p">,</span> <span class="n">azimuth</span><span class="p">,</span> <span class="n">channel</span><span class="p">):</span>
-
-        <span class="sd">&quot;&quot;&quot;</span>
-
-<span class="sd">        :param time_of_arrival: nanoseconds since 1970-01-01 00:00:00</span>
-<span class="sd">        :type time_of_arrival: Integer</span>
-<span class="sd">        :param pdw_format: format code</span>
-<span class="sd">        :type pdw_format: Integer</span>
-<span class="sd">        :param center_frequency: center frequency in KHz</span>
-<span class="sd">        :type center_frequency: Integer</span>
-<span class="sd">        :param is_valid: flag to mark if pdw data body is valid</span>
-<span class="sd">        :type is_valid: Boolean</span>
-<span class="sd">        :param is_pulse: flag to mark if pdw data body contains a pulse or a continuous wave signal</span>
-<span class="sd">        :type is_pulse: Boolean</span>
-<span class="sd">        :param level_unit: 0 means dBµV - 1 means dBµV/m</span>
-<span class="sd">        :type level_unit: Integer</span>
-<span class="sd">        :param signal_start_missing: signal started before time of arrival</span>
-<span class="sd">        :type signal_start_missing: Boolean</span>
-<span class="sd">        :param signal_end_missing: signal stops after time of arrival</span>
-<span class="sd">        :type signal_end_missing: Boolean</span>
-<span class="sd">        :param pulse_width: pulse width in nanoseconds - Zero if no valid pulse detected</span>
-<span class="sd">        :type pulse_width: Integer</span>
-<span class="sd">        :param frequency_shift_or_bandwidth: Value in KHz - Value set to 1048575 means Unknown</span>
-<span class="sd">        :type frequency_shift_or_bandwidth: Integer</span>
-<span class="sd">        :param pulse_level_or_pulse_field_strength: Pulse level or Pulse Field Strength depending on level_unit \</span>
-<span class="sd">         (-200.0...200.0) in 0.1 steps / minus 204.8 means no valid level detected</span>
-<span class="sd">        :type pulse_level_or_pulse_field_strength: Float</span>
-<span class="sd">        :param region_of_interest: Marks if signal is from region of interest</span>
-<span class="sd">        :type region_of_interest: Boolean</span>
-<span class="sd">        :param azimuth_confidence: degree in steps of 0.1 (0.0-6.2) / 6.3 means confidence unknown</span>
-<span class="sd">        :type azimuth_confidence: Float</span>
-<span class="sd">        :param modulation: type of modulation (e.g. PSK-2, PSK-4, FM etc.)</span>
-<span class="sd">        :type modulation: String</span>
-<span class="sd">        :param sector: reference antenna sector (0-15)</span>
-<span class="sd">        :type sector: Integer</span>
-<span class="sd">        :param polarity: Horizontal, Vertical, Clockwise, Counter clockwise</span>
-<span class="sd">        :type polarity: String</span>
-<span class="sd">        :param df_quality: Direction finding quality in percent (0-100) - Zero means unknown</span>
-<span class="sd">        :type df_quality: Integer</span>
-<span class="sd">        :param elevation: elevation of incoming signal (from -90 to 90 degree) in steps of 0.1 degree \</span>
-<span class="sd">        minus 102.4 means unknown</span>
-<span class="sd">        :type elevation: Float</span>
-<span class="sd">        :param azimuth: azimuth of incoming signal (from 0 to 359.9 degree) in steps of 0.1 degree \</span>
-<span class="sd">        plus 409.5 means unknown</span>
-<span class="sd">        :type azimuth: Float</span>
-<span class="sd">        :param channel: detecting channel (0-16) - Zero means unknown</span>
-<span class="sd">        :type channel: Integer</span>
-<span class="sd">        :return: An instance of class PDW with attributes set according to the data of a data body</span>
-<span class="sd">        :rtype: PDW</span>
-
-<span class="sd">        &quot;&quot;&quot;</span>
-
-        <span class="bp">self</span><span class="o">.</span><span class="n">time_of_arrival</span> <span class="o">=</span> <span class="n">time_of_arrival</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">pdw_format_identifier</span> <span class="o">=</span> <span class="n">pdw_format_identifier</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">center_frequency</span> <span class="o">=</span> <span class="n">center_frequency</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">is_valid</span> <span class="o">=</span> <span class="n">is_valid</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">is_pulse</span> <span class="o">=</span> <span class="n">is_pulse</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">level_unit</span> <span class="o">=</span> <span class="n">level_unit</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">signal_start_missing</span> <span class="o">=</span> <span class="n">signal_start_missing</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">signal_end_missing</span> <span class="o">=</span> <span class="n">signal_end_missing</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">pulse_width</span> <span class="o">=</span> <span class="n">pulse_width</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">frequency_shift_or_bandwidth</span> <span class="o">=</span> <span class="n">frequency_shift_or_bandwidth</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">pulse_level_or_pulse_field_strength</span> <span class="o">=</span> <span class="n">pulse_level_or_pulse_field_strength</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">region_of_interest</span> <span class="o">=</span> <span class="n">region_of_interest</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">azimuth_confidence</span> <span class="o">=</span> <span class="n">azimuth_confidence</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">modulation</span> <span class="o">=</span> <span class="n">modulation</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">sector</span> <span class="o">=</span> <span class="n">sector</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">polarity</span> <span class="o">=</span> <span class="n">polarity</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">df_quality</span> <span class="o">=</span> <span class="n">df_quality</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">elevation</span> <span class="o">=</span> <span class="n">elevation</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">azimuth</span> <span class="o">=</span> <span class="n">azimuth</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">channel</span> <span class="o">=</span> <span class="n">channel</span></div>
-
-    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-        <span class="n">output</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;Time of arrival: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time_of_arrival</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
-                  <span class="s2">&quot;PDW Format identifier: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pdw_format_identifier</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
-                  <span class="s2">&quot;Center frequency: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">center_frequency</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; KHz</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_valid</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Signal: Valid</span><span class="se">\n</span><span class="s2">&quot;</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Signal: Invalid</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_pulse</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Signal type: Pulse</span><span class="se">\n</span><span class="s2">&quot;</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Signal type: Continuous wave</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">level_unit</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Pulse level: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pulse_level_or_pulse_field_strength</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; dbµV</span><span class="se">\n</span><span class="s2">&quot;</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Pulse field strength: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pulse_level_or_pulse_field_strength</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; dbµV/meter</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="n">output</span> <span class="o">+=</span> <span class="p">(</span><span class="s2">&quot;Pulse width: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pulse_width</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; nanoseconds</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
-                   <span class="s2">&quot;Frequency shift or bandwidth: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frequency_shift_or_bandwidth</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; KHz</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">region_of_interest</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Region of interest: Yes</span><span class="se">\n</span><span class="s2">&quot;</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Region of interest: No</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">azimuth_confidence</span> <span class="o">==</span> <span class="mf">6.3</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Azimuth confidence: Invalid</span><span class="se">\n</span><span class="s2">&quot;</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Azimuth confidence: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">azimuth_confidence</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; degree</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Modulation: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">modulation</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sector</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Sector: Unknown</span><span class="se">\n</span><span class="s2">&quot;</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Sector:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sector</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Polarity: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">polarity</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;DF quality: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">df_quality</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; %</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">elevation</span> <span class="o">==</span> <span class="mi">1024</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Elevation: Unknown</span><span class="se">\n</span><span class="s2">&quot;</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Elevation: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">elevation</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; degree</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">azimuth</span> <span class="o">==</span> <span class="mf">409.5</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Azimuth: Unknown</span><span class="se">\n</span><span class="s2">&quot;</span>
-        <span class="k">else</span><span class="p">:</span>
-            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Azimuth: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">azimuth</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; degree</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Channel: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-
-        <span class="k">return</span> <span class="n">output</span></div>
-
-
-<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
-    <span class="k">pass</span>
-</pre></div>
-
-          </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">RadarDex</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="../PDW.html">PDW module</a></li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-  <li><a href="index.html">Module code</a><ul>
-  </ul></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy;2020, Enrico Schwass.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 1.8.5</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
-      
-    </div>
-
-    
-
-    
-  </body>
-</html>
Index: doc/html/_modules/ammosreader/AmmosAudioDataHeader.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosAudioDataHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosAudioDataHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,154 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosAudioDataHeader &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosAudioDataHeader</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">struct</span>
+<span class="kn">import</span> <span class="nn">numpy</span>
+
+<div class="viewcode-block" id="AmmosAudioDemodType"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioDataHeader.AmmosAudioDemodType">[docs]</a><span class="k">class</span> <span class="nc">AmmosAudioDemodType</span><span class="p">():</span>
+
+    <span class="nd">@classmethod</span>
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">mapping</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s1">&#39;FM&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s1">&#39;AM&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s1">&#39;ISB&#39;</span><span class="p">,</span> <span class="mi">6</span><span class="p">:</span> <span class="s1">&#39;CW&#39;</span><span class="p">,</span>
+                <span class="mi">7</span><span class="p">:</span> <span class="s1">&#39;USB&#39;</span><span class="p">,</span> <span class="mi">8</span><span class="p">:</span> <span class="s1">&#39;LSB&#39;</span><span class="p">,</span> <span class="mi">256</span><span class="p">:</span> <span class="s1">&#39;DIGITAL&#39;</span><span class="p">,</span>
+                <span class="mh">0xFFFFFFFF</span><span class="p">:</span> <span class="s1">&#39;UNKNOWN&#39;</span><span class="p">}</span>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">demod_type</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">demod_type</span> <span class="o">=</span> <span class="n">demod_type</span>
+
+    <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">AmmosAudioDemodType</span><span class="o">.</span><span class="n">mapping</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">demod_type</span><span class="p">]</span></div>
+
+<div class="viewcode-block" id="AmmosAudioDataHeader"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader">[docs]</a><span class="k">class</span> <span class="nc">AmmosAudioDataHeader</span><span class="p">():</span>
+
+<div class="viewcode-block" id="AmmosAudioDataHeader.from_bytes"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioDataHeader.AmmosAudioDataHeader.from_bytes">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">from_bytes</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
+        <span class="n">elements</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s1">&#39;&lt;IIQIIIII&#39;</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)</span>
+        <span class="n">sample_rate</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">status</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+        <span class="n">frequency</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
+        <span class="n">demod_bandwidth</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
+        <span class="n">demod_type</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
+        <span class="n">sample_count</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
+        <span class="n">channel_count</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span>
+        <span class="n">sample_size</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span>
+        <span class="k">return</span> <span class="n">AmmosAudioDataHeader</span><span class="p">(</span><span class="n">sample_rate</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">frequency</span><span class="p">,</span> <span class="n">demod_bandwidth</span><span class="p">,</span> <span class="n">demod_type</span><span class="p">,</span>
+                                    <span class="n">sample_count</span><span class="p">,</span> <span class="n">channel_count</span><span class="p">,</span> <span class="n">sample_size</span><span class="p">)</span></div>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sample_rate</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">frequency</span><span class="p">,</span> <span class="n">demod_bandwidth</span><span class="p">,</span> <span class="n">demod_type</span><span class="p">,</span> <span class="n">sample_count</span><span class="p">,</span> <span class="n">channel_count</span><span class="p">,</span> <span class="n">sample_size</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sample_rate</span> <span class="o">=</span> <span class="n">sample_rate</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">status</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">frequency</span> <span class="o">=</span> <span class="n">frequency</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">demod_bandwidth</span> <span class="o">=</span> <span class="n">demod_bandwidth</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">demod_type</span> <span class="o">=</span> <span class="n">AmmosAudioDemodType</span><span class="p">(</span><span class="n">demod_type</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sample_count</span> <span class="o">=</span> <span class="n">sample_count</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">channel_count</span> <span class="o">=</span> <span class="n">channel_count</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sample_size</span> <span class="o">=</span> <span class="n">sample_size</span>
+
+    <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">AmmosAudioDataHeader</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                <span class="s2">&quot;Sample rate:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sample_rate</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                <span class="s2">&quot;Status:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                <span class="s2">&quot;Frequency:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frequency</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                <span class="s2">&quot;Demodulation bandwidth:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">demod_bandwidth</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                <span class="s2">&quot;Demodulation type:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">demod_type</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                <span class="s2">&quot;Sample count:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sample_count</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                <span class="s2">&quot;Channel count:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">channel_count</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                <span class="s2">&quot;Sample size:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sample_size</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosAudioReader.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosAudioReader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosAudioReader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,300 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosAudioReader &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosAudioReader</h1><div class="highlight"><pre>
+<span></span><span class="sd">&quot;&quot;&quot;I parse an R&amp;S AMMOS recording.&quot;&quot;&quot;</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="kn">from</span> <span class="nn">.AmmosGlobalFrameBody</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameBody</span>
+<span class="kn">from</span> <span class="nn">.AmmosAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosAudioDataHeader</span>
+<span class="kn">from</span> <span class="nn">.AmmosExtendedAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosExtendedAudioDataHeader</span>
+<span class="kn">from</span> <span class="nn">.AmmosGlobalFrameHeader</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameHeader</span>
+<span class="kn">from</span> <span class="nn">.AmmosSingleFrame</span> <span class="kn">import</span> <span class="n">AmmosSingleFrame</span>
+<span class="kn">from</span> <span class="nn">.AmmosContainer</span> <span class="kn">import</span> <span class="n">AmmosContainer</span>
+
+
+<div class="viewcode-block" id="AmmosAudioReader"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader">[docs]</a><span class="k">class</span> <span class="nc">AmmosAudioReader</span><span class="p">():</span>
+    <span class="sd">&quot;&quot;&quot;I read the audio data embedded in an R&amp;S AMMOS recording.&quot;&quot;&quot;</span>
+
+    <span class="n">GLOBAL_HEADER_SIZE</span> <span class="o">=</span> <span class="mi">24</span>  <span class="c1"># 8 words</span>
+    <span class="n">STANDARD_AUDIO_DATA_HEADER_SIZE</span> <span class="o">=</span> <span class="mi">36</span>  <span class="c1"># 9 words</span>
+    <span class="n">EXTENDED_AUDIO_DATA_HEADER_SIZE</span> <span class="o">=</span> <span class="mi">44</span>  <span class="c1"># 11 words</span>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        I return an instance of AmmosAudioReader initialized with a given file name.</span>
+
+<span class="sd">        :param file_name: the file to read from</span>
+<span class="sd">        :type file_name: str</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">file_name</span> <span class="o">=</span> <span class="n">file_name</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">file_size</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_name</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">AmmosContainer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_name</span><span class="p">,</span> <span class="p">[])</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">tags</span> <span class="o">=</span> <span class="p">{}</span>
+
+<div class="viewcode-block" id="AmmosAudioReader.rewind_to_start"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader.rewind_to_start">[docs]</a>    <span class="k">def</span> <span class="nf">rewind_to_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;I set the file pointer to the beginning of the file for the next operation.&quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosAudioReader.add_tag"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader.add_tag">[docs]</a>    <span class="k">def</span> <span class="nf">add_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        I add a tag to my tag list.</span>
+
+<span class="sd">        :param tag: The tag to add to my tag list</span>
+<span class="sd">        :type tag: dict</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">tags</span><span class="p">[</span><span class="n">tag</span><span class="o">.</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">tag</span><span class="o">.</span><span class="n">value</span></div>
+
+<div class="viewcode-block" id="AmmosAudioReader.read_all_frames_left"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader.read_all_frames_left">[docs]</a>    <span class="k">def</span> <span class="nf">read_all_frames_left</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        I read all remaining frames into my container until end of file is reached.</span>
+
+<span class="sd">        :return: a container containing all frames read</span>
+<span class="sd">        :rtype: AmmosContainer</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">frames_read</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Reading single frame&quot;</span><span class="p">,</span> <span class="n">frames_read</span><span class="p">,</span> <span class="s1">&#39;...&#39;</span><span class="p">)</span>
+            <span class="n">current_frame</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_single_frame</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">current_frame</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+                <span class="n">frames_read</span> <span class="o">+=</span> <span class="mi">1</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">add_frame</span><span class="p">(</span><span class="n">current_frame</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">frames_read</span> <span class="o">%</span> <span class="mi">10000</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Frame:&quot;</span><span class="p">,</span> <span class="n">frames_read</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="s2">&quot; incomplete&quot;</span><span class="p">)</span>
+                <span class="k">break</span>
+
+        <span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">global_frames</span><span class="p">),</span> <span class="s2">&quot;frames read&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span></div>
+
+<div class="viewcode-block" id="AmmosAudioReader.read_next_global_frame_header"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader.read_next_global_frame_header">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_global_frame_header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        I return the next global frame header read from current position in file.</span>
+
+<span class="sd">        :return: the next global frame header or None if incomplete</span>
+<span class="sd">        :rtype: AmmosGlobalFrameHeader</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">bytes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">GLOBAL_HEADER_SIZE</span><span class="p">)</span>
+        <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Reading next global frame header&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="p">((</span><span class="ow">not</span> <span class="nb">bytes</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">GLOBAL_HEADER_SIZE</span><span class="p">)):</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Can not read all&quot;</span><span class="p">,</span> <span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">GLOBAL_HEADER_SIZE</span><span class="p">,</span> <span class="s2">&quot;bytes of global frame header&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="c1"># FIXME: Catch exceptions and add some asserts</span>
+        <span class="n">current_global_frame_header</span> <span class="o">=</span> <span class="n">AmmosGlobalFrameHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span>
+        <span class="c1"># print(&quot;Current global frame header&quot;, current_global_frame_header)</span>
+        <span class="k">return</span> <span class="n">current_global_frame_header</span></div>
+
+<div class="viewcode-block" id="AmmosAudioReader.read_next_global_frame_body_data_header"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader.read_next_global_frame_body_data_header">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_global_frame_body_data_header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        I return the next global frame body data header from current position in file.</span>
+
+<span class="sd">        :param data_header_size: the number of bytes to read</span>
+<span class="sd">        :type data_header_size: int</span>
+<span class="sd">        :return: the next Ammos Audio Data header or None if incomplete</span>
+<span class="sd">        :rtype: AmmosAudioDataHeader</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">bytes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">STANDARD_AUDIO_DATA_HEADER_SIZE</span><span class="p">)</span>
+
+        <span class="c1"># print(&quot;\nReading global frame body standard data header\n&quot;)</span>
+        <span class="k">if</span> <span class="p">((</span><span class="ow">not</span> <span class="nb">bytes</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">STANDARD_AUDIO_DATA_HEADER_SIZE</span><span class="p">)):</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Can not read all&quot;</span><span class="p">,</span> <span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">STANDARD_AUDIO_DATA_HEADER_SIZE</span><span class="p">,</span>
+                  <span class="s2">&quot;bytes of global frame body data header&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+        <span class="k">return</span> <span class="n">AmmosAudioDataHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosAudioReader.read_next_global_frame_body_extended_data_header"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader.read_next_global_frame_body_extended_data_header">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_global_frame_body_extended_data_header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        I return the next global frame body extended data header from current position in file.</span>
+
+<span class="sd">        :return: the next Ammos Audio Extended Data header or None if incomplete</span>
+<span class="sd">        :rtype: AmmosExtendedAudioDataHeader</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="nb">bytes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">EXTENDED_AUDIO_DATA_HEADER_SIZE</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="p">((</span><span class="ow">not</span> <span class="nb">bytes</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">EXTENDED_AUDIO_DATA_HEADER_SIZE</span><span class="p">)):</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Can not read all &quot;</span><span class="p">,</span> <span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">EXTENDED_AUDIO_DATA_HEADER_SIZE</span><span class="p">,</span>
+                  <span class="s2">&quot; bytes of global frame extended data header&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+        <span class="k">return</span> <span class="n">AmmosExtendedAudioDataHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosAudioReader.read_next_audio_data_body"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader.read_next_audio_data_body">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_audio_data_body</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sample_count</span><span class="p">,</span> <span class="n">channel_count</span><span class="p">,</span> <span class="n">sample_size</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        I return the next audio data read from current position in file.</span>
+
+<span class="sd">        :param sample_count: the number of samples per channel inside data body</span>
+<span class="sd">        :type sample_count: int</span>
+
+<span class="sd">        :param channel_count: number of channels (e.g. mono, stereo or even more)</span>
+<span class="sd">        :type channel_count: int</span>
+
+<span class="sd">        :param sample_size: sample size in bytes (1, 2 or 4 bytes)</span>
+<span class="sd">        :type sample_size: int</span>
+
+<span class="sd">        :return: the next audio data or None if incomplete</span>
+<span class="sd">        :rtype: bytes</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c1"># FIXME: Describe the parameters better</span>
+
+        <span class="n">total</span> <span class="o">=</span> <span class="n">sample_count</span><span class="o">*</span><span class="n">channel_count</span><span class="o">*</span><span class="n">sample_size</span>
+
+        <span class="n">byte_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">total</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">byte_string</span><span class="p">)</span> <span class="o">!=</span> <span class="n">total</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Can not read all&quot;</span><span class="p">,</span> <span class="n">total</span><span class="p">,</span> <span class="s2">&quot;bytes of data body&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+        <span class="nb">print</span><span class="p">([</span><span class="nb">hex</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">byte_string</span><span class="p">])</span>
+        <span class="k">return</span> <span class="n">byte_string</span></div>
+
+<div class="viewcode-block" id="AmmosAudioReader.read_next_global_frame_body"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader.read_next_global_frame_body">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_global_frame_body</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_frame_header</span><span class="p">):</span>
+
+        <span class="n">audio_data_header</span> <span class="o">=</span> <span class="kc">None</span>
+
+        <span class="k">if</span> <span class="n">global_frame_header</span><span class="o">.</span><span class="n">data_header_length</span> <span class="o">==</span> <span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">STANDARD_AUDIO_DATA_HEADER_SIZE</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Read standard data header&quot;</span><span class="p">)</span>
+            <span class="n">audio_data_header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_global_frame_body_data_header</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">global_frame_header</span><span class="o">.</span><span class="n">data_header_length</span> <span class="o">==</span> <span class="n">AmmosAudioReader</span><span class="o">.</span><span class="n">EXTENDED_AUDIO_DATA_HEADER_SIZE</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Read extended data header&quot;</span><span class="p">)</span>
+            <span class="n">audio_data_header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_global_frame_body_extended_data_header</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">audio_data_header</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Data header missing or format unknown&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="n">audio_data_body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_audio_data_body</span><span class="p">(</span><span class="n">audio_data_header</span><span class="o">.</span><span class="n">sample_count</span><span class="p">,</span>
+                                                         <span class="n">audio_data_header</span><span class="o">.</span><span class="n">channel_count</span><span class="p">,</span>
+                                                         <span class="n">audio_data_header</span><span class="o">.</span><span class="n">sample_size</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">audio_data_body</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Data body missing&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">return</span> <span class="n">AmmosGlobalFrameBody</span><span class="p">(</span><span class="n">audio_data_header</span><span class="p">,</span> <span class="n">audio_data_body</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosAudioReader.read_next_single_frame"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioReader.AmmosAudioReader.read_next_single_frame">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_single_frame</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+
+        <span class="n">global_frame_header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_global_frame_header</span><span class="p">()</span>
+
+        <span class="nb">print</span><span class="p">(</span><span class="n">global_frame_header</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">global_frame_header</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Global frame header missing&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">if</span> <span class="n">global_frame_header</span><span class="o">.</span><span class="n">data_header_length</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Data header length empty&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">if</span> <span class="n">global_frame_header</span><span class="o">.</span><span class="n">frame_type</span> <span class="o">==</span> <span class="mi">256</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Audio Datastream found&quot;</span><span class="p">)</span>
+            <span class="n">global_frame_body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_global_frame_body</span><span class="p">(</span><span class="n">global_frame_header</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">global_frame_body</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+                <span class="k">return</span> <span class="kc">None</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Unsupported frame type&quot;</span><span class="p">,</span> <span class="n">global_frame_header</span><span class="o">.</span><span class="n">frame_type</span><span class="p">,</span> <span class="s2">&quot;found&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="n">ammos_single_frame</span> <span class="o">=</span> <span class="n">AmmosSingleFrame</span><span class="p">(</span><span class="n">global_frame_header</span><span class="p">,</span> <span class="n">global_frame_body</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">ammos_single_frame</span></div></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosAudioSocketReader.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosAudioSocketReader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosAudioSocketReader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,223 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosAudioSocketReader &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosAudioSocketReader</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">deque</span>
+
+<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
+<span class="kn">from</span> <span class="nn">.AmmosAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosAudioDataHeader</span>
+<span class="kn">from</span> <span class="nn">.AmmosExtendedAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosExtendedAudioDataHeader</span>
+<span class="kn">from</span> <span class="nn">.AmmosGlobalFrameHeader</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameHeader</span>
+
+
+<div class="viewcode-block" id="AmmosAudioSocketReader"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader">[docs]</a><span class="k">class</span> <span class="nc">AmmosAudioSocketReader</span><span class="p">:</span>
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">socket</span><span class="p">:</span><span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Initializes the AmmosAudioSocketReader</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">            socket (socket.socket): socket to read from</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        
+        <span class="bp">self</span><span class="o">.</span><span class="n">__socket</span> <span class="o">=</span> <span class="n">socket</span>
+
+        <span class="c1">#buffer for reading socket bytewise und check for the magic word</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">__magic_word_buffer</span> <span class="o">=</span> <span class="n">deque</span><span class="p">(</span><span class="n">maxlen</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
+
+        <span class="c1">#input socket to read from</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">__socket</span> <span class="o">=</span> <span class="n">socket</span>
+
+    <span class="k">def</span> <span class="nf">__read_next_audio_data_body</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sample_count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">channel_count</span><span class="p">:</span><span class="nb">int</span><span class="p">,</span> <span class="n">sample_size</span><span class="p">:</span><span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bytearray</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        reads the next audio data body</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">            sample_count (int): amount of samples</span>
+<span class="sd">            channel_count (int): amount of channels</span>
+<span class="sd">            sample_size (int): size of a sample in bytes</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">            bytearray: contains the audio data</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="n">total</span> <span class="o">=</span> <span class="n">sample_count</span><span class="o">*</span><span class="n">channel_count</span><span class="o">*</span><span class="n">sample_size</span>
+        <span class="n">byte_array</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array</span><span class="p">))</span> <span class="o">&lt;</span> <span class="n">total</span><span class="p">:</span>
+            <span class="n">byte_array</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__socket</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="n">total</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array</span><span class="p">))))</span>
+
+        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array</span><span class="p">))</span> <span class="o">!=</span> <span class="n">total</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Can not read all&quot;</span><span class="p">,</span> <span class="n">total</span><span class="p">,</span> <span class="s2">&quot;bytes of data body&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+        <span class="k">return</span> <span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__audio_data_body_to_numpy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">audio_data_body</span><span class="p">:</span><span class="nb">bytearray</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        converts the audio data body to a numpy array</span>
+
+<span class="sd">        Args:</span>
+<span class="sd">            audio_data_body (bytearray): audio data from audio data body</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">            np.ndarray: audio data as numpy array</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">frombuffer</span><span class="p">(</span><span class="n">audio_data_body</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">int16</span><span class="p">)</span>
+
+<div class="viewcode-block" id="AmmosAudioSocketReader.read_next_frame"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosAudioSocketReader.AmmosAudioSocketReader.read_next_frame">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_frame</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">tuple</span><span class="p">[</span><span class="nb">bytearray</span><span class="p">,</span> <span class="nb">int</span><span class="p">]:</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        reads the next ammos audio frame</span>
+
+<span class="sd">        Returns:</span>
+<span class="sd">            tuple[bytearray, int]: contains the audio data and the sample rate</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c1">#read loop</span>
+        <span class="n">byte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__socket</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+
+        <span class="k">while</span> <span class="n">byte</span><span class="p">:</span>
+            <span class="c1">#</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">__magic_word_buffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">byte</span><span class="p">)</span>
+            <span class="n">byte_array</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__magic_word_buffer</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">byte_array</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;726574fb&#39;</span><span class="p">:</span>
+                <span class="c1">#print(byte_array.hex())</span>
+
+                <span class="n">ammos_global_header_buffer</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__magic_word_buffer</span><span class="p">)</span>
+                <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ammos_global_header_buffer</span><span class="p">))</span> <span class="o">&lt;</span> <span class="mi">24</span><span class="p">:</span>
+                    <span class="n">ammos_global_header_buffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__socket</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">24</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ammos_global_header_buffer</span><span class="p">))))</span>
+                    
+                <span class="n">ammos_global_header</span> <span class="o">=</span> <span class="n">AmmosGlobalFrameHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ammos_global_header_buffer</span><span class="p">))</span>
+                <span class="nb">print</span><span class="p">(</span><span class="n">ammos_global_header</span><span class="p">)</span>
+
+                <span class="k">if</span> <span class="n">ammos_global_header</span><span class="o">.</span><span class="n">data_header_length</span> <span class="o">==</span> <span class="mi">44</span> <span class="ow">and</span> <span class="n">ammos_global_header</span><span class="o">.</span><span class="n">frame_type</span> <span class="o">==</span> <span class="mi">256</span><span class="p">:</span>
+                    <span class="n">byte_array_header</span> <span class="o">=</span> <span class="p">[]</span>
+                    <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array_header</span><span class="p">))</span> <span class="o">&lt;</span> <span class="mi">44</span><span class="p">:</span>
+                        <span class="n">byte_array_header</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__socket</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">44</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array_header</span><span class="p">))))</span>
+
+                    <span class="n">ammos_extended_audio_data_header</span> <span class="o">=</span> <span class="n">AmmosExtendedAudioDataHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array_header</span><span class="p">))</span>
+                    <span class="nb">print</span><span class="p">(</span><span class="n">ammos_extended_audio_data_header</span><span class="o">.</span><span class="n">sample_count</span><span class="p">,</span> <span class="n">ammos_extended_audio_data_header</span><span class="o">.</span><span class="n">channel_count</span><span class="p">,</span> <span class="n">ammos_extended_audio_data_header</span><span class="o">.</span><span class="n">sample_size</span><span class="p">)</span>
+                    <span class="n">audio_body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__read_next_audio_data_body</span><span class="p">(</span><span class="n">ammos_extended_audio_data_header</span><span class="o">.</span><span class="n">sample_count</span><span class="p">,</span> 
+                                                                  <span class="n">ammos_extended_audio_data_header</span><span class="o">.</span><span class="n">channel_count</span><span class="p">,</span> 
+                                                                  <span class="n">ammos_extended_audio_data_header</span><span class="o">.</span><span class="n">sample_size</span><span class="p">)</span>
+
+                    <span class="n">audio_array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__audio_data_body_to_numpy</span><span class="p">(</span><span class="n">audio_body</span><span class="p">)</span>
+                    <span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">audio_array</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">audio_array</span><span class="p">)</span><span class="o">/</span><span class="n">ammos_extended_audio_data_header</span><span class="o">.</span><span class="n">sample_rate</span><span class="p">)</span>
+
+                    <span class="k">return</span> <span class="p">[</span><span class="n">audio_array</span><span class="p">,</span> <span class="n">ammos_extended_audio_data_header</span><span class="o">.</span><span class="n">sample_rate</span><span class="p">]</span>
+
+                <span class="k">elif</span> <span class="n">ammos_global_header</span><span class="o">.</span><span class="n">data_header_length</span> <span class="o">==</span> <span class="mi">36</span> <span class="ow">and</span> <span class="n">ammos_global_header</span><span class="o">.</span><span class="n">frame_type</span> <span class="o">==</span> <span class="mi">256</span><span class="p">:</span>
+                    <span class="n">byte_array_header</span> <span class="o">=</span> <span class="p">[]</span>
+                    <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array_header</span><span class="p">))</span> <span class="o">&lt;</span> <span class="mi">36</span><span class="p">:</span>
+                        <span class="n">byte_array_header</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__socket</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">36</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array_header</span><span class="p">))))</span>
+
+                    <span class="n">ammos_audio_data_header</span> <span class="o">=</span> <span class="n">AmmosAudioDataHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">byte_array_header</span><span class="p">))</span>
+                    <span class="nb">print</span><span class="p">(</span><span class="n">ammos_audio_data_header</span><span class="o">.</span><span class="n">sample_count</span><span class="p">,</span> <span class="n">ammos_audio_data_header</span><span class="o">.</span><span class="n">channel_count</span><span class="p">,</span> <span class="n">ammos_audio_data_header</span><span class="o">.</span><span class="n">sample_size</span><span class="p">)</span>
+                    <span class="n">audio_body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__read_next_audio_data_body</span><span class="p">(</span><span class="n">ammos_audio_data_header</span><span class="o">.</span><span class="n">sample_count</span><span class="p">,</span> 
+                                                                  <span class="n">ammos_audio_data_header</span><span class="o">.</span><span class="n">channel_count</span><span class="p">,</span> 
+                                                                  <span class="n">ammos_audio_data_header</span><span class="o">.</span><span class="n">sample_size</span><span class="p">)</span>
+
+                    <span class="n">audio_array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__audio_data_body_to_numpy</span><span class="p">(</span><span class="n">audio_body</span><span class="p">)</span>
+                    <span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">audio_array</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">audio_array</span><span class="p">)</span><span class="o">/</span><span class="n">ammos_audio_data_header</span><span class="o">.</span><span class="n">sample_rate</span><span class="p">)</span>
+
+                    <span class="k">return</span> <span class="p">[</span><span class="n">audio_array</span><span class="p">,</span> <span class="n">ammos_audio_data_header</span><span class="o">.</span><span class="n">sample_rate</span><span class="p">]</span>
+
+            <span class="n">byte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__socket</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="kc">None</span></div></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosContainer.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosContainer.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosContainer.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,129 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosContainer &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosContainer</h1><div class="highlight"><pre>
+<span></span><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
+
+<div class="viewcode-block" id="AmmosContainer"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosContainer.AmmosContainer">[docs]</a><span class="k">class</span> <span class="nc">AmmosContainer</span><span class="p">():</span>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">frames</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">global_frames</span> <span class="o">=</span> <span class="n">frames</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">tags</span> <span class="o">=</span> <span class="p">[]</span>
+
+<div class="viewcode-block" id="AmmosContainer.add_tag"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosContainer.AmmosContainer.add_tag">[docs]</a>    <span class="k">def</span> <span class="nf">add_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosContainer.add_frame"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosContainer.AmmosContainer.add_frame">[docs]</a>    <span class="k">def</span> <span class="nf">add_frame</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frame</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">global_frames</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosContainer.size"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosContainer.AmmosContainer.size">[docs]</a>    <span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">global_frames</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosContainer.frequencies"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosContainer.AmmosContainer.frequencies">[docs]</a>    <span class="k">def</span> <span class="nf">frequencies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="nb">set</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">frame</span><span class="p">:</span> <span class="n">frame</span><span class="o">.</span><span class="n">global_frame_body</span><span class="o">.</span><span class="n">data_header</span><span class="o">.</span><span class="n">frequency</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">global_frames</span><span class="p">)))</span></div>
+
+    <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">start_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">global_frames</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">global_frame_body</span><span class="o">.</span><span class="n">data_header</span><span class="o">.</span><span class="n">timestamp</span>
+        <span class="n">end_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">global_frames</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">global_frame_body</span><span class="o">.</span><span class="n">data_header</span><span class="o">.</span><span class="n">timestamp</span>
+
+        <span class="n">frq</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">global_frames</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">global_frame_body</span><span class="o">.</span><span class="n">data_header</span><span class="o">.</span><span class="n">frequency</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="p">(</span><span class="s2">&quot;Start time: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">start_time</span><span class="o">/</span><span class="mi">1000000</span><span class="p">))</span> <span class="o">+</span>
+                <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">End time  : &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">utcfromtimestamp</span><span class="p">(</span><span class="n">end_time</span><span class="o">/</span><span class="mi">1000000</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Frequencies: &quot;</span> <span class="o">+</span> <span class="n">frq</span><span class="p">)</span></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosExtendedAudioDataHeader.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosExtendedAudioDataHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosExtendedAudioDataHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,134 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosExtendedAudioDataHeader &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosExtendedAudioDataHeader</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">struct</span>
+<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
+<span class="kn">from</span> <span class="nn">.AmmosAudioDataHeader</span> <span class="kn">import</span> <span class="n">AmmosAudioDataHeader</span>
+
+
+<div class="viewcode-block" id="AmmosExtendedAudioDataHeader"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader">[docs]</a><span class="k">class</span> <span class="nc">AmmosExtendedAudioDataHeader</span><span class="p">():</span>
+
+<div class="viewcode-block" id="AmmosExtendedAudioDataHeader.from_bytes"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosExtendedAudioDataHeader.AmmosExtendedAudioDataHeader.from_bytes">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">from_bytes</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
+        <span class="n">standard_header</span> <span class="o">=</span> <span class="n">AmmosAudioDataHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="nb">bytes</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">36</span><span class="p">])</span>
+        <span class="n">extended_header_elements</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s1">&#39;Q&#39;</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">[</span><span class="mi">36</span><span class="p">:])</span>
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">extended_header_elements</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">sample_rate</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">sample_rate</span>
+        <span class="n">status</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">status</span>
+        <span class="n">frequency</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">frequency</span>
+        <span class="n">demod_bandwidth</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">demod_bandwidth</span>
+        <span class="n">demod_type</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">demod_type</span>
+        <span class="n">sample_count</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">sample_count</span>
+        <span class="n">channel_count</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">channel_count</span>
+        <span class="n">sample_size</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">sample_size</span>
+        <span class="k">return</span> <span class="n">AmmosExtendedAudioDataHeader</span><span class="p">(</span><span class="n">sample_rate</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">frequency</span><span class="p">,</span> <span class="n">demod_bandwidth</span><span class="p">,</span> <span class="n">demod_type</span><span class="p">,</span>
+                                            <span class="n">sample_count</span><span class="p">,</span> <span class="n">channel_count</span><span class="p">,</span> <span class="n">sample_size</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">)</span></div>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sample_rate</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">frequency</span><span class="p">,</span> <span class="n">demod_bandwidth</span><span class="p">,</span> <span class="n">demod_type</span><span class="p">,</span>
+                 <span class="n">sample_count</span><span class="p">,</span> <span class="n">channel_count</span><span class="p">,</span> <span class="n">sample_size</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sample_rate</span> <span class="o">=</span> <span class="n">sample_rate</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">status</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">frequency</span> <span class="o">=</span> <span class="n">frequency</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">demod_bandwidth</span> <span class="o">=</span> <span class="n">demod_bandwidth</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">demod_type</span> <span class="o">=</span> <span class="n">demod_type</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sample_count</span> <span class="o">=</span> <span class="n">sample_count</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">channel_count</span> <span class="o">=</span> <span class="n">channel_count</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sample_size</span> <span class="o">=</span> <span class="n">sample_size</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span> <span class="o">=</span> <span class="n">timestamp</span></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosExtendedIFDataHeader.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosExtendedIFDataHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosExtendedIFDataHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,169 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosExtendedIFDataHeader &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosExtendedIFDataHeader</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">struct</span>
+<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
+<span class="kn">from</span> <span class="nn">.AmmosIFDataHeader</span> <span class="kn">import</span> <span class="n">AmmosIFDataHeader</span>
+
+
+<div class="viewcode-block" id="AmmosExtendedIFDataHeader"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader">[docs]</a><span class="k">class</span> <span class="nc">AmmosExtendedIFDataHeader</span><span class="p">():</span>
+
+<div class="viewcode-block" id="AmmosExtendedIFDataHeader.from_bytes"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosExtendedIFDataHeader.AmmosExtendedIFDataHeader.from_bytes">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">from_bytes</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
+        <span class="n">standard_header</span> <span class="o">=</span> <span class="n">AmmosIFDataHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="nb">bytes</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">56</span><span class="p">])</span>
+        <span class="n">extended_header_elements</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s1">&#39;QQI&#39;</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">[</span><span class="mi">56</span><span class="p">:</span><span class="mi">76</span><span class="p">])</span>
+        <span class="n">block_count</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">block_count</span>
+        <span class="n">block_length</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">block_length</span>
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">timestamp</span>
+        <span class="n">status</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">status</span>
+        <span class="n">source_id</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">source_id</span>
+        <span class="n">source_state</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">source_state</span>
+        <span class="n">frequency</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">frequency</span>
+        <span class="n">bandwidth</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">bandwidth</span>
+        <span class="n">sample_rate</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">sample_rate</span>
+        <span class="n">interpolation</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">interpolation</span>
+        <span class="n">decimation</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">decimation</span>
+        <span class="n">voltage_ref</span> <span class="o">=</span> <span class="n">standard_header</span><span class="o">.</span><span class="n">voltage_ref</span>
+        <span class="n">stream_start</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">datetime64</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">extended_header_elements</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="s1">&#39;ns&#39;</span><span class="p">)</span>
+        <span class="n">sample_counter</span> <span class="o">=</span> <span class="n">extended_header_elements</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+        <span class="n">antenna_correction</span> <span class="o">=</span> <span class="n">extended_header_elements</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
+        <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">AmmosExtendedIFDataHeader</span><span class="p">(</span><span class="n">size</span><span class="p">,</span> <span class="n">block_count</span><span class="p">,</span> <span class="n">block_length</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">source_id</span><span class="p">,</span>
+                                         <span class="n">source_state</span><span class="p">,</span> <span class="n">frequency</span><span class="p">,</span> <span class="n">bandwidth</span><span class="p">,</span> <span class="n">sample_rate</span><span class="p">,</span> <span class="n">interpolation</span><span class="p">,</span>
+                                         <span class="n">decimation</span><span class="p">,</span> <span class="n">voltage_ref</span><span class="p">,</span> <span class="n">stream_start</span><span class="p">,</span> <span class="n">sample_counter</span><span class="p">,</span>
+                                         <span class="n">antenna_correction</span><span class="p">)</span></div>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">block_count</span><span class="p">,</span> <span class="n">block_length</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">source_id</span><span class="p">,</span> <span class="n">source_state</span><span class="p">,</span> <span class="n">frequency</span><span class="p">,</span>
+                 <span class="n">bandwidth</span><span class="p">,</span> <span class="n">sample_rate</span><span class="p">,</span> <span class="n">interpolation</span><span class="p">,</span> <span class="n">decimation</span><span class="p">,</span> <span class="n">voltage_ref</span><span class="p">,</span> <span class="n">stream_start</span><span class="p">,</span> <span class="n">sample_counter</span><span class="p">,</span>
+                 <span class="n">antenna_correction</span><span class="p">):</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">block_count</span> <span class="o">=</span> <span class="n">block_count</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">block_length</span> <span class="o">=</span> <span class="n">block_length</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span> <span class="o">=</span> <span class="n">timestamp</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">status</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">source_id</span> <span class="o">=</span> <span class="n">source_id</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">source_state</span> <span class="o">=</span> <span class="n">source_state</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">frequency</span> <span class="o">=</span> <span class="n">frequency</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">bandwidth</span> <span class="o">=</span> <span class="n">bandwidth</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sample_rate</span> <span class="o">=</span> <span class="n">sample_rate</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">interpolation</span> <span class="o">=</span> <span class="n">interpolation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">decimation</span> <span class="o">=</span> <span class="n">decimation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">voltage_ref</span> <span class="o">=</span> <span class="n">voltage_ref</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">stream_start</span> <span class="o">=</span> <span class="n">stream_start</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sample_counter</span> <span class="o">=</span> <span class="n">sample_counter</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">antenna_correction</span> <span class="o">=</span> <span class="n">antenna_correction</span>
+
+    <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">output</span> <span class="o">=</span> <span class="p">(</span>
+            <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Global frame body data header</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;-----------------------------</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Block count:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">block_count</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Block length:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">block_length</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Time stamp:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Frequency:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frequency</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Bandwidth:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bandwidth</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Sample rate:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sample_rate</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Stream start:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stream_start</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Sample counter:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sample_counter</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Antenna correction:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">antenna_correction</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">output</span></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosGlobalFrameBody.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosGlobalFrameBody.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosGlobalFrameBody.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,117 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosGlobalFrameBody &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosGlobalFrameBody</h1><div class="highlight"><pre>
+<div class="viewcode-block" id="AmmosGlobalFrameBody"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosGlobalFrameBody.AmmosGlobalFrameBody">[docs]</a><span></span><span class="k">class</span> <span class="nc">AmmosGlobalFrameBody</span><span class="p">():</span>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data_header</span><span class="p">,</span> <span class="n">data_body</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">data_header</span> <span class="o">=</span> <span class="n">data_header</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">data_body</span> <span class="o">=</span> <span class="n">data_body</span>
+
+<div class="viewcode-block" id="AmmosGlobalFrameBody.data_bytes_only"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosGlobalFrameBody.AmmosGlobalFrameBody.data_bytes_only">[docs]</a>    <span class="k">def</span> <span class="nf">data_bytes_only</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+
+        <span class="n">byte_string</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+
+        <span class="k">for</span> <span class="n">each_block</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_body</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">each_block</span><span class="p">:</span>
+                <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Block is nil&quot;</span><span class="p">)</span>
+
+            <span class="n">byte_string</span> <span class="o">+=</span> <span class="n">each_block</span><span class="o">.</span><span class="n">if_data</span>
+
+        <span class="k">return</span> <span class="n">byte_string</span></div></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosGlobalFrameHeader.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosGlobalFrameHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosGlobalFrameHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,153 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosGlobalFrameHeader &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosGlobalFrameHeader</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">struct</span>
+
+
+<div class="viewcode-block" id="AmmosGlobalFrameHeader"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader">[docs]</a><span class="k">class</span> <span class="nc">AmmosGlobalFrameHeader</span><span class="p">():</span>
+
+    <span class="n">MAGIC_WORD</span> <span class="o">=</span> <span class="s2">&quot;726574fb&quot;</span>
+
+<div class="viewcode-block" id="AmmosGlobalFrameHeader.from_bytes"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader.from_bytes">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">from_bytes</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
+
+        <span class="n">elements</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s1">&#39;4s4s4s4s4s4s&#39;</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)</span>
+
+        <span class="n">magic_word</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span>
+
+        <span class="n">frame_length</span> <span class="o">=</span> <span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">elements</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">)</span><span class="o">*</span><span class="mi">4</span><span class="p">)</span>
+
+        <span class="n">running_frame_number</span> <span class="o">=</span> <span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">elements</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
+
+        <span class="n">frame_type</span> <span class="o">=</span> <span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">elements</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
+
+        <span class="n">data_header_length</span> <span class="o">=</span> <span class="mi">4</span> <span class="o">*</span> <span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">elements</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">)</span>
+
+        <span class="n">reserved</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
+
+        <span class="k">return</span> <span class="n">AmmosGlobalFrameHeader</span><span class="p">(</span><span class="n">magic_word</span><span class="p">,</span> <span class="n">frame_length</span><span class="p">,</span> <span class="n">running_frame_number</span><span class="p">,</span>
+                                      <span class="n">frame_type</span><span class="p">,</span> <span class="n">data_header_length</span><span class="p">,</span> <span class="n">reserved</span><span class="p">)</span></div>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">magic_word</span><span class="p">,</span> <span class="n">frame_length</span><span class="p">,</span> <span class="n">running_frame_number</span><span class="p">,</span> <span class="n">frame_type</span><span class="p">,</span> <span class="n">data_header_length</span><span class="p">,</span> <span class="n">reserved</span><span class="p">):</span>
+
+        <span class="k">if</span> <span class="n">magic_word</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">MAGIC_WORD</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Wrong magic word&quot;</span><span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">magic_word</span> <span class="o">=</span> <span class="n">magic_word</span>
+            <span class="k">return</span> <span class="kc">None</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">magic_word</span> <span class="o">=</span> <span class="n">magic_word</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">frame_length</span> <span class="o">=</span> <span class="n">frame_length</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">running_frame_number</span> <span class="o">=</span> <span class="n">running_frame_number</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">frame_type</span> <span class="o">=</span> <span class="n">frame_type</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">data_header_length</span> <span class="o">=</span> <span class="n">data_header_length</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">reserved</span> <span class="o">=</span> <span class="n">reserved</span>
+
+    <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">output</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;Global frame header info</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;------------------------</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Magic word:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">magic_word</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Frame length:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frame_length</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Running frame:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">running_frame_number</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Frame Type:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frame_type</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Data header length:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data_header_length</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">output</span>
+
+<div class="viewcode-block" id="AmmosGlobalFrameHeader.size"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosGlobalFrameHeader.AmmosGlobalFrameHeader.size">[docs]</a>    <span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="mi">24</span></div></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosIFDataBlock.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosIFDataBlock.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosIFDataBlock.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,105 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosIFDataBlock &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosIFDataBlock</h1><div class="highlight"><pre>
+<div class="viewcode-block" id="AmmosIFDataBlock"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFDataBlock.AmmosIFDataBlock">[docs]</a><span></span><span class="k">class</span> <span class="nc">AmmosIFDataBlock</span><span class="p">():</span>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">if_datablock_header</span><span class="p">,</span> <span class="n">if_data</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">if_datablock_header</span> <span class="o">=</span> <span class="n">if_datablock_header</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">if_data</span> <span class="o">=</span> <span class="n">if_data</span></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosIFDataHeader.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosIFDataHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosIFDataHeader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,154 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosIFDataHeader &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosIFDataHeader</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">struct</span>
+<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
+
+
+<div class="viewcode-block" id="AmmosIFDataHeader"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFDataHeader.AmmosIFDataHeader">[docs]</a><span class="k">class</span> <span class="nc">AmmosIFDataHeader</span><span class="p">():</span>
+
+<div class="viewcode-block" id="AmmosIFDataHeader.from_bytes"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFDataHeader.AmmosIFDataHeader.from_bytes">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">from_bytes</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
+        <span class="n">elements</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s1">&#39;&lt;IIQIIIQIIIIi&#39;</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)</span>
+        <span class="n">block_count</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">block_length</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">elements</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">*</span><span class="mi">4</span>
+        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">datetime64</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">elements</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="mi">1000</span><span class="p">,</span> <span class="s1">&#39;ns&#39;</span><span class="p">)</span>
+        <span class="n">status</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
+        <span class="n">source_id</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
+        <span class="n">source_state</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
+        <span class="n">frequency</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span>
+        <span class="n">bandwidth</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span>
+        <span class="n">sample_rate</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span>
+        <span class="n">interpolation</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span>
+        <span class="n">decimation</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span>
+        <span class="n">voltage_ref</span> <span class="o">=</span> <span class="n">elements</span><span class="p">[</span><span class="mi">11</span><span class="p">]</span>
+
+        <span class="k">return</span> <span class="n">AmmosIFDataHeader</span><span class="p">(</span><span class="n">block_count</span><span class="p">,</span> <span class="n">block_length</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">source_id</span><span class="p">,</span>
+                                 <span class="n">source_state</span><span class="p">,</span> <span class="n">frequency</span><span class="p">,</span> <span class="n">bandwidth</span><span class="p">,</span> <span class="n">sample_rate</span><span class="p">,</span>
+                                 <span class="n">interpolation</span><span class="p">,</span> <span class="n">decimation</span><span class="p">,</span> <span class="n">voltage_ref</span><span class="p">)</span></div>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">block_count</span><span class="p">,</span> <span class="n">block_length</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">source_id</span><span class="p">,</span> <span class="n">source_state</span><span class="p">,</span> <span class="n">frequency</span><span class="p">,</span>
+                 <span class="n">bandwidth</span><span class="p">,</span> <span class="n">sample_rate</span><span class="p">,</span> <span class="n">interpolation</span><span class="p">,</span> <span class="n">decimation</span><span class="p">,</span> <span class="n">voltage_ref</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">block_count</span> <span class="o">=</span> <span class="n">block_count</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">block_length</span> <span class="o">=</span> <span class="n">block_length</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span> <span class="o">=</span> <span class="n">timestamp</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">status</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">source_id</span> <span class="o">=</span> <span class="n">source_id</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">source_state</span> <span class="o">=</span> <span class="n">source_state</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">frequency</span> <span class="o">=</span> <span class="n">frequency</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">bandwidth</span> <span class="o">=</span> <span class="n">bandwidth</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sample_rate</span> <span class="o">=</span> <span class="n">sample_rate</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">interpolation</span> <span class="o">=</span> <span class="n">interpolation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">decimation</span> <span class="o">=</span> <span class="n">decimation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">voltage_ref</span> <span class="o">=</span> <span class="n">voltage_ref</span>
+
+<div class="viewcode-block" id="AmmosIFDataHeader.header_size"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFDataHeader.AmmosIFDataHeader.header_size">[docs]</a>    <span class="k">def</span> <span class="nf">header_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="mi">56</span></div>
+
+    <span class="k">def</span> <span class="nf">__str_</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">output</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Global frame body data header</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;-----------------------------</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Block count:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">block_count</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Block length:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">block_length</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Time stamp:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Frequency:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frequency</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Bandwidth:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bandwidth</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Sample rate:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sample_rate</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">output</span></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosIFReader.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosIFReader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosIFReader.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,251 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosIFReader &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosIFReader</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">math</span>
+<span class="kn">import</span> <span class="nn">os</span>
+
+<span class="kn">from</span> <span class="nn">.AmmosGlobalFrameBody</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameBody</span>
+<span class="kn">from</span> <span class="nn">.AmmosIFDataHeader</span> <span class="kn">import</span> <span class="n">AmmosIFDataHeader</span>
+<span class="kn">from</span> <span class="nn">.AmmosExtendedIFDataHeader</span> <span class="kn">import</span> <span class="n">AmmosExtendedIFDataHeader</span>
+<span class="kn">from</span> <span class="nn">.AmmosGlobalFrameHeader</span> <span class="kn">import</span> <span class="n">AmmosGlobalFrameHeader</span>
+<span class="kn">from</span> <span class="nn">.AmmosSingleFrame</span> <span class="kn">import</span> <span class="n">AmmosSingleFrame</span>
+<span class="kn">from</span> <span class="nn">.AmmosIFDataBlock</span> <span class="kn">import</span> <span class="n">AmmosIFDataBlock</span>
+<span class="kn">from</span> <span class="nn">.AmmosContainer</span> <span class="kn">import</span> <span class="n">AmmosContainer</span>
+
+
+<div class="viewcode-block" id="AmmosIFReader"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader">[docs]</a><span class="k">class</span> <span class="nc">AmmosIFReader</span><span class="p">():</span>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">file_name</span> <span class="o">=</span> <span class="n">file_name</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_name</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">file_size</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_name</span><span class="p">)</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">AmmosContainer</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_name</span><span class="p">,</span> <span class="p">[])</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">tags</span> <span class="o">=</span> <span class="p">[]</span>
+
+<div class="viewcode-block" id="AmmosIFReader.rewind_to_start"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader.rewind_to_start">[docs]</a>    <span class="k">def</span> <span class="nf">rewind_to_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosIFReader.add_tag"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader.add_tag">[docs]</a>    <span class="k">def</span> <span class="nf">add_tag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tag</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosIFReader.read_all_frames_left"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader.read_all_frames_left">[docs]</a>    <span class="k">def</span> <span class="nf">read_all_frames_left</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+
+        <span class="n">frames_read</span> <span class="o">=</span> <span class="mi">0</span>
+
+        <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Reading single frame&quot;</span><span class="p">,</span> <span class="n">frames_read</span><span class="p">,</span> <span class="s1">&#39;...&#39;</span><span class="p">)</span>
+            <span class="n">current_frame</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_single_frame</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">current_frame</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+                <span class="n">frames_read</span> <span class="o">+=</span> <span class="mi">1</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">add_frame</span><span class="p">(</span><span class="n">current_frame</span><span class="p">)</span>
+                <span class="k">if</span> <span class="n">frames_read</span> <span class="o">%</span> <span class="mi">10000</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Frame:&quot;</span><span class="p">,</span> <span class="n">frames_read</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="s2">&quot; incomplete&quot;</span><span class="p">)</span>
+                <span class="k">break</span>
+
+        <span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">global_frames</span><span class="p">),</span> <span class="s2">&quot;frames read&quot;</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosIFReader.read_next_global_frame_header"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_header">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_global_frame_header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="nb">bytes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">24</span><span class="p">)</span>
+        <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Reading next global frame header&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="p">((</span><span class="ow">not</span> <span class="nb">bytes</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">24</span><span class="p">)):</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Can not read all 24 bytes of global frame header&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">return</span> <span class="n">AmmosGlobalFrameHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosIFReader.read_next_global_frame_body_data_header"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_data_header">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_global_frame_body_data_header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+
+        <span class="nb">bytes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">56</span><span class="p">)</span>
+
+        <span class="c1"># print(&quot;\nReading global frame body standard data header\n&quot;)</span>
+        <span class="k">if</span> <span class="p">((</span><span class="ow">not</span> <span class="nb">bytes</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">56</span><span class="p">)):</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Can not read all 56 bytes of global frame body data header&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="n">data_header</span> <span class="o">=</span> <span class="n">AmmosIFDataHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span>
+        <span class="c1"># print(&quot;Data header&quot;, data_header)</span>
+        <span class="k">return</span> <span class="n">data_header</span></div>
+
+<div class="viewcode-block" id="AmmosIFReader.read_next_global_frame_body_extended_data_header"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_extended_data_header">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_global_frame_body_extended_data_header</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+
+        <span class="nb">bytes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">76</span><span class="p">)</span>
+        <span class="c1"># print(&quot;\nReading global frame body extended data header\n&quot;)</span>
+
+        <span class="k">if</span> <span class="p">((</span><span class="ow">not</span> <span class="nb">bytes</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">76</span><span class="p">)):</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Can not read all &quot;</span><span class="p">,</span> <span class="mi">76</span><span class="p">,</span> <span class="s2">&quot;bytes of global frame extended data header&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+        <span class="n">extended_data_header</span> <span class="o">=</span> <span class="n">AmmosExtendedIFDataHeader</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span>
+        <span class="c1"># print(&quot;Extended data header&quot;, extended_data_header)</span>
+        <span class="k">return</span> <span class="n">extended_data_header</span></div>
+
+<div class="viewcode-block" id="AmmosIFReader.read_next_if_data_blocks"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader.read_next_if_data_blocks">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_if_data_blocks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">length</span><span class="p">):</span>
+
+        <span class="c1"># FIXME: Describe the parameters better</span>
+
+        <span class="n">data_blocks</span> <span class="o">=</span> <span class="p">[]</span>
+
+        <span class="n">block_length</span> <span class="o">=</span> <span class="mi">4</span> <span class="o">+</span> <span class="n">length</span>
+
+        <span class="n">total</span> <span class="o">=</span> <span class="n">n</span><span class="o">*</span><span class="n">block_length</span>
+
+        <span class="n">byte_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">block_length</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">byte_string</span><span class="p">)</span> <span class="o">!=</span> <span class="n">total</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Can not read all&quot;</span><span class="p">,</span> <span class="n">total</span><span class="p">,</span> <span class="s2">&quot;bytes of data body&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="n">byte_string</span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="n">block_length</span><span class="p">:(</span><span class="n">i</span><span class="o">*</span><span class="n">block_length</span><span class="o">+</span><span class="n">block_length</span><span class="p">)]</span>
+            <span class="n">data_blocks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">AmmosIFDataBlock</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="p">],</span> <span class="n">result</span><span class="p">[</span><span class="mi">4</span><span class="p">:]))</span>
+
+        <span class="k">return</span> <span class="n">data_blocks</span></div>
+
+<div class="viewcode-block" id="AmmosIFReader.read_next_global_frame_body"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_global_frame_body</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_frame_header</span><span class="p">):</span>
+
+        <span class="n">if_data_header</span> <span class="o">=</span> <span class="kc">None</span>
+
+        <span class="k">if</span> <span class="n">global_frame_header</span><span class="o">.</span><span class="n">data_header_length</span> <span class="o">==</span> <span class="mi">56</span><span class="p">:</span>
+            <span class="n">if_data_header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_global_frame_body_data_header</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">if_data_header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_global_frame_body_extended_data_header</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">if_data_header</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Data header missing&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="n">if_data_body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_if_data_blocks</span><span class="p">(</span><span class="n">if_data_header</span><span class="o">.</span><span class="n">block_count</span><span class="p">,</span> <span class="n">if_data_header</span><span class="o">.</span><span class="n">block_length</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">if_data_body</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Data body missing&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">return</span> <span class="n">AmmosGlobalFrameBody</span><span class="p">(</span><span class="n">if_data_header</span><span class="p">,</span> <span class="n">if_data_body</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="AmmosIFReader.read_next_single_frame"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosIFReader.AmmosIFReader.read_next_single_frame">[docs]</a>    <span class="k">def</span> <span class="nf">read_next_single_frame</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+
+        <span class="n">global_frame_header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_global_frame_header</span><span class="p">()</span>
+
+        <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Reading next global frame header</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">global_frame_header</span><span class="p">)</span>
+        <span class="c1"># print(&quot;File pointer&quot;, self.file.tell())</span>
+
+        <span class="k">if</span> <span class="n">global_frame_header</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Global frame header missing&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">if</span> <span class="n">global_frame_header</span><span class="o">.</span><span class="n">data_header_length</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Data header length empty&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">if</span> <span class="n">global_frame_header</span><span class="o">.</span><span class="n">frame_type</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+
+            <span class="n">global_frame_body</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_next_global_frame_body</span><span class="p">(</span><span class="n">global_frame_header</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">global_frame_body</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+                <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">else</span><span class="p">:</span>
+            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Unsupported frame type&quot;</span><span class="p">,</span> <span class="n">global_frame_header</span><span class="o">.</span><span class="n">frame_type</span><span class="p">,</span> <span class="s2">&quot;found&quot;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="k">return</span> <span class="n">AmmosSingleFrame</span><span class="p">(</span><span class="n">global_frame_header</span><span class="p">,</span> <span class="n">global_frame_body</span><span class="p">)</span></div></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/AmmosSingleFrame.html
===================================================================
--- doc/html/_modules/ammosreader/AmmosSingleFrame.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/AmmosSingleFrame.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,125 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.AmmosSingleFrame &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.AmmosSingleFrame</h1><div class="highlight"><pre>
+<div class="viewcode-block" id="AmmosSingleFrame"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosSingleFrame.AmmosSingleFrame">[docs]</a><span></span><span class="k">class</span> <span class="nc">AmmosSingleFrame</span><span class="p">():</span>
+
+    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_frame_header</span><span class="p">,</span> <span class="n">global_frame_body</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">global_frame_header</span> <span class="o">=</span> <span class="n">global_frame_header</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">global_frame_body</span> <span class="o">=</span> <span class="n">global_frame_body</span>
+
+<div class="viewcode-block" id="AmmosSingleFrame.data"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosSingleFrame.AmmosSingleFrame.data">[docs]</a>    <span class="k">def</span> <span class="nf">data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">global_frame_body</span><span class="o">.</span><span class="n">data_bytes_only</span><span class="p">()</span></div>
+
+<div class="viewcode-block" id="AmmosSingleFrame.size_correct"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.AmmosSingleFrame.AmmosSingleFrame.size_correct">[docs]</a>    <span class="k">def</span> <span class="nf">size_correct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">global_frame_header</span><span class="o">.</span><span class="n">frame_length</span> <span class="o">==</span> <span class="p">(</span><span class="mi">24</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">global_frame_header</span><span class="o">.</span><span class="n">data_header_length</span> <span class="o">+</span>
+                                                          <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">global_frame_body</span><span class="o">.</span><span class="n">data_header</span><span class="o">.</span><span class="n">block_count</span> <span class="o">*</span>
+                                                           <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">global_frame_body</span><span class="o">.</span><span class="n">data_header</span><span class="o">.</span><span class="n">block_length</span> <span class="o">+</span> <span class="mi">4</span><span class="p">))))</span></div>
+    <span class="c1"># FIXME: Use str method instead</span>
+
+    <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">output</span> <span class="o">=</span> <span class="p">(</span>
+            <span class="s2">&quot;Global frame header</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;-------------------</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Frame tyoe:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">global_frame_header</span><span class="o">.</span><span class="n">frame_type</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Frame count:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">global_frame_header</span><span class="o">.</span><span class="n">running_frame_number</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Data header length:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">global_frame_header</span><span class="o">.</span><span class="n">data_header_length</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; bytes</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+            <span class="s2">&quot;Frame length:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">global_frame_header</span><span class="o">.</span><span class="n">frame_length</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; bytes</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="p">)</span>
+        <span class="k">return</span> <span class="n">output</span></div>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/PDW.html
===================================================================
--- doc/html/_modules/ammosreader/PDW.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/PDW.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,328 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.PDW &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.PDW</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">struct</span>
+<span class="kn">import</span> <span class="nn">math</span>
+<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
+
+<span class="c1"># TODO: Use BitArray module in future versions</span>
+
+
+<div class="viewcode-block" id="PDW"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.PDW.PDW">[docs]</a><span class="k">class</span> <span class="nc">PDW</span><span class="p">():</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    I store information from a single ppdw data block.</span>
+
+<span class="sd">    .. automethod:: __init__</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="PDW.from_bytes"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.PDW.PDW.from_bytes">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">from_bytes</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">byte_string</span><span class="p">):</span>
+
+        <span class="sd">&quot;&quot;&quot;</span>
+
+<span class="sd">        I create an instance of class PDW from data body (8 * 32 bits)</span>
+
+<span class="sd">        :param byte_string: a byte string containing a single data body read from a ppdw file</span>
+<span class="sd">        :type byte_string: byte string</span>
+
+<span class="sd">        :return: an instance of class PDW with attributes set according to the data of a data body</span>
+<span class="sd">        :rtype: PDW</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">assert</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">byte_string</span><span class="p">)</span> <span class="o">==</span> <span class="mi">32</span><span class="p">)</span>
+
+        <span class="n">parts</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s1">&#39;Q4s4s4s4s4s4s&#39;</span><span class="p">,</span> <span class="n">byte_string</span><span class="p">)</span>
+        <span class="n">nanoseconds</span> <span class="o">=</span> <span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+        <span class="n">time_of_arrival</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">datetime64</span><span class="p">(</span><span class="n">nanoseconds</span><span class="p">,</span> <span class="s1">&#39;ns&#39;</span><span class="p">)</span>  <span class="c1">#datetime.datetime.utcfromtimestamp(seconds / 1000000000)</span>
+
+        <span class="n">third_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
+        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">third_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
+        <span class="n">third_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">third_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
+        <span class="n">pdw_format_identifier</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">third_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">6</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
+        <span class="n">center_frequency</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">third_entry_bit_string</span><span class="p">[</span><span class="mi">5</span><span class="p">:</span><span class="mi">32</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
+
+        <span class="n">fourth_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
+        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">fourth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
+        <span class="n">fourth_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">fourth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
+        <span class="n">is_valid</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
+        <span class="n">is_pulse</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
+        <span class="n">level_unit</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+        <span class="n">signal_start_missing</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span>
+        <span class="n">signal_end_missing</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">4</span><span class="p">]))</span>
+        <span class="n">pulse_width</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">fourth_entry_bit_string</span><span class="p">[</span><span class="mi">7</span><span class="p">:</span><span class="mi">33</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
+
+        <span class="n">fifth_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
+        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">fifth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
+        <span class="n">fifth_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">fifth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
+        <span class="n">frequency_shift_or_bandwidth</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">fifth_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">20</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
+        <span class="c1"># FIXME: You have to scale me to the range from -200.0 to 200.0 in 0.1 steps</span>
+        <span class="n">pulse_level_or_pulse_field_strength</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">fifth_entry_bit_string</span><span class="p">[</span><span class="mi">20</span><span class="p">:</span><span class="mi">32</span><span class="p">],</span> <span class="mi">2</span><span class="p">))</span> <span class="o">/</span> <span class="mi">10</span>
+
+        <span class="n">sixth_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
+        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">sixth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
+        <span class="n">sixth_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sixth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
+        <span class="n">region_of_interest</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">sixth_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
+        <span class="c1"># FIXME: You have to scale me to a range from 0.0 to 6.2 in steps of 0.1 - 6.3 means unknown</span>
+        <span class="n">azimuth_confidence</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">sixth_entry_bit_string</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">7</span><span class="p">],</span> <span class="mi">2</span><span class="p">))</span> <span class="o">/</span> <span class="mi">10</span>
+        <span class="n">modulations</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s1">&#39;Unknown&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s1">&#39;Unmodulated&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s1">&#39;FM&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="s1">&#39;LFM&#39;</span><span class="p">,</span> <span class="mi">4</span><span class="p">:</span> <span class="s1">&#39;PSK-2&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s1">&#39;PSK-3&#39;</span><span class="p">,</span> <span class="mi">6</span><span class="p">:</span> <span class="s1">&#39;PSK-4&#39;</span><span class="p">,</span>
+                       <span class="mi">7</span><span class="p">:</span> <span class="s1">&#39;PSK-m&#39;</span><span class="p">,</span> <span class="mi">8</span><span class="p">:</span> <span class="s1">&#39;NLFM&#39;</span><span class="p">,</span> <span class="mi">9</span><span class="p">:</span> <span class="s1">&#39;SFM&#39;</span><span class="p">,</span> <span class="mi">10</span><span class="p">:</span> <span class="s1">&#39;TFM&#39;</span><span class="p">,</span> <span class="mi">11</span><span class="p">:</span> <span class="s1">&#39;Pulse too short&#39;</span><span class="p">}</span>
+        <span class="n">modulation</span> <span class="o">=</span> <span class="n">modulations</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">sixth_entry_bit_string</span><span class="p">[</span><span class="mi">7</span><span class="p">:</span><span class="mi">12</span><span class="p">],</span> <span class="mi">2</span><span class="p">)]</span>
+        <span class="n">sector</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sixth_entry_bit_string</span><span class="p">[</span><span class="mi">28</span><span class="p">:</span><span class="mi">32</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
+
+        <span class="n">seventh_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
+        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">seventh_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
+        <span class="n">seventh_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">seventh_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
+        <span class="n">polarities</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s1">&#39;Horizontal/Unknown&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s1">&#39;Vertical&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s1">&#39;Counter clockwise&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="s1">&#39;Clockwise&#39;</span><span class="p">}</span>
+        <span class="n">polarity</span> <span class="o">=</span> <span class="n">polarities</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">seventh_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">],</span> <span class="mi">2</span><span class="p">)]</span>
+        <span class="n">df_quality</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">seventh_entry_bit_string</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">9</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
+        <span class="c1"># FIXME: You have to scale me from -90 to 90 in 0.1 degree steps</span>
+        <span class="n">elevation</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">seventh_entry_bit_string</span><span class="p">[</span><span class="mi">9</span><span class="p">:</span><span class="mi">20</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
+        <span class="c1"># FIXME: You have to check me for a range from 0.0 to 359.9 in steps of 0.1</span>
+        <span class="n">azimuth</span> <span class="o">=</span> <span class="mf">0.1</span> <span class="o">*</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">seventh_entry_bit_string</span><span class="p">[</span><span class="mi">20</span><span class="p">:</span><span class="mi">32</span><span class="p">],</span> <span class="mi">2</span><span class="p">))</span>
+
+        <span class="n">eighth_entry</span> <span class="o">=</span> <span class="nb">bin</span><span class="p">(</span><span class="nb">int</span><span class="o">.</span><span class="n">from_bytes</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span> <span class="n">byteorder</span><span class="o">=</span><span class="s1">&#39;little&#39;</span><span class="p">))</span>
+        <span class="n">padding</span> <span class="o">=</span> <span class="mi">32</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">eighth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:])</span>
+        <span class="n">eighth_entry_bit_string</span> <span class="o">=</span> <span class="s2">&quot;0&quot;</span> <span class="o">*</span> <span class="n">padding</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">eighth_entry</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span>
+        <span class="n">channel</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">eighth_entry_bit_string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">PDW</span><span class="p">(</span><span class="n">time_of_arrival</span><span class="p">,</span> <span class="n">pdw_format_identifier</span><span class="p">,</span> <span class="n">center_frequency</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">,</span> <span class="n">is_pulse</span><span class="p">,</span> <span class="n">level_unit</span><span class="p">,</span>
+                   <span class="n">signal_start_missing</span><span class="p">,</span> <span class="n">signal_end_missing</span><span class="p">,</span> <span class="n">pulse_width</span><span class="p">,</span> <span class="n">frequency_shift_or_bandwidth</span><span class="p">,</span>
+                   <span class="n">pulse_level_or_pulse_field_strength</span><span class="p">,</span> <span class="n">region_of_interest</span><span class="p">,</span> <span class="n">azimuth_confidence</span><span class="p">,</span> <span class="n">modulation</span><span class="p">,</span>
+                   <span class="n">sector</span><span class="p">,</span> <span class="n">polarity</span><span class="p">,</span> <span class="n">df_quality</span><span class="p">,</span> <span class="n">elevation</span><span class="p">,</span> <span class="n">azimuth</span><span class="p">,</span> <span class="n">channel</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="PDW.__init__"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.PDW.PDW.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">time_of_arrival</span><span class="p">,</span> <span class="n">pdw_format_identifier</span><span class="p">,</span> <span class="n">center_frequency</span><span class="p">,</span> <span class="n">is_valid</span><span class="p">,</span> <span class="n">is_pulse</span><span class="p">,</span>
+                 <span class="n">level_unit</span><span class="p">,</span> <span class="n">signal_start_missing</span><span class="p">,</span> <span class="n">signal_end_missing</span><span class="p">,</span> <span class="n">pulse_width</span><span class="p">,</span> <span class="n">frequency_shift_or_bandwidth</span><span class="p">,</span>
+                 <span class="n">pulse_level_or_pulse_field_strength</span><span class="p">,</span> <span class="n">region_of_interest</span><span class="p">,</span> <span class="n">azimuth_confidence</span><span class="p">,</span> <span class="n">modulation</span><span class="p">,</span>
+                 <span class="n">sector</span><span class="p">,</span> <span class="n">polarity</span><span class="p">,</span> <span class="n">df_quality</span><span class="p">,</span> <span class="n">elevation</span><span class="p">,</span> <span class="n">azimuth</span><span class="p">,</span> <span class="n">channel</span><span class="p">):</span>
+
+        <span class="sd">&quot;&quot;&quot;</span>
+
+<span class="sd">        :param time_of_arrival: nanoseconds since 1970-01-01 00:00:00</span>
+<span class="sd">        :type time_of_arrival: Integer</span>
+<span class="sd">        :param pdw_format: format code</span>
+<span class="sd">        :type pdw_format: Integer</span>
+<span class="sd">        :param center_frequency: center frequency in KHz</span>
+<span class="sd">        :type center_frequency: Integer</span>
+<span class="sd">        :param is_valid: flag to mark if pdw data body is valid</span>
+<span class="sd">        :type is_valid: Boolean</span>
+<span class="sd">        :param is_pulse: flag to mark if pdw data body contains a pulse or a continuous wave signal</span>
+<span class="sd">        :type is_pulse: Boolean</span>
+<span class="sd">        :param level_unit: 0 means dBµV - 1 means dBµV/m</span>
+<span class="sd">        :type level_unit: Integer</span>
+<span class="sd">        :param signal_start_missing: signal started before time of arrival</span>
+<span class="sd">        :type signal_start_missing: Boolean</span>
+<span class="sd">        :param signal_end_missing: signal stops after time of arrival</span>
+<span class="sd">        :type signal_end_missing: Boolean</span>
+<span class="sd">        :param pulse_width: pulse width in nanoseconds - Zero if no valid pulse detected</span>
+<span class="sd">        :type pulse_width: Integer</span>
+<span class="sd">        :param frequency_shift_or_bandwidth: Value in KHz - Value set to 1048575 means Unknown</span>
+<span class="sd">        :type frequency_shift_or_bandwidth: Integer</span>
+<span class="sd">        :param pulse_level_or_pulse_field_strength: Pulse level or Pulse Field Strength depending on level_unit \</span>
+<span class="sd">         (-200.0...200.0) in 0.1 steps / minus 204.8 means no valid level detected</span>
+<span class="sd">        :type pulse_level_or_pulse_field_strength: Float</span>
+<span class="sd">        :param region_of_interest: Marks if signal is from region of interest</span>
+<span class="sd">        :type region_of_interest: Boolean</span>
+<span class="sd">        :param azimuth_confidence: degree in steps of 0.1 (0.0-6.2) / 6.3 means confidence unknown</span>
+<span class="sd">        :type azimuth_confidence: Float</span>
+<span class="sd">        :param modulation: type of modulation (e.g. PSK-2, PSK-4, FM etc.)</span>
+<span class="sd">        :type modulation: String</span>
+<span class="sd">        :param sector: reference antenna sector (0-15)</span>
+<span class="sd">        :type sector: Integer</span>
+<span class="sd">        :param polarity: Horizontal, Vertical, Clockwise, Counter clockwise</span>
+<span class="sd">        :type polarity: String</span>
+<span class="sd">        :param df_quality: Direction finding quality in percent (0-100) - Zero means unknown</span>
+<span class="sd">        :type df_quality: Integer</span>
+<span class="sd">        :param elevation: elevation of incoming signal (from -90 to 90 degree) in steps of 0.1 degree \</span>
+<span class="sd">        minus 102.4 means unknown</span>
+<span class="sd">        :type elevation: Float</span>
+<span class="sd">        :param azimuth: azimuth of incoming signal (from 0 to 359.9 degree) in steps of 0.1 degree \</span>
+<span class="sd">        plus 409.5 means unknown</span>
+<span class="sd">        :type azimuth: Float</span>
+<span class="sd">        :param channel: detecting channel (0-16) - Zero means unknown</span>
+<span class="sd">        :type channel: Integer</span>
+<span class="sd">        :return: An instance of class PDW with attributes set according to the data of a data body</span>
+<span class="sd">        :rtype: PDW</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">time_of_arrival</span> <span class="o">=</span> <span class="n">time_of_arrival</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">pdw_format_identifier</span> <span class="o">=</span> <span class="n">pdw_format_identifier</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">center_frequency</span> <span class="o">=</span> <span class="n">center_frequency</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">is_valid</span> <span class="o">=</span> <span class="n">is_valid</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">is_pulse</span> <span class="o">=</span> <span class="n">is_pulse</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">level_unit</span> <span class="o">=</span> <span class="n">level_unit</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">signal_start_missing</span> <span class="o">=</span> <span class="n">signal_start_missing</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">signal_end_missing</span> <span class="o">=</span> <span class="n">signal_end_missing</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">pulse_width</span> <span class="o">=</span> <span class="n">pulse_width</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">frequency_shift_or_bandwidth</span> <span class="o">=</span> <span class="n">frequency_shift_or_bandwidth</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">pulse_level_or_pulse_field_strength</span> <span class="o">=</span> <span class="n">pulse_level_or_pulse_field_strength</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">region_of_interest</span> <span class="o">=</span> <span class="n">region_of_interest</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">azimuth_confidence</span> <span class="o">=</span> <span class="n">azimuth_confidence</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">modulation</span> <span class="o">=</span> <span class="n">modulation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">sector</span> <span class="o">=</span> <span class="n">sector</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">polarity</span> <span class="o">=</span> <span class="n">polarity</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">df_quality</span> <span class="o">=</span> <span class="n">df_quality</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">elevation</span> <span class="o">=</span> <span class="n">elevation</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">azimuth</span> <span class="o">=</span> <span class="n">azimuth</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">channel</span> <span class="o">=</span> <span class="n">channel</span></div>
+
+    <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">output</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;Time of arrival: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">time_of_arrival</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;PDW Format identifier: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pdw_format_identifier</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                  <span class="s2">&quot;Center frequency: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">center_frequency</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; KHz</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_valid</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Signal: Valid</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Signal: Invalid</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_pulse</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Signal type: Pulse</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Signal type: Continuous wave</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">level_unit</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Pulse level: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pulse_level_or_pulse_field_strength</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; dbµV</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Pulse field strength: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pulse_level_or_pulse_field_strength</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; dbµV/meter</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="n">output</span> <span class="o">+=</span> <span class="p">(</span><span class="s2">&quot;Pulse width: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pulse_width</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; nanoseconds</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span>
+                   <span class="s2">&quot;Frequency shift or bandwidth: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frequency_shift_or_bandwidth</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; KHz</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">region_of_interest</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Region of interest: Yes</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Region of interest: No</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">azimuth_confidence</span> <span class="o">==</span> <span class="mf">6.3</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Azimuth confidence: Invalid</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Azimuth confidence: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">azimuth_confidence</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; degree</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Modulation: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">modulation</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sector</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Sector: Unknown</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Sector:&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sector</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Polarity: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">polarity</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;DF quality: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">df_quality</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; %</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">elevation</span> <span class="o">==</span> <span class="mi">1024</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Elevation: Unknown</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Elevation: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">elevation</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; degree</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">azimuth</span> <span class="o">==</span> <span class="mf">409.5</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Azimuth: Unknown</span><span class="se">\n</span><span class="s2">&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Azimuth: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">azimuth</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot; degree</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="n">output</span> <span class="o">+=</span> <span class="s2">&quot;Channel: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+        <span class="k">return</span> <span class="n">output</span></div>
+
+
+<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
+    <span class="k">pass</span>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/ammosreader/PPDWContainer.html
===================================================================
--- doc/html/_modules/ammosreader/PPDWContainer.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
+++ doc/html/_modules/ammosreader/PPDWContainer.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -0,0 +1,117 @@
+
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>ammosreader.PPDWContainer &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
+    <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
+    <script src="../../_static/jquery.js"></script>
+    <script src="../../_static/underscore.js"></script>
+    <script src="../../_static/doctools.js"></script>
+    <link rel="index" title="Index" href="../../genindex.html" />
+    <link rel="search" title="Search" href="../../search.html" />
+   
+  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
+  
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1>Source code for ammosreader.PPDWContainer</h1><div class="highlight"><pre>
+<div class="viewcode-block" id="PPDWContainer"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.PPDWContainer.PPDWContainer">[docs]</a><span></span><span class="k">class</span> <span class="nc">PPDWContainer</span><span class="p">():</span>
+
+    <span class="sd">&quot;&quot;&quot;</span>
+
+<span class="sd">    I store multiple signals imported from one or more .ppdw files</span>
+
+<span class="sd">    .. automethod:: __init__</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="PPDWContainer.__init__"><a class="viewcode-back" href="../../ammosreader.html#ammosreader.PPDWContainer.PPDWContainer.__init__">[docs]</a>    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">signals</span><span class="p">):</span>
+
+        <span class="bp">self</span><span class="o">.</span><span class="n">signals</span> <span class="o">=</span> <span class="n">signals</span></div></div>
+
+
+<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
+    <span class="k">pass</span>
+</pre></div>
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="../../index.html">AmmosReader</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../ammosreader.html">ammosreader package</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="../../index.html">Documentation overview</a><ul>
+  <li><a href="../index.html">Module code</a><ul>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="../../search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &copy;2022, Enrico Schwass.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
Index: doc/html/_modules/index.html
===================================================================
--- doc/html/_modules/index.html	(revision 1e781baa9d163260df25c9e14575de1efe80daeb)
+++ doc/html/_modules/index.html	(revision 9db2d9ac65f85e0215561edff07250aadeee31c0)
@@ -1,22 +1,21 @@
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!DOCTYPE html>
 
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html>
   <head>
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Overview: module code &#8212; RadarDex 0.314 documentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Overview: module code &#8212; AmmosReader 0.314 documentation</title>
+    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
+    <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
+    <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
+    <script src="../_static/jquery.js"></script>
+    <script src="../_static/underscore.js"></script>
+    <script src="../_static/doctools.js"></script>
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
    
   <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
+  
   
   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
@@ -28,16 +27,32 @@
       <div class="documentwrapper">
         <div class="bodywrapper">
+          
+
           <div class="body" role="main">
             
   <h1>All modules for which code is available</h1>
-<ul><li><a href="PDW.html">PDW</a></li>
+<ul><li><a href="ammosreader/AmmosAudioDataHeader.html">ammosreader.AmmosAudioDataHeader</a></li>
+<li><a href="ammosreader/AmmosAudioReader.html">ammosreader.AmmosAudioReader</a></li>
+<li><a href="ammosreader/AmmosAudioSocketReader.html">ammosreader.AmmosAudioSocketReader</a></li>
+<li><a href="ammosreader/AmmosContainer.html">ammosreader.AmmosContainer</a></li>
+<li><a href="ammosreader/AmmosExtendedAudioDataHeader.html">ammosreader.AmmosExtendedAudioDataHeader</a></li>
+<li><a href="ammosreader/AmmosExtendedIFDataHeader.html">ammosreader.AmmosExtendedIFDataHeader</a></li>
+<li><a href="ammosreader/AmmosGlobalFrameBody.html">ammosreader.AmmosGlobalFrameBody</a></li>
+<li><a href="ammosreader/AmmosGlobalFrameHeader.html">ammosreader.AmmosGlobalFrameHeader</a></li>
+<li><a href="ammosreader/AmmosIFDataBlock.html">ammosreader.AmmosIFDataBlock</a></li>
+<li><a href="ammosreader/AmmosIFDataHeader.html">ammosreader.AmmosIFDataHeader</a></li>
+<li><a href="ammosreader/AmmosIFReader.html">ammosreader.AmmosIFReader</a></li>
+<li><a href="ammosreader/AmmosSingleFrame.html">ammosreader.AmmosSingleFrame</a></li>
+<li><a href="ammosreader/PDW.html">ammosreader.PDW</a></li>
+<li><a href="ammosreader/PPDWContainer.html">ammosreader.PPDWContainer</a></li>
 </ul>
 
           </div>
+          
         </div>
       </div>
       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">RadarDex</a></h1>
+<h1 class="logo"><a href="../index.html">AmmosReader</a></h1>
 
 
@@ -50,5 +65,5 @@
 <h3>Navigation</h3>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="../PDW.html">PDW module</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../ammosreader.html">ammosreader package</a></li>
 </ul>
 
@@ -61,15 +76,21 @@
 </div>
 <div id="searchbox" style="display: none" role="search">
-  <h3>Quick search</h3>
+  <h3 id="searchlabel">Quick search</h3>
     <div class="searchformwrapper">
     <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" />
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
       <input type="submit" value="Go" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
     </form>
     </div>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script>$('#searchbox').show(0);</script>
+
+
+
+
+
+
+
+
         </div>
       </div>
@@ -77,9 +98,9 @@
     </div>
     <div class="footer">
-      &copy;2020, Enrico Schwass.
+      &copy;2022, Enrico Schwass.
       
       |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 1.8.5</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
       
     </div>
