|
|
|
@ -7,6 +7,7 @@ import struct |
|
|
|
|
import time |
|
|
|
|
from myRamses import RamsesFactoryHandle |
|
|
|
|
from tools.mylogger import log |
|
|
|
|
from myconfig import TOKEN,NEWLINE |
|
|
|
|
|
|
|
|
|
@dataclass |
|
|
|
|
class InfoFrame(object): |
|
|
|
@ -174,6 +175,7 @@ class AWRAMSData(object): |
|
|
|
|
deviceid:int =None |
|
|
|
|
configSensor:List[str] = None # 序列号 Lsky Esky Lwater |
|
|
|
|
configFunc:List[str] = None |
|
|
|
|
currentPath:Path =None |
|
|
|
|
info_frame:InfoFrame = None |
|
|
|
|
data_frame:DataFrame = None # 数据只到分组成byte结束 |
|
|
|
|
ramsesFactoryHandle:List[RamsesFactoryHandle] = None # 多个工厂,每个工厂有自己的 标定文件及参数,工厂标记序列哈,只处理相同序列号的产品数据 |
|
|
|
@ -199,12 +201,13 @@ class AWRAMSData(object): |
|
|
|
|
tmp_ramses_factory_handle = RamsesFactoryHandle( sn= self.configSensor[i], cfg=cfg ) |
|
|
|
|
self.ramsesFactoryHandle[i] = tmp_ramses_factory_handle |
|
|
|
|
|
|
|
|
|
def set_data_frame( self, data_frame:List[bytes], func ): |
|
|
|
|
def set_data_frame( self, data_frame:List[bytes], pth:Path, func ): |
|
|
|
|
""" |
|
|
|
|
@description : data_frame |
|
|
|
|
""" |
|
|
|
|
log.info(f" 处理 data_frame:List[bytes] ",__name__,"set_data_frame") |
|
|
|
|
self.data_frame = DataFrame() |
|
|
|
|
self.currentPath= pth |
|
|
|
|
self.data_frame.set_data_bytes_list(data_frame ) |
|
|
|
|
|
|
|
|
|
# 对数据进行分组 split_by_sensor(self,) |
|
|
|
@ -221,7 +224,6 @@ class AWRAMSData(object): |
|
|
|
|
self.spectrum.append (self.ramsesFactoryHandle[i].rf.data_after_cal) |
|
|
|
|
self.wavelength.append (self.ramsesFactoryHandle[i].rf.Wavelength) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 补充IP解析数据 |
|
|
|
|
|
|
|
|
|
# 回调函数 |
|
|
|
@ -232,13 +234,7 @@ class AWRAMSData(object): |
|
|
|
|
self.info_frame.set_info_frame(info_frame) #已经解析 |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
# def deal_data_frame(self,): |
|
|
|
|
# """ |
|
|
|
|
# 对数据进行分组 split_by_sensor(self,) |
|
|
|
|
# 分组后的数据 传给RamseFactory 的 deal_raw_data_list, 返回平均值 |
|
|
|
|
# """ |
|
|
|
|
# # self.data_frame |
|
|
|
|
# pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class mycfg(object): |
|
|
|
|
sensor_cfg = { 2: {1: {'FUNC': 'Lsky', 'SN': '85B5'}, 2: {'FUNC': 'Esky', 'SN': '50ED'}, 3: {'FUNC': 'Lwater', 'SN': '852F'}} } |
|
|
|
@ -259,12 +255,16 @@ class AWRAMS(object): |
|
|
|
|
configFunc:List[str] =None # 功能 Lsky Esky Lwater |
|
|
|
|
calibrationCfg:dict =None |
|
|
|
|
data : AWRAMSData =None |
|
|
|
|
Lsky:List[float] =None # 无需记录原始波长,记录插值后的波长 |
|
|
|
|
Esky:List[float] =None |
|
|
|
|
Lwater:List[float] =None |
|
|
|
|
wavelength:List[np.ndarray] =None |
|
|
|
|
spectrum:List[np.ndarray] =None |
|
|
|
|
beginWavelength: float =None |
|
|
|
|
endWavelength: float =None |
|
|
|
|
rowFactor:float =None |
|
|
|
|
wvInterval: float =None |
|
|
|
|
newWavelength:np.ndarray=None |
|
|
|
|
Lsky:np.ndarray =None # 无需记录原始波长,记录插值后的波长 |
|
|
|
|
Esky:np.ndarray =None |
|
|
|
|
Lwater:np.ndarray =None |
|
|
|
|
Lw:np.ndarray =None |
|
|
|
|
Rs:np.ndarray =None |
|
|
|
|
|
|
|
|
@ -279,6 +279,15 @@ class AWRAMS(object): |
|
|
|
|
self.calibrationCfg = calcfg |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def set_retrieve(self,rtv:dict): |
|
|
|
|
self.beginWavelength= float(rtv["beginWL"]) |
|
|
|
|
self.endWavelength= float(rtv["endWL"]) |
|
|
|
|
self.wvInterval= float(rtv["interval"]) |
|
|
|
|
self.rowFactor= float(rtv["0.026"]) |
|
|
|
|
self.newWavelength=np.linspace(self.beginWavelength,self.endWavelength,self.wvInterval) |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def config_awrams(self, cfg:dict): |
|
|
|
|
assert self.deviceid in cfg.keys(), f'>>>> Cannot get the configuration of device id {self.deviceid}' |
|
|
|
|
self.configSensor = [None,None,None] |
|
|
|
@ -303,31 +312,54 @@ class AWRAMS(object): |
|
|
|
|
self.data.build_datafactory_by_configSensor( self.calibrationCfg) |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def callback(self, wavelength:list, spectrum:list): |
|
|
|
|
def callback( self, wavelength:list, spectrum:list ): |
|
|
|
|
''' 处理返回的数据, 生成Lsky Esky Lwater Lw Rs ''' |
|
|
|
|
log.info( " call back for Lw Rs , 插值, 计算, 保存.................. " ) |
|
|
|
|
self.Lsky = np.interp( self.newWavelength, self.wavelength[0], self.spectrum[0]) |
|
|
|
|
self.Esky = np.interp( self.newWavelength, self.wavelength[1], self.spectrum[1]) |
|
|
|
|
self.Lwater = np.interp( self.newWavelength, self.wavelength[2], self.spectrum[2]) |
|
|
|
|
self.Lw = self.Lwater - self.rowFactor * self.Lsky |
|
|
|
|
self.Rs = self.Lw/self.Esky |
|
|
|
|
|
|
|
|
|
print( " call back for Lw Rs .................. " ) |
|
|
|
|
# for w in wavelength: |
|
|
|
|
# print(w) |
|
|
|
|
print("=================================") |
|
|
|
|
|
|
|
|
|
for s in spectrum: |
|
|
|
|
print(s) |
|
|
|
|
|
|
|
|
|
self.save() |
|
|
|
|
|
|
|
|
|
pass |
|
|
|
|
# 保存 进一步处理 |
|
|
|
|
|
|
|
|
|
def save(self, mode=0): |
|
|
|
|
''' 保存在原文件所在目录 ''' |
|
|
|
|
pth = self.data.currentPath |
|
|
|
|
save_fpath = pth.joinpath("res.csv") |
|
|
|
|
ret = "" |
|
|
|
|
ret = ret + str(self.deviceid)+"_"+pth.parts[-1] + TOKEN + self.list2str(list(self.newWavelength)) |
|
|
|
|
ret = ret + NEWLINE + "Lsky" + TOKEN + self.list2str( list(self.Lsky) ) |
|
|
|
|
ret = ret + NEWLINE + "Esky" + TOKEN + self.list2str( list(self.Esky) ) |
|
|
|
|
ret = ret + NEWLINE + "Lwater" + TOKEN + self.list2str( list(self.Lwater) ) |
|
|
|
|
ret = ret + NEWLINE + "Lw" + TOKEN + self.list2str( list(self.Lw) ) |
|
|
|
|
ret = ret + NEWLINE + "Rs" + TOKEN + self.list2str( list(self.Rs) ) |
|
|
|
|
save_fpath.write_text( ret ) |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def list2str( self, lst:list, token=";" ): |
|
|
|
|
''' 保存在原文件所在目录 ''' |
|
|
|
|
ret= "" |
|
|
|
|
for i in range(len(lst)): |
|
|
|
|
if i == 0: |
|
|
|
|
ret = ret + str(lst[i]) |
|
|
|
|
else: |
|
|
|
|
ret = ret + TOKEN + str(lst[i]) |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
class AwramsHandle(object): |
|
|
|
|
def __init__(self, deviceid=2, cfg=None, calcfg=None): |
|
|
|
|
def __init__(self, deviceid=2, cfg=None, calcfg=None, rtv=None): |
|
|
|
|
self.sensor_cfg = cfg |
|
|
|
|
self.calcfg = calcfg |
|
|
|
|
self.retrieve = rtv |
|
|
|
|
|
|
|
|
|
self.device_id = deviceid |
|
|
|
|
self.aw = AWRAMS( deviceid=self.device_id) |
|
|
|
|
self.aw.set_cfg_calibration(self.calcfg) |
|
|
|
|
|
|
|
|
|
self.aw.config_awrams(self.sensor_cfg) |
|
|
|
|
self.aw = AWRAMS( deviceid=self.device_id ) |
|
|
|
|
self.aw.set_cfg_calibration( self.calcfg ) |
|
|
|
|
self.aw.set_retrieve( self.retrieve) |
|
|
|
|
self.aw.config_awrams( self.sensor_cfg ) |
|
|
|
|
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
@ -341,7 +373,7 @@ class AwramsHandle(object): |
|
|
|
|
if bf.name != "info.bin": |
|
|
|
|
bytes_list.append( self.read_bin(bf) ) |
|
|
|
|
# print(f"++++++++++ {bytes_list}" ) |
|
|
|
|
self.aw.data.set_data_frame( bytes_list, self.aw.callback ) |
|
|
|
|
self.aw.data.set_data_frame( bytes_list, pth, self.aw.callback ) # 目录也要传过去 |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def read_bin(self,fpath: Path): |
|
|
|
@ -351,7 +383,6 @@ class AwramsHandle(object): |
|
|
|
|
ret = file.read() |
|
|
|
|
return ret |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|