1
1
import logging
2
2
3
- from brukeropusreader . opus_parser import parse_meta , parse_data
3
+ import opusFC
4
4
from numpy import ndarray
5
5
6
6
from converter_app .readers import Readers
@@ -18,7 +18,7 @@ class DotZeroReader(Reader):
18
18
19
19
def __init__ (self , file , * tar_files ):
20
20
super ().__init__ (file , * tar_files )
21
- self ._dotzero_file = []
21
+ self ._dotzero_file = None
22
22
self ._dx_name = None
23
23
24
24
def check (self ):
@@ -29,15 +29,22 @@ def check(self):
29
29
dotzero_extentions = ['.0' ]
30
30
31
31
if self .is_tar_ball :
32
- self ._dotzero_file = [x for x in self .file_content if x .suffix .lower () in dotzero_extentions ]
32
+ for x in self .file_content :
33
+ try :
34
+ if opusFC .isOpusFile (x .fp .filename ):
35
+ self ._dotzero_file = x .fp .filename
36
+ return True
37
+ except (ValueError , TypeError , FileNotFoundError ):
38
+ pass
39
+
33
40
dx_file = next ((x for x in self .file_content if x .suffix .lower () == '.dx' ), None )
34
41
if dx_file is not None :
35
42
self ._dx_name = dx_file .name [:- 3 ]
36
43
37
- if self .file .suffix .lower () in dotzero_extentions :
38
- self ._dotzero_file . append ( self .file )
44
+ elif self .file .suffix .lower () in dotzero_extentions and opusFC . isOpusFile ( self . file . fp . filename ) :
45
+ self ._dotzero_file = self .file . fp . filename
39
46
40
- return len ( self ._dotzero_file ) > 0
47
+ return self ._dotzero_file is not None
41
48
42
49
def _add_to_meta (self , table , src , k = None ):
43
50
if k is None :
@@ -57,24 +64,22 @@ def _add_to_meta(self, table, src, k=None):
57
64
def prepare_tables (self ):
58
65
tables = []
59
66
60
- for dotzero_file in self ._dotzero_file :
61
- data = dotzero_file .content
62
- meta_data = parse_meta (data )
63
- opus_data = parse_data (data , meta_data )
64
- if dotzero_file .name == self ._dx_name :
65
- table = self .append_table ([])
66
- tables .insert (0 , table )
67
- else :
68
- table = self .append_table (tables )
69
- table ['metadata' ]['__FILE_NAME__' ] = dotzero_file .name
70
- self ._add_to_meta (table , opus_data )
71
- ab_x = opus_data .get_range ("AB" )
72
- table ['rows' ] = [[val , opus_data ["AB" ][i ], opus_data ["ScSm" ][i ], opus_data ["ScRf" ][i ]] for i , val in enumerate (ab_x )]
73
-
74
- table ['columns' ] += [{
75
- 'key' : f'{ idx } ' ,
76
- 'name' : value
77
- } for idx , value in enumerate (["X" , "AB" , "ScSm" , "ScRf" ])]
67
+ dbs = opusFC .listContents (self ._dotzero_file ) # List all data blocks in the file
68
+ for block in dbs :
69
+ table = self .append_table (tables )
70
+ data = opusFC .getOpusData ( self ._dotzero_file , block ) # Retrieve data from the specific block
71
+ for x in block :
72
+ table .add_metadata ('__BLOCK__' , str (x ))
73
+
74
+ for key , value in data .parameters .items ():
75
+ table .add_metadata (str (key ), str (value ))
76
+
77
+ table ['rows' ] = [[float (val ), float (data .y [i ])] for i , val in enumerate (data .x )]
78
+ table ['columns' ] = [{
79
+ 'key' : f'{ idx } ' ,
80
+ 'name' : name
81
+ } for idx , name in enumerate (['X' , 'Y' ])]
82
+
78
83
return tables
79
84
80
85
0 commit comments