33import io
44import logging
55import re
6+ import sys
67
78from .csv import CSVReader
89
@@ -67,11 +68,11 @@ def get_tables(self):
6768 if self .scan_rate_unit is None and 'column_00_unit' in table ['metadata' ] and 'column_01_unit' in table ['metadata' ]:
6869 self .scan_rate_unit = '{column_00_unit}/{column_01_unit}' .format (** table ['metadata' ])
6970
70- for i , column in enumerate ( [
71+ for column in [
7172 ('Step size' , self .step_size_unit ),
7273 ('Scan rate' , self .scan_rate_unit )
73- ]) :
74- idx = len (table ['columns' ]) + i
74+ ]:
75+ idx = len (table ['columns' ])
7576 name , unit = column
7677 table ['columns' ].append ({
7778 'key' : str (idx ),
@@ -87,9 +88,9 @@ def get_tables(self):
8788 if prev is None :
8889 table ['rows' ].append (row + ['nan' , 'nan' ])
8990 else :
90- delta_v = float (row [0 ]) - float (prev [0 ])
91- v_s = delta_v / (float (row [1 ]) - float (prev [1 ]))
92- table ['rows' ].append (row + [str (delta_v ), str (v_s )])
91+ step_size = float (row [0 ]) - float (prev [0 ])
92+ scan_rate = step_size / (float (row [1 ]) - float (prev [1 ]))
93+ table ['rows' ].append (row + [str (step_size ), str (scan_rate )])
9394
9495 prev = row
9596
@@ -104,8 +105,24 @@ def get_metadata(self):
104105
105106 v_init = self .tables [0 ]['rows' ][0 ][0 ]
106107 v_end = self .tables [- 1 ]['rows' ][- 1 ][0 ]
107- v_max = max ([max ([float (row [0 ]) for row in table ['rows' ]]) for table in self .tables ])
108- v_min = min ([min ([float (row [0 ]) for row in table ['rows' ]]) for table in self .tables ])
108+
109+ idx = 0
110+ v_max , v_max_idx = sys .float_info .min , 0
111+ v_min , v_min_idx = sys .float_info .max , 0
112+ for table in self .tables :
113+ for row in table ['rows' ]:
114+ value = float (row [0 ])
115+ if value > v_max :
116+ v_max , v_max_idx = value , idx
117+ if value < v_min :
118+ v_min , v_min_idx = value , idx
119+ idx += 1
120+
121+ if v_max_idx < v_min_idx :
122+ v_limit1 , v_limit2 = v_max , v_min
123+ else :
124+ v_limit1 , v_limit2 = v_min , v_max
125+
109126 step_size = sum ([sum ([abs (float (row [- 2 ])) for row in table ['rows' ][1 :]]) for table in self .tables ]) / total_rows
110127 scan_rate = sum ([sum ([abs (float (row [- 1 ])) for row in table ['rows' ][1 :]]) for table in self .tables ]) / total_rows
111128 cycles = max ([table ['metadata' ]['scan' ] for table in self .tables ])
@@ -116,6 +133,8 @@ def get_metadata(self):
116133 'v_end' : v_end ,
117134 'v_max' : v_max ,
118135 'v_min' : v_min ,
136+ 'v_limit1' : v_limit1 ,
137+ 'v_limit2' : v_limit2 ,
119138 'step_size' : step_size ,
120139 'step_size_unit' : self .step_size_unit ,
121140 'scan_rate' : scan_rate ,
0 commit comments