包含服务器端 ,桌面端两个分支
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
awrams/awrams.py

423 lines
199 KiB

2 years ago
from dataclasses import dataclass,field
from pathlib import Path
from typing import Any,List
from enum import Enum
import numpy as np
import struct
import time
from myRamses import RamsesFactoryHandle
from tools.mylogger import log
2 years ago
from myconfig import TOKEN,NEWLINE
2 years ago
@dataclass
class InfoFrame(object):
infoBytes:bytes = None
time_str:str= None
time_stamp:int= None
year:str= None
month:str= None
day:str= None
hour:str= None
minute:str= None
second:str= None
Roll: int= None
Pitch:int= None
Yaw:int= None
Hx:int= None
Hy:int= None
lon:int= None
lat:int= None
satelite_num:int= None
PDOP:int= None
HDOP:int= None
VDOP:int= None
Temperature:int= None
Humidity:int = None
Battery:int= None
ErrorCode:int= None
Azimuth:int= None
RunAngle:int= None
MeasureGroupNum:int= None
Tiltx:int= None
Tilty:int= None
Depth:int= None
SN1:str= None
SN2:str= None
SN3:str= None
MeasureInterval :int= None
MeasureRepeat: int= None
def output_info_frame(self, ):
pass
def get_year(self, ):
return self.year
def set_info_frame(self, info:bytes):
try:
temp = struct.unpack("<BBBBBBHHHHHHIIHHHHHBBBHHIfff \
HHHBHBHHHHH",
info)
except Exception as e:
return
temp = list(temp) # tuple to list
# print(f" ==========={temp} {temp[0]}")
time_ = "20" + f"{str(temp[0])}" + "-" + f"{str(temp[1])}" + "-" + f"{str(temp[2])}" + " " \
+ f"{str(temp[3])}" + ":" + f"{str(temp[4])}" + ":" + f"{str(temp[5])}"
# print(f" ==========={time_}")
self.time_str = time_
self.time_stamp = 0
self.year:str = str(temp[0])
self.month:str = str(temp[1])
self.day:str = str(temp[2])
self.hour:str = str(temp[3])
self.minute:str = str(temp[4])
self.second:str = str(temp[5])
self.Roll: int = temp[6]
self.Pitch:int = temp[7]
self.Yaw:int = temp[8]
self.Hx:int = temp[9]
self.Hy:int = temp[10]
self.Hz:int = temp[11]
self.lon:int = temp[12]
self.lat:int = temp[13]
self.satelite_num:int = temp[14]
self.PDOP:int = temp[15]
self.HDOP:int = temp[16]
self.VDOP:int = temp[17]
self.Temperature:int = temp[18]
self.Humidity:int = temp[19]
self.Battery:int = temp[20]
self.ErrorCode:int = temp[21]
self.Azimuth:int = temp[22]
self.RunAngle:int = temp[23]
self.MeasureGroupNum:int = temp[24]
self.Tiltx:int = temp[25]
self.Tilty:int = temp[26]
self.Depth:int = temp[27]
self.SN1:str = hex(temp[28])[2:].upper()
self.SN2:str = hex(temp[29])[2:].upper()
self.SN3:str = hex(temp[30])[2:].upper()
self.MeasureInterval :int = temp[31]
self.MeasureRepeat: int = temp[32]
# print( self)
pass
@dataclass
class DataFrame(object):
''' AWRAMS 数据无需 remove_mask
多组 : 每组类似 15 + 26 + 576*3
数据接收方式 AWRAMS格式, 从文件读取
'''
deviceID:int = None
measureId: int = None
dataBytes:List[bytes] = None
groupNUm: int = 1
data_group:List[bytes] = None # 多组 每组三个传感器 [ Group1, group2, group3 group4 group5 ]
data_group_senor_bytes:List[List[bytes]] = None# [ [IP_byte, Sennsor1_byte,sensor2_byte,sensor3_byte], ] 先分测量组再传感器
data_sensor_group_bytes:List[List[bytes]] = None# [ [sensor1_grp1,sensor1_grp2,sensor1_grp3,sensor1_grp4,sensor1_grp5], ] 先传感器,再测量组
data_ip: List[List[bytes]] =None # IP数据
wavelength: List = None
spectrum: List = None
def set_data_bytes_list(self, data_frame:List[bytes]):
self.dataBytes = []
self.dataBytes = data_frame
pass
def set_data_bytes(self, byt:bytes):
''' 不含 15个 AA...头 , 26(*) +576(*) '''
self.dataBytes = []
# 判断是否包含IP部分数据
self.dataBytes = [byt]
pass
def set_data_group(self,groups:list):
self.data_group = groups
self.groupNum = len(self.data_group)
pass
def split_by_sensor(self,):
''' 兼容需求,需将 26个Ip信息帧传出去 '''
self.groupNum = len(self.dataBytes)
self.data_sensor_group_bytes =[]
self.data_ip = []
for i in range(3):
sensor = [] # 每组开始,赋予空值
for j in range(self.groupNum):
self.data_ip.append( self.dataBytes[j][:26] )
buf = self.dataBytes[j][26:]
sensor.append ( buf[i*576 : 576+i*576] )
pass
self.data_sensor_group_bytes.append(sensor)
pass
def split_by_measure(self,):
for i in range(self.groupNUm):
buf = self.data_group[i][41:]
measureGroup = [ ]
measureGroup.append( buf[0:576] )
measureGroup.append( buf[576:576+576] )
measureGroup.append( buf[576+576:576+576+576] )
self.data_group_senor_bytes.append(measureGroup)
pass
@dataclass
class AWRAMSData(object):
deviceid:int =None
configSensor:List[str] = None # 序列号 Lsky Esky Lwater
configFunc:List[str] = None
2 years ago
currentPath:Path =None
2 years ago
info_frame:InfoFrame = None
data_frame:DataFrame = None # 数据只到分组成byte结束
ramsesFactoryHandle:List[RamsesFactoryHandle] = None # 多个工厂,每个工厂有自己的 标定文件及参数,工厂标记序列哈,只处理相同序列号的产品数据
data_after_avg:List[int] =None
wavelength:List[int] =None
spectrum:List[int] =None
pass
def __post_init__(self):
assert self.deviceid != None , ">>>> AWRAMSData deviceid is empty"
pass
def build_datafactory_by_configSensor(self,calcfg:dict):
"""
@description : 调用工厂得到整数值
@param : 576字节数据, 数据id(第几个传感器,还是序列号)
@Returns : List[int]
"""
assert self.configSensor != None, ">>>> AWRAMSData configSensor is None"
self.ramsesFactoryHandle = [None,None,None]
for i in range(0, len( self.configSensor)):
cfg = calcfg[self.configFunc[i]]
tmp_ramses_factory_handle = RamsesFactoryHandle( sn= self.configSensor[i], cfg=cfg )
self.ramsesFactoryHandle[i] = tmp_ramses_factory_handle
2 years ago
def set_data_frame( self, data_frame:List[bytes], pth:Path, func ):
2 years ago
"""
@description : data_frame
"""
log.info(f" 处理 data_frame:List[bytes] ",__name__,"set_data_frame")
self.data_frame = DataFrame()
2 years ago
self.currentPath= pth
2 years ago
self.data_frame.set_data_bytes_list(data_frame )
# 对数据进行分组 split_by_sensor(self,)
self.data_frame.split_by_sensor()
self.spectrum =[]
self.wavelength =[]
# 分组后的数据 传给RamsesFactory 的 deal_raw_data_list, 返回平均值
for i in range( len(self.data_frame.data_sensor_group_bytes) ):
log.info( f" {i} ......... {len(self.data_frame.data_sensor_group_bytes[i])}",__name__, "set_data_frame ")
# log.info( f" {i} ......... ",__name__, "set_data_frame ")
self.ramsesFactoryHandle[i].deal_raw_data_list( self.data_frame.data_sensor_group_bytes[i] )
self.ramsesFactoryHandle[i].rf.get_wavelenth()
self.spectrum.append (self.ramsesFactoryHandle[i].rf.data_after_cal)
self.wavelength.append (self.ramsesFactoryHandle[i].rf.Wavelength)
# 补充IP解析数据
# 回调函数
func( self.wavelength, self.spectrum )
def set_info_frame(self, info_frame:bytes):
self.info_frame = InfoFrame()
self.info_frame.set_info_frame(info_frame) #已经解析
pass
2 years ago
2 years ago
class mycfg(object):
sensor_cfg = { 2: {1: {'FUNC': 'Lsky', 'SN': '85B5'}, 2: {'FUNC': 'Esky', 'SN': '50ED'}, 3: {'FUNC': 'Lwater', 'SN': '852F'}} }
cal_cfg={2:
{'Lsky': {'SN': '85B5', 'FUNC': 'Lsky', 'TYPE': 'SAM', 'samsn': '85B5', 'inifile': 'SAM_85B5.ini', 'calfile': 'Cal_SAM_85B5.dat', 'calaqfile': 'CalAQ_SAM_85B5.dat', 'backfile': 'Back_SAM_85B5.dat', 'cal': ['+NAN', '+NAN', '+NAN', '0.380824258865919', '0.480956813156357', '0.57671205380196', '0.643896236957154', '0.711054782209677', '0.758265752350778', '0.808854255795615', '0.869466331079482', '0.925321324749243', '1.00927399148091', '1.08699883630787', '1.18347377446848', '1.29079925777138', '1.39953731633192', '1.49536024576308', '1.57053962346542', '1.61051680455964', '1.60891142181803', '1.58014917632373', '1.54292073894688', '1.49782795775685', '1.46270054563491', '1.43754722159869', '1.42339247548624', '1.42249669690879', '1.43289834559721', '1.45081833970432', '1.48383024473758', '1.53350351710437', '1.59283171118034', '1.66682243068085', '1.75523084376357', '1.8490542829721', '1.94827772413977', '2.05297044933559', '2.15300125225733', '2.24489521732098', '2.32484518002751', '2.37710624055378', '2.41032149129472', '2.41401311078449', '2.39196623346607', '2.35386541795861', '2.30358502851024', '2.24350994611066', '2.18566570348128', '2.13007635400607', '2.08048312730197', '2.03943635277338', '1.9990019487276', '1.9542919602901', '1.90697476815729', '1.86132580586718', '1.81936966943287', '1.78948757961567', '1.77036444175303', '1.76067051308416', '1.76079151769139', '1.76865840458355', '1.78533977613825', '1.81054315659671', '1.84219534093402', '1.88262260694772', '1.92633682221336', '1.96919363361994', '2.00638558730966', '2.03543177536163', '2.05645335730185', '2.06889953924594', '2.07668786673546', '2.07746404954558', '2.07708946852551', '2.07239270419962', '2.06329693588947', '2.05235510505223', '2.03788342455449', '2.01750123705209', '1.99316265318269', '1.96344779927853', '1.92810068074762', '1.89032139564187', '1.84840056738145', '1.80188008685176', '1.7531429855323', '1.70184883503381', '1.64693756964496', '1.59639297188055', '1.55743828612696', '1.53081670223502', '1.509066853406', '1.48974595694359', '1.47286758281018', '1.45660325947575', '1.43667408186819', '1.40947906533906', '1.37746325817173', '1.3399910234164', '1.29987620320872', '1.26173586555032', '1.22580130202006', '1.19650560480134', '1.17258287879559', '1.15326969493003', '1.13448708666807', '1.11395465030131', '1.08753684763482', '1.06275254011917', '1.0408908566722', '1.02045255259373', '1.00192289281247', '0.987093337695555', '0.973433543184599', '0.961454156421677', '0.949336048850277', '0.937190359719721', '0.925018119816345', '0.911316167695048', '0.897751565127677', '0.885763756400802', '0.875253674622747', '0.866439225407856', '0.859594015285511', '0.856442344648432', '0.854520610650332', '0.853095084706978', '0.851996897997662', '0.849373999218705', '0.845008414644852', '0.837447706997702', '0.828042280687475', '0.816973957953628', '0.804392597259629', '0.790971383923797', '0.777350907812577', '0.764886212005326', '0.753124860834896', '0.74238339492221', '0.731621293455726', '0.720137856580817', '0.707681887074656', '0.692857487682284', '0.676149155140644', '0.657691286728854', '0.637091724889135', '0.615841105000382', '0.593277961352052', '0.571635565839856', '0.550558744253774', '0.529727893337181', '0.50958610090654', '0.490923786532866', '0.472942835508178', '0.455966760194577', '0.439389399108222', '0.42326262400571', '0.408064966451864', '0.392531100434587', '0.376760145430696', '0.361340837642809', '0.345797349215964', '0.330538900755072', '0.315423852713651', '0.300655326757946', '0.286125136929255', '0.27220666979537', '0.258963801456755', '0.246515726736969', '0.23471243489257', '0.223963260764627', '0.213811227531161', '0.204848303945938', '0.196342813423038', '0.188347519381911', '0.180847277367304', '0.173574321958823', '0.166782572540461', '0.159983659268987', '0.153496471427164', '0.146983276179518', '0.140664487031456', '0.134679615950644', '0.128426075217298', '0.122768803469292', '0.116973531179931', '0.111227699506044', '0.10561644888568', '0.0999165260100575', '0.09399466356358', '0.0884689961099718', '0.
'Esky': {'SN': '50ED', 'FUNC': 'Esky', 'TYPE': 'SAMIP', 'samsn': '859F', 'inifile': 'SAMIP_50ED_ALL.ini', 'calfile': 'Cal_SAM_859F.dat', 'calaqfile': 'CalAQ_SAM_859F.dat', 'backfile': 'Back_SAM_859F.dat', 'cal': ['+NAN', '+NAN', '+NAN', '+NAN', '0.549282530081406', '0.621825635483575', '0.705214779700439', '0.782494923890489', '0.848306874043027', '0.952625287085828', '1.06364941208026', '1.17099618224932', '1.27964867192574', '1.37878597375063', '1.42771820575638', '1.4380590385421', '1.41583530083466', '1.35751030831315', '1.28801896577964', '1.23773169248486', '1.19003370359023', '1.16911032524399', '1.16789019991587', '1.17908641221467', '1.20561721452238', '1.24993325867368', '1.3042108426727', '1.37841324495146', '1.46663415660191', '1.55813913029349', '1.66686169700722', '1.78274771118438', '1.89315285694338', '2.00609300108623', '2.10386062632617', '2.18077321675475', '2.23620955735442', '2.266135432154', '2.26878990322214', '2.25797663538301', '2.22685859649013', '2.17776313289299', '2.1222752364519', '2.06098344374156', '1.99948809108821', '1.94462577242816', '1.8989381397134', '1.8637403074385', '1.84137175128878', '1.82996842025894', '1.82735603324287', '1.82819560800875', '1.82831225824908', '1.82476779554239', '1.82142520789599', '1.82469614734563', '1.83514598035505', '1.85423698694933', '1.88102853388183', '1.91679111910883', '1.95713305118927', '2.0033013266641', '2.05191276620812', '2.10100127704333', '2.15116215495783', '2.19982933350689', '2.24341508467426', '2.28026480621138', '2.30634686430023', '2.31796219508283', '2.31589695847203', '2.29809543158409', '2.2668387918562', '2.22596956700897', '2.17822422289454', '2.1262484698939', '2.07154274835781', '2.01784816285075', '1.9635850159156', '1.90957838150673', '1.85662335754133', '1.80118393109592', '1.74752896056537', '1.69458207285898', '1.64238998731142', '1.59255947952261', '1.55042463825823', '1.52145095482736', '1.50182839545807', '1.48602912306116', '1.47501182897849', '1.46801797625318', '1.46252443118698', '1.4571840542778', '1.44881752975571', '1.433373570625', '1.4106211402034', '1.38310053980989', '1.35343439202405', '1.32469024445085', '1.29921323938482', '1.2757042981125', '1.25356245928469', '1.23230080447944', '1.20776661327865', '1.18172190161938', '1.16211138784545', '1.14836490545677', '1.13698033747357', '1.12673020620722', '1.115430409999', '1.10428562795353', '1.0934141739792', '1.0851095103506', '1.08102444265095', '1.08007408967758', '1.08238869164072', '1.08781099449618', '1.09202496629142', '1.09279743926351', '1.08928198225434', '1.08099296127192', '1.06779395728469', '1.05125732218958', '1.03307124483462', '1.01642561672595', '1.0017478853335', '0.98877464388953', '0.978591382441999', '0.970432000434175', '0.962460675619692', '0.953651636148435', '0.943103023421902', '0.930554197290447', '0.915976069829803', '0.89827602173614', '0.878650755188226', '0.859108524352699', '0.840122962860222', '0.820853477964574', '0.803547895709764', '0.786651104537257', '0.769194844035412', '0.751217544779413', '0.731862968408631', '0.710478767970412', '0.687207420135085', '0.662469528888512', '0.636358233772055', '0.609121332586544', '0.580838486227566', '0.552767035926316', '0.525876935395925', '0.499896413074609', '0.475284681533185', '0.452387885405863', '0.431848904268036', '0.413013739466993', '0.395710805209202', '0.380181587532903', '0.365591896979342', '0.352105459639395', '0.339276260510366', '0.32616389487977', '0.313880254968568', '0.301213081346406', '0.28867892621412', '0.276332017077307', '0.263867205519659', '0.251559483539307', '0.239917175566115', '0.228872841726392', '0.218348838385983', '0.208663588155861', '0.199488791575245', '0.191252859631973', '0.183364916996847', '0.175877803627425', '0.169219899131997', '0.162866423884395', '0.156727192611269', '0.151124000714184', '0.145138407523578', '0.13971586046093', '0.134506608902369', '0.129059486722317', '0.124203168251957', '0.119075347065844', '0.113513221481262', '0.107843336832916', '0.101790305051534', '0.0961960826886135', '0.0914035900672732', '0.0868727278
'Lwater': {'SN': '852F', 'FUNC': 'Lwater', 'TYPE': 'SAM', 'samsn': '852F', 'inifile': 'SAM_852F.ini', 'calfile': 'Cal_SAM_852F.dat', 'calaqfile': 'CalAQ_SAM_852F.dat', 'backfile': 'Back_SAM_852F.dat', 'cal': ['+NAN', '+NAN', '+NAN', '+NAN', '0.099081925071204', '0.107353085872454', '0.113070264290883', '0.114376499819276', '0.116544285861757', '0.1185169696214', '0.121561138979849', '0.126964155564462', '0.134364254054539', '0.144053858633949', '0.154882735476408', '0.16719673162462', '0.181437615712041', '0.194237970806716', '0.20386154720656', '0.211556336359081', '0.211417859085921', '0.208790218500257', '0.20437467341685', '0.198246352046376', '0.192966396099738', '0.18897229193584', '0.186243043953596', '0.18578727224224', '0.187114583931684', '0.189090911319999', '0.193600418301244', '0.200054490546523', '0.208072057884887', '0.218285958582262', '0.230634876630779', '0.243459214546046', '0.257752719558026', '0.272580246630834', '0.286712281491418', '0.300342726342385', '0.312249154496702', '0.321331680226083', '0.327112591435919', '0.329469692698771', '0.327542874308678', '0.322985767437387', '0.316224456423823', '0.308782990589082', '0.301183418606427', '0.293575702556702', '0.286696408065096', '0.280798842600295', '0.275808444038661', '0.271299340181449', '0.266225534078626', '0.260785177597799', '0.255342424416527', '0.250947812402455', '0.24777514930692', '0.246247860756574', '0.246092032695547', '0.247219177075727', '0.249675195006791', '0.253195744885965', '0.257788026175471', '0.26369589320837', '0.270555680751329', '0.277823002163503', '0.284937579021833', '0.291097253127256', '0.296043211270752', '0.299540235735164', '0.301795150475552', '0.303069111244916', '0.30355995799167', '0.303606664702465', '0.303007474849756', '0.302001653949665', '0.300361927400822', '0.297986890885497', '0.295325565249305', '0.291656567474701', '0.287335862742648', '0.282306131698578', '0.276702242286357', '0.270280607979823', '0.263050805729498', '0.255009286552014', '0.247098798503932', '0.2398191835424', '0.23466817932016', '0.230585310303585', '0.227279061892254', '0.224693206022759', '0.222993136629962', '0.221791418806722', '0.220695274517678', '0.219442816624831', '0.217000405185694', '0.213283732282521', '0.208384750595562', '0.202985389753009', '0.197924660371165', '0.193409646692029', '0.189628652821804', '0.186318519164064', '0.183315563032657', '0.180098687261504', '0.176492614557115', '0.172650422408531', '0.168979191040057', '0.166106531649937', '0.163622827054655', '0.161570328667133', '0.159693607722301', '0.157690305409947', '0.15544650006387', '0.153185383511044', '0.150954772341381', '0.148960802743881', '0.147350785081686', '0.146182367433256', '0.145312879880878', '0.144781245193999', '0.14473607505965', '0.144976432177203', '0.145464936657928', '0.145889790468872', '0.146174517595681', '0.14615421098877', '0.145743119998859', '0.144922809795091', '0.143805231938307', '0.142492952453543', '0.141053445832183', '0.139720571628269', '0.138186469198598', '0.136919534961634', '0.135732624874463', '0.134597268963386', '0.133432724955799', '0.13211501546202', '0.130478475600008', '0.128290801143951', '0.125726707508103', '0.122634784100445', '0.119472073398083', '0.116199128230447', '0.112813911251756', '0.109547291781198', '0.106268392530964', '0.10313443150471', '0.100113578226984', '0.097073834113113', '0.0941199411272616', '0.0911853891891621', '0.0882319764053268', '0.085267274530049', '0.0822333903307463', '0.0792187073154596', '0.0760907077820793', '0.0728848234132589', '0.0697048920692252', '0.0665600438164166', '0.0635411651500916', '0.0606319242880778', '0.0578670530064308', '0.0553155735461356', '0.0529193006810867', '0.050722718025932', '0.0486788470977319', '0.0467747209472673', '0.0450423813898501', '0.0434307741189043', '0.041915712424757', '0.0405250313895705', '0.0390895391040532', '0.0377897158697839', '0.0365016922380464', '0.0351788001916396', '0.0338645937424847', '0.0325302009051183', '0.0312848146149282', '0.0300375958148976', '0.0288302935207691', '0.027652203865544', '0.0264621566
## 封装该类的 处理buf hex2int函数
@dataclass
class AWRAMS(object):
deviceid:int = None
configSensor:List[str] =None # 序列号
configFunc:List[str] =None # 功能 Lsky Esky Lwater
calibrationCfg:dict =None
data : AWRAMSData =None
2 years ago
wavelength:List[np.ndarray] =None
spectrum:List[np.ndarray] =None
2 years ago
beginWavelength: float =None
endWavelength: float =None
2 years ago
rowFactor:float =None
2 years ago
wvInterval: float =None
2 years ago
newWavelength:np.ndarray=None
Lsky:np.ndarray =None # 无需记录原始波长,记录插值后的波长
Esky:np.ndarray =None
Lwater:np.ndarray =None
2 years ago
Lw:np.ndarray =None
Rs:np.ndarray =None
def __post_init__(self):
assert self.deviceid != None
self.data = AWRAMSData(deviceid=self.deviceid )
pass
def set_cfg_calibration(self,calcfg:dict):
assert self.deviceid != None
# assert self.deviceid in calcfg.keys(), f">>>> No calibrations data for the current id {self.deviceid}"
self.calibrationCfg = calcfg
pass
2 years ago
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
2 years ago
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]
self.configFunc = [None,None,None]
# Lsky Esky Lwater
# {1: {'FUNC': 'Lsky', 'SN': '85B5'}, 2: {'FUNC': 'Esky', 'SN': '50ED'}, 3: {'FUNC': 'Lwater', 'SN': '852F'}}
for k,v in cfg.items() :
if v["FUNC"] == "Lsky":
self.configSensor[0] = v["SN"]
self.configFunc[0] = v["FUNC"]
if v["FUNC"] == "Esky":
self.configSensor[1] = v["SN"]
self.configFunc[1] = v["FUNC"]
if v["FUNC"] == "Lwater":
self.configSensor[2] = v["SN"]
self.configFunc[2] = v["FUNC"]
# 将传感器配置传给 AWRAMSDATA
self.data = AWRAMSData( deviceid=self.deviceid, configSensor=self.configSensor, configFunc=self.configFunc )
# 将标定配置传给 AWRAMSData 建立工厂
self.data.build_datafactory_by_configSensor( self.calibrationCfg)
pass
2 years ago
def callback( self, wavelength:list, spectrum:list ):
2 years ago
''' 处理返回的数据, 生成Lsky Esky Lwater Lw Rs '''
2 years ago
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
2 years ago
2 years ago
self.save()
2 years ago
2 years ago
# 保存 进一步处理
2 years ago
2 years ago
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
2 years ago
class AwramsHandle(object):
2 years ago
def __init__(self, deviceid=2, cfg=None, calcfg=None, rtv=None):
2 years ago
self.sensor_cfg = cfg
self.calcfg = calcfg
2 years ago
self.retrieve = rtv
2 years ago
self.device_id = deviceid
2 years ago
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 )
2 years ago
pass
def read_one_folder_awrams_online(self, pth:Path):
''' self.data 传数据 info_frame, data_frame'''
log.info(f" 读一个文件夹进行处理 {pth}" ,__name__,"read_one_folder_awrams_online")
bytes_list = []
bin_files = pth.glob('*.bin')
for bf in bin_files:
if bf.name != "info.bin":
bytes_list.append( self.read_bin(bf) )
# print(f"++++++++++ {bytes_list}" )
2 years ago
self.aw.data.set_data_frame( bytes_list, pth, self.aw.callback ) # 目录也要传过去
2 years ago
pass
def read_bin(self,fpath: Path):
assert fpath.exists(), f">>>> not find {fpath} "
ret = b''
with open(fpath, 'rb') as file:
ret = file.read()
return ret
pass
pass
class Acfg:
cfg= {1: {'FUNC': 'Lsky', 'SN': '85C2'}, 2: {'FUNC': 'Esky', 'SN': '50ED'}, 3: {'FUNC': 'Lwater', 'SN': '852F'}}
calcfg= {'Lsky': {'SN': '85C2', 'FUNC': 'Lsky', 'TYPE': 'SAM', 'samsn': '85C2', 'inifile': 'SAM_85C2.ini', 'calfile': 'Cal_SAM_85C2.dat', 'calaqfile': 'CalAQ_SAM_85C2.dat', 'backfile': 'Back_SAM_85C2.dat', 'cal': ['+NAN', '+NAN', '+NAN', '+NAN', '0.63607834406219', '0.718127096538326', '0.812216798598817', '0.914442457893824', '1.03343454996493', '1.15933885373154', '1.29479643420084', '1.43677001665361', '1.56848190839848', '1.67447970580786', '1.73889146263122', '1.73244260903254', '1.69192414835577', '1.61622082709111', '1.5270353751059', '1.46047364317447', '1.41296265347303', '1.39311700938614', '1.39852760194912', '1.42554260762195', '1.4700968507055', '1.53635620441153', '1.62082921439482', '1.7237742274692', '1.84755749123585', '1.98432162640748', '2.12689147788928', '2.27366206436985', '2.41515311346652', '2.54267625633242', '2.65248757975216', '2.73468816910085', '2.77942967914337', '2.79565522877852', '2.77806955157777', '2.73891358506136', '2.69063680629234', '2.6282750012231', '2.56338981635672', '2.49687123158122', '2.4309933291301', '2.36993023507549', '2.32161558853422', '2.28314087424895', '2.25846162084215', '2.24994522727437', '2.25549954861938', '2.27668712518828', '2.30493256690767', '2.33255656715114', '2.35720768052834', '2.37757260164886', '2.40002374613635', '2.42905705371268', '2.4673307146952', '2.51294806887351', '2.56575613007937', '2.62193109349514', '2.67842958533042', '2.73753357518048', '2.7913329207665', '2.8423865946084', '2.89027340109411', '2.93157202353872', '2.96274906831744', '2.98346548286676', '2.98798866816702', '2.97297872291037', '2.93559195933884', '2.87662286787444', '2.80380712732453', '2.72275302648293', '2.6373282860483', '2.55448424591999', '2.47778601018081', '2.40377038673745', '2.33484934711808', '2.2698793292122', '2.20651375086021', '2.14704740380438', '2.08988763493926', '2.0346458333411', '1.98224825426305', '1.93452491480363', '1.89146397238956', '1.8653548650058', '1.84879059497611', '1.8371693859594', '1.83197484046632', '1.83105981302589', '1.83169544364263', '1.83369029033973', '1.82985806236537', '1.81684973319988', '1.7961872241934', '1.76710061502081', '1.73459539138238', '1.70421983997876', '1.67561137148482', '1.65483955955664', '1.64005456402998', '1.63103006074007', '1.62646109446179', '1.62483351776729', '1.61794627041935', '1.60638099649103', '1.59160518167625', '1.57856502215575', '1.56723770329055', '1.55884357172436', '1.55081356970191', '1.5440909800073', '1.53473504989623', '1.52335047710565', '1.51140772671503', '1.49628095199023', '1.48082183121466', '1.4668009209167', '1.45300293604089', '1.43913779397284', '1.42471804569399', '1.41116472805909', '1.39601546893463', '1.3795217760198', '1.36066889187826', '1.3395095955925', '1.31771535033317', '1.29387042583309', '1.26955248066416', '1.24679628762607', '1.22528340309588', '1.20486570624273', '1.18549206002717', '1.16756178865017', '1.15111957559202', '1.13469169498467', '1.11621030173639', '1.09569135455521', '1.07275908862679', '1.04573742076401', '1.01572627731635', '0.98381634710957', '0.950352559222019', '0.915760692099546', '0.881456713194727', '0.848044938315892', '0.816038892625263', '0.785024915273114', '0.754850603543375', '0.725690734641156', '0.697449171016547', '0.669846688269734', '0.643097402076866', '0.615807664216611', '0.589686777991522', '0.563134754809732', '0.537416951715189', '0.512092492411016', '0.487999533569422', '0.464888888064952', '0.442938789447448', '0.422687485052752', '0.403811887358409', '0.386602162003576', '0.370223420179536', '0.355850417036878', '0.342554004485098', '0.330263308885894', '0.318892349787717', '0.308390808825048', '0.29923285616278', '0.290049870831026', '0.280987628676386', '0.272166680353347', '0.263184326446838', '0.254328565772045', '0.245533707259442', '0.236284846332185', '0.227364007848682', '0.218575558150069', '0.209919539318749', '0.201723665364338', '0.193439417628863', '0.185095630044576', '0.176908759167827', '0.168492281717065', '0.15971620196905', '0.151519711134016', '0.143896290701505', '0.137256829327417', '0.13133376173
def my_init():
''' 写个handle 类处理'''
cfg = mycfg.cfg
calcfg = mycfg.cal_cfg
device_id = 2
aw = AWRAMS( deviceid=device_id)
aw.set_cfg_calibration(calcfg)
aw.config_awrams(cfg)
if __name__ == '__main__':
# my_init()
ah =AwramsHandle( 2, Acfg.cfg, Acfg.calcfg)
fpath = Path.cwd()
# t= ("data", "2","2002","8", "17","51", "info.bin")
# t= ("data" )
fpath = fpath.joinpath('data\2\2022\8\17\51\0.bin')
# fpath = fpath.joinpath( *t )
# ah.read_one_folder_awrams_online(fpath)
if fpath.exists():
print(" 00000000000000000000000")
else:
print("1111111111111111")
# ah.read_one_folder_awrams_online(fpath)
# data\2\2022\8\17\51\0.bin