25
25
26
26
from .version import __version__
27
27
28
- def parse_file_old (file_path ):
29
-
30
- print ("Parser start " )
31
-
32
- metadata = {
33
- 'log_runs_count' : 0 ,
34
- 'log_device_info' : {}
35
- }
36
- max_size = 0
37
-
38
- with open (file_path , 'r' ) as file :
39
- for line in file :
40
- parts_size = len (line .split ("," ))
41
- if parts_size > max_size : max_size = parts_size
42
-
43
- for line in file :
44
- parts_size = len (line .split ("," ))
45
- if parts_size > max_size : max_size = parts_size
46
-
47
- parts = line .split ("," )
48
- match parts [0 ]:
49
- case "$HIST" :
50
- pass
51
- # spec_mod = SpectrumData()
52
- # spec_mod.record = instance
53
- # spec_mod.spectrum = parts[8:]
54
- # spec_mod.integration = 10
55
- # spec_mod.time = parts[2]
56
- # spec_mod.save()
57
- case "$DOS" :
58
- print ("DOS" , line )
59
- metadata ['log_runs_count' ] += 1
60
- metadata ['log_device_info' ]['DOS' ] = {
61
- "type" : parts [0 ],
62
- "hw-model" : parts [1 ],
63
- "fw-version" : parts [2 ],
64
- "fw-build_info" : parts [5 ],
65
- "fw-commit" : parts [4 ],
66
- 'hw-sn' : parts [6 ].strip ()
67
- }
68
- case "$DIG" :
69
- print ("DIG" , line )
70
- metadata ['log_device_info' ]['DIG' ] = {
71
- "type" : parts [0 ],
72
- "hw-model" : parts [1 ],
73
- "hw-sn" : parts [2 ],
74
- 'eeprom' : parts [3 ].strip ()
75
- }
76
- case "$ADC" :
77
- print ("ADC" , line )
78
- metadata ['log_device_info' ]['ADC' ] = {
79
- "type" : parts [0 ],
80
- "hw-model" : parts [1 ],
81
- "hw-sn" : parts [2 ],
82
- 'eeprom' : parts [3 ].strip ()
83
- }
84
- case _:
85
- pass
86
-
87
- df_log = pd .read_csv (file_path , sep = ',' , header = None , names = range (max_size ), low_memory = False )
88
- data_types = df_log [0 ].unique ().tolist ()
89
-
90
- df_spectrum = df_log [df_log [0 ] == '$HIST' ]
91
- df_spectrum = df_spectrum .drop (columns = [0 , 1 , 3 , 4 , 5 , 6 , 7 ])
92
-
93
- new_columns = ['time' ] + list (range (df_spectrum .shape [1 ] - 1 ))
94
- df_spectrum .columns = new_columns
95
-
96
- df_spectrum ['time' ] = df_spectrum ['time' ].astype (float )
97
- minimal_time = df_spectrum ['time' ].min ()
98
- duration = df_spectrum ['time' ].max () - df_spectrum ['time' ].min ()
99
-
100
- metadata ['log_info' ] = {}
101
- metadata ['log_info' ]['log_type' ] = 'xDOS_SPECTRAL'
102
- metadata ['log_info' ]['log_type_version' ] = '1.0'
103
- metadata ['log_info' ]['internal_time_min' ] = df_spectrum ['time' ].min ()
104
- metadata ['log_info' ]['internal_time_max' ] = df_spectrum ['time' ].max ()
105
- metadata ['log_info' ]['log_duration' ] = float (duration )
106
- metadata ['log_info' ]['spectral_count' ] = df_spectrum .shape [0 ]
107
- metadata ['log_info' ]['channels' ] = df_spectrum .shape [1 ] - 1
108
- metadata ['log_info' ]['types' ] = data_types
109
- metadata ['log_info' ]['telemetry_values' ] = []
110
-
111
- df_spectrum ['time' ] = df_spectrum ['time' ] - df_spectrum ['time' ].min ()
112
-
113
- time = df_spectrum ['time' ].to_list ()
114
- sums = df_spectrum .drop ('time' , axis = 1 ).sum (axis = 1 ) #.div(total_time)
115
-
116
- hist = df_spectrum .drop ('time' , axis = 1 ).sum (axis = 0 )
117
-
118
-
119
- df_metadata = pd .DataFrame ()
120
-
121
- if True :
122
- try :
123
- for index , row in df_log .iterrows ():
124
- first_column_value = row [0 ]
125
- row_as_list = row .tolist ()[2 :]
126
-
127
- match first_column_value :
128
- case '$BATT' :
129
- keys = ['time' , 'voltage' , 'current' , 'capacity_remaining' , 'capacity_full' , 'temperature' ]
130
- bat = { k :float (v ) for (k ,v ) in zip (keys , row_as_list [0 :len (keys )])}
131
- #bat['current'] /= 1000.0
132
- #bat['voltage'] /= 1000.0
133
- df_metadata = pd .concat ([df_metadata , pd .DataFrame ([bat ])], ignore_index = True )
134
- del bat
135
- case '$ENV' :
136
- keys = ['time' , 'temperature_0' , 'humidity_0' , 'temperature_1' , 'humidity_1' , 'temperature_2' , 'pressure_3' ]
137
- env = { k :float (v ) for (k ,v ) in zip (keys , row_as_list [0 :len (keys )])}
138
- df_metadata = pd .concat ([df_metadata , pd .DataFrame ([env ])], ignore_index = True )
139
- del env
140
- case '$HIST' :
141
- pass
142
- case _:
143
- print ('Unknown row' , first_column_value )
144
-
145
- df_metadata ['time' ] = df_metadata ['time' ] - minimal_time
146
- except Exception as e :
147
- print (e )
148
-
149
-
150
- print ("File parsered .." )
151
-
152
- return [df_spectrum ['time' ], sums , hist , metadata , df_metadata ]
153
-
154
-
155
28
156
29
def parse_file (file_path ):
157
30
start_time = time .time ()
@@ -192,7 +65,6 @@ def parse_file(file_path):
192
65
print (f'Unknown row type: { parts [0 ]} ' )
193
66
194
67
195
-
196
68
np_spectrum = np .array (df_lines , dtype = float )
197
69
time_column = np_spectrum [:, 0 ]
198
70
np_spectrum = np_spectrum [:, 8 :]
@@ -204,7 +76,7 @@ def parse_file(file_path):
204
76
maximal_time = time_column .max ()
205
77
duration = maximal_time - minimal_time
206
78
207
- df_metadata = pd .DataFrame (df_metadata , columns = range (9 ))
79
+ # df_metadata = pd.DataFrame(df_metadata, columns=range(9))
208
80
209
81
metadata ['log_info' ].update ({
210
82
'log_type' : 'xDOS_SPECTRAL' ,
@@ -233,7 +105,6 @@ def run(self):
233
105
234
106
235
107
236
-
237
108
class PlotCanvas (pg .GraphicsLayoutWidget ):
238
109
def __init__ (self , parent = None , file_path = None ):
239
110
super ().__init__ (parent )
@@ -1145,10 +1016,8 @@ def initUI(self):
1145
1016
self .logView_splitter = QSplitter (Qt .Horizontal )
1146
1017
self .logView_splitter .addWidget (self .left_panel )
1147
1018
#self.logView_splitter.addWidget(QWidget())
1148
- self .logView_splitter .setSizes ([1 , 9 ])
1149
- sizes = self .logView_splitter .sizes ()
1150
- #sizes[0] = int(sizes[1] * 0.1)
1151
- #self.logView_splitter.setSizes(sizes)
1019
+
1020
+
1152
1021
1153
1022
layout = QVBoxLayout ()
1154
1023
layout .addWidget (self .logView_splitter )
@@ -1160,6 +1029,11 @@ def open_file(self, file_path):
1160
1029
self .plot_canvas = PlotCanvas (self , file_path = self .file_path )
1161
1030
self .logView_splitter .addWidget (self .plot_canvas )
1162
1031
1032
+ self .logView_splitter .setSizes ([1 , 9 ])
1033
+ sizes = self .logView_splitter .sizes ()
1034
+ sizes [0 ] = int (sizes [1 ] * 0.1 )
1035
+ self .logView_splitter .setSizes (sizes )
1036
+
1163
1037
self .start_data_loading ()
1164
1038
1165
1039
def start_data_loading (self ):
@@ -1221,6 +1095,14 @@ def __init__(self, args):
1221
1095
self .plot_tab = None
1222
1096
self .airdos_tab = None
1223
1097
1098
+ def updateStackedWidget (self ):
1099
+ print ("Updating stacked widget" )
1100
+ print (self .tab_widget .count ())
1101
+ if self .tab_widget .count ():
1102
+ self .stacked_container .setCurrentIndex (1 )
1103
+ else :
1104
+ self .stacked_container .setCurrentIndex (0 )
1105
+
1224
1106
def openPlotTab (self , file_path = None ):
1225
1107
plot_tab = PlotTab ()
1226
1108
if not file_path :
@@ -1232,21 +1114,34 @@ def openPlotTab(self, file_path = None):
1232
1114
1233
1115
self .tab_widget .addTab (plot_tab , f"{ file_name } " )
1234
1116
self .tab_widget .setCurrentIndex (self .tab_widget .count () - 1 )
1117
+ self .updateStackedWidget ()
1235
1118
1236
1119
1237
1120
def openAirdosTab (self ):
1238
1121
airdos_tab = AirdosConfigTab ()
1239
1122
self .tab_widget .addTab (airdos_tab , "Airdos control" )
1240
1123
self .tab_widget .setCurrentIndex (self .tab_widget .count () - 1 )
1124
+ self .updateStackedWidget ()
1125
+
1241
1126
1127
+ def blank_page (self ):
1128
+ # This is widget for blank page
1129
+ # When no tab is opened
1130
+ widget = QWidget ()
1131
+ layout = QVBoxLayout ()
1132
+ label = QLabel ("No tab is opened yet. Open a file or enable airdos control." , alignment = Qt .AlignCenter )
1133
+ layout .addWidget (label )
1134
+ widget .setLayout (layout )
1135
+ return widget
1242
1136
1243
1137
def initUI (self ):
1244
1138
self .setWindowTitle (self .title )
1245
1139
self .setGeometry (self .left , self .top , self .width , self .height )
1246
1140
self .setWindowIcon (QIcon ('media/icon_ust.png' ))
1247
1141
1142
+
1248
1143
self .tab_widget = QTabWidget ()
1249
- self . setCentralWidget ( self . tab_widget )
1144
+
1250
1145
1251
1146
if self .args .file_path :
1252
1147
print ("Oteviram zalozku s logem" )
@@ -1293,18 +1188,17 @@ def initUI(self):
1293
1188
self .setStatusBar (self .statusBar )
1294
1189
self .statusBar .showMessage ("Welcome to dosview" )
1295
1190
1191
+ self .stacked_container = QStackedWidget ()
1192
+ self .stacked_container .addWidget (self .blank_page ())
1193
+ self .stacked_container .addWidget (self .tab_widget )
1194
+ self .stacked_container .setCurrentIndex (0 )
1195
+ self .setCentralWidget (self .stacked_container )
1296
1196
1297
- self .setWindowTitle (f"dosview - { self .file_path } " )
1298
1197
self .show ()
1299
1198
1300
1199
1301
1200
def action_switch_airdoscontrol (self ):
1302
- print ("Switching to Airdos control tab" )
1303
-
1304
- if not self .airdos_tab :
1305
- self .airdos_tab = AirdosConfigTab ()
1306
- self .tab_widget .addTab (self .airdos_tab , "Airdos control" )
1307
- self .statusBar .showMessage ("Airdos control tab opened" )
1201
+ self .openAirdosTab ()
1308
1202
1309
1203
def about (self ):
1310
1204
message = QMessageBox .about (self , "About dosview" , "dosview is a simple tool to visualize data from Universal Scientific Technologies's" )
@@ -1318,8 +1212,9 @@ def open_new_file(self, flag):
1318
1212
dlg .setFileMode (QFileDialog .ExistingFile )
1319
1213
1320
1214
fn = dlg .getOpenFileName ()
1321
- print (fn )
1322
- self .openPlotTab (fn [0 ])
1215
+ print ("Open file" , fn [0 ])
1216
+ if fn [0 ]:
1217
+ self .openPlotTab (fn [0 ])
1323
1218
1324
1219
dlg .deleteLater ()
1325
1220
0 commit comments