from mylogger import log from myexception import MyException from typing import Tuple,List,Optional,Union,Callable from pathlib import Path, PurePath from myconfig import MyConfig,DeviceType,FILE_MARK,CURRENT_DIR,CAL_DIR,DATA_DIR,SAVE_EXT_NAME,\ INTERVAL,SEPARATOR class ReadCal(): def __init__(self) -> None: pass # 数据加时间值 @staticmethod def read_columns_set_by_mark(fpath:Path, mark:list, *column ) -> Tuple[str,List] : # def read_column_1set_by_mark(fpath:str, column:int, *args ) -> Tuple[ str, List ] : ''' return: time:str List mark : ['Spectrum','DATA'] default end with "[END]" column参数直接写,如: 0,1,2 ''' log.info(f"read_column_1set_by_mark : \ {fpath} , mark:{mark} , column:{column}", __name__, "", "") # 处理mark args[0] = Spectrum if len(mark) != 2: log.error( f"read_column_1set_by_mark() wrong args ",__name__, "", "" ) raise MyException( f"read_column_1set_by_mark() wrong args " ) if len(column) == 0: log.error(f"read_column_1set_by_mark(), no column para, pls input column ",__name__, "", "" ) raise MyException( f"read_column_1set_by_mark() , pls input column " ) if len( mark ) == 0: mark_1 = '[Spectrum]' mark_2 = '[DATA]' mark_1 = '['+ mark[0] +']' mark_2 = '['+ mark[1] +']' res = [] sn = ReadCal.readFileSNbyIDDevice(fpath) # 预备返回数据结构 # res_time = [] res_data = [] columnLen = len(column) for i in range(columnLen): res_data.append( [] ) with fpath.open('r') as f_handle: rflag = 0 # res = [] # res_time = [] # res_data = [] for line in f_handle: if mark_1 in line and rflag == 0: log.debug(f" find {mark_1}", __name__, "", "" ) rflag += 1 continue if mark_2 in line and rflag > 3 : log.debug(f" find {mark_1} end ", __name__, "", "" ) rflag = 0 continue # 获取时间 if rflag == 1 : data = line.strip('\n').strip(' ').split('=') if data[0].strip() == "DateTime" : log.debug(f" find {mark_1} -> DateTime {data[1]} ", __name__, "", "" ) time_ = data[1].strip() rflag += 1 continue if rflag == 2 and ( mark_2 in line ) : log.debug(f" find {mark_2} -> ", __name__, "", "" ) rflag += 1 continue if rflag == 3 : if mark_2 not in line: # log.debug(f" get data {line}", __name__, "", "" ) data = line.strip('\n').strip(' ').split(' ') # 忽略第一行,第一行0开头,保存积分时间的 if data[0].strip() == "0" : continue else: # if data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : # 处理多列 for i in range(columnLen): # res_time.append( time_ ) # print(f" ==== {data}") res_data[i].append( data[column[i]] ) continue if rflag == 3 and ( mark_2 in line ) : log.debug(f" find {mark_2} end , line: {line} ", __name__, "", "" ) rflag += 1 continue #需要继续让其找到 if rflag == 4: log.debug(f" job done......", __name__, "", "" ) res_time = time_ # res_data.append( res ) # 只读一组数据就 break rflag += 1 # res = [] # rflag = 0 if rflag == 5: log.debug(f" job done, break...", __name__, "", "" ) break return ( res_time, res_data) pass # 数据加时间值 @staticmethod def read_columns_sets_by_mark(fpath:Path, mark:list, *column ) -> Tuple[List[str],List[List]] : # def read_column_1set_by_mark(fpath:str, column:int, *args ) -> Tuple[ str, List ] : ''' @desc: 获取多列数据,且为多套数据,非单套数据 @return: res_time ['2011-01-28 00:00:32', '2011-01-28 00:01:04', '2011-01-28 00:04:05', '2011-01-28 00:04:17'] res_data [ [[,,,]], [[,,,]], [[,,,]], [[,,,]]] 取 res_data[0] @args : ['Spectrum','DATA'] default end with "[END]" ''' log.info(f"read_column_1set_by_mark : \ {fpath} , mark:{mark} , column:{column}", __name__, "", "") # 处理mark args[0] = Spectrum if len(mark) != 2: log.error( f"read_columns_sets_by_mark() wrong args ",__name__, "", "" ) raise MyException( f"read_columns_sets_by_mark() wrong args " ) if len(column) == 0: log.error(f"read_columns_sets_by_mark(), no column para, pls input column ",__name__, "", "" ) raise MyException( f"read_columns_sets_by_mark() , pls input column " ) if len( mark ) == 0: mark_1 = '[Spectrum]' mark_2 = '[DATA]' mark_1 = '['+ mark[0] +']' mark_2 = '['+ mark[1] +']' res = [] sn = ReadCal.readFileSNbyIDDevice(fpath) # 预备返回数据结构 res_data = [] res_time = [] res = [] columnLen = len(column) for i in range(columnLen): # res_time.append( [] ) res.append( [] ) with fpath.open('r') as f_handle: rflag = 0 for line in f_handle: if mark_1 in line and rflag == 0: log.debug(f" find {mark_1}", __name__, "", "" ) rflag += 1 continue if mark_2 in line and rflag > 3 : log.debug(f" find {mark_1} end ", __name__, "", "" ) rflag = 0 continue # 获取时间 if rflag == 1 : data = line.strip('\n').strip(' ').split('=') if data[0].strip() == "DateTime" : log.debug(f" find {mark_1} -> DateTime {data[1]} ", __name__, "", "" ) time_ = data[1].strip() rflag += 1 continue if rflag == 2 and ( mark_2 in line ) : log.debug(f" find {mark_2} -> ", __name__, "", "" ) rflag += 1 continue if rflag == 3 : if mark_2 not in line: # log.debug(f" get data {line}", __name__, "", "" ) data = line.strip('\n').strip(' ').split(' ') # 忽略第一行,第一行0开头,保存积分时间的 if data[0].strip() == "0" : continue else: # if data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : # 处理多列 for i in range(columnLen): # res_time.append( time_ ) res[i].append( data[column[i]] ) continue if rflag == 3 and ( mark_2 in line ) : log.debug(f" find {mark_2} end , line: {line} ", __name__, "", "" ) rflag += 1 continue #需要继续让其找到 if rflag == 4: log.debug(f" job done......", __name__, "", "" ) res_time.append( time_ ) res_data.append( res ) # 可能导致不同组数据拼接起来???? rflag += 1 # res = [] # rflag = 0 if rflag == 5: log.debug(f" job done, break...", __name__, "", "" ) rflag = 0 continue log.debug(f" res.time len {len(res_time)} , \ res.data len {len(res_data)} , ", __name__, "", "" ) return res_time, res_data # 数据加时间值 @staticmethod def read_columns_sets_by_mark_callback(fpath:Path, mark:list, callback:Callable, *column ) : ''' @desc: 获取多列数据,且为多套数据,非单套数据 @return: res_time ['2011-01-28 00:00:32', '2011-01-28 00:01:04', '2011-01-28 00:04:05', '2011-01-28 00:04:17'] res_data [ [[,,,]], [[,,,]], [[,,,]], [[,,,]]] 取 res_data[0] @args : ['Spectrum','DATA'] default end with "[END]" ''' log.debug(f"read_column_1set_by_mark : \ {fpath} , mark:{mark} , column:{column}", __name__, "", "") # 处理mark args[0] = Spectrum if len(mark) != 2: log.error( f"read_columns_sets_by_mark() wrong args ",__name__, "", "" ) raise MyException( f"read_columns_sets_by_mark() wrong args " ) if len(column) == 0: log.error(f"read_columns_sets_by_mark(), no column para, pls input column ",__name__, "", "" ) raise MyException( f"read_columns_sets_by_mark() , pls input column " ) if len( mark ) == 0: mark_1 = '[Spectrum]' mark_2 = '[DATA]' mark_1 = '['+ mark[0] +']' mark_2 = '['+ mark[1] +']' # 预备返回数据结构 res_data = [] res_time = [] res = [] sn = ReadCal.readFileSNbyIDDevice(fpath) columnLen = len(column) for i in range(columnLen): # res_time.append( [] ) res.append( [] ) with fpath.open('r') as f_handle: rflag = 0 for line in f_handle: if mark_1 in line and rflag == 0: log.debug(f" find {mark_1}", __name__, "", "" ) rflag += 1 continue if mark_2 in line and rflag > 3 : log.debug(f" find {mark_1} end ", __name__, "", "" ) rflag = 0 continue # 获取时间 if rflag == 1 : data = line.strip('\n').strip(' ').split('=') if data[0].strip() == "DateTime" : log.debug(f" find {mark_1} -> DateTime {data[1]} ", __name__, "", "" ) time_ = data[1].strip() rflag += 1 continue if rflag == 2 and ( mark_2 in line ) : log.debug(f" find {mark_2} -> ", __name__, "", "" ) rflag += 1 continue if rflag == 3 : if mark_2 not in line: # log.debug(f" get data {line}", __name__, "", "" ) data = line.strip('\n').strip(' ').split(' ') # 忽略第一行,第一行0开头,保存积分时间的 if data[0].strip() == "0" : continue else: # if data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : # 处理多列 for i in range(columnLen): res[i].append( data[column[i]] ) continue if rflag == 3 and ( mark_2 in line ) : log.debug(f" find {mark_2} end , line: {line} ", __name__, "", "" ) rflag += 1 continue #需要继续让其找到 if rflag == 4: log.debug(f" job done......", __name__, "", "" ) # callable , not return。 每读出一组就回调,不建议。频繁读写硬盘 # callback(time_, res) res_time.append( time_ ) res_data.append( res ) rflag += 1 # res = [] # rflag = 0 if rflag == 5: log.debug(f" job done, break...", __name__, "", "" ) rflag = 0 continue # callable , not return。 一个文件读完直接处理 callback(sn, res_time, res_data) # res_time ['2011-01-28 00:00:32', '2011-01-28 00:01:04', '2011-01-28 00:04:05', '2011-01-28 00:04:17'] # res_data [ [[,,,]], [[,,,]], [[,,,]], [[,,,]]] 取 res_data[0] log.debug(f" res.time len {len(res_time)} , \ res.data len {len(res_data)} , ", __name__, "", "" ) # return ( res_time, res_data) @staticmethod def readDataIPinfo(fpath:Path, mark:list, callback:Callable ): ''' SAMIP sensor ,Inclination Pressure, InclX InclY Pressure ''' log.debug(f"readDataIPinfo : {fpath} , mark:{mark} , ", __name__, "", "") # 处理mark args[0] = Spectrum if len(mark) != 2: log.error( f"readDataIPinfo() wrong args ",__name__, "", "" ) raise MyException( f"readDataIPinfo() wrong args " ) if len( mark ) == 0: mark_1 = '[Spectrum]' mark_2 = '[DATA]' mark_1 = '['+ mark[0] +']' # 预备返回数据结构 res_data = [] res_time = [] res = [] tags = ['InclX' , 'InclY', 'Pressure'] with fpath.open('r') as f_handle: rflag = 0 for line in f_handle: if mark_1 in line and rflag == 0: log.debug(f" find {mark_1}", __name__, "", "" ) rflag += 1 continue if mark_1 in line and rflag > 5: log.debug(f" find {mark_1} end", __name__, "", "" ) rflag = 0 continue # 获取时间 if rflag == 1 : data = line.strip('\n').strip(' ').split('=') if data[0].strip() == "DateTime" : log.debug(f" find {mark_1} -> DateTime {data[1]} ", __name__, "", "" ) time_ = data[1].strip() rflag += 1 continue if rflag == 2: if "[" not in line : data = line.strip('\n').strip(' ').split('=') # RAMSES 数据通过MethodName 获得传感器序列号 if data[0].strip() in tags : res.append( data[1].strip(' ') ) rflag += 1 if rflag == 5: res_time.append(time_) res_data.append(res) rflag = 0 pass callback(res_time,res_data) return (res_time,res_data) @staticmethod def readSamSNFromIni( fpath:Path ): """ @description : 依据文件路径获得samsn, 兼容 SAM SAMIP传感器 """ with fpath.open('r') as f_handle: for line in f_handle: # IDDevice = SAM_85AF ln = line.strip('\n').strip(' ').split('=') if ln[0].strip() == "IDDevice": if ln[1].strip().split('_')[0] == "SAM": return ln[1].strip().split('_')[1] return None pass @staticmethod def readIPCalFromIni( fpath:Path ): """ @description : 依据文件路径获得IPCal IP标定信息 """ ipcal = {} with fpath.open('r') as f_handle: flag = 0 for line in f_handle: # IDDevice = SAM_85AF ln = line.strip('\n').strip(' ').split('=') if flag == 0 and ln[0].strip() == "IDDevice": if ln[1].strip().split('_')[0] == "IP": ipcal["IPSN"] = ln[1].strip().split('_')[1] flag += 1 continue if flag == 1 and "[" in line: flag += 1 continue if flag == 2: if "[" in line: flag = flag + 1 if not "[" in line: line_ = line.strip('\n').strip(' ').split('=') ipcal.update({line_[0].strip():line_[1].strip()}) if flag == 3: break return ipcal @staticmethod def readSAMCalFromIni( fpath:Path ): """ @description : 依据文件路径获得SAMCal SAM标定信息 """ samcal = {} with fpath.open('r') as f_handle: flag = 0 for line in f_handle: # IDDevice = SAM_85AF line_ = line.strip('\n').strip(' ').split('=') if flag == 0 and line_[0].strip() == "IDDevice": if line_[1].strip().split('_')[0] == "SAM": samcal["SAMSN"] = line_[1].strip().split('_')[1] flag += 1 continue if flag == 1 and "[" in line: flag += 1 continue if flag == 2: if "[" in line: flag = flag + 1 if not "[" in line: line_ = line.strip('\n').strip(' ').split('=') samcal.update({line_[0].strip():line_[1].strip()}) if flag == 3: break return samcal @staticmethod def readFileSNbyIDDevice(fpath:Path): sn_from_file = '' with fpath.open('r') as f_handle: rflag = 0 for line in f_handle: if '[Spectrum]' in line and '[END]' not in line and rflag == 0: rflag += 1 pass if rflag == 1: data = line.strip('\n').strip(' ').split('=') # RAMSES 数据通过MethodName 获得传感器序列号 if data[0].strip() == "IDDevice": sn_from_file = data[1].strip(' ').split('_')[1] break return sn_from_file @staticmethod def readDatafileSNbyMethodName(fpath:Path): ''' SAMIP SAM的数据文件中, MethodName对应的值都是 SAM_{SAMSN} 读SAMIP的数据,建议用 {SAMSN}的处理 ''' sn_from_file = '' with fpath.open('r') as f_handle: rflag = 0 for line in f_handle: if '[Spectrum]' in line and '[END]' not in line and rflag == 0: rflag += 1 pass if rflag == 1: data = line.strip('\n').strip(' ').split('=') # RAMSES 数据通过MethodName 获得传感器序列号 if data[0].strip() == "MethodName": sn_from_file = data[1].strip(' ').split('_')[1] break return sn_from_file if __name__ == "__main__": log.info(f"******** main read *********", __name__, "", "") # path = PurePath() # print(path) pass # def read_data_sn(self,fpath): # with open(fpath, 'r') as f_handle: # rflag = 0 # for line in f_handle: # if '[Spectrum]' in line and '[END]' not in line and rflag == 0: # rflag += 1 # pass # if rflag == 1 : # data = line.strip('\n').strip(' ').split('=') # if data[0].strip() == "IDDevice" : # return data[1].strip(' ').split('_')[1] # pass # def read_data1(self,fpath): # with open(fpath, 'r') as f_handle: # rflag = 0 # res = [] # res_time = [] # res_data = [] # for line in f_handle: # if '[Spectrum]' in line and '[END]' not in line and rflag == 0: # rflag += 1 # pass # if '[Spectrum]' in line and '[END]' in line : # rflag = 0 # pass # # 获取时间 # if rflag == 1 : # data = line.strip('\n').strip(' ').split('=') # if data[0].strip() == "DateTime" : # time_ = data[1].strip() # rflag += 1 # if rflag == 2 and ( '[DATA]' in line or '[Data]' in line ) : # rflag += 1 # if rflag == 3 : # data = line.strip('\n').strip(' ').split(' ') # if int(data[0].strip()) == 0 : # pass # else: # # if data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : # res.append( float(data[1] ) ) # if rflag == 3 and '[' in line and ']' in line: # rflag += 1 # if rflag == 4: # # 这个地方 # # self. __save_absorbance_data( res_time, res, sn ) # res_time.append( time_ ) # res_data.append( res ) # # ?? 可以调用函数直接处理 # # DealResult.deal_one_data(time_,res) # res = [] # rflag = 0 # # return [['data']] # pass # def read_data_column( self,fpath, column=1 ): # column_ = 1 # if int(column_) : # column_ = int(column_) # pass # else: # pass # with open(fpath, 'r') as f_handle: # rflag = 0 # res = [] # res_time = [] # res_data = [] # for line in f_handle: # if '[Spectrum]' in line and '[END]' not in line and rflag == 0: # rflag += 1 # pass # if '[Spectrum]' in line and '[END]' in line : # rflag = 0 # pass # # 获取时间 # if rflag == 1 : # data = line.strip('\n').strip(' ').split('=') # if data[0].strip() == "DateTime" : # time_ = data[1].strip() # rflag += 1 # if rflag == 2 and ( '[DATA]' in line or '[Data]' in line ) : # rflag += 1 # if rflag == 3 : # data = line.strip('\n').strip(' ').split(' ') # if int(data[0].strip()) == 0 : # pass # else: # res.append( float(data[column_] ) ) # if rflag == 3 and '[' in line and ']' in line: # rflag += 1 # if rflag == 4: # # 这个地方 # # self. __save_absorbance_data( res_time, res, sn ) # # res_time.append( time_ ) # # res_data.append( res ) # # ?? 可以调用函数直接处理 # return time_, res # # return [['data']] # pass # def read_data_wl( self, fpath ): # wl = self.read_data_column( fpath, column=0 ) # pass # def get_cal_file(self,sn): # sn_ = sn # file_ = {} # if open( os.path.join( CAL_PATH, "SAM_"+sn_+"ini" ),"r"): # file_ = { # "type": "SAM", # "back":"Back_SAM_", # "cal":"Cal_SAM_", # "calaq":"CalAQ_SAM_", # "ini":"SAM_", #ini # "immersion":"immersion_factors_Lu.DAT" # } # return file_ # if open( os.path.join( CAL_PATH, "SAMIP_"+ sn_ +"_ALL.ini" ),"r"): # file_ = { # "type": "SAMIP", # # "back":"Back_SAM_" + sn_ + CAL_EXT_NAME, # # "cal":"Cal_SAM_" + sn_ + CAL_EXT_NAME, # # "calaq":"CalAQ_SAM_" + sn_ + CAL_EXT_NAME, # "ini":"SAMIP_"+sn+"_ALL.ini", #ini # "immersion":"immersion_factors_Lu.DAT" # } # if file_['ini'] : # samsn = self.read_ini(file_['ini'], "SAMSN") # file_.update("cal", "Cal_SAM_" + samsn + CAL_EXT_NAME) # file_.update("calaq", "CalAQ_SAM_" + samsn + CAL_EXT_NAME) # file_.update("back", "Back_SAM_" + samsn + CAL_EXT_NAME) # return file_ # return # def read_cal(self,sn): # # SAM SAMIP 不同 # self.cal_data= {} # # 1. 依据序列号读 ini, 判读是否有文件 SAM_8578.ini SAMIP_50BB_ALL.ini # self.calfile = self.get_cal_file(sn) # 其中sam的是错误的 # # 2 读ini 文件错误 # cal_data = {} # for key in self.calfile: # if key == "immersion" : # path_ = os.path.join( CAL_PATH, self.calfile[key] ) # content_ = [self.read_data_column( path_, column=0 )[1]] # content_.append( self.read_data_column( path_, column=0 )[1] ) # cal_data.update({key:content_}) # if key == "cal" : # path_ = os.path.join( CAL_PATH, self.calfile[key] ) # content_ = self.read_data_column( path_, column=0 ) # cal_data.update({key:content_}) # if key == "back" : # path_ = os.path.join( CAL_PATH, self.calfile[key] ) # content_ = self.read_data_column( path_, column=0 ) # cal_data.update({key:content_}) # if key == "calaq" : # path_ = os.path.join( CAL_PATH, self.calfile[key] ) # content_ = self.read_data_column( path_, column=0 ) # cal_data.update({key:content_}) # if key == "ini" : # cal_data.update({ "samcal" : self.read_ini( os.path.join( CAL_PATH, self.calfile[key] ), "SAMCAL" ) }) # cal_data.update({ "ipcal" : self.read_ini( os.path.join( CAL_PATH, self.calfile[key] ), "IPCAL" ) }) # pass # DealResult.deal_cal(cal_data) # pass # def read_data(self,fname,lst): # """ # @description : 线程守护读取数据文件 ,循环读取 # 考虑一次读取多组,只读一列的情况 # sn ,begin,end, 指定读的列 # 返回:[ [[第一组时间],[第二组时间] .... ], [ [第一组data],[第二组data] ...] ] # RAMSES 要考虑 : InclX = -6.42, InclY = -6.5625 , Pressure = 6.61394049205538 # 需要读一组波长出来 # """ # log.info( ":::::::::::: Class : %s -> Function :__read_data " % ( __name__, ) ) # log.info( " __read_data : lst %s" % ( lst, ) ) # sn = lst[0] # begin = lst[1] # end = lst[2] # column = lst[3] # samip_sn= lst[4] # # 检查 sn--- 不检查sn ,读数据就 成csv # # 读取一组数据的0列作为波长??? # # if is_sn_ok : # log.info( "正在处理文件 .... " + fname ) # with open(fname, 'r') as f_handle: # time_ = "" # rflag = 0 # intlx = 0.0 # intly = 0.0 # pressure = 0.0 # res = [] # res_time = [] # res_data = [] # for line in f_handle: # if rflag == 0 and '[Spectrum]' in line and '[END]' not in line : # rflag += 1 # pass # if '[Spectrum]' in line and '[END]' in line : # rflag = 0 # pass # # 获取时间, InclX, InclY ,Pressure # if rflag == 1 : # data = line.strip('\n').strip(' ').split('=') # if data[0].strip() == "DateTime" : # time_ = data[1].strip() # rflag += 1 # # InclX, InclY ,Pressure # if rflag == 2: # data = line.strip('\n').strip(' ').split('=') # if data[0].strip() == "InclX" : # intlx = data[1].strip() # if data[0].strip() == "InclY" : # intly = data[1].strip() # if data[0].strip() == "Pressure" : # pressure = data[1].strip() # # DATA set 结束添加数据 # if rflag == 4 and '[DATA]' in line and '[END]' in line: # # time.sleep(10) # res_time.append( [time_,intlx,intly,pressure] ) # res_data.append( res ) # res = [] # rflag += 1 # if rflag == 3 : # data = line.strip('\n').strip(' ').split(' ') # # print("rflag %s +++++++++++++++++++++++++++++++++ %s" %(rflag,data) ) # if data[0] != "0" and data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : #去掉第一行 0, 对应的积分时间 2^(n+1) # # print("append %s -- %s" %(data[0],data[1]) ) # res.append( float( data[column-1] ) ) # if data[0] != "0" and float(data[0]) > 950 : # # print("> 950... %s %s" %(data[0],data[1]) ) # rflag += 1 # # 处理data 部分 # if rflag == 2 and '[DATA]' in line and '[END]' not in line: # # print("rflag %s +++++++++++++++++++++++++++++++++ data+1 " %(rflag,) ) # rflag += 1 # if rflag == 5: # DealResult.deal_ramses_data(time_, [[intlx,intly,pressure], res]) # # 这个地方 # # self. __save_absorbance_data( res_time, res, sn ) # # print("rflag 4 ......................") # # res_time.append( [time_,intlx,intly,pressure] ) # # print(" append time %s " %res_time) # # res_data.append( res ) # res = [] # rflag = 0 # intlx = 0.0 # intly =0.0 # pressure =0.0 # # else: # # return [] # log.info( "已经转换完文件,正在保存... " + fname ) # # 分析处理数据,还是返回原始数据 或空 ?? # log.info( " Function :__read_data %s - %s " % ( res_time[0] ,res_data[0] ) ) # # # 光强保存文件路径 # # fpath = os.path.join(INTENSITY_PATH, samip_sn + SAVE_EXT_NAME ) # # fpath_IP = os.path.join(INTENSITY_PATH, samip_sn + "_IP" + SAVE_EXT_NAME ) # # for i in range ( len(res_time) ) : # # # print("1111111111..............%s %s " %(res_time[i],res_time[i][0]) ) # # # time.sleep(2) # # ProcessFile.save_time_list( str(res_time[i][0]) , res_data[i], TOKEN, fpath ) # # # 不是samip 不保存 IP 文件 # # if sn != samip_sn: # # ProcessFile.save_time_list( str(res_time[i][0]) , res_time[i][1:], TOKEN, fpath_IP ) # # log.info( "保存结束 ... " + fname ) # # 返回 ok 表示文件处理结束 # return # pass # def read_ini(self,fname ,type_): # """ # @description : 三个不同任务, SAM SN, SAM ATTR, IP ATTR # 分别记为 SAMSN SAMCAL IPCAL # """ # log.info( " RAMSES __read_ini -> lst -> %s " % type_) # typ = type_ # data = [] # if typ == "SAMSN" : # with open(fname, 'r') as f_handle: # for line in f_handle: # # IDDevice = SAM_85AF # ln = line.strip('\n').strip(' ').split('=') # if ln[0].strip() == "IDDevice" : # if ln[1].strip().split('_')[0] =="SAM" : # return ln[1].strip().split('_')[1] # pass # if typ == "SAMCAL" : # samcal= {} # with open(fname, 'r') as f_handle: # flag = 0 # for line in f_handle: # # IDDevice = SAM_85AF # line_ = line.strip('\n').strip(' ').split('=') # if flag == 0 and line_[0].strip() == "IDDevice" : # if line_[1].strip().split('_')[0] =="SAM" : # samcal["SAMSN"] = line_[1].strip().split('_')[1] # flag += 1 # if flag == 2 and "[END]" in line: # flag += 1 # if flag == 2: # # print(" 1 %s %s %s" % (fname,line_[0],line_[1])) # samcal[line_[0]] = line_[1] # if flag == 1 and line_[0].strip() == "[ATTRIBUTES]" : # flag += 1 # if flag == 2 and "[END]" in line: # flag += 1 # return samcal # pass # if typ == "IPCAL" : # ipcal= {} # with open(fname, 'r') as f_handle: # flag = 0 # for line in f_handle: # # IDDevice = SAM_85AF # ln = line.strip('\n').strip(' ').split('=') # if flag == 0 and ln[0].strip() == "IDDevice" : # if ln[1].strip().split('_')[0] =="IP" : # ipcal["IPSN"] = ln[1].strip().split('_')[1] # flag += 1 # if flag == 2 and "[END]" in line: # flag += 1 # if flag == 2: # ipcal[ln[0]] = ln[1] # if flag == 1 and ln[0].strip() == "[ATTRIBUTES]" : # flag += 1 # return ipcal # return # pass # def read_raw( self, fname , lst, uiraw): # """ # @description : 三个不同任务, SAM SN, SAM ATTR, IP ATTR # 对波长进行标定处理 # 并存入文件 # λ(N) = C0s + C1s·N + C2s· N2 + C3s·N3 # """ # sep = uiraw["1"] # air_water = int(uiraw["2"]) # with open(fname, 'r') as f_handle: # sn = "" # wl = "" # is_samip = 0 # # data = data[2:] # # cal_data = lst[sn] # wl_cal = [] # cal_data = [] # intg_time = 128 # ip_cal = [] # cal = [] # calaq = [] # b0 = [] # b1 = [] # for line in f_handle: # data = line.split(",") # sn_d = data[0] # if sn_d != sn : # sn = sn_d # intg_time = int( data[1] ) # cal_data = lst[sn] # # 判断sam SAMIP # if cal_data[0][0] != cal_data[0][1] : # is_samip = 1 # wl_cal = cal_data[1] # ip_cal = cal_data[2] # if air_water == 1 : # cal = cal_data[3] # else: # cal = cal_data[2] # b0 = cal_data[4] # b1 = cal_data[5] # for i in range(1,256): # temp = float(wl_cal["C0s"]) + \ # float(wl_cal["C1s"]) * i + \ # float(wl_cal["C2s"]) * i * i + \ # float(wl_cal["C3s"]) * i *i *i # wl.append(temp) # # 处理数据 # data = data[2:] # intensity = [] # Cn = [] # for i in range( 255 ): # # NAN 为 0 # # if cal[i] = "+NAN": # # intensity.append(0) # # else: # Mn = data[i] / 65535 # Bn = float( b0[i] ) + float( b1[i] ) * intg_time / 8192 #积分时间比 # Cn.append(Bn - Mn) # offset = 0 # DarkPixelStart = 237 DarkPixelStop = 254的平均值. 数组中236-254 # for i in range( int( wl_cal['DarkPixelStart']) -1 , int( wl_cal['DarkPixelStop']) ): # offset = offset + float( Cn[i] ) # offset = offset/ ( int( wl_cal['DarkPixelStop']) - int( wl_cal['DarkPixelStart']) +1 ) # for i in range( 255 ): # Dn = Cn[i] - offset # En = 8192 * Dn / intg_time # # ???? Sn 来自 cal calaq 文件的部分 # Sn = cal[i] # intensity.append( En / Sn ) # # 还需要处理传感器的 IP # if is_samip : # # ip 数据过来后的格式 # pass # return intensity # # 数据分别写到文件