source: ammosreader/html/ammosreader/AmmosIFReader.html@ 1491313

AmmosSource guix
Last change on this file since 1491313 was 1491313, checked in by Enrico Schwass <ennoausberlin@…>, 3 years ago

replace sphinx with pdoc

  • Property mode set to 100644
File size: 23.6 KB
Line 
1<!doctype html>
2<html lang="en">
3<head>
4<meta charset="utf-8">
5<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
6<meta name="generator" content="pdoc 0.10.0" />
7<title>ammosreader.AmmosIFReader API documentation</title>
8<meta name="description" content="I provide a specialized Ammos Reader for IF data." />
9<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
10<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
11<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
12<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
13<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
14<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
15<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
16<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
17</head>
18<body>
19<main>
20<article id="content">
21<header>
22<h1 class="title">Module <code>ammosreader.AmmosIFReader</code></h1>
23</header>
24<section id="section-intro">
25<p>I provide a specialized Ammos Reader for IF data.</p>
26<details class="source">
27<summary>
28<span>Expand source code</span>
29</summary>
30<pre><code class="python">&#34;&#34;&#34;I provide a specialized Ammos Reader for IF data.&#34;&#34;&#34;
31import logging
32
33from ammosreader.AbstractAmmosReader import AbstractAmmosReader
34from ammosreader.AmmosGlobalFrameBody import AmmosGlobalFrameBody
35from ammosreader.AmmosIFDataHeader import AmmosIFDataHeader
36from ammosreader.AmmosExtendedIFDataHeader import AmmosExtendedIFDataHeader
37from ammosreader.AmmosIFDataBody import AmmosIFDataBody
38from ammosreader.AmmosIFDataBlock import AmmosIFDataBlock
39from ammosreader.AmmosIFDataBlockHeader import AmmosIFDataBlockHeader
40
41
42class AmmosIFReader(AbstractAmmosReader):
43 &#34;&#34;&#34;I read the IF data embedded in an R&amp;S AMMOS recording.&#34;&#34;&#34;
44
45 def __init__(self, file_name):
46 super().__init__(file_name)
47
48 def read_next_global_frame_body_data_header(self):
49
50 header_size = AmmosIFDataHeader.HEADER_SIZE
51
52 bytes = self.ammos_file.read(header_size)
53
54 logging.info(&#34;\nReading global frame body standard data header\n&#34;)
55 if ((not bytes) or (len(bytes) &lt; header_size)):
56 logging.debug(&#34;Can not read all %s bytes of global frame body data header&#34;, header_size)
57 return None
58 return AmmosIFDataHeader.from_bytes(bytes)
59
60 def read_next_global_frame_body_extended_data_header(self):
61 &#34;&#34;&#34;
62 I return the next global frame body extended data header from current position in file.
63
64 :return: the next Ammos Extended IF data header or None if incomplete
65 :rtype: AmmosExtendedIFDataHeader
66 &#34;&#34;&#34;
67 header_size = AmmosExtendedIFDataHeader.HEADER_SIZE
68
69 bytes = self.ammos_file.read(header_size)
70
71 logging.info(&#34;\nReading global frame body extended data header\n&#34;)
72 if ((not bytes) or (len(bytes) &lt; header_size)):
73 logging.debug(&#34;Can not read all %s bytes of global frame extended data header&#34;, header_size)
74 return None
75 return AmmosExtendedIFDataHeader.from_bytes(bytes)
76
77 def read_next_if_data_body(self, number_of_data_blocks, data_length):
78 &#34;&#34;&#34;
79 I return the next data body read from current position in file.
80
81 :param number_of_data_blocks: the number of data blocks inside the body
82 :type number_of_data_blocks: int
83
84 :param data_length: the length of the raw data inside a single block
85 :type data_length: int
86 &#34;&#34;&#34;
87 header_size = AmmosIFDataBlockHeader.HEADER_SIZE
88
89 data_body = AmmosIFDataBody()
90
91 block_length = header_size + data_length
92
93 total = number_of_data_blocks*block_length
94
95 byte_string = self.ammos_file.read(block_length)
96
97 if len(byte_string) != total:
98 logging.debug(&#34;Can not read all %s bytes of data body&#34;, total)
99 return None
100
101 for i in range(0, number_of_data_blocks):
102 result = byte_string[i*block_length:(i*block_length+block_length)]
103 data_body.add_data_block(AmmosIFDataBlock(AmmosIFDataBlockHeader.from_bytes(result[0:header_size]),
104 result[header_size:]))
105
106 return data_body
107
108 def read_next_global_frame_body(self, data_header_length):
109 &#34;&#34;&#34;
110 I return the next global frame body read from current position in file.
111
112 :param data_header_length: the length of the data header
113 :type data_header_length: int
114 &#34;&#34;&#34;
115 if_data_header = None
116
117 if data_header_length == AmmosIFDataHeader.HEADER_SIZE:
118 if_data_header = self.read_next_global_frame_body_data_header()
119 if data_header_length == AmmosExtendedIFDataHeader.HEADER_SIZE:
120 if_data_header = self.read_next_global_frame_body_extended_data_header()
121
122 if if_data_header is None:
123 logging.debug(&#34;Data header missing&#34;)
124 return None
125
126 if_data_body = self.read_next_if_data_body(if_data_header.block_count, if_data_header.block_length)
127
128 if if_data_body is None:
129 logging.debug(&#34;Data body missing&#34;)
130 return None
131
132 return AmmosGlobalFrameBody(if_data_header, if_data_body)
133
134 def data(self):
135 return b&#34;&#34;.join([each.global_frame_body.data_body.data for each in self.container.global_frames])</code></pre>
136</details>
137</section>
138<section>
139</section>
140<section>
141</section>
142<section>
143</section>
144<section>
145<h2 class="section-title" id="header-classes">Classes</h2>
146<dl>
147<dt id="ammosreader.AmmosIFReader.AmmosIFReader"><code class="flex name class">
148<span>class <span class="ident">AmmosIFReader</span></span>
149<span>(</span><span>file_name)</span>
150</code></dt>
151<dd>
152<div class="desc"><p>I read the IF data embedded in an R&amp;S AMMOS recording.</p>
153<p>I am the standard constructor for Ammos Readers.</p>
154<p>Additional information about the file can be added as key/value pairs in tags</p>
155<p>:param file_name: The file to read Ammos data from
156:type file_name: str</p></div>
157<details class="source">
158<summary>
159<span>Expand source code</span>
160</summary>
161<pre><code class="python">class AmmosIFReader(AbstractAmmosReader):
162 &#34;&#34;&#34;I read the IF data embedded in an R&amp;S AMMOS recording.&#34;&#34;&#34;
163
164 def __init__(self, file_name):
165 super().__init__(file_name)
166
167 def read_next_global_frame_body_data_header(self):
168
169 header_size = AmmosIFDataHeader.HEADER_SIZE
170
171 bytes = self.ammos_file.read(header_size)
172
173 logging.info(&#34;\nReading global frame body standard data header\n&#34;)
174 if ((not bytes) or (len(bytes) &lt; header_size)):
175 logging.debug(&#34;Can not read all %s bytes of global frame body data header&#34;, header_size)
176 return None
177 return AmmosIFDataHeader.from_bytes(bytes)
178
179 def read_next_global_frame_body_extended_data_header(self):
180 &#34;&#34;&#34;
181 I return the next global frame body extended data header from current position in file.
182
183 :return: the next Ammos Extended IF data header or None if incomplete
184 :rtype: AmmosExtendedIFDataHeader
185 &#34;&#34;&#34;
186 header_size = AmmosExtendedIFDataHeader.HEADER_SIZE
187
188 bytes = self.ammos_file.read(header_size)
189
190 logging.info(&#34;\nReading global frame body extended data header\n&#34;)
191 if ((not bytes) or (len(bytes) &lt; header_size)):
192 logging.debug(&#34;Can not read all %s bytes of global frame extended data header&#34;, header_size)
193 return None
194 return AmmosExtendedIFDataHeader.from_bytes(bytes)
195
196 def read_next_if_data_body(self, number_of_data_blocks, data_length):
197 &#34;&#34;&#34;
198 I return the next data body read from current position in file.
199
200 :param number_of_data_blocks: the number of data blocks inside the body
201 :type number_of_data_blocks: int
202
203 :param data_length: the length of the raw data inside a single block
204 :type data_length: int
205 &#34;&#34;&#34;
206 header_size = AmmosIFDataBlockHeader.HEADER_SIZE
207
208 data_body = AmmosIFDataBody()
209
210 block_length = header_size + data_length
211
212 total = number_of_data_blocks*block_length
213
214 byte_string = self.ammos_file.read(block_length)
215
216 if len(byte_string) != total:
217 logging.debug(&#34;Can not read all %s bytes of data body&#34;, total)
218 return None
219
220 for i in range(0, number_of_data_blocks):
221 result = byte_string[i*block_length:(i*block_length+block_length)]
222 data_body.add_data_block(AmmosIFDataBlock(AmmosIFDataBlockHeader.from_bytes(result[0:header_size]),
223 result[header_size:]))
224
225 return data_body
226
227 def read_next_global_frame_body(self, data_header_length):
228 &#34;&#34;&#34;
229 I return the next global frame body read from current position in file.
230
231 :param data_header_length: the length of the data header
232 :type data_header_length: int
233 &#34;&#34;&#34;
234 if_data_header = None
235
236 if data_header_length == AmmosIFDataHeader.HEADER_SIZE:
237 if_data_header = self.read_next_global_frame_body_data_header()
238 if data_header_length == AmmosExtendedIFDataHeader.HEADER_SIZE:
239 if_data_header = self.read_next_global_frame_body_extended_data_header()
240
241 if if_data_header is None:
242 logging.debug(&#34;Data header missing&#34;)
243 return None
244
245 if_data_body = self.read_next_if_data_body(if_data_header.block_count, if_data_header.block_length)
246
247 if if_data_body is None:
248 logging.debug(&#34;Data body missing&#34;)
249 return None
250
251 return AmmosGlobalFrameBody(if_data_header, if_data_body)
252
253 def data(self):
254 return b&#34;&#34;.join([each.global_frame_body.data_body.data for each in self.container.global_frames])</code></pre>
255</details>
256<h3>Ancestors</h3>
257<ul class="hlist">
258<li><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader">AbstractAmmosReader</a></li>
259<li>abc.ABC</li>
260</ul>
261<h3>Methods</h3>
262<dl>
263<dt id="ammosreader.AmmosIFReader.AmmosIFReader.data"><code class="name flex">
264<span>def <span class="ident">data</span></span>(<span>self)</span>
265</code></dt>
266<dd>
267<div class="desc"></div>
268<details class="source">
269<summary>
270<span>Expand source code</span>
271</summary>
272<pre><code class="python">def data(self):
273 return b&#34;&#34;.join([each.global_frame_body.data_body.data for each in self.container.global_frames])</code></pre>
274</details>
275</dd>
276<dt id="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body"><code class="name flex">
277<span>def <span class="ident">read_next_global_frame_body</span></span>(<span>self, data_header_length)</span>
278</code></dt>
279<dd>
280<div class="desc"><p>I return the next global frame body read from current position in file.</p>
281<p>:param data_header_length: the length of the data header
282:type data_header_length: int</p></div>
283<details class="source">
284<summary>
285<span>Expand source code</span>
286</summary>
287<pre><code class="python">def read_next_global_frame_body(self, data_header_length):
288 &#34;&#34;&#34;
289 I return the next global frame body read from current position in file.
290
291 :param data_header_length: the length of the data header
292 :type data_header_length: int
293 &#34;&#34;&#34;
294 if_data_header = None
295
296 if data_header_length == AmmosIFDataHeader.HEADER_SIZE:
297 if_data_header = self.read_next_global_frame_body_data_header()
298 if data_header_length == AmmosExtendedIFDataHeader.HEADER_SIZE:
299 if_data_header = self.read_next_global_frame_body_extended_data_header()
300
301 if if_data_header is None:
302 logging.debug(&#34;Data header missing&#34;)
303 return None
304
305 if_data_body = self.read_next_if_data_body(if_data_header.block_count, if_data_header.block_length)
306
307 if if_data_body is None:
308 logging.debug(&#34;Data body missing&#34;)
309 return None
310
311 return AmmosGlobalFrameBody(if_data_header, if_data_body)</code></pre>
312</details>
313</dd>
314<dt id="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_data_header"><code class="name flex">
315<span>def <span class="ident">read_next_global_frame_body_data_header</span></span>(<span>self)</span>
316</code></dt>
317<dd>
318<div class="desc"></div>
319<details class="source">
320<summary>
321<span>Expand source code</span>
322</summary>
323<pre><code class="python">def read_next_global_frame_body_data_header(self):
324
325 header_size = AmmosIFDataHeader.HEADER_SIZE
326
327 bytes = self.ammos_file.read(header_size)
328
329 logging.info(&#34;\nReading global frame body standard data header\n&#34;)
330 if ((not bytes) or (len(bytes) &lt; header_size)):
331 logging.debug(&#34;Can not read all %s bytes of global frame body data header&#34;, header_size)
332 return None
333 return AmmosIFDataHeader.from_bytes(bytes)</code></pre>
334</details>
335</dd>
336<dt id="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_extended_data_header"><code class="name flex">
337<span>def <span class="ident">read_next_global_frame_body_extended_data_header</span></span>(<span>self)</span>
338</code></dt>
339<dd>
340<div class="desc"><p>I return the next global frame body extended data header from current position in file.</p>
341<p>:return: the next Ammos Extended IF data header or None if incomplete
342:rtype: AmmosExtendedIFDataHeader</p></div>
343<details class="source">
344<summary>
345<span>Expand source code</span>
346</summary>
347<pre><code class="python">def read_next_global_frame_body_extended_data_header(self):
348 &#34;&#34;&#34;
349 I return the next global frame body extended data header from current position in file.
350
351 :return: the next Ammos Extended IF data header or None if incomplete
352 :rtype: AmmosExtendedIFDataHeader
353 &#34;&#34;&#34;
354 header_size = AmmosExtendedIFDataHeader.HEADER_SIZE
355
356 bytes = self.ammos_file.read(header_size)
357
358 logging.info(&#34;\nReading global frame body extended data header\n&#34;)
359 if ((not bytes) or (len(bytes) &lt; header_size)):
360 logging.debug(&#34;Can not read all %s bytes of global frame extended data header&#34;, header_size)
361 return None
362 return AmmosExtendedIFDataHeader.from_bytes(bytes)</code></pre>
363</details>
364</dd>
365<dt id="ammosreader.AmmosIFReader.AmmosIFReader.read_next_if_data_body"><code class="name flex">
366<span>def <span class="ident">read_next_if_data_body</span></span>(<span>self, number_of_data_blocks, data_length)</span>
367</code></dt>
368<dd>
369<div class="desc"><p>I return the next data body read from current position in file.</p>
370<p>:param number_of_data_blocks: the number of data blocks inside the body
371:type number_of_data_blocks: int</p>
372<p>:param data_length: the length of the raw data inside a single block
373:type data_length: int</p></div>
374<details class="source">
375<summary>
376<span>Expand source code</span>
377</summary>
378<pre><code class="python">def read_next_if_data_body(self, number_of_data_blocks, data_length):
379 &#34;&#34;&#34;
380 I return the next data body read from current position in file.
381
382 :param number_of_data_blocks: the number of data blocks inside the body
383 :type number_of_data_blocks: int
384
385 :param data_length: the length of the raw data inside a single block
386 :type data_length: int
387 &#34;&#34;&#34;
388 header_size = AmmosIFDataBlockHeader.HEADER_SIZE
389
390 data_body = AmmosIFDataBody()
391
392 block_length = header_size + data_length
393
394 total = number_of_data_blocks*block_length
395
396 byte_string = self.ammos_file.read(block_length)
397
398 if len(byte_string) != total:
399 logging.debug(&#34;Can not read all %s bytes of data body&#34;, total)
400 return None
401
402 for i in range(0, number_of_data_blocks):
403 result = byte_string[i*block_length:(i*block_length+block_length)]
404 data_body.add_data_block(AmmosIFDataBlock(AmmosIFDataBlockHeader.from_bytes(result[0:header_size]),
405 result[header_size:]))
406
407 return data_body</code></pre>
408</details>
409</dd>
410</dl>
411<h3>Inherited members</h3>
412<ul class="hlist">
413<li><code><b><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader">AbstractAmmosReader</a></b></code>:
414<ul class="hlist">
415<li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.add_tag" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.add_tag">add_tag</a></code></li>
416<li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_all_frames_left" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_all_frames_left">read_all_frames_left</a></code></li>
417<li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_next_global_frame_header" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_next_global_frame_header">read_next_global_frame_header</a></code></li>
418<li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_next_single_frame" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.read_next_single_frame">read_next_single_frame</a></code></li>
419<li><code><a title="ammosreader.AbstractAmmosReader.AbstractAmmosReader.rewind_to_start" href="AbstractAmmosReader.html#ammosreader.AbstractAmmosReader.AbstractAmmosReader.rewind_to_start">rewind_to_start</a></code></li>
420</ul>
421</li>
422</ul>
423</dd>
424</dl>
425</section>
426</article>
427<nav id="sidebar">
428<h1>Index</h1>
429<div class="toc">
430<ul></ul>
431</div>
432<ul id="index">
433<li><h3>Super-module</h3>
434<ul>
435<li><code><a title="ammosreader" href="index.html">ammosreader</a></code></li>
436</ul>
437</li>
438<li><h3><a href="#header-classes">Classes</a></h3>
439<ul>
440<li>
441<h4><code><a title="ammosreader.AmmosIFReader.AmmosIFReader" href="#ammosreader.AmmosIFReader.AmmosIFReader">AmmosIFReader</a></code></h4>
442<ul class="">
443<li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.data" href="#ammosreader.AmmosIFReader.AmmosIFReader.data">data</a></code></li>
444<li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body" href="#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body">read_next_global_frame_body</a></code></li>
445<li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_data_header" href="#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_data_header">read_next_global_frame_body_data_header</a></code></li>
446<li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_extended_data_header" href="#ammosreader.AmmosIFReader.AmmosIFReader.read_next_global_frame_body_extended_data_header">read_next_global_frame_body_extended_data_header</a></code></li>
447<li><code><a title="ammosreader.AmmosIFReader.AmmosIFReader.read_next_if_data_body" href="#ammosreader.AmmosIFReader.AmmosIFReader.read_next_if_data_body">read_next_if_data_body</a></code></li>
448</ul>
449</li>
450</ul>
451</li>
452</ul>
453</nav>
454</main>
455<footer id="footer">
456<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
457</footer>
458</body>
459</html>
Note: See TracBrowser for help on using the repository browser.