Compare commits

..

9 Commits
main ... server

  1. 1
      .gitignore
  2. 3
      README.md
  3. 299
      Ramses.py
  4. 115
      app.py
  5. 132
      atest.py
  6. 297
      calfile/profile/Back_SAM_852F.dat
  7. 297
      calfile/profile/Back_SAM_859F.dat
  8. 297
      calfile/profile/Back_SAM_85B5.dat
  9. 297
      calfile/profile/CalAQ_SAM_852F.dat
  10. 297
      calfile/profile/CalAQ_SAM_859F.dat
  11. 297
      calfile/profile/CalAQ_SAM_85B5.dat
  12. 297
      calfile/profile/Cal_SAM_852F.dat
  13. 297
      calfile/profile/Cal_SAM_859F.dat
  14. 297
      calfile/profile/Cal_SAM_85B5.dat
  15. 81
      calfile/profile/SAMIP_50ED_ALL.ini
  16. 32
      calfile/profile/SAM_852F.ini
  17. 30
      calfile/profile/SAM_859F.ini
  18. 30
      calfile/profile/SAM_85B5.ini
  19. 63
      calfile/profile/immersion_factors_Lu.dat
  20. 17
      config.yml
  21. 237
      configuration.py
  22. 7
      data/2/37/2023_7_10_14_15_31.csv
  23. BIN
      data/2/37/info.bin
  24. BIN
      data/2/37/sensor.bin
  25. BIN
      data/2023/03/20/37/info.bin
  26. BIN
      data/2023/03/20/37/sensor.bin
  27. 795
      myRamses.py
  28. 323
      myconfig.py
  29. 199
      mynumpy.py
  30. 1279
      profiler copy.py
  31. 764
      profiler.py
  32. 1008
      readcal.py
  33. 526
      receive.py
  34. 1
      retrieve.yml
  35. 373
      tcp_profiler.py
  36. 0
      tools/__init__.py
  37. 11
      tools/myexception.py
  38. 285
      tools/mylogger.py
  39. 265
      tools/mypath.py
  40. 66
      tools/mytime.py

1
.gitignore vendored

@ -1,6 +1,7 @@
/__pycache__/ /__pycache__/
/dist/ /dist/
/build/ /build/
/tools/__pycache__/
/*/__pycache__/ /*/__pycache__/
/data/output/ /data/output/
*.log *.log

@ -0,0 +1,3 @@
HANDHELD 接收及数据处理程序
分支:server desktop

@ -0,0 +1,299 @@
#! python3
# -*- encoding: utf-8 -*-
'''
@File : Ramses.py
@Time : 2023/03/03 11:09:50
@Author : Jim @ Yiwin
@Version : 1.0
@Contact : jim@yi-win.com
@Desc :
@para : 23 ..07 .... 06 05 04 03 02 01 00
ip信息不包含
'''
import struct
import numpy as np
from pathlib import Path
from tools.mylogger import log
from myconfig import RamsesAWRAMS, RamsesSURFACE, RamsesPROFILE, DeviceType
class Ramses(object):
def __init__(self,):
"""
@description :处理Ramses的数据标定 Hex -- realWavelength Intensity
@param : 23 ..07 .... 06 05 04 03 02 01 00
ip信息不包含
@Returns : realWavelength Intensity
@ 积分时间 04 07 , 07
"""
self.buf = b''
self.mode = 0 # 默认0 空气中,1:水中
self.buf_ip = b''
self.it = None
self.light_int = None # 未标定的整数值
self.spectrum = None # 光谱强度
self.ip = []
self.cal_cfg = {} # 单个传感器标定文件还是多个传感器的?
# self.current_cal = {} # 当前传感器的序列号
pass
def setBuf( self, buf: bytes ):
self.buf = buf
pass
def setMode( self, mode = 1 ):
self.mode = mode
pass
def setCalCfg(self, d: dict):
self.cal_cfg = d
pass
def getRealWavelength(self, d: dict):
self.cal_cfg = d
pass
def get_ip(self):
return self.ip
def getSpectrum(self):
return self.spectrum
def resetPara(self, ):
self.buf = b''
self.it = None
self.light_int = None
self.spectrum = None # 光谱强度
self.cal_cfg = {}
pass
def resetItSpectrum(self, ):
self.it = None
self.spectrum = None # 光谱强度
pass
def printPara(self, ):
print(f"**************Ramses printPara*******************")
print(f"{self.buf}")
print(f"{self.cal_cfg}")
print(f"{self.it}")
print(f"{self.light_int}")
print(f"{self.spectrum}")
print(f"**************Ramses printPara*******************")
pass
def dealBuf(self, ip_included:bool=False):
"""
头部是否包含Ip帧的信息
?? 不支持多个传感器的标定文件
"""
log.info(f" dealBuf ", __name__)
res = {}
len_ = len(self.buf)
if len_ < 576:
return
if ip_included:
self.buf_ip = self.buf[:26]
self.ip = self.decode_ip_buf(self.buf_ip, self.cal_cfg)
self.buf = self.buf[26:]
len_ = len_ - 26
if len_ % 576 != 0:
return
for i in range( int(len_/576) ):
res.update( {i+1: {}} )
temp_buf = self.buf[7:71] + self.buf[79:143] + \
self.buf[151:215] + self.buf[223:287] + \
self.buf[295:359] + self.buf[367:431] + \
self.buf[439:503] + self.buf[511:575]
self.ConvertAndCalibrate( temp_buf )
# print(len(temp_buf))
# temp = self.__ConvertBytesToInt(temp_buf)
# res.update( { i+1: temp } )
# print(res)
pass
def ConvertAndCalibrate(self,) -> None:
'''单个成功数据转化 标定'''
log.debug(f" ConvertAndCalibrate ", __name__)
temp = self.__ConvertBytesToInt( )
# print( f"int : {self.it} {temp}" )
self.__CalibrateSpectrumData( )
pass
# 转换一个传感器的部分
def __ConvertBytesToInt(self ) -> None:
res = {}
d = [] # List [ Tuple[ it:int, sing_set:tuple[int] ] ]
self.it = 2 << int(self.buf[1]) # integrated time
# self.it = 2 << int(self.buf[0]) # integrated time
self.light_int = struct.unpack(
"<HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH \
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH \
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH \
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH", self.buf[2:])
# print( self.light_int )
def __CalibrateSpectrumData(self ,) :
t0 = 8092
log.debug(f" __CalibrateSpectrumData ..... ", __name__)
raw = np.asarray(self.light_int, dtype=float)
B0 = np.asarray(self.cal_cfg["b0"], dtype=float)
B1 = np.asarray(self.cal_cfg["b1"], dtype=float)
Mn = raw/65535
Bn = B0 + B1 * ( self.it/t0 )
Cn = Mn-Bn
Offset = self.getOffset(
Cn, int(self.cal_cfg['DarkPixelStart']), int(self.cal_cfg['DarkPixelStop']))
Dn = Cn - Offset
En = Dn * ( t0/self.it )
if self.mode == 0:
Fn = En/np.asarray(self.cal_cfg["cal"], dtype=float) # 空气的标定文件
else:
Fn = En/np.asarray(self.cal_cfg["calaq"], dtype=float) # 水中的标定文件
# Fn = En/np.asarray(self.cal_cfg["cal"], dtype=float) # 空气或水中的标定文件
self.spectrum = Fn
# print(self.spectrum)
def getOffset(self, data: np.ndarray, start: int, stop: int):
ret = 0.0
for i in range(start-1, stop, 1):
ret = ret + data[i]
return ret / (stop - start + 1)
def removeMask(self, buf:bytes ) -> bytes:
'''去除遮罩 0x64 0x65 0x66 0x67'''
ret = b''
flag = False
blen = len(buf)
for i in range(blen):
if flag == False and buf[i] == 64 :
flag = True
continue
if flag == False and buf[i] != 64 :
ret = ret + buf[i].to_bytes( 1, byteorder = 'big' )
continue
if flag == True and buf[i] == 100:
ret = ret + b'\x40'
flag = False
continue
if flag == True and buf[i] == 101:
ret = ret + b'\x23'
flag = False
continue
if flag == True and buf[i] == 102:
ret = ret + b'\x11'
flag = False
continue
if flag == True and buf[i] == 103:
ret = ret + b'\x13'
flag = False
continue
return ret
pass
def decode_ip_buf(self, buf, ip_cal:dict):
tmpbuf = buf
if len(tmpbuf) ==26 and tmpbuf[0] == 0x13:
tmpbuf = tmpbuf[2:]
Incl_XGain = float(ip_cal['Incl_XOffset'] )
Incl_XOffset = float(ip_cal['Incl_XOffset'] )
Incl_YGain = float(ip_cal['Incl_YGain'] )
Incl_YOffset = float(ip_cal['Incl_YOffset'] )
Incl_KRef = float(ip_cal['Incl_KRef'] )
Press_Sens_mV_bar_1mA = float(ip_cal['Press_Sens_mV_bar_1mA'] )
Incl_KBG = float(ip_cal['Incl_KBG'] )
Press_Sens_mV_bar_4mA = float(ip_cal['Press_Sens_mV_bar_4mA'] )
Press_Gain = float(ip_cal['Press_Gain'] )
Press_Surface_bar = float(ip_cal['Press_Surface_bar'] )
ip_info = struct.unpack("<BBBBBBBBBBBBBBBBBBBBBBBB", buf)
byte11 = ip_info[11]
byte12 = ip_info[12]
byte13 = ip_info[13]
byte14 = ip_info[14]
byte15 = ip_info[15]
byte16 = ip_info[16]
byte17 = ip_info[17]
byte18 = ip_info[18]
byte19 = ip_info[19]
byte20 = ip_info[20]
byte21 = ip_info[21]
byte22 = ip_info[22]
X = (byte11 -Incl_XOffset) / Incl_XGain # 单位 度
Y = (byte12 - Incl_YOffset ) / Incl_YGain # 单位 度
npress = byte14 *256 + byte13
nbg = byte18 * 256 + byte17
nrefh = byte20 * 256 + byte19
nrefl = byte22 * 256 + byte21
noffset = nrefl - ( Incl_KRef * (nrefh-nrefl))
VPress = Incl_KBG * (npress-noffset) / (nbg- noffset) #电压值
press_sens = Press_Sens_mV_bar_4mA
if press_sens <= 0:
press_sens = 4* Press_Sens_mV_bar_1mA
p_bar = 1000 * VPress / (press_sens * Press_Gain )
press_delta = p_bar - 1.021
depth_m = press_delta * 10
return [depth_m,X,Y]
def getWavelength(self,) -> list:
ret = []
for i in range(1,256):
tmp = float(self.cal_cfg['c0s']) + float(self.cal_cfg['c1s'])*i \
+ float(self.cal_cfg['c2s'])*i*i + float(self.cal_cfg['c3s'])*i*i*i
ret.append(tmp)
pass
return ret
pass
if __name__ == "__main__":
log.info(f"******** Awarms server initiate *********", __name__, "", "")
r = Ramses()
buf_str = "\
23a0000007fefe0a0781067d067d068e0693069c069c06b006b506cb06e40619076607e1076c081509cd09bb0a7d0bee0b1d0c6d0cca0ca40ddc0f30135b18b4224d320e43f852c8\
23a0000006fefe17639c71c97c9484bb89358be98e5d98b1a37eadccb66abd26be31b97db124aa18a3f29c0499349735968e93a48eea8a028bc28cec8d048f1c92c096de9ab99d43\
23a0000005fefee0a157a9ecb1b1b97dc034c507c741c7d2c65ec550c20dbde9b535ae56a60a9e2296cd8ee887278129798170c669b16503632e61605f3a5def5a8e5862561154be\
23a0000004fefe3c51f54dda4a0c48634595426a3f5a3cc539903767362b36cc351f356634b633fc32c4310630fb2ec32fe63199349037e03ac03dc03eae3c303a9639d13a413da7\
23a0000003fefe97412746bc49404caa4dc54d374ca646d63bde326b332739e43c503d2b3c363aca37ef342d32c22f782d1d2bd328ec250222101e691b2b1a7119d3184018fa174d\
23a0000002fefed3177a17e3160616f81423149313f11233126711d8103b10a40f160f8a0efb0d580d660c6f0bd80aa10a580a000ab4099b0994097109e2082c087a0736072c077d\
23a0000001fefe2a071e071607140718071e073c074d076a076e076b076007670763076c0760075c073d07350724071207fb06ef06d706cc06b706a506960684067b0672066306a2\
23a0000000fefe58065406500642064e064306470642063f064806410644064306430641064206460640063c063e063e063d064406430644063c063c063c063c06400640064906ed\
23a0000007fefe0a071b071c07260737073e0749075907650774078b07c0072c08e3082b0ada0be80d9c107b147318931ae51add1a271a77192f1bfb1d99207c265c30c738f03d53\
23a0000006fefe07438f489d4d8452d957945cff639171a5832a97deab7fbe09c86cc5acb9d5ab299e90915287de7f8b7ae275ed6f056aff664f662665bc63936335655767926879\
23a0000005fefec269206d3e724377fe7b7a8050831f85b68637881689e4884787008580823d7f887bee773d7496702a6cde654c5f895a1f570d5416514d4e9d4bde4897468c44c3\
23a0000004fefe71421640db3dc83bbb39533777346c31b92e912c152b5b2aff292129e727cb26d925fd249223b4214020da1fe91ff41f28209420dc201520071e671c221c8d1cfe\
23a0000003fefecd1dd31fe72164235924cb24b924f72331211e1ca018ef19221d121f621fe91e081ed51c761b311a2f193c18651788166015a013de11d1106e1041101810e80f2e\
23a0000002fefee50fd90fbc0f6d0ff70e610ee00d930d460de40c900c450c010cbd0b7c0b480bfc0aab0a2c0a9e094d092b09fb08d008a208990881087d083908e6078d07660747\
23a0000001fefe5b075a07500751074d074e0751075d076807730788077e077c077c07810777077a076c0765075c075607480740073607270723070d070d070b07ff06fd06f0062f\
23a0000000fefef606f106ed06f506ef06eb06f106ec06f006e906e806ed06e606ef06e506ea06ec06ee06eb06e906ee06f006ef06ea06e906e606e606e606ec06ea06ea06f506f2\
23a0000007fefe0605830479047d047e04810482048204850487048b048c04850487048c049304950498049c04a804a904b604b804c604d004e104f104190546059805ff059a06bb\
23a0000006fefe90073209ea0b7610c117cc22b2324a487b645e8798acf2c927d28dc1f2a1ac809664804e543d7a308327a321d81dab1b0f1bca1bb41dba2098243329382e773335\
23a0000005fefeca38213e544329486f4c1c500653335592564f577d573b57a556b4557e540a534451424f004d714a9b47994458410e3e9c3af8368c33b630982eca2c052b3429ae\
23a0000004fefe632763255a234821321f0e1d061b291983171e16d814a91379124b1138104b0f610e990dd80c240c880bfc0a7b0af8097709020990082508de07c507ba07a50762\
23a0000003fefe950781076407460727070007d306ab066e06270605060d0614061306fe05e805d105b405a00586057105630549053d0528051105fd04f304ee04e404dc04dd04c3\
23a0000002fefed804d904d004c604bf04b904b904b104a804a604a6049d04980496048f04970491048c04880486047e0484047a047d047b047c0478047a04760476047004700430\
23a0000001fefe6f0474046c046d0472046d047304750470046e04760472046f047604700473046f04730470047504700470046d046b047004710470046e046d046a046b046904e4\
23a0000000fefe690470046e046b046c04680468046e0466046a046a0469046b046d04640466046c046c046b046a04660466046b046c046a046a0468046f046804740471048d0417\
"
buf = bytearray.fromhex(buf_str)
one_senor = buf[:576]
r.setHex(one_senor)
r.ConvertBytesToInt()
# print(len(buf))
# # print(buf[:576])
# print(buf[:576].hex())
# print(buf[576:578].hex() )

115
app.py

@ -0,0 +1,115 @@
from pathlib import *
from tools.mylogger import log
from configuration import Configuration
from receive import MyServer,MyThreadingTCPServer
from myconfig import MyConfig,DeviceType
from myconfig import DEVICE_ID ,FILE_MARK,YAML_FILE_NAME,CURRENT_DIR,DATA_DIR,CAL_DIR
from myconfig import BEGIN_WAVELENGTH,END_WAVELENGTH,INTERVAL,ROWFACTOR
from Ramses import Ramses
from profiler import Profiler,ProfilerHandle
IP = ""
PORT = 7887
ADDRESS = (IP, PORT) # 绑定地址
class MyApp(object):
def __init__(self,):
log.info(f"******** Awarms server initiate.... *********", __name__, "", "")
self.device_type = DeviceType.PROFILE.name
self.mycfg = MyConfig() # 传入 cfg retrieve 的yml文件
# 配置反演需要的参数 波长 间隔 , rowFactor
self.retrieve = self.mycfg.read_rtv_yaml() # 读retrieve.yml
log.info(f"Retrieve: {self.retrieve}", __name__, "", "")
# log.info(f"syscfg: {device}", __name__, "", "")
self.mycfg.setDeviceType( DeviceType.PROFILE )
self.sensor_cfg = self.mycfg.read_yaml() # 读config.yml, 多个device_id 配置
log.info(f"Current Device: {self.device_type} ", __name__, "", "")
log.info(f"Sensor cfg: {self.sensor_cfg}", __name__, "", "")
self.cal_cfg = {}
cfgr = Configuration( )
cfgr.setDeviceType(self.device_type)
cfgr.setSystemCfgDict(self.sensor_cfg)
for k,v in self.sensor_cfg.items():
cfgr.setSystemCfgDict(v)
try:
cfgr.getCalConfiguration()
except Exception as e:
log.error(f"读取配置文件失败. \n {e}",__name__, "", "" )
raise
log.info(f"v: {cfgr.configuration}", __name__, "", "")
self.cal_cfg.update({k:cfgr.cal_configuration})
log.debug(f"cal_cfg: {self.cal_cfg}", __name__, "", "")
log.warning(f"cal_cfg 2: {self.cal_cfg[2].keys()}", __name__, "", "")
# log.warning(f"cal_cfg 3: {self.cal_cfg[3].keys()}", __name__, "", "")
log.info(f"传感器配置文件读取成功", __name__, "", "")
pass
def init_data_process(self, mode = 0):
''' 多个handle '''
self.profiler_handle = { }
for k,v in self.cal_cfg.items():
ph = ProfilerHandle( deviceid=k, cfg=self.sensor_cfg[k], calcfg=v, rtv=self.retrieve)
self.profiler_handle.update( {k:ph} )
def run_server(self,):
# 启动接受服务器
log.info(f"启动接受服务器, IP: {IP} , Port:{PORT} ", __name__, "", "")
server_ = MyThreadingTCPServer(ADDRESS, MyServer, calcfg=self.cal_cfg, retrieve = self.retrieve ,profiler_handle=self.profiler_handle )
try:
server_.serve_forever()
except KeyboardInterrupt:
log.warning(" Ctrl+C 退出主程序 ",__name__, "", "")
server_.server_close()
except Exception as e:
log.info(" 系统异常, 如下: \n ",__name__, "", "")
log.info(e)
pass
if __name__ == "__main__":
log.info(f"******** Yiwin Profiler server initiate.... *********", __name__, "", "")
app = MyApp()
app.init_data_process( )
app.run_server()
# buf_str= "\
# 23a0000007fefe0a0781067d067d068e0693069c069c06b006b506cb06e40619076607e1076c081509cd09bb0a7d0bee0b1d0c6d0cca0ca40ddc0f30135b18b4224d320e43f852c8\
# 23a0000006fefe17639c71c97c9484bb89358be98e5d98b1a37eadccb66abd26be31b97db124aa18a3f29c0499349735968e93a48eea8a028bc28cec8d048f1c92c096de9ab99d43\
# 23a0000005fefee0a157a9ecb1b1b97dc034c507c741c7d2c65ec550c20dbde9b535ae56a60a9e2296cd8ee887278129798170c669b16503632e61605f3a5def5a8e5862561154be\
# 23a0000004fefe3c51f54dda4a0c48634595426a3f5a3cc539903767362b36cc351f356634b633fc32c4310630fb2ec32fe63199349037e03ac03dc03eae3c303a9639d13a413da7\
# 23a0000003fefe97412746bc49404caa4dc54d374ca646d63bde326b332739e43c503d2b3c363aca37ef342d32c22f782d1d2bd328ec250222101e691b2b1a7119d3184018fa174d\
# 23a0000002fefed3177a17e3160616f81423149313f11233126711d8103b10a40f160f8a0efb0d580d660c6f0bd80aa10a580a000ab4099b0994097109e2082c087a0736072c077d\
# 23a0000001fefe2a071e071607140718071e073c074d076a076e076b076007670763076c0760075c073d07350724071207fb06ef06d706cc06b706a506960684067b0672066306a2\
# 23a0000000fefe58065406500642064e064306470642063f064806410644064306430641064206460640063c063e063e063d064406430644063c063c063c063c06400640064906ed\
# 23a0000007fefe0a071b071c07260737073e0749075907650774078b07c0072c08e3082b0ada0be80d9c107b147318931ae51add1a271a77192f1bfb1d99207c265c30c738f03d53\
# 23a0000006fefe07438f489d4d8452d957945cff639171a5832a97deab7fbe09c86cc5acb9d5ab299e90915287de7f8b7ae275ed6f056aff664f662665bc63936335655767926879\
# 23a0000005fefec269206d3e724377fe7b7a8050831f85b68637881689e4884787008580823d7f887bee773d7496702a6cde654c5f895a1f570d5416514d4e9d4bde4897468c44c3\
# 23a0000004fefe71421640db3dc83bbb39533777346c31b92e912c152b5b2aff292129e727cb26d925fd249223b4214020da1fe91ff41f28209420dc201520071e671c221c8d1cfe\
# 23a0000003fefecd1dd31fe72164235924cb24b924f72331211e1ca018ef19221d121f621fe91e081ed51c761b311a2f193c18651788166015a013de11d1106e1041101810e80f2e\
# 23a0000002fefee50fd90fbc0f6d0ff70e610ee00d930d460de40c900c450c010cbd0b7c0b480bfc0aab0a2c0a9e094d092b09fb08d008a208990881087d083908e6078d07660747\
# 23a0000001fefe5b075a07500751074d074e0751075d076807730788077e077c077c07810777077a076c0765075c075607480740073607270723070d070d070b07ff06fd06f0062f\
# 23a0000000fefef606f106ed06f506ef06eb06f106ec06f006e906e806ed06e606ef06e506ea06ec06ee06eb06e906ee06f006ef06ea06e906e606e606e606ec06ea06ea06f506f2\
# 23a0000007fefe0605830479047d047e04810482048204850487048b048c04850487048c049304950498049c04a804a904b604b804c604d004e104f104190546059805ff059a06bb\
# 23a0000006fefe90073209ea0b7610c117cc22b2324a487b645e8798acf2c927d28dc1f2a1ac809664804e543d7a308327a321d81dab1b0f1bca1bb41dba2098243329382e773335\
# 23a0000005fefeca38213e544329486f4c1c500653335592564f577d573b57a556b4557e540a534451424f004d714a9b47994458410e3e9c3af8368c33b630982eca2c052b3429ae\
# 23a0000004fefe632763255a234821321f0e1d061b291983171e16d814a91379124b1138104b0f610e990dd80c240c880bfc0a7b0af8097709020990082508de07c507ba07a50762\
# 23a0000003fefe950781076407460727070007d306ab066e06270605060d0614061306fe05e805d105b405a00586057105630549053d0528051105fd04f304ee04e404dc04dd04c3\
# 23a0000002fefed804d904d004c604bf04b904b904b104a804a604a6049d04980496048f04970491048c04880486047e0484047a047d047b047c0478047a04760476047004700430\
# 23a0000001fefe6f0474046c046d0472046d047304750470046e04760472046f047604700473046f04730470047504700470046d046b047004710470046e046d046a046b046904e4\
# 23a0000000fefe690470046e046b046c04680468046e0466046a046a0469046b046d04640466046c046c046b046a04660466046b046c046a046a0468046f046804740471048d0417\
# "

@ -0,0 +1,132 @@
from pathlib import *
from mylogger import log
# from awrams.readfile import Readfile
# from awrams.AWRAMS import AWRAMS
from configuration import Configuration
# import struct
# import threading
# import socketserver
# from socketserver import ThreadingTCPServer,TCPServer,ThreadingMixIn
# from myserver import MyThreadingTCPServer,MyTCPServer
from receive import MyServer, MyThreadingTCPServer
from myconfig import MyConfig, DeviceType
from myconfig import DEVICE_ID, FILE_MARK, YAML_FILE_NAME, CURRENT_DIR, DATA_DIR, CAL_DIR
from myconfig import BEGIN_WAVELENGTH, END_WAVELENGTH, INTERVAL, ROWFACTOR
from Ramses import Ramses
from AWRAMS import AWRAMS
IP = ""
PORT = 7887
ADDRESS = (IP, PORT) # 绑定地址
if __name__ == "__main__":
log.info(f"******** Awarms server initiate *********", __name__, "", "")
#######################################
device_id = DEVICE_ID # 多个设备
device_type = DeviceType.AWRAMS.name
mycfg = MyConfig()
mycfg.setDeviceType(DeviceType.AWRAMS)
init_para = mycfg.read_yaml()
log.info(f"Current Device: {device_type} ", __name__, "", "")
log.info(f"Sensor: {init_para}", __name__, "", "")
mycfg.setRetrieveCfg("retrieve.yml")
retrieve = mycfg.read_rtv_yaml()
log.warning(f"Retrieve 反演参数设置: {retrieve}", __name__, "", "")
cal_cfg = {}
# ddd = {"1": {'FUNC': 'Lsky', 'SN': '85B5'}, "2": {'FUNC': 'Esky', 'SN': ['50ED']}, "3": {'FUNC': 'Lwater', 'SN': ['852F']}}
cfgr = Configuration()
cfgr.setDeviceType(device_type)
cfgr.setSystemCfgDict(init_para)
for k, v in init_para.items():
cfgr.setSystemCfgDict(v)
try:
cfgr.getCalConfiguration()
except Exception as e:
log.error(f"读取配置文件失败. \n {e}", __name__, "", "")
raise
log.info(f"v: {cfgr.configuration}", __name__, "", "")
cal_cfg.update({k: cfgr.cal_configuration})
a = AWRAMS()
a.setCfg(cal_cfg)
a.setRetrieve(retrieve)
p = ("data","2","17")
a.setOldFolder(p)
a.readOneFolder( )
# 将参数 begin
# log.warning(f"cal_cfg: {cal_cfg}", __name__, "", "")
# log.warning(f"cal_cfg 2: {cal_cfg[2].keys()}", __name__, "", "")
# log.warning(f"cal_cfg 3: {cal_cfg[3].keys()}", __name__, "", "")
# log.info(f"传感器配置文件读取成功", __name__, "", "")
# ????????????
# 不同设备类型接收不同,修改receive.py
# 不同数据裂隙数据处理不同,修改AWRAMS.py
# 分支:服务器:处理不同的文件夹 awramse surface profile c
# 桌面: 服务器的, 读取标准trios文件处理的 -- 暂不考虑
# # 启动接受服务器
# log.info(f"启动接受服务器, IP: {IP} , Port:{PORT} ", __name__, "", "")
# server_ = MyThreadingTCPServer(ADDRESS, MyServer, cfg=cal_cfg, retrieve=retrieve )
# try:
# server_.serve_forever()
# except KeyboardInterrupt:
# log.info(" Ctrl+C 退出主程序 ")
# server_.server_close()
# except Exception as e:
# log.info(" 系统异常, 如下: \n ")
# log.info(e)
# r= Ramses()
# p = Path("0.bin")
# buf = r.read_bin(p)
# print(buf.hex())
# buf_str= "\
# 23a0000007fefe0a0781067d067d068e0693069c069c06b006b506cb06e40619076607e1076c081509cd09bb0a7d0bee0b1d0c6d0cca0ca40ddc0f30135b18b4224d320e43f852c8\
# 23a0000006fefe17639c71c97c9484bb89358be98e5d98b1a37eadccb66abd26be31b97db124aa18a3f29c0499349735968e93a48eea8a028bc28cec8d048f1c92c096de9ab99d43\
# 23a0000005fefee0a157a9ecb1b1b97dc034c507c741c7d2c65ec550c20dbde9b535ae56a60a9e2296cd8ee887278129798170c669b16503632e61605f3a5def5a8e5862561154be\
# 23a0000004fefe3c51f54dda4a0c48634595426a3f5a3cc539903767362b36cc351f356634b633fc32c4310630fb2ec32fe63199349037e03ac03dc03eae3c303a9639d13a413da7\
# 23a0000003fefe97412746bc49404caa4dc54d374ca646d63bde326b332739e43c503d2b3c363aca37ef342d32c22f782d1d2bd328ec250222101e691b2b1a7119d3184018fa174d\
# 23a0000002fefed3177a17e3160616f81423149313f11233126711d8103b10a40f160f8a0efb0d580d660c6f0bd80aa10a580a000ab4099b0994097109e2082c087a0736072c077d\
# 23a0000001fefe2a071e071607140718071e073c074d076a076e076b076007670763076c0760075c073d07350724071207fb06ef06d706cc06b706a506960684067b0672066306a2\
# 23a0000000fefe58065406500642064e064306470642063f064806410644064306430641064206460640063c063e063e063d064406430644063c063c063c063c06400640064906ed\
# 23a0000007fefe0a071b071c07260737073e0749075907650774078b07c0072c08e3082b0ada0be80d9c107b147318931ae51add1a271a77192f1bfb1d99207c265c30c738f03d53\
# 23a0000006fefe07438f489d4d8452d957945cff639171a5832a97deab7fbe09c86cc5acb9d5ab299e90915287de7f8b7ae275ed6f056aff664f662665bc63936335655767926879\
# 23a0000005fefec269206d3e724377fe7b7a8050831f85b68637881689e4884787008580823d7f887bee773d7496702a6cde654c5f895a1f570d5416514d4e9d4bde4897468c44c3\
# 23a0000004fefe71421640db3dc83bbb39533777346c31b92e912c152b5b2aff292129e727cb26d925fd249223b4214020da1fe91ff41f28209420dc201520071e671c221c8d1cfe\
# 23a0000003fefecd1dd31fe72164235924cb24b924f72331211e1ca018ef19221d121f621fe91e081ed51c761b311a2f193c18651788166015a013de11d1106e1041101810e80f2e\
# 23a0000002fefee50fd90fbc0f6d0ff70e610ee00d930d460de40c900c450c010cbd0b7c0b480bfc0aab0a2c0a9e094d092b09fb08d008a208990881087d083908e6078d07660747\
# 23a0000001fefe5b075a07500751074d074e0751075d076807730788077e077c077c07810777077a076c0765075c075607480740073607270723070d070d070b07ff06fd06f0062f\
# 23a0000000fefef606f106ed06f506ef06eb06f106ec06f006e906e806ed06e606ef06e506ea06ec06ee06eb06e906ee06f006ef06ea06e906e606e606e606ec06ea06ea06f506f2\
# 23a0000007fefe0605830479047d047e04810482048204850487048b048c04850487048c049304950498049c04a804a904b604b804c604d004e104f104190546059805ff059a06bb\
# 23a0000006fefe90073209ea0b7610c117cc22b2324a487b645e8798acf2c927d28dc1f2a1ac809664804e543d7a308327a321d81dab1b0f1bca1bb41dba2098243329382e773335\
# 23a0000005fefeca38213e544329486f4c1c500653335592564f577d573b57a556b4557e540a534451424f004d714a9b47994458410e3e9c3af8368c33b630982eca2c052b3429ae\
# 23a0000004fefe632763255a234821321f0e1d061b291983171e16d814a91379124b1138104b0f610e990dd80c240c880bfc0a7b0af8097709020990082508de07c507ba07a50762\
# 23a0000003fefe950781076407460727070007d306ab066e06270605060d0614061306fe05e805d105b405a00586057105630549053d0528051105fd04f304ee04e404dc04dd04c3\
# 23a0000002fefed804d904d004c604bf04b904b904b104a804a604a6049d04980496048f04970491048c04880486047e0484047a047d047b047c0478047a04760476047004700430\
# 23a0000001fefe6f0474046c046d0472046d047304750470046e04760472046f047604700473046f04730470047504700470046d046b047004710470046e046d046a046b046904e4\
# 23a0000000fefe690470046e046b046c04680468046e0466046a046a0469046b046d04640466046c046c046b046a04660466046b046c046a046a0468046f046804740471048d0417\
# "
# buf = bytearray.fromhex(buf_str)
# one_senor = buf
# r.setBuf(one_senor)
# r.setCalCfg(cal_cfg[2]["Lsky"])
# r.dealBuf()
# print(r.cal_cfg)

@ -0,0 +1,297 @@
[Spectrum]
Version = 1
IDData = DLAB_2016-11-29_14-47-59_729_812
IDDevice = SAM_852F
IDDataType = SPECTRUM
IDDataTypeSub1 = BACK
IDDataTypeSub2 =
IDDataTypeSub3 =
DateTime = 2016-11-29 14:41:43
PositionLatitude = 0
PositionLongitude = 0
Comment =
CommentSub1 =
CommentSub2 =
CommentSub3 =
IDMethodType = SAM Calibration Station
MethodName = SAM_Calibration_Station
Mission =
MissionSub = 0
RecordType = 0
[Attributes]
CalFactor = 1
IDBasisSpec =
IDDataBack =
IDDataCal =
IntegrationTime = 8192
P31 = -1
P31e = 0
PathLength = +INF
RAWDynamic = 65535
Temperature = +NAN
Unit1 = $05 $00 Pixel
Unit2 = $03 $05 Intensity counts
Unit3 = $03 $05 Intensity counts
Unit4 = $f1 $00 Status
[END] of [Attributes]
[DATA]
0 12 0 0
1 0.0181271394490075 0.0246216519286131 0
2 0.0179948670252732 0.024510637261161 0
3 0.0180195207374602 0.0246496004937187 0
4 0.0181005261905924 0.0246158903420498 0
5 0.018089553708784 0.0244170047588795 0
6 0.0180460947386496 0.0245126709060577 0
7 0.0180426749981038 0.0246256846551714 0
8 0.0180534564280807 0.0247016785610073 0
9 0.0180790359128869 0.0245795106168697 0
10 0.0180635226786445 0.024601391414026 0
11 0.0180649523395645 0.0247430929974417 0
12 0.0180630058790784 0.0246690990460763 0
13 0.0180600544336154 0.0246595979967682 0
14 0.0180597668962471 0.024549218035998 0
15 0.0180588020408788 0.0245417076893854 0
16 0.0180498552319141 0.0249321420235364 0
17 0.0180704773142647 0.0245095865737246 0
18 0.0180562171706652 0.0245109975567032 0
19 0.0180717635554537 0.0246271043662396 0
20 0.0180430410499234 0.0249088567021879 0
21 0.0180523488508876 0.0244657876231882 0
22 0.0180618142041841 0.0248177038501861 0
23 0.0180579205853055 0.0247746806522609 0
24 0.0180626933915622 0.0246467759093347 0
25 0.0180613022899616 0.0244827044066167 0
26 0.0180574472304024 0.0246539416709665 0
27 0.0180710633810246 0.024721638131062 0
28 0.0180638238251844 0.0244816703025508 0
29 0.0180615148024098 0.0248143197952532 0
30 0.0180669541091198 0.0247325126325631 0
31 0.0180750465063777 0.0245241834309148 0
32 0.0180621163975833 0.0244880571694591 0
33 0.0180742925931686 0.0247891481591618 0
34 0.0180599654505706 0.0245174540737672 0
35 0.0180625609638543 0.0248839095525633 0
36 0.018079003460247 0.0244844522938572 0
37 0.0180789446616468 0.024819053561975 0
38 0.0180641596925595 0.0246153722426461 0
39 0.0180789860125912 0.0244569738236619 0
40 0.0180726758933779 0.024594164032081 0
41 0.0180883707577176 0.024739169721128 0
42 0.0180761767655234 0.0246157473759408 0
43 0.0180788425928601 0.0245033974853286 0
44 0.0180748167207502 0.0247480762129667 0
45 0.018087924097728 0.0246028704761041 0
46 0.0180769134055532 0.0245055458173238 0
47 0.0180908061015206 0.02469614722145 0
48 0.0180821035597377 0.0244073975760008 0
49 0.0180826006434528 0.0245040215437411 0
50 0.0180812086694694 0.0244248794159556 0
51 0.0180992416941691 0.0244697287048048 0
52 0.0180889166948691 0.0246472875499521 0
53 0.0180883470289057 0.0246650067939463 0
54 0.0180961206574913 0.0244401485106133 0
55 0.0180961166445305 0.0243791267698239 0
56 0.0180882432153534 0.0246499286698909 0
57 0.0180960383045557 0.0243780806209942 0
58 0.0180981065496797 0.0247780093711051 0
59 0.0180892262162838 0.0247202135322636 0
60 0.018090062656905 0.0245516643449751 0
61 0.0181151497688632 0.0244492274695042 0
62 0.0180994168686337 0.0246700816544131 0
63 0.0180945880554018 0.0246774251199509 0
64 0.0181024354875717 0.0245070955769284 0
65 0.0180812022138367 0.0246320020464858 0
66 0.018095840622615 0.0244041100537399 0
67 0.0181047246200187 0.0245954472358265 0
68 0.0180913783846324 0.0243854736620815 0
69 0.0181042299789754 0.0245493665880845 0
70 0.018097802960468 0.0247136054955626 0
71 0.0180910716548426 0.0246331129577409 0
72 0.0181013286082848 0.0247415952572516 0
73 0.0180952437383085 0.0248944354541623 0
74 0.0181025522123893 0.0247328998106215 0
75 0.0180982995207534 0.0246575704615342 0
76 0.0180837411967154 0.0247710366748172 0
77 0.0181112380044225 0.0247250916615888 0
78 0.0181073538072781 0.0247268100478861 0
79 0.018103745283096 0.0248027810861271 0
80 0.0180962696604722 0.0248363912138882 0
81 0.0181080471771214 0.0249100102065207 0
82 0.0180900361364681 0.0245452771289432 0
83 0.0181011494208593 0.0246815472221476 0
84 0.0181086649986149 0.0246684887780455 0
85 0.0181182547536976 0.0248864084046402 0
86 0.0181057997445719 0.024731509076811 0
87 0.0181089392757648 0.0246692868745663 0
88 0.0181055429150778 0.0245807166643024 0
89 0.0181146218027973 0.0247555966841634 0
90 0.0181128730242519 0.024710914276389 0
91 0.0181162224507446 0.0247437058838994 0
92 0.018127437978399 0.0247758020372237 0
93 0.0181252793544177 0.0244627418690115 0
94 0.0181109518628667 0.0246814871728906 0
95 0.0181264111838525 0.0246144002825787 0
96 0.018109165222908 0.0247326369205602 0
97 0.0181143328696165 0.0247778595970861 0
98 0.0181233651720949 0.0250858798171903 0
99 0.0181237422159377 0.02491093660596 0
100 0.0181142894249535 0.0248098248290651 0
101 0.0181268594141312 0.0248231980080813 0
102 0.0181223244194237 0.0247223508668658 0
103 0.0181331201564784 0.0247285340201608 0
104 0.0181055589669212 0.0245271073409594 0
105 0.0181385395728607 0.0246145044959695 0
106 0.0181050559510032 0.0247301532553592 0
107 0.0181237826944993 0.0247854968501228 0
108 0.0181113664191696 0.0249164176717207 0
109 0.0181140599882791 0.0248323871154641 0
110 0.0181137768128247 0.0245063201734407 0
111 0.0181257021111189 0.0249895534773082 0
112 0.0181361358093148 0.0247316035147414 0
113 0.0181222916178307 0.0250480786353239 0
114 0.0181118017381829 0.0245604978699841 0
115 0.0181256476744327 0.0248995078707639 0
116 0.0181248496186543 0.0247918838915929 0
117 0.0181254770363585 0.0246323141629729 0
118 0.0181331583668447 0.0246174315481265 0
119 0.0181230066227672 0.0245240120112333 0
120 0.0181144363342157 0.0247643169185683 0
121 0.0181321676889458 0.0246655463644507 0
122 0.0181179351126425 0.024543567994421 0
123 0.0181364284065034 0.0246558676112366 0
124 0.0181453949313192 0.0245943996905025 0
125 0.0181325621804444 0.0250753080058395 0
126 0.0181156688366246 0.0250045579362867 0
127 0.0181297948077507 0.0246554029277417 0
128 0.0181383919656923 0.0250264155167244 0
129 0.0181374979478067 0.0246469593737799 0
130 0.0181199012889798 0.024665052703698 0
131 0.0181422937849691 0.0248279473108028 0
132 0.0181196791803209 0.0246961217354281 0
133 0.0181355928382649 0.0245553355540586 0
134 0.0181084210803862 0.0245557204628138 0
135 0.018133168137532 0.0247270518159704 0
136 0.0181404589894803 0.0247966155635732 0
137 0.0181418954549861 0.0247140158903397 0
138 0.0181177946590129 0.0247626610253931 0
139 0.0181147076452641 0.0248185803249523 0
140 0.0181089181641013 0.024609407466155 0
141 0.0181443674388664 0.0247364268316634 0
142 0.0181377502409103 0.0246575409605911 0
143 0.0181289850620429 0.0248112543155938 0
144 0.0181158340659255 0.0245781406559126 0
145 0.0181305586661236 0.0247824863574285 0
146 0.0181270701818138 0.0246500847281345 0
147 0.0181084884283378 0.0247009649523946 0
148 0.0181265399475526 0.0248219430833464 0
149 0.0181359089897888 0.024708337569752 0
150 0.0181099418180697 0.0246372621170157 0
151 0.0181312042293899 0.0247286281089676 0
152 0.0181193782082575 0.0245687148427376 0
153 0.0181291396482737 0.0244441117615777 0
154 0.0181114958807759 0.0246077550642157 0
155 0.018131541667054 0.0247010606122576 0
156 0.0181167600130213 0.0247215691791535 0
157 0.018133784563213 0.0245714196777312 0
158 0.01811013496362 0.024795434478477 0
159 0.018139256671516 0.0244320022353862 0
160 0.0181215378790981 0.0247462735133231 0
161 0.0181241962039428 0.0246903013215404 0
162 0.0181255386265836 0.0245514873393163 0
163 0.0181152391008612 0.0245751469211505 0
164 0.0181239868320727 0.0246573018109337 0
165 0.018128921378099 0.0244665511564739 0
166 0.0181191986718789 0.0246441606245413 0
167 0.0181302022105147 0.0244944379267046 0
168 0.0181156925654366 0.0247590790173862 0
169 0.018128299020215 0.0244953459971555 0
170 0.0181149622065629 0.0247222716158114 0
171 0.0181265924649967 0.0246553421802375 0
172 0.0181200464534764 0.0246119307568831 0
173 0.018134817115486 0.0246354342804737 0
174 0.0181138528846042 0.0243070187840778 0
175 0.0181302275096157 0.0247393772751007 0
176 0.0181219730236349 0.0245134415963769 0
177 0.0181227435121171 0.0247120136665658 0
178 0.0181128882037125 0.0245733489346753 0
179 0.0181298839652721 0.0244120664057354 0
180 0.0181217728990224 0.0245414062211677 0
181 0.0181271213034454 0.0248899691161084 0
182 0.0181002302783493 0.0246153303478156 0
183 0.0181198512142075 0.0247247613906751 0
184 0.0181077788321745 0.0246353044064992 0
185 0.0181113704321304 0.0248533992931349 0
186 0.0181110165936699 0.0244737232023303 0
187 0.0181200574454996 0.0247406206787574 0
188 0.0181026958065969 0.0245452593236402 0
189 0.0181267051768535 0.0245186117675831 0
190 0.018099050467861 0.024411721471631 0
191 0.0181217983725999 0.0246871115538839 0
192 0.0181250125797599 0.0245525059073826 0
193 0.018113538826799 0.0247245782753535 0
194 0.0181123129544992 0.0246827284818056 0
195 0.0181229691103072 0.0247343388980489 0
196 0.0181081715789076 0.0248475752134495 0
197 0.0181231769118883 0.024459163701364 0
198 0.0181145502674084 0.0247058137553385 0
199 0.0181123405217955 0.0246986457244034 0
200 0.0181137211548025 0.024567998615698 0
201 0.0181167594895916 0.0243962081650239 0
202 0.0181050918931742 0.02490341386546 0
203 0.0181182652222911 0.024537072550077 0
204 0.0181006336681525 0.0244906673919604 0
205 0.0181259247432075 0.0245997164936153 0
206 0.018101253059935 0.0246575069210413 0
207 0.018119688602055 0.0242198948182748 0
208 0.018109630726366 0.024409780344485 0
209 0.0181146952574284 0.0242338197871209 0
210 0.0181041917686091 0.0244076180475463 0
211 0.0181114787820732 0.0245564188845504 0
212 0.0181135109105496 0.0246008453847352 0
213 0.0181156468525783 0.0245239058776628 0
214 0.0180992396004504 0.0246243248187984 0
215 0.0181260718269463 0.0246248141155061 0
216 0.0181003136781442 0.0243052663582307 0
217 0.0181070481243477 0.0245985008452839 0
218 0.0181074850136501 0.0243217586073769 0
219 0.0181076732738566 0.0246622282938758 0
220 0.0181037805273608 0.0246268287331674 0
221 0.0181054610855719 0.0244327690853459 0
222 0.0180953817492662 0.0245608707339754 0
223 0.0181251186615074 0.0244063069139137 0
224 0.0181015350140535 0.0246343666605434 0
225 0.0181170220768121 0.0244305303303416 0
226 0.0180958751689736 0.0247014261446536 0
227 0.0181153706561862 0.0246118652962104 0
228 0.0181087792807607 0.0246281107149804 0
229 0.0181190203568361 0.0246470772029907 0
230 0.0181090340165361 0.0247607972291217 0
231 0.0181264401469612 0.0247295342592388 0
232 0.0181213607853913 0.0246461279359564 0
233 0.0181053968781984 0.0245565616760977 0
234 0.0181112694102031 0.0244480411475541 0
235 0.0181143349633352 0.0245717391258137 0
236 0.0181028416689998 0.0246028116487796 0
237 0.0181058145750794 0.0248620650642601 0
238 0.018112246653407 0.0244563693161703 0
239 0.018102646778684 0.0245400739655581 0
240 0.0181018787328736 0.024658254394642 0
241 0.0181089858610059 0.0247536939606119 0
242 0.0181129695097887 0.024581995678565 0
243 0.0181304682872664 0.024518225986019 0
244 0.0181118867082669 0.0249431329577538 0
245 0.0181302966023328 0.024793957860264 0
246 0.0181224601621861 0.0246779200026361 0
247 0.0181439211278299 0.0246277942344484 0
248 0.0181333813478864 0.0245882612250266 0
249 0.0181515932110585 0.0245443142460891 0
250 0.0181361972250634 0.0244427728726199 0
251 0.0181645852590311 0.0245225095578749 0
252 0.018168622995547 0.0246755827947801 0
253 0.0182029242145575 0.0244593372157869 0
254 0.01826668143855 0.0246154502717679 0
255 0.0187321041138753 0.0255941653568822 0
[END] of [DATA]
[END] of [Spectrum]

@ -0,0 +1,297 @@
[Spectrum]
Version = 1
IDData = DLAB_2018-05-04_11-56-28_529_586
IDDevice = SAM_859F
IDDataType = SPECTRUM
IDDataTypeSub1 = BACK
IDDataTypeSub2 =
IDDataTypeSub3 =
DateTime = 2018-05-04 11:50:12
PositionLatitude = 0
PositionLongitude = 0
Comment =
CommentSub1 =
CommentSub2 =
CommentSub3 =
IDMethodType = SAM Calibration Station
MethodName = SAM_Calibration_Station
Mission =
MissionSub = 0
RecordType = 0
[Attributes]
CalFactor = 1
IDBasisSpec =
IDDataBack =
IDDataCal =
IntegrationTime = 8192
P31 = -1
P31e = 0
PathLength = +INF
RAWDynamic = 65535
Temperature = +NAN
Unit1 = $05 $00 Pixel
Unit2 = $03 $05 Intensity counts
Unit3 = $03 $05 Intensity counts
Unit4 = $f1 $00 Status
[END] of [Attributes]
[DATA]
0 12 0 0
1 0.0165892037855774 0.018605511502516 0
2 0.0165122714877024 0.0184837131056956 0
3 0.0164973019224162 0.0183851120510798 0
4 0.0166164505683762 0.0184840774161591 0
5 0.0165490556826164 0.0185292503425739 0
6 0.0165598147795938 0.0186302980552904 0
7 0.0164974439463348 0.0183759157866635 0
8 0.0165638938670541 0.0186312056020559 0
9 0.0165295399561229 0.0185970883722841 0
10 0.0165679375357729 0.018610557385725 0
11 0.0165135498774463 0.018696732782741 0
12 0.0165496044113927 0.0185527901750176 0
13 0.0165162233817516 0.0184841121539561 0
14 0.0165748471564411 0.0185602766066645 0
15 0.0165168071803162 0.0183555554227304 0
16 0.016561615028724 0.0185179326286786 0
17 0.0165228899565738 0.0185996666499772 0
18 0.0165630265440819 0.0186817794703681 0
19 0.0165138880130166 0.0184706934143117 0
20 0.016557182975186 0.0185104139030999 0
21 0.0165155392591658 0.0185717901788923 0
22 0.0165657065040199 0.0185864488309574 0
23 0.016518681058554 0.0184904599190226 0
24 0.0165595148543898 0.0185467707606851 0
25 0.0165168741793146 0.0185513739551852 0
26 0.0165713147040385 0.0186439978394227 0
27 0.0165192898072665 0.0185915799003217 0
28 0.0165624174464164 0.0186942077463949 0
29 0.0165336104942318 0.0186620183770728 0
30 0.0165711529642688 0.0186390987626822 0
31 0.0165277786152653 0.0185678106936811 0
32 0.0165778362888406 0.0186122998615499 0
33 0.0165368341231259 0.0184338018739524 0
34 0.0165763434674064 0.0186563994074951 0
35 0.0165347332508855 0.0186582494133848 0
36 0.0165844704110229 0.0184381484626158 0
37 0.0165276158286362 0.0187957369005385 0
38 0.016561547855249 0.0184585601477162 0
39 0.0165227810832013 0.018382363401076 0
40 0.0165862270410135 0.0185619393077496 0
41 0.0165383602695828 0.0188072553604966 0
42 0.0165776928691096 0.018482204891798 0
43 0.0165375732058275 0.0185649745882186 0
44 0.0165658438170714 0.0189122127337069 0
45 0.0165459794864142 0.0186279875553889 0
46 0.0165800024153139 0.0184615582465232 0
47 0.0165525603932462 0.0185698745377681 0
48 0.0165907623846741 0.0185120261558266 0
49 0.0165508449397234 0.0184379972921025 0
50 0.0165903560287695 0.0185804266236362 0
51 0.0165476473078365 0.0185466583428899 0
52 0.0165857165226035 0.0185885491584593 0
53 0.0165481178711146 0.0184078979511364 0
54 0.0165957271151451 0.0184049089295427 0
55 0.0165507685189908 0.0184970417714545 0
56 0.0165883062781607 0.0184417327399261 0
57 0.0165548565047555 0.0183843069720872 0
58 0.0166030835702795 0.0185357707492544 0
59 0.0165500053585241 0.018271672720313 0
60 0.0165961038100348 0.018684147226538 0
61 0.0165517131350783 0.0187957920620654 0
62 0.0166133108627067 0.0182829548236024 0
63 0.0165473248751564 0.0184118543941909 0
64 0.0165983146025071 0.0184413151881155 0
65 0.0165525591719102 0.0184057733595452 0
66 0.0166064242729443 0.0182871827102461 0
67 0.0165435383848847 0.0183972310036081 0
68 0.0165950365369267 0.0185852110132782 0
69 0.0165586482293239 0.0183187237570663 0
70 0.0166092385798323 0.0184794824260633 0
71 0.0165697841956677 0.0185034061198914 0
72 0.0165967129077004 0.0181402547467266 0
73 0.0165732545344154 0.0184165518520597 0
74 0.0166026855892496 0.0183788985240326 0
75 0.0165687354170748 0.0181609569026518 0
76 0.0166129015407006 0.0186252303518572 0
77 0.0165534954131229 0.0183105499010758 0
78 0.0166168593669527 0.0181418076484435 0
79 0.0165646865140591 0.0183057028437498 0
80 0.0166018156491291 0.018502016957137 0
81 0.0165586096700045 0.0184040678908206 0
82 0.0166129247460829 0.0184980723842845 0
83 0.0165712166482126 0.0184303921584359 0
84 0.0166143243970348 0.0185389638335849 0
85 0.0165701301826831 0.0182085812003356 0
86 0.0166189659969196 0.0184602108040376 0
87 0.0165676643054824 0.0184275042081207 0
88 0.0166299271377517 0.0185323186152219 0
89 0.0165751742999882 0.0182322636497648 0
90 0.0166072596667062 0.0183371464850892 0
91 0.0165629157514673 0.0182259586523378 0
92 0.0166089130065742 0.018483065481441 0
93 0.0165693558557167 0.0182905728748417 0
94 0.0166203017894511 0.0184016187888549 0
95 0.0165698981288603 0.0183132295991711 0
96 0.0166107804291794 0.0181924879994499 0
97 0.0165637935430329 0.0184099916452902 0
98 0.0166245248200721 0.0187024550929006 0
99 0.0165754381085446 0.0183715293979111 0
100 0.0166166770389491 0.0183022039271567 0
101 0.01656780789969 0.0184077949596782 0
102 0.0166270111110302 0.0183611756142407 0
103 0.0165662229546329 0.018411879705651 0
104 0.0166136421936913 0.0183403743072167 0
105 0.0165698424708382 0.0184016243748323 0
106 0.0166173691874565 0.0184520221102946 0
107 0.0165821997730911 0.0183486391099018 0
108 0.0166164975025705 0.01861046347148 0
109 0.0165739878593907 0.0185649627180167 0
110 0.016623824645643 0.0184582639163523 0
111 0.0165631308810639 0.0186787228933602 0
112 0.0166247172677161 0.0185190477294169 0
113 0.0165669479047333 0.0186510274428554 0
114 0.0166042075482691 0.0186025957968757 0
115 0.0165806895040011 0.0183767100428249 0
116 0.0166075213815439 0.0183237705130843 0
117 0.0165708319274012 0.0183277608211268 0
118 0.0166233251192561 0.0185572685578353 0
119 0.0165772010196913 0.0184446809140601 0
120 0.016621139974838 0.0186042166031303 0
121 0.0165690780890356 0.0186733833972142 0
122 0.0166295818486425 0.0186773335560441 0
123 0.0165801878838955 0.0184308924525366 0
124 0.0166132293821539 0.0186073100126766 0
125 0.0165742146789166 0.0183468275076066 0
126 0.0166257485986531 0.0185506345114271 0
127 0.0165839324997932 0.0186062746866781 0
128 0.0166274820232614 0.0184876664066378 0
129 0.0165711257459257 0.0182968567502917 0
130 0.0166118375826471 0.0184814123812545 0
131 0.0165702390560556 0.0186338901878814 0
132 0.0166138555785223 0.0185727479994544 0
133 0.0165495885340259 0.0184737700659259 0
134 0.0166076853895089 0.0185519168423637 0
135 0.0165715106412136 0.0184109360245942 0
136 0.0165914878582042 0.0186137698464147 0
137 0.0165708420470416 0.0184927182249478 0
138 0.0166090042578143 0.0183322589294271 0
139 0.0165677817282062 0.0184634239629744 0
140 0.0166140523880802 0.0185381407747276 0
141 0.0165772907006423 0.0183129747389523 0
142 0.0166172060518744 0.018566407740545 0
143 0.0165733789362016 0.0184619363473684 0
144 0.0166208616847272 0.0185385801467623 0
145 0.0165699940909675 0.0184219012982279 0
146 0.0166094990733341 0.0184126872285087 0
147 0.0165568282643426 0.0186440826764544 0
148 0.0166152531357555 0.0184714934310123 0
149 0.0165675189665092 0.0186275679088368 0
150 0.0166057366608274 0.0184197444127049 0
151 0.0165695308557048 0.0184460824707018 0
152 0.0165973481768498 0.018243945325 0
153 0.0165636400036615 0.018415498022511 0
154 0.0166118299056785 0.0184500097619367 0
155 0.0165665354421491 0.0185133976878398 0
156 0.0165949780872796 0.0184093356420695 0
157 0.0165594520428288 0.0185570035730324 0
158 0.0166050473039449 0.0186677780434563 0
159 0.0165700478297475 0.0187476308123041 0
160 0.0166062033856213 0.0184833070749635 0
161 0.0165620390067611 0.0183987680202018 0
162 0.0165990297819202 0.0183971864903508 0
163 0.016574294763657 0.0184699862644854 0
164 0.0165960321001693 0.0186248246702486 0
165 0.016567221483977 0.0185793174579989 0
166 0.0166072507684017 0.0187341727962561 0
167 0.0165554031398131 0.0185118727160099 0
168 0.0166002793830319 0.0185141533658448 0
169 0.0165516576515327 0.0185683596905223 0
170 0.0166026362123836 0.0185158860662092 0
171 0.0165560230550254 0.0183562021741761 0
172 0.0166113124082061 0.018351702145696 0
173 0.0165672890064051 0.0183285858001638 0
174 0.016604050693843 0.0184325741808572 0
175 0.0165640243755198 0.0182299784613234 0
176 0.0166057021144688 0.0183180300484981 0
177 0.0165508046356384 0.0186951084852505 0
178 0.0165935180674385 0.0184788363728647 0
179 0.0165675029146658 0.0183958849576168 0
180 0.0165893028882626 0.0184240855899527 0
181 0.0165492090475113 0.0185323332784126 0
182 0.0165956159735774 0.0186074587393249 0
183 0.0165528561310127 0.0186410439047495 0
184 0.0166073952349921 0.0184129410413568 0
185 0.0165463099450159 0.0183934452819879 0
186 0.0166001891786512 0.0185733495393955 0
187 0.0165482056328235 0.0185109349700541 0
188 0.0165952621351168 0.0185722325184776 0
189 0.0165536456374398 0.0184577447695778 0
190 0.0165997360630289 0.0184457087339014 0
191 0.0165524916494821 0.0183168259212451 0
192 0.0165986206343906 0.0184703884548581 0
193 0.0165521507222869 0.0184217183574681 0
194 0.016599824522644 0.0185029386434078 0
195 0.0165434263709342 0.0186379566048659 0
196 0.0166010940140834 0.018342027581965 0
197 0.0165431388335659 0.0184254820843023 0
198 0.0165863373101985 0.0186074793376165 0
199 0.0165434326520903 0.0184241568111645 0
200 0.0166064767903884 0.0182465302360413 0
201 0.016561522556148 0.0184340305499022 0
202 0.0165987263671851 0.0186743681002925 0
203 0.0165499257972134 0.0184118549178763 0
204 0.0165839637310972 0.0184971573313619 0
205 0.0165457994266058 0.0183981095731159 0
206 0.0165795458101604 0.018496162154576 0
207 0.0165524665248577 0.0184611797965545 0
208 0.016595737060309 0.0186299800037023 0
209 0.0165466772181714 0.018466689839573 0
210 0.0165879578484734 0.0186946017323634 0
211 0.0165430683450362 0.0185245357776493 0
212 0.0165948067512992 0.018476103782546 0
213 0.0165396531408809 0.0182796915654308 0
214 0.0165652856665609 0.0185767679830018 0
215 0.0165523227561735 0.0183549425362727 0
216 0.0165783818770389 0.0183019200896801 0
217 0.0165503544861175 0.0185407187032971 0
218 0.016572293692008 0.0184576592342989 0
219 0.0165450638334354 0.0184396004676159 0
220 0.0165749698134617 0.0183728665412509 0
221 0.01655305398743 0.018711382183031 0
222 0.0165967214570518 0.0185027394684012 0
223 0.0165454616399886 0.0184419015411806 0
224 0.0165946692637712 0.0184852501222893 0
225 0.0165392806334286 0.0186597281263393 0
226 0.0165890797327443 0.0187948452388963 0
227 0.0165355112418597 0.0182642088071376 0
228 0.0165804930433963 0.0186078693086637 0
229 0.0165460245013662 0.0186437127800135 0
230 0.0165847202614547 0.0185804302894338 0
231 0.0165448417247764 0.0185832597615481 0
232 0.0165611542361331 0.0185230038233477 0
233 0.0165515342966058 0.0187595940557125 0
234 0.0165765880835414 0.0185726041605364 0
235 0.0165339756736686 0.018819251596084 0
236 0.0165878632821788 0.0186927800054842 0
237 0.0165440089481629 0.0187059691963698 0
238 0.0165963711081224 0.0186125063681518 0
239 0.0165516928957975 0.0187091867193515 0
240 0.0165934388550809 0.0187669087185543 0
241 0.0165544309564294 0.0187420275532877 0
242 0.0165877533619469 0.0185165169325316 0
243 0.0165399865655842 0.0184496782690904 0
244 0.0165907330726123 0.0184827699483242 0
245 0.016550628937744 0.0184833114390083 0
246 0.0166034288593887 0.0188096297500146 0
247 0.0165659505967252 0.0186457825592016 0
248 0.0166105647761531 0.0186986550572133 0
249 0.0165655829746165 0.018635516056428 0
250 0.0166172674676229 0.0185666859920442 0
251 0.0165796119367761 0.0185794000257273 0
252 0.0166424952076873 0.0185533461543306 0
253 0.0166246136286404 0.0186423201260233 0
254 0.0167334388455894 0.0186220849228963 0
255 0.0171297295465388 0.0196555486961812 0
[END] of [DATA]
[END] of [Spectrum]

@ -0,0 +1,297 @@
[Spectrum]
Version = 1
IDData = DLAB_2018-06-11_15-23-57_730_586
IDDevice = SAM_85B5
IDDataType = SPECTRUM
IDDataTypeSub1 = BACK
IDDataTypeSub2 =
IDDataTypeSub3 =
DateTime = 2018-06-11 15:17:40
PositionLatitude = 0
PositionLongitude = 0
Comment =
CommentSub1 =
CommentSub2 = immersion_factors_Lu.dat
CommentSub3 =
IDMethodType = SAM Calibration Station
MethodName = SAM_Calibration_Station
Mission =
MissionSub = 0
RecordType = 0
[Attributes]
CalFactor = 1
IDBasisSpec =
IDDataBack =
IDDataCal =
IntegrationTime = 8192
P31 = -1
P31e = 0
PathLength = +INF
RAWDynamic = 65535
Temperature = +NAN
Unit1 = $05 $00 Pixel
Unit2 = $03 $05 Intensity counts
Unit3 = $03 $05 Intensity counts
Unit4 = $f1 $00 Status
[END] of [Attributes]
[DATA]
0 12 0 0
1 0.0164817607719245 0.0184759992200316 0
2 0.0163219290778752 0.018442149942613 0
3 0.0163731972698131 0.0187318928446685 0
4 0.0164399246082603 0.0186864332877884 0
5 0.0164430241843214 0.0188479230215774 0
6 0.0163983356778795 0.0188454845678811 0
7 0.0163990512062458 0.0188404723750983 0
8 0.0163901000353671 0.0187262068433619 0
9 0.0164207307910173 0.0187526368954241 0
10 0.0164008709967505 0.018602897614217 0
11 0.0164082743860791 0.0187456469175185 0
12 0.0163908071888585 0.0186707166166917 0
13 0.0164252516531235 0.0185607140585195 0
14 0.0163975419840151 0.0187588039890341 0
15 0.0164170151382283 0.0188965777575295 0
16 0.0163836419600322 0.0187075898280626 0
17 0.0164195574361616 0.0187674584136427 0
18 0.0163940245365965 0.0186381709667486 0
19 0.0164118187028877 0.0186427120172502 0
20 0.016392199511795 0.0187927918685168 0
21 0.0164065571877907 0.0186624507666358 0
22 0.0163945228416475 0.0187624519813991 0
23 0.0164219489863484 0.0187392302005435 0
24 0.0163932453242865 0.0185522851677484 0
25 0.0164305632429927 0.0186472895511667 0
26 0.0163847816409121 0.018535703368402 0
27 0.0164318688510797 0.0186348291557698 0
28 0.0164176912348923 0.0186553691437886 0
29 0.0164202520273408 0.0187121064399131 0
30 0.0164088639423701 0.0186093935822463 0
31 0.0164306347783817 0.0187113848014579 0
32 0.0164189001829659 0.0186487433017847 0
33 0.0164341838060573 0.0187725126758178 0
34 0.0164138319878957 0.0187999361590481 0
35 0.0164304957205646 0.0187205484228188 0
36 0.016429661373662 0.0188728539369552 0
37 0.0164248637917341 0.0187682175828836 0
38 0.0164295341802509 0.0187626176405413 0
39 0.0164375396881828 0.0188624825225437 0
40 0.0164033339078497 0.0187837980957813 0
41 0.0164426914575244 0.0188658971257905 0
42 0.0164161851532397 0.0186604942780519 0
43 0.0164508810382254 0.0189255700275998 0
44 0.0164265781983975 0.0186329430155887 0
45 0.0164319475400075 0.0188553270600577 0
46 0.016422878946405 0.0187585744402754 0
47 0.0164658096015204 0.0188853157288465 0
48 0.016435585550728 0.0188095644639038 0
49 0.016451332060129 0.0189702224107457 0
50 0.0164379950720003 0.0190654765920908 0
51 0.0164365183024095 0.0188298321355244 0
52 0.0164243435026367 0.0189752702141345 0
53 0.0164365261538547 0.0190654219542494 0
54 0.0164254425304785 0.0188267308706973 0
55 0.0164527732365019 0.0190373731906741 0
56 0.0164500622197366 0.0189250398834323 0
57 0.0164541095524632 0.0189864086530676 0
58 0.0164375095037381 0.0190345625712336 0
59 0.0164747180256422 0.0188082665969675 0
60 0.0164484643634142 0.0190122781872102 0
61 0.0164537975883766 0.0188972889222771 0
62 0.0164461544682567 0.0185940174812091 0
63 0.0164698387886849 0.0187732280300485 0
64 0.0164431478882013 0.0188341576022108 0
65 0.0164654240083262 0.0188008229329601 0
66 0.0164472887403633 0.0188143481552986 0
67 0.0164750846008916 0.0188958311567378 0
68 0.016451503570586 0.0186248391588775 0
69 0.0164619681511328 0.0188025980518404 0
70 0.0164507452954629 0.0189280180821948 0
71 0.0164756266995587 0.0188994067059584 0
72 0.0164519861727467 0.0187979548826894 0
73 0.0164677262265151 0.0188527726973303 0
74 0.0164529956941139 0.0189566842708345 0
75 0.0164743584294553 0.0188313071826812 0
76 0.0164623034950781 0.0188952770976046 0
77 0.0164737165301967 0.0189118414407716 0
78 0.0164694078315855 0.0185289364804688 0
79 0.0164841373171273 0.0186616668096203 0
80 0.0164653304888909 0.0188390641851084 0
81 0.0164847460658397 0.0188772853626504 0
82 0.0164548329322745 0.0188133788136582 0
83 0.0164595881163988 0.019095000402823 0
84 0.016470273409792 0.0189106139222383 0
85 0.0164793578807614 0.0190673035558238 0
86 0.0164794932745707 0.0189999768176074 0
87 0.0164779744561293 0.0188888352437313 0
88 0.0164553809631447 0.0191460724704944 0
89 0.0164876681992408 0.0188107766209993 0
90 0.0164698851994495 0.0192259407753418 0
91 0.0164899871671793 0.0189064331672789 0
92 0.0164501525985938 0.0190127816234232 0
93 0.0164753983097437 0.0187168141969277 0
94 0.0164809215396783 0.0190825361670666 0
95 0.0164902986078362 0.0190127334443682 0
96 0.0164763052388946 0.0191085322585096 0
97 0.0164924607213486 0.0188582193744177 0
98 0.0164652690731423 0.0188903102908881 0
99 0.0164867010756773 0.0189330562846849 0
100 0.0164660367699995 0.0190078099289766 0
101 0.0164911903575265 0.0189027331554994 0
102 0.0164677717648968 0.0189810824236179 0
103 0.0165022066329511 0.0189551510946003 0
104 0.0164662370690886 0.0189044651576166 0
105 0.016489524978776 0.0187674423539577 0
106 0.0164685029961533 0.0189472727717265 0
107 0.0164921269476923 0.0189907035714401 0
108 0.0164558499561338 0.019064578646224 0
109 0.0164738716398572 0.0188920054604669 0
110 0.0164762743565437 0.0190449437611056 0
111 0.0164791764251406 0.018889919447032 0
112 0.0164705429760749 0.0187988736014097 0
113 0.0164789927013245 0.0192020416947266 0
114 0.016473611669785 0.0188233049209339 0
115 0.0164614993326202 0.0187371501222097 0
116 0.0164598238342293 0.0189721827396891 0
117 0.0164727508024456 0.0188261000043749 0
118 0.0164582863467961 0.0186942695412699 0
119 0.0164685862214717 0.0189034198815958 0
120 0.0164525792185689 0.0187198665844525 0
121 0.0164773030703324 0.0186137942850658 0
122 0.0164670838038268 0.0189533499660128 0
123 0.0164831073820027 0.0187808211189513 0
124 0.0164667688736388 0.0188594921044556 0
125 0.0164761180255473 0.0188539249797306 0
126 0.0164464892887724 0.0188040633235368 0
127 0.0164720077067831 0.0187732121449252 0
128 0.0164452072350208 0.018962250173627 0
129 0.0164870899839261 0.0190127418233343 0
130 0.016459772189168 0.0191750319229475 0
131 0.0164701266750064 0.0189599365316131 0
132 0.0164611727125027 0.0190203120446422 0
133 0.0164680781457335 0.0190216017071741 0
134 0.0164568425532749 0.0186128352425711 0
135 0.0164788192716254 0.019228758377254 0
136 0.0164516724638946 0.0189206767113985 0
137 0.016478949431138 0.0188962342199195 0
138 0.0164561298165336 0.0191006190232771 0
139 0.0164755542917869 0.0190500058785614 0
140 0.0164556124935377 0.0187485043195198 0
141 0.0164507196474088 0.0190170367417068 0
142 0.0164471687004911 0.0188547895842948 0
143 0.0164601098013086 0.0188974739577785 0
144 0.0164608579567913 0.0189445812034293 0
145 0.0164729301643477 0.0189157249169963 0
146 0.0164409632672129 0.0191215468876016 0
147 0.0164714560119053 0.0187773754437052 0
148 0.016453806137728 0.0190317306552542 0
149 0.016458409701723 0.0190325910703354 0
150 0.016446300156183 0.0190408668704134 0
151 0.0164759950195736 0.0189401984804746 0
152 0.0164447300416335 0.0190495591749313 0
153 0.0164623949207948 0.0187950388279255 0
154 0.0164359400870948 0.0189297027780659 0
155 0.0164562215912033 0.0189593482583683 0
156 0.0164493753055259 0.0190509148218212 0
157 0.0164598233107996 0.0188672314761416 0
158 0.0164437951962332 0.0189148159737365 0
159 0.0164648208428636 0.0191385526975449 0
160 0.0164373709693507 0.0190494453606418 0
161 0.0164554146371204 0.0190579196374793 0
162 0.0164451486108972 0.019121285044911 0
163 0.0164645650602289 0.019044043895059 0
164 0.0164504392635794 0.0186976181601587 0
165 0.0164504671798287 0.0189873739797868 0
166 0.0164356687760464 0.0191378319318987 0
167 0.0164534369453303 0.0190663267080262 0
168 0.0164388145883954 0.0190936695437077 0
169 0.0164527186253391 0.0191095358142617 0
170 0.0164332435518838 0.0189574708462769 0
171 0.0164442846029797 0.0187806189763942 0
172 0.0164340580084587 0.0189485074472935 0
173 0.0164485673045837 0.0187745148995917 0
174 0.0164290273258486 0.018830215822347 0
175 0.016450102349345 0.0188787988134019 0
176 0.0164311430285965 0.0189920377472294 0
177 0.0164412099770665 0.0188564391932454 0
178 0.0164335047432918 0.0190900863137682 0
179 0.0164442961184326 0.0189570108759505 0
180 0.0164228450979527 0.0190537807773504 0
181 0.016437492579512 0.0188639551258354 0
182 0.0164196870722445 0.0189272838752905 0
183 0.016438840061973 0.0189407244351591 0
184 0.0164283787964808 0.0191445909645512 0
185 0.0164416083070495 0.0190009035661702 0
186 0.016412027202375 0.0190382999392369 0
187 0.016431280341648 0.0191088417565699 0
188 0.0164384511537241 0.0189974830278224 0
189 0.0164345854510949 0.0189503359820826 0
190 0.0164129589071972 0.0189001894410414 0
191 0.0164313105260926 0.0186533777428459 0
192 0.0164068407121982 0.0188463448084005 0
193 0.0164422922551586 0.0188216286040289 0
194 0.0164141230147952 0.0190486301570651 0
195 0.0164350718917399 0.0189039538661228 0
196 0.0163981727167739 0.018976088908947 0
197 0.0164302013786105 0.0186541344682217 0
198 0.0164117635682952 0.0187053388537327 0
199 0.0164348827591505 0.0188468777455567 0
200 0.0164084963202615 0.0189798348304782 0
201 0.0164184283983518 0.0190289182901957 0
202 0.0164093013551022 0.0189938748355464 0
203 0.0164248964188505 0.0188985777120001 0
204 0.0163861197016389 0.0189140892729893 0
205 0.0164414938504271 0.0189945299659582 0
206 0.0163912936295035 0.0190288961208479 0
207 0.0164153211453222 0.0188169428418004 0
208 0.0164085420331198 0.0190174979339657 0
209 0.0164144138672182 0.0187582286333621 0
210 0.0163877472189763 0.0188360660863014 0
211 0.016438808830669 0.0188666440757058 0
212 0.0163928122734684 0.018693495185153 0
213 0.016421485227656 0.0187786836097873 0
214 0.0164041312657219 0.0186433495169208 0
215 0.0164178255818423 0.0188323175463432 0
216 0.0163971898903201 0.018976409578962 0
217 0.0164201696744052 0.0187435457172076 0
218 0.0163995320636409 0.018987845122068 0
219 0.0164209146893099 0.0186761889543627 0
220 0.0164032430055628 0.0190061624147675 0
221 0.0164164507065617 0.0187835201934057 0
222 0.0163974777766416 0.0188749633416704 0
223 0.0164176661102679 0.0189686084124011 0
224 0.0163930417101427 0.0188226435062976 0
225 0.0164141233637484 0.0187423426373254 0
226 0.01640118889304 0.018996327428748 0
227 0.0164288055661428 0.0186609085131884 0
228 0.0164032700494293 0.0187348848338127 0
229 0.0164078024269885 0.0187956862776184 0
230 0.0163929630212149 0.0190963977699816 0
231 0.0164272534226787 0.0185138758125928 0
232 0.0163858681064416 0.0187250730645117 0
233 0.0164185958958479 0.0188906307863414 0
234 0.0164030676566215 0.0188630606712045 0
235 0.0164018004333774 0.0188464739841278 0
236 0.0163995488133905 0.0189781192371696 0
237 0.0164085041717066 0.0187965507076208 0
238 0.0163987202242144 0.0186990834318551 0
239 0.0164206611748704 0.0186847039040981 0
240 0.0164022528510935 0.0187928330651002 0
241 0.0164241117977671 0.0187593187717638 0
242 0.016396216660077 0.0188783466983562 0
243 0.0164233505565425 0.0187352552539389 0
244 0.0164139434784166 0.0188740873905896 0
245 0.0164194745597963 0.0187454707846687 0
246 0.0163983088084895 0.0189869951806945 0
247 0.016435900480916 0.0189396802065091 0
248 0.0164233186273323 0.0187842685398153 0
249 0.0164390513530853 0.0186674191444085 0
250 0.0164271529241811 0.0189300391586424 0
251 0.0164633723384753 0.0190247289817084 0
252 0.016452145295368 0.01897844723878 0
253 0.0165066871909724 0.0188266460336656 0
254 0.0165379624630295 0.019144633383067 0
255 0.0170330815720343 0.0204797029287844 0
[END] of [DATA]
[END] of [Spectrum]

@ -0,0 +1,297 @@
[Spectrum]
Version = 1
IDData = AquaDLAB_2016-12-07_12-02-43_591_545
IDDevice = SAM_852F
IDDataType = SPECTRUM
IDDataTypeSub1 = CAL
IDDataTypeSub2 = Aqua
IDDataTypeSub3 =
DateTime = 2016-12-07 12:01:43
PositionLatitude = 0
PositionLongitude = 0
Comment =
CommentSub1 =
CommentSub2 =
CommentSub3 =
IDMethodType =
MethodName =
Mission = No Mission
MissionSub = 1
RecordType = 0
[Attributes]
CalFactor = 1
IDBasisSpec =
IDDataBack = DLAB_2016-11-29_14-47-59_729_812
IDDataCal =
IntegrationTime = 256
P31 = -1
P31e = 0
PathLength = +INF
RAWDynamic = 65535
Temperature = +NAN
Unit1 = $05 $00 Pixel
Unit2 = $04 $09 1/Intensity (m^2 nm)/mW
Unit3 = $04 $09 1/Intensity (m^2 nm)/mW
Unit4 = $f1 $00 Status
[END] of [Attributes]
[DATA]
0 7 0 0
1 +NAN 0 0
2 +NAN 0 0
3 +NAN 0 0
4 +NAN 0 0
5 0.0757791569140749 0 0
6 0.0831133762408903 0 0
7 0.0873256015093429 0 0
8 0.088798490578607 0 0
9 0.0893180250587088 0 0
10 0.0912184306930603 0 0
11 0.0934315009445713 0 0
12 0.0978927038642625 0 0
13 0.10316713605413 0 0
14 0.111042352696646 0 0
15 0.119482024262908 0 0
16 0.129446496806651 0 0
17 0.140324929207819 0 0
18 0.149929004563169 0 0
19 0.157951375798488 0 0
20 0.163167079267684 0 0
21 0.163684554455683 0 0
22 0.161710955408623 0 0
23 0.158158176144384 0 0
24 0.153120816765498 0 0
25 0.149159625705894 0 0
26 0.146361065436421 0 0
27 0.144318454214309 0 0
28 0.144129633718655 0 0
29 0.144738939517372 0 0
30 0.146583353055999 0 0
31 0.149927549178646 0 0
32 0.154781330782628 0 0
33 0.161281049713208 0 0
34 0.169324782015295 0 0
35 0.178566729488516 0 0
36 0.188750791302883 0 0
37 0.199826540979236 0 0
38 0.211193704798505 0 0
39 0.222305048038871 0 0
40 0.232787040612667 0 0
41 0.242185638548782 0 0
42 0.249199329450493 0 0
43 0.253905646769863 0 0
44 0.255480704613068 0 0
45 0.254086308176615 0 0
46 0.250712203525897 0 0
47 0.245637528877396 0 0
48 0.239859851966525 0 0
49 0.233843628655063 0 0
50 0.228059104546805 0 0
51 0.222661940533832 0 0
52 0.218199567518201 0 0
53 0.214240155949967 0 0
54 0.21061280671042 0 0
55 0.206823867975479 0 0
56 0.202504211638902 0 0
57 0.198378089686984 0 0
58 0.195008429198418 0 0
59 0.192596053511712 0 0
60 0.1913409806608 0 0
61 0.191204589224151 0 0
62 0.191982450755957 0 0
63 0.193875999271111 0 0
64 0.196568015329539 0 0
65 0.200197325412529 0 0
66 0.204781342874412 0 0
67 0.210052890237844 0 0
68 0.215505542064364 0 0
69 0.22102191587617 0 0
70 0.225647984382987 0 0
71 0.229501509141454 0 0
72 0.232213608637945 0 0
73 0.233859853462842 0 0
74 0.234864695710533 0 0
75 0.235347731196379 0 0
76 0.235169523165461 0 0
77 0.2348286160222 0 0
78 0.23395735104209 0 0
79 0.232593294508701 0 0
80 0.230910869907075 0 0
81 0.228844605598996 0 0
82 0.226021135136259 0 0
83 0.222713212172475 0 0
84 0.218813740820075 0 0
85 0.214437631947854 0 0
86 0.20945948892298 0 0
87 0.203847193841702 0 0
88 0.197707092492944 0 0
89 0.191556734852924 0 0
90 0.18600061167507 0 0
91 0.181873354953207 0 0
92 0.178782316057322 0 0
93 0.176167924779435 0 0
94 0.174141863608666 0 0
95 0.172744990342331 0 0
96 0.171801376758966 0 0
97 0.170954015345458 0 0
98 0.169960140045412 0 0
99 0.168049955384139 0 0
100 0.165224777136175 0 0
101 0.161531979240228 0 0
102 0.157405412608478 0 0
103 0.153570487964493 0 0
104 0.150141271545146 0 0
105 0.14725256652001 0 0
106 0.144660342475923 0 0
107 0.142269456600007 0 0
108 0.139762314536934 0 0
109 0.136963054606891 0 0
110 0.133984343960448 0 0
111 0.131197679174342 0 0
112 0.129003116254732 0 0
113 0.127069994503092 0 0
114 0.125436648144931 0 0
115 0.12397269238396 0 0
116 0.122419985358787 0 0
117 0.120693422850158 0 0
118 0.118931546980571 0 0
119 0.117166660339047 0 0
120 0.115631793601506 0 0
121 0.114393230429202 0 0
122 0.113425752529033 0 0
123 0.112707849783804 0 0
124 0.112359222280159 0 0
125 0.11219082672674 0 0
126 0.112343608199868 0 0
127 0.112664705152637 0 0
128 0.112877954686814 0 0
129 0.112998494144185 0 0
130 0.112887922565457 0 0
131 0.11253063359053 0 0
132 0.111841159102354 0 0
133 0.110997003525569 0 0
134 0.109948198155768 0 0
135 0.108874849717231 0 0
136 0.107795318097265 0 0
137 0.106637360724801 0 0
138 0.105678694194695 0 0
139 0.104756017092462 0 0
140 0.103825430274706 0 0
141 0.102939456306441 0 0
142 0.102001186921616 0 0
143 0.100737446991222 0 0
144 0.0991453606719906 0 0
145 0.0971498679860747 0 0
146 0.0948117209915638 0 0
147 0.0924075366042346 0 0
148 0.0899484551808979 0 0
149 0.0873520434504222 0 0
150 0.0848497958878303 0 0
151 0.0823900490277647 0 0
152 0.0799786063537234 0 0
153 0.0776610830064481 0 0
154 0.0752837851752474 0 0
155 0.0729604964467151 0 0
156 0.0707262742573907 0 0
157 0.0684046065784823 0 0
158 0.0660274200992436 0 0
159 0.0636252573638505 0 0
160 0.0612270512870042 0 0
161 0.0587905905539405 0 0
162 0.0563195707029216 0 0
163 0.0538582650571118 0 0
164 0.0514203967394221 0 0
165 0.0490721477077881 0 0
166 0.0468328465329872 0 0
167 0.044723244642693 0 0
168 0.0427398639178554 0 0
169 0.0408841538190041 0 0
170 0.0391762093418711 0 0
171 0.0375882143782858 0 0
172 0.0361234008364646 0 0
173 0.0347811387811729 0 0
174 0.0335210387242261 0 0
175 0.0323747022105674 0 0
176 0.0312594345687719 0 0
177 0.030174948252246 0 0
178 0.0291339080526091 0 0
179 0.0281312995576928 0 0
180 0.027138393963344 0 0
181 0.0260756668210364 0 0
182 0.0250906058668046 0 0
183 0.0240551778532538 0 0
184 0.0230712653382013 0 0
185 0.0221310389230639 0 0
186 0.0211757703478467 0 0
187 0.0202209094313405 0 0
188 0.0192572613107586 0 0
189 0.0182920464007378 0 0
190 0.0172950661682144 0 0
191 0.0163207919630062 0 0
192 0.0153269728531649 0 0
193 0.0143853788804443 0 0
194 0.0135213976548868 0 0
195 0.0127456574145877 0 0
196 0.0120278700767597 0 0
197 +NAN 0 0
198 +NAN 0 0
199 +NAN 0 0
200 +NAN 0 0
201 +NAN 0 0
202 +NAN 0 0
203 +NAN 0 0
204 +NAN 0 0
205 +NAN 0 0
206 +NAN 0 0
207 +NAN 0 0
208 +NAN 0 0
209 +NAN 0 0
210 +NAN 0 0
211 +NAN 0 0
212 +NAN 0 0
213 +NAN 0 0
214 +NAN 0 0
215 +NAN 0 0
216 +NAN 0 0
217 +NAN 0 0
218 +NAN 0 0
219 +NAN 0 0
220 +NAN 0 0
221 +NAN 0 0
222 +NAN 0 0
223 +NAN 0 0
224 +NAN 0 0
225 +NAN 0 0
226 +NAN 0 0
227 +NAN 0 0
228 +NAN 0 0
229 +NAN 0 0
230 +NAN 0 0
231 +NAN 0 0
232 +NAN 0 0
233 +NAN 0 0
234 +NAN 0 0
235 +NAN 0 0
236 +NAN 0 0
237 +NAN 0 0
238 +NAN 0 0
239 +NAN 0 0
240 +NAN 0 0
241 +NAN 0 0
242 +NAN 0 0
243 +NAN 0 0
244 +NAN 0 0
245 +NAN 0 0
246 +NAN 0 0
247 +NAN 0 0
248 +NAN 0 0
249 +NAN 0 0
250 +NAN 0 0
251 +NAN 0 0
252 +NAN 0 0
253 +NAN 0 0
254 +NAN 0 0
255 +NAN 0 0
[END] of [DATA]
[END] of [Spectrum]

@ -0,0 +1,297 @@
[Spectrum]
Version = 1
IDData = DLAB_2018-05-24_13-29-21_895_177
IDDevice = SAM_859F
IDDataType = SPECTRUM
IDDataTypeSub1 = CAL
IDDataTypeSub2 = Aqua
IDDataTypeSub3 =
DateTime = 2018-05-24 13:29:21
PositionLatitude = 0
PositionLongitude = 0
Comment =
CommentSub1 =
CommentSub2 =
CommentSub3 =
IDMethodType =
MethodName =
Mission = No Mission
MissionSub = 1
RecordType = 0
[Attributes]
CalFactor = 1
IDBasisSpec =
IDDataBack = DLAB_2018-05-04_11-56-28_529_586
IDDataCal =
IntegrationTime = 64
P31 = -1
P31e = 0
PathLength = +INF
RAWDynamic = 65535
Temperature = +NAN
Unit1 = $05 $00 Pixel
Unit2 = $04 $04 1/Intensity (m^2 nm Sr)/mW
Unit3 = $04 $04 1/Intensity (m^2 nm Sr)/mW
Unit4 = $f1 $00 Status
[END] of [Attributes]
[DATA]
0 5 0 0
1 +NAN 0 0
2 +NAN 0 0
3 +NAN 0 0
4 +NAN 0 0
5 0.308009257704273 0 0
6 0.348985396550329 0 0
7 0.39611199753429 0 0
8 0.43986968240828 0 0
9 0.477232425339663 0 0
10 0.536318311921194 0 0
11 0.599255756896796 0 0
12 0.660195405447511 0 0
13 0.721940911560072 0 0
14 0.778381764258939 0 0
15 0.806518994572799 0 0
16 0.812862184246214 0 0
17 0.800779958731845 0 0
18 0.768238986615194 0 0
19 0.729324871828135 0 0
20 0.701235591002145 0 0
21 0.674572715683613 0 0
22 0.663056816542841 0 0
23 0.662699926877705 0 0
24 0.669382520005193 0 0
25 0.684772623825422 0 0
26 0.710275115045633 0 0
27 0.74145572495904 0 0
28 0.783988164111933 0 0
29 0.834525694448954 0 0
30 0.886966821712609 0 0
31 0.949247521262016 0 0
32 1.01565043430167 0 0
33 1.07897249264832 0 0
34 1.14377888540009 0 0
35 1.19997013476615 0 0
36 1.24429313837597 0 0
37 1.2763795229717 0 0
38 1.29391228294411 0 0
39 1.29587029284695 0 0
40 1.29012478792631 0 0
41 1.27276079346714 0 0
42 1.2450982196578 0 0
43 1.21375364521069 0 0
44 1.17906121512383 0 0
45 1.14422362714978 0 0
46 1.11315509839511 0 0
47 1.08731507394343 0 0
48 1.06746197368796 0 0
49 1.05494171300318 0 0
50 1.04869254224893 0 0
51 1.04747349722362 0 0
52 1.04822757370139 0 0
53 1.04856210675178 0 0
54 1.04679141002185 0 0
55 1.04513065036628 0 0
56 1.04725995618916 0 0
57 1.0535067386541 0 0
58 1.06471361999517 0 0
59 1.08034380002613 0 0
60 1.10113009018595 0 0
61 1.12455239246124 0 0
62 1.15132895471663 0 0
63 1.1795169782144 0 0
64 1.20798673857183 0 0
65 1.23708055274173 0 0
66 1.26532262623006 0 0
67 1.29064822236823 0 0
68 1.31210337451311 0 0
69 1.32736540301797 0 0
70 1.33430139824988 0 0
71 1.33335932325033 0 0
72 1.32335113190924 0 0
73 1.30558590461423 0 0
74 1.28227321775146 0 0
75 1.25498704776805 0 0
76 1.22525023251367 0 0
77 1.19392661641762 0 0
78 1.16317225749886 0 0
79 1.13207700011805 0 0
80 1.10111674556499 0 0
81 1.07075040366943 0 0
82 1.03893893539784 0 0
83 1.0081446443131 0 0
84 0.97774721715577 0 0
85 0.947774052897518 0 0
86 0.919152947182789 0 0
87 0.894963764571428 0 0
88 0.87836395884067 0 0
89 0.867156996532193 0 0
90 0.858153034494107 0 0
91 0.851906778357719 0 0
92 0.847981268808314 0 0
93 0.844919850173329 0 0
94 0.841944554421527 0 0
95 0.83721825473176 0 0
96 0.828398944802337 0 0
97 0.815351600734525 0 0
98 0.799543228463232 0 0
99 0.782489183888857 0 0
100 0.765962841341892 0 0
101 0.751320667184625 0 0
102 0.737812095757199 0 0
103 0.725090001717255 0 0
104 0.712873061263532 0 0
105 0.698758948036327 0 0
106 0.683766639638848 0 0
107 0.672493396285743 0 0
108 0.664610527729123 0 0
109 0.658092136872804 0 0
110 0.652228157780532 0 0
111 0.645754399378545 0 0
112 0.639368207275896 0 0
113 0.633138158063289 0 0
114 0.628392493836991 0 0
115 0.626088937445665 0 0
116 0.625599854321674 0 0
117 0.627001238574581 0 0
118 0.630202545823175 0 0
119 0.632703647598273 0 0
120 0.633210363154327 0 0
121 0.63123164301687 0 0
122 0.626485370072314 0 0
123 0.618891745640103 0 0
124 0.609361448964366 0 0
125 0.598872648152344 0 0
126 0.58927447780469 0 0
127 0.580815044730471 0 0
128 0.573341941514821 0 0
129 0.567484926926375 0 0
130 0.562800136636572 0 0
131 0.558223116403165 0 0
132 0.553158922485434 0 0
133 0.547084299354418 0 0
134 0.539847820827437 0 0
135 0.531432360197925 0 0
136 0.521203701656628 0 0
137 0.509855867118928 0 0
138 0.498554054755033 0 0
139 0.487573187562371 0 0
140 0.476425489189536 0 0
141 0.466415695619565 0 0
142 0.456641365086098 0 0
143 0.446540473657011 0 0
144 0.436135290849149 0 0
145 0.424928637592468 0 0
146 0.412541586513936 0 0
147 0.399056656796071 0 0
148 0.384717912438278 0 0
149 0.369579305401316 0 0
150 0.353784632326527 0 0
151 0.337380068381195 0 0
152 0.321095903578543 0 0
153 0.305495669126019 0 0
154 0.290421643260465 0 0
155 0.276140762920409 0 0
156 0.262854333224098 0 0
157 0.250936131068681 0 0
158 0.240006392992584 0 0
159 0.229965608856624 0 0
160 0.220954309792884 0 0
161 0.212487857424938 0 0
162 0.204661532835082 0 0
163 0.197216204057537 0 0
164 0.189605277840326 0 0
165 0.182475141050851 0 0
166 0.175121099828465 0 0
167 0.167843462384963 0 0
168 0.160673785509465 0 0
169 0.153434661065448 0 0
170 0.146286002352245 0 0
171 0.139523451810534 0 0
172 0.133107862589632 0 0
173 0.126994143420237 0 0
174 0.121367561058691 0 0
175 0.116037239577153 0 0
176 0.111252442566666 0 0
177 0.106669531239736 0 0
178 0.102319284531729 0 0
179 0.098450973344807 0 0
180 0.0947593486764351 0 0
181 0.0911919684356708 0 0
182 0.0879361030612687 0 0
183 0.0844573547823388 0 0
184 0.0813058869947144 0 0
185 0.0782782092672921 0 0
186 0.0751117681314502 0 0
187 0.0722888539254525 0 0
188 0.0693076153913147 0 0
189 0.0660732713239472 0 0
190 0.0627758734115707 0 0
191 0.0592551057473219 0 0
192 0.0560010918166818 0 0
193 0.0532135140872552 0 0
194 0.0505779890461858 0 0
195 0.0480767985810033 0 0
196 +NAN 0 0
197 +NAN 0 0
198 +NAN 0 0
199 +NAN 0 0
200 +NAN 0 0
201 +NAN 0 0
202 +NAN 0 0
203 +NAN 0 0
204 +NAN 0 0
205 +NAN 0 0
206 +NAN 0 0
207 +NAN 0 0
208 +NAN 0 0
209 +NAN 0 0
210 +NAN 0 0
211 +NAN 0 0
212 +NAN 0 0
213 +NAN 0 0
214 +NAN 0 0
215 +NAN 0 0
216 +NAN 0 0
217 +NAN 0 0
218 +NAN 0 0
219 +NAN 0 0
220 +NAN 0 0
221 +NAN 0 0
222 +NAN 0 0
223 +NAN 0 0
224 +NAN 0 0
225 +NAN 0 0
226 +NAN 0 0
227 +NAN 0 0
228 +NAN 0 0
229 +NAN 0 0
230 +NAN 0 0
231 +NAN 0 0
232 +NAN 0 0
233 +NAN 0 0
234 +NAN 0 0
235 +NAN 0 0
236 +NAN 0 0
237 +NAN 0 0
238 +NAN 0 0
239 +NAN 0 0
240 +NAN 0 0
241 +NAN 0 0
242 +NAN 0 0
243 +NAN 0 0
244 +NAN 0 0
245 +NAN 0 0
246 +NAN 0 0
247 +NAN 0 0
248 +NAN 0 0
249 +NAN 0 0
250 +NAN 0 0
251 +NAN 0 0
252 +NAN 0 0
253 +NAN 0 0
254 +NAN 0 0
255 +NAN 0 0
[END] of [DATA]
[END] of [Spectrum]

@ -0,0 +1,297 @@
[Spectrum]
Version = 1
IDData = DLAB_2018-06-13_11-58-21_312_112
IDDevice = SAM_85B5
IDDataType = SPECTRUM
IDDataTypeSub1 = CAL
IDDataTypeSub2 = Aqua
IDDataTypeSub3 =
DateTime = 2018-06-13 11:58:21
PositionLatitude = 0
PositionLongitude = 0
Comment =
CommentSub1 =
CommentSub2 =
CommentSub3 =
IDMethodType =
MethodName =
Mission = No Mission
MissionSub = 1
RecordType = 0
[Attributes]
CalFactor = 1
IDBasisSpec =
IDDataBack = DLAB_2018-06-11_15-23-57_730_586
IDDataCal =
IntegrationTime = 64
P31 = -1
P31e = 0
PathLength = +INF
RAWDynamic = 65535
Temperature = +NAN
Unit1 = $05 $00 Pixel
Unit2 = $04 $04 1/Intensity (m^2 nm Sr)/mW
Unit3 = $04 $04 1/Intensity (m^2 nm Sr)/mW
Unit4 = $f1 $00 Status
[END] of [Attributes]
[DATA]
0 5 0 0
1 +NAN 0 0
2 +NAN 0 0
3 +NAN 0 0
4 0.213368170535889 0 0
5 0.269708461889978 0 0
6 0.323681305990691 0 0
7 0.361686162925288 0 0
8 0.399727885563257 0 0
9 0.426595980991839 0 0
10 0.455395402116462 0 0
11 0.489873358069589 0 0
12 0.521706723967902 0 0
13 0.569424753191682 0 0
14 0.613678281579101 0 0
15 0.668568867138568 0 0
16 0.729648774358889 0 0
17 0.791588424733509 0 0
18 0.846278067578305 0 0
19 0.889326585618736 0 0
20 0.912464300651466 0 0
21 0.912041091772509 0 0
22 0.896201537846271 0 0
23 0.875528861051999 0 0
24 0.850358796139941 0 0
25 0.830813460904554 0 0
26 0.816907084374381 0 0
27 0.809230927534884 0 0
28 0.809079793968319 0 0
29 0.815347896421343 0 0
30 0.825892411944005 0 0
31 0.84503183706585 0 0
32 0.873670658313288 0 0
33 0.907826486501149 0 0
34 0.950360287322641 0 0
35 1.00114116281862 0 0
36 1.05504053595122 0 0
37 1.11205216981838 0 0
38 1.17221784963607 0 0
39 1.22975299376536 0 0
40 1.2826684244193 0 0
41 1.32878263374036 0 0
42 1.35908629098684 0 0
43 1.37850707003827 0 0
44 1.38104038663283 0 0
45 1.36883708486346 0 0
46 1.34742818899357 0 0
47 1.31902470629713 0 0
48 1.28498732451399 0 0
49 1.25220172471482 0 0
50 1.22068349763187 0 0
51 1.1925789464318 0 0
52 1.16935370804616 0 0
53 1.14646179324841 0 0
54 1.12109994325093 0 0
55 1.09422415317439 0 0
56 1.06828767805555 0 0
57 1.04445396328421 0 0
58 1.02753751191562 0 0
59 1.01678817181089 0 0
60 1.01144651696064 0 0
61 1.01173798764201 0 0
62 1.0164772818471 0 0
63 1.02628160092791 0 0
64 1.04098599390468 0 0
65 1.05940120890642 0 0
66 1.08286747681355 0 0
67 1.10823034660724 0 0
68 1.13310605067389 0 0
69 1.1547273364889 0 0
70 1.17166412724341 0 0
71 1.183983471337 0 0
72 1.19136561427902 0 0
73 1.19606418873222 0 0
74 1.19672161290192 0 0
75 1.19671286046196 0 0
76 1.19421014531398 0 0
77 1.18916801665381 0 0
78 1.18305692745573 0 0
79 1.17490571141989 0 0
80 1.16334076115534 0 0
81 1.14948755782896 0 0
82 1.13252619591223 0 0
83 1.11230773028189 0 0
84 1.09067725991727 0 0
85 1.06664792919033 0 0
86 1.03995448729021 0 0
87 1.01197155529512 0 0
88 0.982502268789757 0 0
89 0.950934147643801 0 0
90 0.921876981717461 0 0
91 0.899503833526815 0 0
92 0.884246887000271 0 0
93 0.871798641947689 0 0
94 0.860748919530635 0 0
95 0.851106201938694 0 0
96 0.841814387319495 0 0
97 0.830400473286421 0 0
98 0.814782119978127 0 0
99 0.796371468702983 0 0
100 0.774800085650998 0 0
101 0.751694156127581 0 0
102 0.729723545880894 0 0
103 0.70902256138046 0 0
104 0.69215621992056 0 0
105 0.678393548274155 0 0
106 0.667293944696908 0 0
107 0.65649797079901 0 0
108 0.6446860376968 0 0
109 0.629464240966416 0 0
110 0.615183928901848 0 0
111 0.602591773736883 0 0
112 0.590820336228123 0 0
113 0.580150915843665 0 0
114 0.571621329022329 0 0
115 0.563766808252911 0 0
116 0.556883367165026 0 0
117 0.549917569359012 0 0
118 0.542933812612894 0 0
119 0.535932724580549 0 0
120 0.528043359268253 0 0
121 0.520231538772767 0 0
122 0.513331529426342 0 0
123 0.507286194391832 0 0
124 0.502222099629004 0 0
125 0.498298138845332 0 0
126 0.496514280280116 0 0
127 0.495442722847893 0 0
128 0.494658216836534 0 0
129 0.494062920786886 0 0
130 0.492582820232232 0 0
131 0.490091285479962 0 0
132 0.485745623273317 0 0
133 0.480328740541132 0 0
134 0.473945880321646 0 0
135 0.466683779528739 0 0
136 0.458932848241851 0 0
137 0.451064706693729 0 0
138 0.443865689279125 0 0
139 0.437073402888952 0 0
140 0.430871678484112 0 0
141 0.424656716266769 0 0
142 0.418021794802865 0 0
143 0.410821018781503 0 0
144 0.402243888142941 0 0
145 0.392571430814996 0 0
146 0.381881477324506 0 0
147 0.36994612437875 0 0
148 0.35763078427341 0 0
149 0.344551257226534 0 0
150 0.332004497779552 0 0
151 0.319784344441634 0 0
152 0.307705241065949 0 0
153 0.296024637721301 0 0
154 0.285201831804588 0 0
155 0.27477331903475 0 0
156 0.2649271655017 0 0
157 0.255311286750044 0 0
158 0.245955888598912 0 0
159 0.237139128199368 0 0
160 0.228125758026999 0 0
161 0.218973368669899 0 0
162 0.210024147431339 0 0
163 0.201001563461602 0 0
164 0.192143502318544 0 0
165 0.183367668918973 0 0
166 0.17479218252589 0 0
167 0.166354193257315 0 0
168 0.158270839921817 0 0
169 0.15057933833141 0 0
170 0.14334907901495 0 0
171 0.136492914420144 0 0
172 0.130248971747009 0 0
173 0.124351585245978 0 0
174 0.119145124817533 0 0
175 0.114204124468303 0 0
176 0.10955932586493 0 0
177 0.105201972954921 0 0
178 0.100976345428583 0 0
179 0.0970301944120184 0 0
180 0.0930794320815323 0 0
181 0.0893096045786908 0 0
182 0.0855242301014967 0 0
183 0.0818515687486457 0 0
184 0.0783728272346642 0 0
185 0.0747373637294556 0 0
186 0.0714485344156491 0 0
187 0.0680790457826121 0 0
188 0.0647379875159452 0 0
189 0.0614749247480892 0 0
190 0.0581599202112611 0 0
191 0.0547153945113677 0 0
192 0.0515011739034831 0 0
193 0.0485390098580295 0 0
194 0.045947792932824 0 0
195 0.0435560478479539 0 0
196 0.0413612446534424 0 0
197 +NAN 0 0
198 +NAN 0 0
199 +NAN 0 0
200 +NAN 0 0
201 +NAN 0 0
202 +NAN 0 0
203 +NAN 0 0
204 +NAN 0 0
205 +NAN 0 0
206 +NAN 0 0
207 +NAN 0 0
208 +NAN 0 0
209 +NAN 0 0
210 +NAN 0 0
211 +NAN 0 0
212 +NAN 0 0
213 +NAN 0 0
214 +NAN 0 0
215 +NAN 0 0
216 +NAN 0 0
217 +NAN 0 0
218 +NAN 0 0
219 +NAN 0 0
220 +NAN 0 0
221 +NAN 0 0
222 +NAN 0 0
223 +NAN 0 0
224 +NAN 0 0
225 +NAN 0 0
226 +NAN 0 0
227 +NAN 0 0
228 +NAN 0 0
229 +NAN 0 0
230 +NAN 0 0
231 +NAN 0 0
232 +NAN 0 0
233 +NAN 0 0
234 +NAN 0 0
235 +NAN 0 0
236 +NAN 0 0
237 +NAN 0 0
238 +NAN 0 0
239 +NAN 0 0
240 +NAN 0 0
241 +NAN 0 0
242 +NAN 0 0
243 +NAN 0 0
244 +NAN 0 0
245 +NAN 0 0
246 +NAN 0 0
247 +NAN 0 0
248 +NAN 0 0
249 +NAN 0 0
250 +NAN 0 0
251 +NAN 0 0
252 +NAN 0 0
253 +NAN 0 0
254 +NAN 0 0
255 +NAN 0 0
[END] of [DATA]
[END] of [Spectrum]

@ -0,0 +1,297 @@
[Spectrum]
Version = 1
IDData = AirDLAB_2016-12-07_12-00-24_364_510
IDDevice = SAM_852F
IDDataType = SPECTRUM
IDDataTypeSub1 = CAL
IDDataTypeSub2 = Air
IDDataTypeSub3 =
DateTime = 2016-12-07 11:59:26
PositionLatitude = 0
PositionLongitude = 0
Comment =
CommentSub1 =
CommentSub2 =
CommentSub3 =
IDMethodType =
MethodName =
Mission = No Mission
MissionSub = 1
RecordType = 0
[Attributes]
CalFactor = 1
IDBasisSpec =
IDDataBack = DLAB_2016-11-29_14-47-59_729_812
IDDataCal =
IntegrationTime = 128
P31 = -1
P31e = 0
PathLength = +INF
RAWDynamic = 65535
Temperature = +NAN
Unit1 = $05 $00 Pixel
Unit2 = $04 $09 1/Intensity (m^2 nm)/mW
Unit3 = $04 $09 1/Intensity (m^2 nm)/mW
Unit4 = $f1 $00 Status
[END] of [Attributes]
[DATA]
0 6 0 0
1 +NAN 0 0
2 +NAN 0 0
3 +NAN 0 0
4 +NAN 0 0
5 0.099081925071204 0 0
6 0.107353085872454 0 0
7 0.113070264290883 0 0
8 0.114376499819276 0 0
9 0.116544285861757 0 0
10 0.1185169696214 0 0
11 0.121561138979849 0 0
12 0.126964155564462 0 0
13 0.134364254054539 0 0
14 0.144053858633949 0 0
15 0.154882735476408 0 0
16 0.16719673162462 0 0
17 0.181437615712041 0 0
18 0.194237970806716 0 0
19 0.20386154720656 0 0
20 0.211556336359081 0 0
21 0.211417859085921 0 0
22 0.208790218500257 0 0
23 0.20437467341685 0 0
24 0.198246352046376 0 0
25 0.192966396099738 0 0
26 0.18897229193584 0 0
27 0.186243043953596 0 0
28 0.18578727224224 0 0
29 0.187114583931684 0 0
30 0.189090911319999 0 0
31 0.193600418301244 0 0
32 0.200054490546523 0 0
33 0.208072057884887 0 0
34 0.218285958582262 0 0
35 0.230634876630779 0 0
36 0.243459214546046 0 0
37 0.257752719558026 0 0
38 0.272580246630834 0 0
39 0.286712281491418 0 0
40 0.300342726342385 0 0
41 0.312249154496702 0 0
42 0.321331680226083 0 0
43 0.327112591435919 0 0
44 0.329469692698771 0 0
45 0.327542874308678 0 0
46 0.322985767437387 0 0
47 0.316224456423823 0 0
48 0.308782990589082 0 0
49 0.301183418606427 0 0
50 0.293575702556702 0 0
51 0.286696408065096 0 0
52 0.280798842600295 0 0
53 0.275808444038661 0 0
54 0.271299340181449 0 0
55 0.266225534078626 0 0
56 0.260785177597799 0 0
57 0.255342424416527 0 0
58 0.250947812402455 0 0
59 0.24777514930692 0 0
60 0.246247860756574 0 0
61 0.246092032695547 0 0
62 0.247219177075727 0 0
63 0.249675195006791 0 0
64 0.253195744885965 0 0
65 0.257788026175471 0 0
66 0.26369589320837 0 0
67 0.270555680751329 0 0
68 0.277823002163503 0 0
69 0.284937579021833 0 0
70 0.291097253127256 0 0
71 0.296043211270752 0 0
72 0.299540235735164 0 0
73 0.301795150475552 0 0
74 0.303069111244916 0 0
75 0.30355995799167 0 0
76 0.303606664702465 0 0
77 0.303007474849756 0 0
78 0.302001653949665 0 0
79 0.300361927400822 0 0
80 0.297986890885497 0 0
81 0.295325565249305 0 0
82 0.291656567474701 0 0
83 0.287335862742648 0 0
84 0.282306131698578 0 0
85 0.276702242286357 0 0
86 0.270280607979823 0 0
87 0.263050805729498 0 0
88 0.255009286552014 0 0
89 0.247098798503932 0 0
90 0.2398191835424 0 0
91 0.23466817932016 0 0
92 0.230585310303585 0 0
93 0.227279061892254 0 0
94 0.224693206022759 0 0
95 0.222993136629962 0 0
96 0.221791418806722 0 0
97 0.220695274517678 0 0
98 0.219442816624831 0 0
99 0.217000405185694 0 0
100 0.213283732282521 0 0
101 0.208384750595562 0 0
102 0.202985389753009 0 0
103 0.197924660371165 0 0
104 0.193409646692029 0 0
105 0.189628652821804 0 0
106 0.186318519164064 0 0
107 0.183315563032657 0 0
108 0.180098687261504 0 0
109 0.176492614557115 0 0
110 0.172650422408531 0 0
111 0.168979191040057 0 0
112 0.166106531649937 0 0
113 0.163622827054655 0 0
114 0.161570328667133 0 0
115 0.159693607722301 0 0
116 0.157690305409947 0 0
117 0.15544650006387 0 0
118 0.153185383511044 0 0
119 0.150954772341381 0 0
120 0.148960802743881 0 0
121 0.147350785081686 0 0
122 0.146182367433256 0 0
123 0.145312879880878 0 0
124 0.144781245193999 0 0
125 0.14473607505965 0 0
126 0.144976432177203 0 0
127 0.145464936657928 0 0
128 0.145889790468872 0 0
129 0.146174517595681 0 0
130 0.14615421098877 0 0
131 0.145743119998859 0 0
132 0.144922809795091 0 0
133 0.143805231938307 0 0
134 0.142492952453543 0 0
135 0.141053445832183 0 0
136 0.139720571628269 0 0
137 0.138186469198598 0 0
138 0.136919534961634 0 0
139 0.135732624874463 0 0
140 0.134597268963386 0 0
141 0.133432724955799 0 0
142 0.13211501546202 0 0
143 0.130478475600008 0 0
144 0.128290801143951 0 0
145 0.125726707508103 0 0
146 0.122634784100445 0 0
147 0.119472073398083 0 0
148 0.116199128230447 0 0
149 0.112813911251756 0 0
150 0.109547291781198 0 0
151 0.106268392530964 0 0
152 0.10313443150471 0 0
153 0.100113578226984 0 0
154 0.097073834113113 0 0
155 0.0941199411272616 0 0
156 0.0911853891891621 0 0
157 0.0882319764053268 0 0
158 0.085267274530049 0 0
159 0.0822333903307463 0 0
160 0.0792187073154596 0 0
161 0.0760907077820793 0 0
162 0.0728848234132589 0 0
163 0.0697048920692252 0 0
164 0.0665600438164166 0 0
165 0.0635411651500916 0 0
166 0.0606319242880778 0 0
167 0.0578670530064308 0 0
168 0.0553155735461356 0 0
169 0.0529193006810867 0 0
170 0.050722718025932 0 0
171 0.0486788470977319 0 0
172 0.0467747209472673 0 0
173 0.0450423813898501 0 0
174 0.0434307741189043 0 0
175 0.041915712424757 0 0
176 0.0405250313895705 0 0
177 0.0390895391040532 0 0
178 0.0377897158697839 0 0
179 0.0365016922380464 0 0
180 0.0351788001916396 0 0
181 0.0338645937424847 0 0
182 0.0325302009051183 0 0
183 0.0312848146149282 0 0
184 0.0300375958148976 0 0
185 0.0288302935207691 0 0
186 0.027652203865544 0 0
187 0.0264621566936286 0 0
188 0.0252688692008588 0 0
189 0.0241226625595337 0 0
190 0.0229255436965288 0 0
191 0.0217207281738409 0 0
192 0.0205701146867025 0 0
193 0.0193892949195812 0 0
194 0.0183936626191952 0 0
195 0.017494647116465 0 0
196 0.0167605279940225 0 0
197 +NAN 0 0
198 +NAN 0 0
199 +NAN 0 0
200 +NAN 0 0
201 +NAN 0 0
202 +NAN 0 0
203 +NAN 0 0
204 +NAN 0 0
205 +NAN 0 0
206 +NAN 0 0
207 +NAN 0 0
208 +NAN 0 0
209 +NAN 0 0
210 +NAN 0 0
211 +NAN 0 0
212 +NAN 0 0
213 +NAN 0 0
214 +NAN 0 0
215 +NAN 0 0
216 +NAN 0 0
217 +NAN 0 0
218 +NAN 0 0
219 +NAN 0 0
220 +NAN 0 0
221 +NAN 0 0
222 +NAN 0 0
223 +NAN 0 0
224 +NAN 0 0
225 +NAN 0 0
226 +NAN 0 0
227 +NAN 0 0
228 +NAN 0 0
229 +NAN 0 0
230 +NAN 0 0
231 +NAN 0 0
232 +NAN 0 0
233 +NAN 0 0
234 +NAN 0 0
235 +NAN 0 0
236 +NAN 0 0
237 +NAN 0 0
238 +NAN 0 0
239 +NAN 0 0
240 +NAN 0 0
241 +NAN 0 0
242 +NAN 0 0
243 +NAN 0 0
244 +NAN 0 0
245 +NAN 0 0
246 +NAN 0 0
247 +NAN 0 0
248 +NAN 0 0
249 +NAN 0 0
250 +NAN 0 0
251 +NAN 0 0
252 +NAN 0 0
253 +NAN 0 0
254 +NAN 0 0
255 +NAN 0 0
[END] of [DATA]
[END] of [Spectrum]

@ -0,0 +1,297 @@
[Spectrum]
Version = 1
IDData = DLAB_2018-05-24_13-29-20_305_176
IDDevice = SAM_859F
IDDataType = SPECTRUM
IDDataTypeSub1 = CAL
IDDataTypeSub2 = Air
IDDataTypeSub3 =
DateTime = 2018-05-24 13:28:25
PositionLatitude = 0
PositionLongitude = 0
Comment =
CommentSub1 =
CommentSub2 =
CommentSub3 =
IDMethodType =
MethodName =
Mission = No Mission
MissionSub = 1
RecordType = 0
[Attributes]
CalFactor = 1
IDBasisSpec =
IDDataBack = DLAB_2018-05-04_11-56-28_529_586
IDDataCal =
IntegrationTime = 64
P31 = -1
P31e = 0
PathLength = +INF
RAWDynamic = 65535
Temperature = +NAN
Unit1 = $05 $00 Pixel
Unit2 = $04 $04 1/Intensity (m^2 nm Sr)/mW
Unit3 = $04 $04 1/Intensity (m^2 nm Sr)/mW
Unit4 = $f1 $00 Status
[END] of [Attributes]
[DATA]
0 5 0 0
1 +NAN 0 0
2 +NAN 0 0
3 +NAN 0 0
4 +NAN 0 0
5 0.549282530081406 0 0
6 0.621825635483575 0 0
7 0.705214779700439 0 0
8 0.782494923890489 0 0
9 0.848306874043027 0 0
10 0.952625287085828 0 0
11 1.06364941208026 0 0
12 1.17099618224932 0 0
13 1.27964867192574 0 0
14 1.37878597375063 0 0
15 1.42771820575638 0 0
16 1.4380590385421 0 0
17 1.41583530083466 0 0
18 1.35751030831315 0 0
19 1.28801896577964 0 0
20 1.23773169248486 0 0
21 1.19003370359023 0 0
22 1.16911032524399 0 0
23 1.16789019991587 0 0
24 1.17908641221467 0 0
25 1.20561721452238 0 0
26 1.24993325867368 0 0
27 1.3042108426727 0 0
28 1.37841324495146 0 0
29 1.46663415660191 0 0
30 1.55813913029349 0 0
31 1.66686169700722 0 0
32 1.78274771118438 0 0
33 1.89315285694338 0 0
34 2.00609300108623 0 0
35 2.10386062632617 0 0
36 2.18077321675475 0 0
37 2.23620955735442 0 0
38 2.266135432154 0 0
39 2.26878990322214 0 0
40 2.25797663538301 0 0
41 2.22685859649013 0 0
42 2.17776313289299 0 0
43 2.1222752364519 0 0
44 2.06098344374156 0 0
45 1.99948809108821 0 0
46 1.94462577242816 0 0
47 1.8989381397134 0 0
48 1.8637403074385 0 0
49 1.84137175128878 0 0
50 1.82996842025894 0 0
51 1.82735603324287 0 0
52 1.82819560800875 0 0
53 1.82831225824908 0 0
54 1.82476779554239 0 0
55 1.82142520789599 0 0
56 1.82469614734563 0 0
57 1.83514598035505 0 0
58 1.85423698694933 0 0
59 1.88102853388183 0 0
60 1.91679111910883 0 0
61 1.95713305118927 0 0
62 2.0033013266641 0 0
63 2.05191276620812 0 0
64 2.10100127704333 0 0
65 2.15116215495783 0 0
66 2.19982933350689 0 0
67 2.24341508467426 0 0
68 2.28026480621138 0 0
69 2.30634686430023 0 0
70 2.31796219508283 0 0
71 2.31589695847203 0 0
72 2.29809543158409 0 0
73 2.2668387918562 0 0
74 2.22596956700897 0 0
75 2.17822422289454 0 0
76 2.1262484698939 0 0
77 2.07154274835781 0 0
78 2.01784816285075 0 0
79 1.9635850159156 0 0
80 1.90957838150673 0 0
81 1.85662335754133 0 0
82 1.80118393109592 0 0
83 1.74752896056537 0 0
84 1.69458207285898 0 0
85 1.64238998731142 0 0
86 1.59255947952261 0 0
87 1.55042463825823 0 0
88 1.52145095482736 0 0
89 1.50182839545807 0 0
90 1.48602912306116 0 0
91 1.47501182897849 0 0
92 1.46801797625318 0 0
93 1.46252443118698 0 0
94 1.4571840542778 0 0
95 1.44881752975571 0 0
96 1.433373570625 0 0
97 1.4106211402034 0 0
98 1.38310053980989 0 0
99 1.35343439202405 0 0
100 1.32469024445085 0 0
101 1.29921323938482 0 0
102 1.2757042981125 0 0
103 1.25356245928469 0 0
104 1.23230080447944 0 0
105 1.20776661327865 0 0
106 1.18172190161938 0 0
107 1.16211138784545 0 0
108 1.14836490545677 0 0
109 1.13698033747357 0 0
110 1.12673020620722 0 0
111 1.115430409999 0 0
112 1.10428562795353 0 0
113 1.0934141739792 0 0
114 1.0851095103506 0 0
115 1.08102444265095 0 0
116 1.08007408967758 0 0
117 1.08238869164072 0 0
118 1.08781099449618 0 0
119 1.09202496629142 0 0
120 1.09279743926351 0 0
121 1.08928198225434 0 0
122 1.08099296127192 0 0
123 1.06779395728469 0 0
124 1.05125732218958 0 0
125 1.03307124483462 0 0
126 1.01642561672595 0 0
127 1.0017478853335 0 0
128 0.98877464388953 0 0
129 0.978591382441999 0 0
130 0.970432000434175 0 0
131 0.962460675619692 0 0
132 0.953651636148435 0 0
133 0.943103023421902 0 0
134 0.930554197290447 0 0
135 0.915976069829803 0 0
136 0.89827602173614 0 0
137 0.878650755188226 0 0
138 0.859108524352699 0 0
139 0.840122962860222 0 0
140 0.820853477964574 0 0
141 0.803547895709764 0 0
142 0.786651104537257 0 0
143 0.769194844035412 0 0
144 0.751217544779413 0 0
145 0.731862968408631 0 0
146 0.710478767970412 0 0
147 0.687207420135085 0 0
148 0.662469528888512 0 0
149 0.636358233772055 0 0
150 0.609121332586544 0 0
151 0.580838486227566 0 0
152 0.552767035926316 0 0
153 0.525876935395925 0 0
154 0.499896413074609 0 0
155 0.475284681533185 0 0
156 0.452387885405863 0 0
157 0.431848904268036 0 0
158 0.413013739466993 0 0
159 0.395710805209202 0 0
160 0.380181587532903 0 0
161 0.365591896979342 0 0
162 0.352105459639395 0 0
163 0.339276260510366 0 0
164 0.32616389487977 0 0
165 0.313880254968568 0 0
166 0.301213081346406 0 0
167 0.28867892621412 0 0
168 0.276332017077307 0 0
169 0.263867205519659 0 0
170 0.251559483539307 0 0
171 0.239917175566115 0 0
172 0.228872841726392 0 0
173 0.218348838385983 0 0
174 0.208663588155861 0 0
175 0.199488791575245 0 0
176 0.191252859631973 0 0
177 0.183364916996847 0 0
178 0.175877803627425 0 0
179 0.169219899131997 0 0
180 0.162866423884395 0 0
181 0.156727192611269 0 0
182 0.151124000714184 0 0
183 0.145138407523578 0 0
184 0.13971586046093 0 0
185 0.134506608902369 0 0
186 0.129059486722317 0 0
187 0.124203168251957 0 0
188 0.119075347065844 0 0
189 0.113513221481262 0 0
190 0.107843336832916 0 0
191 0.101790305051534 0 0
192 0.0961960826886135 0 0
193 0.0914035900672732 0 0
194 0.0868727278958915 0 0
195 0.082573024301116 0 0
196 +NAN 0 0
197 +NAN 0 0
198 +NAN 0 0
199 +NAN 0 0
200 +NAN 0 0
201 +NAN 0 0
202 +NAN 0 0
203 +NAN 0 0
204 +NAN 0 0
205 +NAN 0 0
206 +NAN 0 0
207 +NAN 0 0
208 +NAN 0 0
209 +NAN 0 0
210 +NAN 0 0
211 +NAN 0 0
212 +NAN 0 0
213 +NAN 0 0
214 +NAN 0 0
215 +NAN 0 0
216 +NAN 0 0
217 +NAN 0 0
218 +NAN 0 0
219 +NAN 0 0
220 +NAN 0 0
221 +NAN 0 0
222 +NAN 0 0
223 +NAN 0 0
224 +NAN 0 0
225 +NAN 0 0
226 +NAN 0 0
227 +NAN 0 0
228 +NAN 0 0
229 +NAN 0 0
230 +NAN 0 0
231 +NAN 0 0
232 +NAN 0 0
233 +NAN 0 0
234 +NAN 0 0
235 +NAN 0 0
236 +NAN 0 0
237 +NAN 0 0
238 +NAN 0 0
239 +NAN 0 0
240 +NAN 0 0
241 +NAN 0 0
242 +NAN 0 0
243 +NAN 0 0
244 +NAN 0 0
245 +NAN 0 0
246 +NAN 0 0
247 +NAN 0 0
248 +NAN 0 0
249 +NAN 0 0
250 +NAN 0 0
251 +NAN 0 0
252 +NAN 0 0
253 +NAN 0 0
254 +NAN 0 0
255 +NAN 0 0
[END] of [DATA]
[END] of [Spectrum]

@ -0,0 +1,297 @@
[Spectrum]
Version = 1
IDData = DLAB_2018-06-13_11-56-08_604_111
IDDevice = SAM_85B5
IDDataType = SPECTRUM
IDDataTypeSub1 = CAL
IDDataTypeSub2 = Air
IDDataTypeSub3 =
DateTime = 2018-06-13 11:54:51
PositionLatitude = 0
PositionLongitude = 0
Comment =
CommentSub1 =
CommentSub2 =
CommentSub3 =
IDMethodType =
MethodName =
Mission = No Mission
MissionSub = 1
RecordType = 0
[Attributes]
CalFactor = 1
IDBasisSpec =
IDDataBack = DLAB_2018-06-11_15-23-57_730_586
IDDataCal =
IntegrationTime = 64
P31 = -1
P31e = 0
PathLength = +INF
RAWDynamic = 65535
Temperature = +NAN
Unit1 = $05 $00 Pixel
Unit2 = $04 $04 1/Intensity (m^2 nm Sr)/mW
Unit3 = $04 $04 1/Intensity (m^2 nm Sr)/mW
Unit4 = $f1 $00 Status
[END] of [Attributes]
[DATA]
0 5 0 0
1 +NAN 0 0
2 +NAN 0 0
3 +NAN 0 0
4 0.380824258865919 0 0
5 0.480956813156357 0 0
6 0.57671205380196 0 0
7 0.643896236957154 0 0
8 0.711054782209677 0 0
9 0.758265752350778 0 0
10 0.808854255795615 0 0
11 0.869466331079482 0 0
12 0.925321324749243 0 0
13 1.00927399148091 0 0
14 1.08699883630787 0 0
15 1.18347377446848 0 0
16 1.29079925777138 0 0
17 1.39953731633192 0 0
18 1.49536024576308 0 0
19 1.57053962346542 0 0
20 1.61051680455964 0 0
21 1.60891142181803 0 0
22 1.58014917632373 0 0
23 1.54292073894688 0 0
24 1.49782795775685 0 0
25 1.46270054563491 0 0
26 1.43754722159869 0 0
27 1.42339247548624 0 0
28 1.42249669690879 0 0
29 1.43289834559721 0 0
30 1.45081833970432 0 0
31 1.48383024473758 0 0
32 1.53350351710437 0 0
33 1.59283171118034 0 0
34 1.66682243068085 0 0
35 1.75523084376357 0 0
36 1.8490542829721 0 0
37 1.94827772413977 0 0
38 2.05297044933559 0 0
39 2.15300125225733 0 0
40 2.24489521732098 0 0
41 2.32484518002751 0 0
42 2.37710624055378 0 0
43 2.41032149129472 0 0
44 2.41401311078449 0 0
45 2.39196623346607 0 0
46 2.35386541795861 0 0
47 2.30358502851024 0 0
48 2.24350994611066 0 0
49 2.18566570348128 0 0
50 2.13007635400607 0 0
51 2.08048312730197 0 0
52 2.03943635277338 0 0
53 1.9990019487276 0 0
54 1.9542919602901 0 0
55 1.90697476815729 0 0
56 1.86132580586718 0 0
57 1.81936966943287 0 0
58 1.78948757961567 0 0
59 1.77036444175303 0 0
60 1.76067051308416 0 0
61 1.76079151769139 0 0
62 1.76865840458355 0 0
63 1.78533977613825 0 0
64 1.81054315659671 0 0
65 1.84219534093402 0 0
66 1.88262260694772 0 0
67 1.92633682221336 0 0
68 1.96919363361994 0 0
69 2.00638558730966 0 0
70 2.03543177536163 0 0
71 2.05645335730185 0 0
72 2.06889953924594 0 0
73 2.07668786673546 0 0
74 2.07746404954558 0 0
75 2.07708946852551 0 0
76 2.07239270419962 0 0
77 2.06329693588947 0 0
78 2.05235510505223 0 0
79 2.03788342455449 0 0
80 2.01750123705209 0 0
81 1.99316265318269 0 0
82 1.96344779927853 0 0
83 1.92810068074762 0 0
84 1.89032139564187 0 0
85 1.84840056738145 0 0
86 1.80188008685176 0 0
87 1.7531429855323 0 0
88 1.70184883503381 0 0
89 1.64693756964496 0 0
90 1.59639297188055 0 0
91 1.55743828612696 0 0
92 1.53081670223502 0 0
93 1.509066853406 0 0
94 1.48974595694359 0 0
95 1.47286758281018 0 0
96 1.45660325947575 0 0
97 1.43667408186819 0 0
98 1.40947906533906 0 0
99 1.37746325817173 0 0
100 1.3399910234164 0 0
101 1.29987620320872 0 0
102 1.26173586555032 0 0
103 1.22580130202006 0 0
104 1.19650560480134 0 0
105 1.17258287879559 0 0
106 1.15326969493003 0 0
107 1.13448708666807 0 0
108 1.11395465030131 0 0
109 1.08753684763482 0 0
110 1.06275254011917 0 0
111 1.0408908566722 0 0
112 1.02045255259373 0 0
113 1.00192289281247 0 0
114 0.987093337695555 0 0
115 0.973433543184599 0 0
116 0.961454156421677 0 0
117 0.949336048850277 0 0
118 0.937190359719721 0 0
119 0.925018119816345 0 0
120 0.911316167695048 0 0
121 0.897751565127677 0 0
122 0.885763756400802 0 0
123 0.875253674622747 0 0
124 0.866439225407856 0 0
125 0.859594015285511 0 0
126 0.856442344648432 0 0
127 0.854520610650332 0 0
128 0.853095084706978 0 0
129 0.851996897997662 0 0
130 0.849373999218705 0 0
131 0.845008414644852 0 0
132 0.837447706997702 0 0
133 0.828042280687475 0 0
134 0.816973957953628 0 0
135 0.804392597259629 0 0
136 0.790971383923797 0 0
137 0.777350907812577 0 0
138 0.764886212005326 0 0
139 0.753124860834896 0 0
140 0.74238339492221 0 0
141 0.731621293455726 0 0
142 0.720137856580817 0 0
143 0.707681887074656 0 0
144 0.692857487682284 0 0
145 0.676149155140644 0 0
146 0.657691286728854 0 0
147 0.637091724889135 0 0
148 0.615841105000382 0 0
149 0.593277961352052 0 0
150 0.571635565839856 0 0
151 0.550558744253774 0 0
152 0.529727893337181 0 0
153 0.50958610090654 0 0
154 0.490923786532866 0 0
155 0.472942835508178 0 0
156 0.455966760194577 0 0
157 0.439389399108222 0 0
158 0.42326262400571 0 0
159 0.408064966451864 0 0
160 0.392531100434587 0 0
161 0.376760145430696 0 0
162 0.361340837642809 0 0
163 0.345797349215964 0 0
164 0.330538900755072 0 0
165 0.315423852713651 0 0
166 0.300655326757946 0 0
167 0.286125136929255 0 0
168 0.27220666979537 0 0
169 0.258963801456755 0 0
170 0.246515726736969 0 0
171 0.23471243489257 0 0
172 0.223963260764627 0 0
173 0.213811227531161 0 0
174 0.204848303945938 0 0
175 0.196342813423038 0 0
176 0.188347519381911 0 0
177 0.180847277367304 0 0
178 0.173574321958823 0 0
179 0.166782572540461 0 0
180 0.159983659268987 0 0
181 0.153496471427164 0 0
182 0.146983276179518 0 0
183 0.140664487031456 0 0
184 0.134679615950644 0 0
185 0.128426075217298 0 0
186 0.122768803469292 0 0
187 0.116973531179931 0 0
188 0.111227699506044 0 0
189 0.10561644888568 0 0
190 0.0999165260100575 0 0
191 0.09399466356358 0 0
192 0.0884689961099718 0 0
193 0.0833768260697751 0 0
194 0.0789223013382674 0 0
195 0.0748108094846383 0 0
196 0.0710379549143775 0 0
197 +NAN 0 0
198 +NAN 0 0
199 +NAN 0 0
200 +NAN 0 0
201 +NAN 0 0
202 +NAN 0 0
203 +NAN 0 0
204 +NAN 0 0
205 +NAN 0 0
206 +NAN 0 0
207 +NAN 0 0
208 +NAN 0 0
209 +NAN 0 0
210 +NAN 0 0
211 +NAN 0 0
212 +NAN 0 0
213 +NAN 0 0
214 +NAN 0 0
215 +NAN 0 0
216 +NAN 0 0
217 +NAN 0 0
218 +NAN 0 0
219 +NAN 0 0
220 +NAN 0 0
221 +NAN 0 0
222 +NAN 0 0
223 +NAN 0 0
224 +NAN 0 0
225 +NAN 0 0
226 +NAN 0 0
227 +NAN 0 0
228 +NAN 0 0
229 +NAN 0 0
230 +NAN 0 0
231 +NAN 0 0
232 +NAN 0 0
233 +NAN 0 0
234 +NAN 0 0
235 +NAN 0 0
236 +NAN 0 0
237 +NAN 0 0
238 +NAN 0 0
239 +NAN 0 0
240 +NAN 0 0
241 +NAN 0 0
242 +NAN 0 0
243 +NAN 0 0
244 +NAN 0 0
245 +NAN 0 0
246 +NAN 0 0
247 +NAN 0 0
248 +NAN 0 0
249 +NAN 0 0
250 +NAN 0 0
251 +NAN 0 0
252 +NAN 0 0
253 +NAN 0 0
254 +NAN 0 0
255 +NAN 0 0
[END] of [DATA]
[END] of [Spectrum]

@ -0,0 +1,81 @@
[DEVICE]
Version = 0
IDDevice = SAMIP_50ED
IDDeviceType = SAMIP
IDDeviceTypeSub1 = ACC-2
IDDeviceTypeSub2 = VIS
IDDeviceTypeSub3 =
DateTime = 2018-06-19 12:08:40
Comment =
RecordType = 0
IDDeviceMaster =
[ATTRIBUTES]
IDDeviceSAM = SAM_859F
IDDeviceIP = IP_C121
[END] of [ATTRIBUTES]
[END] of [DEVICE]
[DEVICE]
Version = 0
IDDevice = IP_C121
IDDeviceType = IP
IDDeviceTypeSub1 =
IDDeviceTypeSub2 =
IDDeviceTypeSub3 =
DateTime = 2018-06-19 12:01:08
Comment =
RecordType = 0
IDDeviceMaster = SAMIP_50ED
[ATTRIBUTES]
Incl_Orientation = up
Incl_Xgain = 1.0
Incl_Xoffset = 125
Incl_Ygain = 0.9375
Incl_Yoffset = 126
Incl_KBG = 1.2073
Incl_Kref = 0.1275
Press_Current_mA = 1.08
Press_Surface_bar = 5.57
Press_Gain = 2.7
WithIncl = 1
WithPress = 1
Press_Sens_mV_bar_4mA = 71.36
Press_Sens_mV_bar_1mA = 17.84
Press_Type = PA-10/TAB/10bar
CalibrationDate = 08.06.2018
[END] of [ATTRIBUTES]
[END] of [DEVICE]
[DEVICE]
Version = 0
IDDevice = SAM_859F
IDDeviceType = SAM
IDDeviceTypeSub1 = ACC-2
IDDeviceTypeSub2 = VIS
IDDeviceTypeSub3 =
DateTime = 2018-05-30 12:14:10
Comment =
RecordType = 0
IDDeviceMaster = SAMIP_50ED
[ATTRIBUTES]
c0s = +3.019290000E+02
c1s = +3.345130000E+00
c2s = +2.651460000E-04
c3s = -1.753680000E-06
DarkPixelStart = 237
DarkPixelStop = 254
Reverse = 0
c4s = +0.000000000E+00
IDDataCal = DLAB_2019-08-28_14-44-55_098_198
IDDataBack = DLAB_2019-08-28_12-24-09_763_812
IDDataCalAQ = DLAB_2019-08-28_14-47-19_914_233
Firmware = 2.06
[END] of [ATTRIBUTES]
[END] of [DEVICE]

@ -0,0 +1,32 @@
[Device]
Version = 0
IDDevice = SAM_852F
IDDeviceType = SAM
IDDeviceTypeSub1 = ACC-2
IDDeviceTypeSub2 = VIS
IDDeviceTypeSub3 =
RecordType = 0
DateTime = 2016-12-07 12:03:12
IDDeviceMaster =
Comment =
[Attributes]
DarkPixelStart = 237
DarkPixelStop = 254
Firmware = 2.06
IDDataBack = DLAB_2016-11-29_14-47-59_729_812
IDDataCal = DLAB_2016-12-07_12-00-24_364_510
IDDataCalAQ = DLAB_2016-12-07_12-02-43_591_545
IntegrationTime = 0
Reverse = 0
SerialNo_MMS = 103307
WavelengthRange = 310..1100
c0s = 299.895
c1s = 3.31161
c2s = 0.00031652
c3s = -1.73194e-06
c4s = +0.000000000E+00
cs = 102842
[END] of [Attributes]
[END] of [Device]

@ -0,0 +1,30 @@
[Device]
Version = 0
IDDevice = SAM_859F
IDDeviceType = SAM
IDDeviceTypeSub1 = ARC
IDDeviceTypeSub2 = VIS
IDDeviceTypeSub3 =
RecordType = 0
DateTime = 2018-05-24 13:30:20
IDDeviceMaster =
Comment = ARC VIS
[Attributes]
DarkPixelStart = 237
DarkPixelStop = 254
Firmware = 2.06
IDDataBack = DLAB_2018-05-04_11-56-28_529_586
IDDataCal = DLAB_2018-05-24_13-29-20_305_176
IDDataCalAQ = DLAB_2018-05-24_13-29-21_895_177
IntegrationTime = 0
Reverse = 0
SerialNo_MMS =
c0s = 299.971
c1s = 3.32431
c2s = 0.000391882
c3s = -1.91435e-06
c4s = +0.000000000E+00
[END] of [Attributes]
[END] of [Device]

@ -0,0 +1,30 @@
[Device]
Version = 0
IDDevice = SAM_85B5
IDDeviceType = SAM
IDDeviceTypeSub1 = ARC
IDDeviceTypeSub2 = VIS
IDDeviceTypeSub3 =
RecordType = 0
DateTime = 2018-06-13 11:58:48
IDDeviceMaster =
Comment = ARC VIS
[Attributes]
DarkPixelStart = 237
DarkPixelStop = 254
Firmware = 2.06
IDDataBack = DLAB_2018-06-11_15-23-57_730_586
IDDataCal = DLAB_2018-06-13_11-56-08_604_111
IDDataCalAQ = DLAB_2018-06-13_11-58-21_312_112
IntegrationTime = 0
Reverse = 0
SerialNo_MMS =
c0s = 300.14
c1s = 3.3268
c2s = 0.000314225
c3s = -1.90331e-06
c4s = +0.000000000E+00
[END] of [Attributes]
[END] of [Device]

@ -0,0 +1,63 @@
;immersion factors for TriOS radiance
;wavelength(nm) factors
350 1.7743
360 1.7710
370 1.7681
380 1.7653
390 1.7628
400 1.7604
410 1.7583
420 1.7563
430 1.7544
440 1.7526
450 1.7510
460 1.7494
470 1.7480
480 1.7466
490 1.7454
500 1.7441
510 1.7430
520 1.7419
530 1.7409
540 1.7399
550 1.7390
560 1.7381
570 1.7372
580 1.7364
590 1.7356
600 1.7349
610 1.7342
620 1.7335
630 1.7328
640 1.7322
650 1.7316
660 1.7310
670 1.7305
680 1.7299
690 1.7294
700 1.7289
710 1.7284
720 1.7280
730 1.7275
740 1.7271
750 1.7267
760 1.7263
770 1.7259
780 1.7255
790 1.7251
800 1.7248
810 1.7244
820 1.7241
830 1.7238
840 1.7235
850 1.7232
860 1.7229
870 1.7226
880 1.7223
890 1.7220
900 1.7217
910 1.7215
920 1.7212
930 1.7210
940 1.7207
950 1.7205

@ -1,20 +1,11 @@
2: 2:
1: 1:
FUNC: Lsky FUNC: Ed
SN: '85B5'
2:
FUNC: Esky
SN: '50ED' SN: '50ED'
3:
FUNC: Lwater
SN: '852F'
3:
1:
FUNC: Lsky
SN: '85B5'
2: 2:
FUNC: Esky FUNC: Esky
SN: '50ED' SN: '85B5'
3: 3:
FUNC: Lwater FUNC: Lu
SN: '852F' SN: '852F'

@ -0,0 +1,237 @@
from pathlib import Path, PurePath
from tools.mylogger import log
from readcal import ReadCal
from myconfig import CAL_DIR, DATA_DIR, FILE_MARK, DeviceType, RamsesFunc
class Configuration:
def __init__(self, ) -> None:
log.info(f"ConfigAWRAMS init: ", __name__, "", "")
self.device_type = None
self.configuration =None
self.cal_configuration = {}
pass
def setDeviceType(self, device_type:str) -> None:
self.device_type = device_type.lower()
pass
def setSystemCfgDict(self, cfg:dict) -> None:
self.configuration = cfg
log.info(f"self.configuration : {self.configuration} ", __name__, "", "")
pass
def getCalConfiguration(self) -> None:
if self.device_type == None:
self.cal_configuration = None
if self.configuration == None:
self.cal_configuration =None
for k,v in self.configuration.items():
if v["SN"] == "" or v['FUNC']=="":
pass
else:
self.cal_configuration.update( {v["FUNC"]:{}} )
self.cal_configuration[v["FUNC"]].update( {"SN":v['SN']} )
self.cal_configuration[v["FUNC"]].update( {"FUNC":v['FUNC']} )
self.__init_configuration_basic()
self.__init_configuration_cal()
self.__init_configuration_IP_SAM()
pass
def __init_configuration_basic(self ) -> None:
# self.cfgtool = Config()
for k in self.cal_configuration.keys():
sn = self.cal_configuration[k]["SN"]
if self.__isSamIniExisted(sn):
self.cal_configuration[k].update({ "TYPE" : "SAM" })
self.cal_configuration[k].update({ "samsn" : sn })
self.cal_configuration[k].update({ "inifile" : "SAM_"+sn+".ini" })
self.cal_configuration[k].update({ "calfile" : "Cal_SAM_"+sn+".dat" })
self.cal_configuration[k].update({ "calaqfile" : "CalAQ_SAM_"+sn+".dat" })
self.cal_configuration[k].update({ "backfile" : "Back_SAM_"+sn+".dat" })
if self.__isSamIPIniExisted(sn):
self.cal_configuration[k].update({ "TYPE" : "SAMIP" })
samsn = self.__getSAMSN(sn)
if samsn== None:
log.warning(f"Cannot get samsn from Sensor: {sn}", __name__, "", "" )
raise Exception(f"Cannot get samsn from Sensor: {sn}")
self.cal_configuration[k].update({ "samsn" : samsn })
self.cal_configuration[k].update({ "inifile" : "SAMIP_"+sn+"_ALL.ini" })
self.cal_configuration[k].update({ "calfile" : "Cal_SAM_"+samsn+".dat" })
self.cal_configuration[k].update({ "calaqfile" : "CalAQ_SAM_"+samsn+".dat" })
self.cal_configuration[k].update({ "backfile" : "Back_SAM_"+samsn+".dat" })
if not self.__isSamIniExisted(sn) and not self.__isSamIPIniExisted(sn):
log.warning(f"Cannot find ini file for Sensor: {sn}", __name__, "", "" )
raise Exception(f"Cannot find ini file for Sensor: {sn}")
pass
def __init_configuration_cal(self ) -> None:
# self.cfgtool = Config()
for k in self.cal_configuration.keys():
sn = self.cal_configuration[k]["SN"]
# Device File
calpath = CAL_DIR.joinpath(self.device_type, self.cal_configuration[k]["calfile"])
if calpath.exists( ):
res = ReadCal.read_columns_set_by_mark( calpath, FILE_MARK, 1 )
self.cal_configuration[k].update({ "cal" : res[1][0] })
calaqpath = CAL_DIR.joinpath(self.device_type, self.cal_configuration[k]["calaqfile"])
if calaqpath.exists( ):
res = ReadCal.read_columns_set_by_mark( calaqpath, FILE_MARK, 1 )
self.cal_configuration[k].update({ "calaq" : res[1][0] })
backpath = CAL_DIR.joinpath(self.device_type, self.cal_configuration[k]["backfile"])
if calaqpath.exists( ):
res = ReadCal.read_columns_set_by_mark( backpath, FILE_MARK, 1,2 )
self.cal_configuration[k].update({ "b0" : res[1][0] })
self.cal_configuration[k].update({ "b1" : res[1][1] })
pass
def __init_configuration_IP_SAM(self ) -> None:
# self.cfgtool = Config()
for j in self.cal_configuration.keys():
# log.debug(f"__init_configuration_IP_SAM {j}", __name__, "", "" )
inipath = CAL_DIR.joinpath(self.device_type, self.cal_configuration[j]["inifile"])
# log.debug(f"__init_configuration_IP_SAM {inipath}", __name__, "", "" )
sam = ReadCal.readSAMCalFromIni(inipath)
# log.debug(f"__init_configuration_IP_SAM {sam}", __name__, "", "" )
for k,v in sam.items():
self.cal_configuration[j].update({ k : v })
if self.cal_configuration[j]["TYPE"] == "SAMIP":
ip = ReadCal.readIPCalFromIni(inipath)
for k,v in ip.items():
self.cal_configuration[j].update({ k : v })
def __isSamIniExisted(self,sn) ->bool:
sn_0 = "SAM_"+str(sn)+".ini"
path_ = CAL_DIR.joinpath(self.device_type.lower(), sn_0)
if path_.exists():
return True
return False
def __isSamIPIniExisted(self,sn) ->bool:
sn_0 = "SAMIP_"+str(sn)+"_ALL.ini"
path_ = CAL_DIR.joinpath(self.device_type.lower(), sn_0)
if path_.exists():
return True
return False
def __getSAMSN(self,sn) -> None:
sn_0 = "SAMIP_"+str(sn)+"_ALL.ini"
path_ = CAL_DIR.joinpath(self.device_type.lower(), sn_0)
# path_ = DATA_DIR.joinpath(self.device.lower(), CAL_DIR, sn_0)
samsn = ReadCal.readSamSNFromIni( path_ )
if samsn == None:
return None
return samsn
pass
# def __init2__(self, device:str, **kwargs) -> None:
# """
# get cal parameter for every sensor
# para : {"1":{"SN":"85B5","FUNC","Lsky"},"2":{},"3":{}}
# """
# # log.info(f"ProcessAWRAMS kwargs: {kwargs}", __name__, "", "")
# # log.info(f"len: { len(kwargs)}", __name__, "", "")
# if len(kwargs) != 3:
# log.warning(f" pass a wrong para to ProcessAWRAMS {kwargs}", __name__, "", "")
# self.device = device.lower() # surface profile awrams
# self.ramses = {}
# # 生成标定文件 { }
# for k,v in kwargs.items():
# self.ramses.update( {v["FUNC"]:{}} )
# self.ramses[v["FUNC"]].update( {"SN":v['SN']} )
# self.ramses[v["FUNC"]].update( {"FUNC":v['FUNC']} )
# pass
# log.debug(f" ===== {self.ramses}",__name__, "", "" )
# # if kwargs.__contains__("1"):
# # self.ramses.append( self.cfgtool.getDictByAttr("ramses"))
# # self.cfgtool.set_attr(self.ramses[1],kwargs['1']"SN",kwargs['1'])
# # if kwargs.__contains__("2"):
# # self.ramses.append( self.cfgtool.getDictByAttr("ramses"))
# # self.cfgtool.set_attr(self.ramses[2],"SN",kwargs['1'])
# # if kwargs.__contains__("3"):
# # self.ramses.append( self.cfgtool.getDictByAttr("ramses"))
# # self.cfgtool.set_attr(self.ramses[3],"SN",kwargs['1'])
# self.__init_configuration_basic()
# self.__init_configuration_cal()
# self.__init_configuration_IP_SAM()
# # log.info(f"ProcessAWRAMS after initiate: {kwargs}", __name__, "", "")
# def __init_configuration_basic2(self ) -> None:
# # self.cfgtool = Config()
# for k in self.ramses.keys():
# sn = self.ramses[k]["SN"]
# if self.__isSamIniExisted(sn):
# self.ramses[k].update({ "TYPE" : "SAM" })
# self.ramses[k].update({ "samsn" : sn })
# self.ramses[k].update({ "inifile" : "SAM_"+sn+".ini" })
# self.ramses[k].update({ "calfile" : "Cal_SAM_"+sn+".dat" })
# self.ramses[k].update({ "calaqfile" : "CalAQ_SAM_"+sn+".dat" })
# self.ramses[k].update({ "backfile" : "Back_SAM_"+sn+".dat" })
# if self.__isSamIPIniExisted(sn):
# self.ramses[k].update({ "TYPE" : "SAMIP" })
# samsn = self.__getSAMSN(sn)
# if samsn== None:
# log.warning(f"Cannot get samsn from Sensor: {sn}", __name__, "", "" )
# raise Exception(f"Cannot get samsn from Sensor: {sn}")
# self.ramses[k].update({ "samsn" : samsn })
# self.ramses[k].update({ "inifile" : "SAMIP_"+sn+"_ALL.ini" })
# self.ramses[k].update({ "calfile" : "Cal_SAM_"+samsn+".dat" })
# self.ramses[k].update({ "calaqfile" : "CalAQ_SAM_"+samsn+".dat" })
# self.ramses[k].update({ "backfile" : "Back_SAM_"+samsn+".dat" })
# if not self.__isSamIniExisted(sn) and not self.__isSamIPIniExisted(sn):
# log.warning(f"Cannot find ini file for Sensor: {sn}", __name__, "", "" )
# raise Exception(f"Cannot find ini file for Sensor: {sn}")
# pass
# def __init_configuration_cal2(self ) -> None:
# # self.cfgtool = Config()
# for k in self.ramses.keys():
# sn = self.ramses[k]["SN"]
# # Device File
# calpath = CAL_DIR.joinpath(self.device, self.ramses[k]["calfile"])
# if calpath.exists( ):
# res = Readfile.read_columns_set_by_mark( calpath, FILE_MARK, 1 )
# self.ramses[k].update({ "cal" : res[1][0] })
# calaqpath = CAL_DIR.joinpath(self.device, self.ramses[k]["calaqfile"])
# if calaqpath.exists( ):
# res = Readfile.read_columns_set_by_mark( calaqpath, FILE_MARK, 1 )
# self.ramses[k].update({ "calaq" : res[1][0] })
# backpath = CAL_DIR.joinpath(self.device, self.ramses[k]["backfile"])
# if calaqpath.exists( ):
# res = Readfile.read_columns_set_by_mark( backpath, FILE_MARK, 1,2 )
# self.ramses[k].update({ "b0" : res[1][0] })
# self.ramses[k].update({ "b1" : res[1][1] })
# pass
# def __init_configuration_IP_SAM2(self ) -> None:
# # self.cfgtool = Config()
# for j in self.ramses.keys():
# # log.debug(f"__init_configuration_IP_SAM {j}", __name__, "", "" )
# inipath = CAL_DIR.joinpath(self.device, self.ramses[j]["inifile"])
# # log.debug(f"__init_configuration_IP_SAM {inipath}", __name__, "", "" )
# sam = Readfile.readSAMCalFromIni(inipath)
# # log.debug(f"__init_configuration_IP_SAM {sam}", __name__, "", "" )
# for k,v in sam.items():
# self.ramses[j].update({ k : v })
# if self.ramses[j]["TYPE"] == "SAMIP":
# ip = Readfile.readIPCalFromIni(inipath)
# for k,v in ip.items():
# self.ramses[j].update({ k : v })

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

@ -0,0 +1,323 @@
#! python3
# -*- encoding: utf-8 -*-
'''
@File : myconfig.py
@Time : 2023/03/01 15:28:20
@Author : Jim @ Yiwin
@Version : 1.0
@Contact : jim@yi-win.com
@Descrip : SysConfig
'''
import yaml
from enum import Enum
from pathlib import Path
DEVICE_ID = [2]
CURRENT_DIR = Path()
DATA_DIR = Path("data")
CAL_DIR = Path("calfile")
OUTPUT_DIR = Path("data", "output")
YAML_FILE_NAME = "config.yml"
RETRIEVE_CFG_FILE = "retrieve.yml"
FILE_MARK = ['Spectrum', 'DATA']
BEGIN_WAVELENGTH = 350
END_WAVELENGTH = 950
SAVE_EXT_NAME = ".csv"
INTERVAL = 1.0
SEPARATOR = ";"
TOKEN = ";"
NEWLINE = "\n"
ROWFACTOR = 0.026
class DeviceType(Enum) :
AWRAMS = 1
SURFACE = 2
PROFILE = 3
class RamsesFunc(Enum):
Lsky = 1
Esky = 2
Lwater = 3
Lw = 4
Rs = 5
class RamsesAWRAMS(Enum):
Lsky = 1
Esky = 2
Lwater = 3
Lw = 4
Rs = 5
class RamsesSURFACE(Enum):
Lsky = 1
Esky = 2
Lwater = 3
Lw = 4
Rs = 5
class RamsesPROFILE(Enum):
Ed = 1
Esky = 2
Lu = 3 #upwelling
Res = 4 # 多组数据获得一个 Kd Ed0 Ku Lu0 Lw Rs
# Lw = 4
# Rs = 5
IP_CAL = {
"Incl_Orientation": "up",
"Incl_Xgain": 1.0,
"Incl_Xoffset": 125,
"Incl_Ygain": 0.9375,
"Incl_Yoffset": 126,
"Incl_KBG": 1.2073,
"Incl_Kref": 0.1275,
"Press_Current_mA": 1.08,
"Press_Surface_bar": 5.57,
"Press_Gain": 2.7,
"WithIncl": 1,
"WithPress": 1,
"Press_Sens_mV_bar_4mA": 71.36,
"Press_Sens_mV_bar_1mA": 17.84,
"Press_Type": "PA-10/TAB/10bar",
"CalibrationDate": "08.06.2018",
}
RAMSES_CAL = {
"SN": "",
"TYPE": "SAM", # SAMIP or SAM
"FUNC": "Lsky",
"inifile": "",
"calfile": "",
"calaqfile": "",
"backfile": "",
"samsn": "",
"b0": [],
"b1": [],
"cal": [],
"calaq": [],
"DarkPixelStart": 237,
"DarkPixelStop": 254,
"Firmware": 2.06,
"IDDataBack": "DLAB_2016-11-29_14-47-59_729_812",
"IDDataCal": "DLAB_2016-12-07_12-00-24_364_510",
"IDDataCalAQ": "DLAB_2016-12-07_12-02-43_591_545",
"IntegrationTime": 0,
"Reverse": 0,
"SerialNo_MMS": 103307,
"WavelengthRange": "310..1100",
"c0s": 299.895,
"c1s": 3.31161,
"c2s": 0.00031652,
"c3s": -1.73194e-06,
"c4s": +0.000000000E+00,
"cs": 102842,
"savefile": ""
}
class MyConfig(object):
"""
设置 ID对应的传感器
"""
def __init__(self) -> None:
self.device_id = []
self.device_type = None
self.current_device_id = None
self.system_cfg = {}
self.cfg_path = Path()
self.yml_cfg_file = YAML_FILE_NAME
self.retrieve_cfg_file = Path(RETRIEVE_CFG_FILE)
self.system_cal_cfg = {}
self.validate = { }
def addDeviceID(self, id:int) -> None: #
self.device_id.append(id)
pass
def setDeviceID(self, id:int) -> bool: #
if id in self.device_id:
self.current_device_id = id
return True
else:
self.current_device_id = None
return False
pass
def setDeviceType(self, device_type:DeviceType) -> None:
self.device_type = device_type
pass
def setRetrieveCfg(self, rtv_yml:str="") -> None:
if rtv_yml =="":
return None
self.retrieve_cfg_file = Path(rtv_yml)
pass
def getSystemCfg(self,)->None:
'''
不同系统修改此函数或添加函数 getSystemCfg***()供调用
'''
if self.current_device_id == None:
self.system_cfg = None
if self.device_type == None:
self.system_cfg = None
temp_cfg = {}
if self.device_type == DeviceType.AWRAMS.name:
temp_cfg = {
1: {"SN": "85B5", "FUNC": RamsesAWRAMS(1).name},
2: {"SN": "50ED", "FUNC": RamsesAWRAMS(2).name},
3: {"SN": "852F", "FUNC": RamsesAWRAMS(3).name}
}
if self.device_type == DeviceType.SURFACE.name:
temp_cfg = {
1: {"SN": "85B5", "FUNC": RamsesSURFACE(1).name},
2: {"SN": "50ED", "FUNC": RamsesSURFACE(2).name},
3: {"SN": "852F", "FUNC": RamsesSURFACE(3).name}
}
if self.device_type == DeviceType.PROFILE.name:
temp_cfg = {
1: {"SN": "85B5", "FUNC": RamsesPROFILE(1).name},
2: {"SN": "50ED", "FUNC": RamsesPROFILE(2).name},
3: {"SN": "852F", "FUNC": RamsesPROFILE(3).name}
}
self.system_cfg.update( { self.current_device_id : temp_cfg } )
pass
def setCfgRamsesSN(self, sn_cfg: dict)->None:
if len(sn_cfg) == 0:
return None
for k in self.system_cfg[self.current_device_id].keys():
if str(k) in sn_cfg.keys() :
self.system_cfg[self.current_device_id][k]["SN"] = sn_cfg[str(k)]
else:
self.system_cfg[self.current_device_id][k]["SN"] = None
# if k in sn_cfg.keys() :
# self.system_cfg[self.current_device_id][k]["SN"] = sn_cfg[k]
pass
def setSystemCalCfg(self, sn_cfg: dict)->None:
if len(sn_cfg) == 0:
pass
def getDictByAttr(self, *args) -> dict:
ret = {}
if len(args) == 0:
return ret
if len(args) == 1:
if not hasattr(self, args[0]):
return ret
tmp = getattr(self, args[0])
if isinstance(tmp, dict):
ret.update(tmp)
return ret
if len(args) == 2:
if not hasattr(self, args[0]):
return ret
if not isinstance(getattr(self, args[0]), dict):
return ret
tmp: dict = getattr(self, args[0])
if not tmp.__contains__(args[1]):
# print(f"------------{args[1]}")
return ret
tmp2 = tmp[args[1]]
if isinstance(tmp2, dict):
ret.update(tmp2)
return ret
if len(args) > 2:
return ret
pass
# 设置字典对应的键值
def set_attr(self, d: dict, k, v) -> bool:
if d.__contains__(k):
d.update({k: v})
return True
return False
def write_yaml(self, d: dict):
with open(self.yml_cfg_file, "w", encoding="utf-8") as f:
yaml.dump(d, f)
def read_yaml(self ) -> dict:
with open(self.yml_cfg_file, "r", encoding="utf-8") as f:
content = f.read() # conent 读出来是字符串
d = yaml.load(content, Loader=yaml.FullLoader) # 用load方法转字典
return d
def write_rtv_yaml(self, d: dict):
with open(self.retrieve_cfg_file, "w", encoding="utf-8") as f:
yaml.dump(d, f)
def read_rtv_yaml(self ) -> dict:
with open(self.retrieve_cfg_file, "r", encoding="utf-8") as f:
content = f.read() # conent 读出来是字符串
d = yaml.load(content, Loader=yaml.FullLoader) # 用load方法转字典
return d
def get_retrieve(self) -> dict:
retrieve = {}
retrieve.update({"beginWL": BEGIN_WAVELENGTH})
retrieve.update({"endWL": END_WAVELENGTH})
retrieve.update({"interval": INTERVAL})
retrieve.update({"rowFactor": ROWFACTOR})
return retrieve
pass
ramses_buf_str= "\
23a0000007fefe0a0781067d067d068e0693069c069c06b006b506cb06e40619076607e1076c081509cd09bb0a7d0bee0b1d0c6d0cca0ca40ddc0f30135b18b4224d320e43f852c8\
23a0000006fefe17639c71c97c9484bb89358be98e5d98b1a37eadccb66abd26be31b97db124aa18a3f29c0499349735968e93a48eea8a028bc28cec8d048f1c92c096de9ab99d43\
23a0000005fefee0a157a9ecb1b1b97dc034c507c741c7d2c65ec550c20dbde9b535ae56a60a9e2296cd8ee887278129798170c669b16503632e61605f3a5def5a8e5862561154be\
23a0000004fefe3c51f54dda4a0c48634595426a3f5a3cc539903767362b36cc351f356634b633fc32c4310630fb2ec32fe63199349037e03ac03dc03eae3c303a9639d13a413da7\
23a0000003fefe97412746bc49404caa4dc54d374ca646d63bde326b332739e43c503d2b3c363aca37ef342d32c22f782d1d2bd328ec250222101e691b2b1a7119d3184018fa174d\
23a0000002fefed3177a17e3160616f81423149313f11233126711d8103b10a40f160f8a0efb0d580d660c6f0bd80aa10a580a000ab4099b0994097109e2082c087a0736072c077d\
23a0000001fefe2a071e071607140718071e073c074d076a076e076b076007670763076c0760075c073d07350724071207fb06ef06d706cc06b706a506960684067b0672066306a2\
23a0000000fefe58065406500642064e064306470642063f064806410644064306430641064206460640063c063e063e063d064406430644063c063c063c063c06400640064906ed\
23a0000007fefe0a071b071c07260737073e0749075907650774078b07c0072c08e3082b0ada0be80d9c107b147318931ae51add1a271a77192f1bfb1d99207c265c30c738f03d53\
23a0000006fefe07438f489d4d8452d957945cff639171a5832a97deab7fbe09c86cc5acb9d5ab299e90915287de7f8b7ae275ed6f056aff664f662665bc63936335655767926879\
23a0000005fefec269206d3e724377fe7b7a8050831f85b68637881689e4884787008580823d7f887bee773d7496702a6cde654c5f895a1f570d5416514d4e9d4bde4897468c44c3\
23a0000004fefe71421640db3dc83bbb39533777346c31b92e912c152b5b2aff292129e727cb26d925fd249223b4214020da1fe91ff41f28209420dc201520071e671c221c8d1cfe\
23a0000003fefecd1dd31fe72164235924cb24b924f72331211e1ca018ef19221d121f621fe91e081ed51c761b311a2f193c18651788166015a013de11d1106e1041101810e80f2e\
23a0000002fefee50fd90fbc0f6d0ff70e610ee00d930d460de40c900c450c010cbd0b7c0b480bfc0aab0a2c0a9e094d092b09fb08d008a208990881087d083908e6078d07660747\
23a0000001fefe5b075a07500751074d074e0751075d076807730788077e077c077c07810777077a076c0765075c075607480740073607270723070d070d070b07ff06fd06f0062f\
23a0000000fefef606f106ed06f506ef06eb06f106ec06f006e906e806ed06e606ef06e506ea06ec06ee06eb06e906ee06f006ef06ea06e906e606e606e606ec06ea06ea06f506f2\
23a0000007fefe0605830479047d047e04810482048204850487048b048c04850487048c049304950498049c04a804a904b604b804c604d004e104f104190546059805ff059a06bb\
23a0000006fefe90073209ea0b7610c117cc22b2324a487b645e8798acf2c927d28dc1f2a1ac809664804e543d7a308327a321d81dab1b0f1bca1bb41dba2098243329382e773335\
23a0000005fefeca38213e544329486f4c1c500653335592564f577d573b57a556b4557e540a534451424f004d714a9b47994458410e3e9c3af8368c33b630982eca2c052b3429ae\
23a0000004fefe632763255a234821321f0e1d061b291983171e16d814a91379124b1138104b0f610e990dd80c240c880bfc0a7b0af8097709020990082508de07c507ba07a50762\
23a0000003fefe950781076407460727070007d306ab066e06270605060d0614061306fe05e805d105b405a00586057105630549053d0528051105fd04f304ee04e404dc04dd04c3\
23a0000002fefed804d904d004c604bf04b904b904b104a804a604a6049d04980496048f04970491048c04880486047e0484047a047d047b047c0478047a04760476047004700430\
23a0000001fefe6f0474046c046d0472046d047304750470046e04760472046f047604700473046f04730470047504700470046d046b047004710470046e046d046a046b046904e4\
23a0000000fefe690470046e046b046c04680468046e0466046a046a0469046b046d04640466046c046c046b046a04660466046b046c046a046a0468046f046804740471048d0417\
"
if __name__ == "__main__":
cfg = MyConfig()
cfg.addDeviceID(2)
cfg.addDeviceID(3)
cfg.setDeviceType(DeviceType.AWRAMS)
cfg.setDeviceID(2)
cfg.getSystemCfg()
print(cfg.system_cfg)
d = {"1":"8888","2":["7777"],"3":["9999"]}
cfg.setCfgRamsesSN(d)
print("修改后。。。。。\n")
print(cfg.system_cfg)
# cfg.write_yaml( cfg.system_cfg)
dd = cfg.read_yaml()
# dd 作为cfg.system_cfg 使用
for k,v in dd.items():
print(k)
print(type(k))
retrieve = {
"beginWL": 350,
"endWL": 950,
"interval": 1,
"rowFactor": 0.026
}

@ -0,0 +1,199 @@
import numpy as np
from pathlib import Path
TOKEN = ";"
SAVE_EXT_NAME = ".csv"
class MyNumpy(object):
def __init__(self,):
# self.first_ndarray = np.array([])
# self.two_d_ndarray = np.ndarray([])
pass
def row_stack_nd_nd(self, nd1:np.ndarray, nd2:np.ndarray):
if nd1.ndim == 1:
np.stack( (nd1, nd2), 0) # 两个一位数组 ,0 上下叠加,1:转置水平叠加
pass
else:
np.vstack( (nd1, nd2)) # 垂直上下叠加
pass
pass
def col_stack_nd_nd(self,nd1:np.ndarray, nd2:np.ndarray):
if nd1.ndim == 1:
np.stack( (nd1, nd2), 1) # 两个一位数组 ,0 上下叠加,1:转置水平叠加
pass
else:
np.hstack( (nd1, nd2.reshape(-1,1)) ) # 垂直上下叠加
pass
def get_time_wl_data_from_csv(self, fpath:Path, sn,fname):
data =[]
file_name = fpath.joinpath( fname + SAVE_EXT_NAME)
try:
readout = np.loadtxt(file_name, dtype = float, delimiter = TOKEN)
except IOError:
# self.makeMsg( 2, file_name + " 文件不存在 " )
readout = np.array([])
raise Exception( "IOError : 文件不存在")
except Exception as e :
# self.makeMsg( 2, "警告: %s" %e )
readout = np.array([])
raise Exception( e)
first_column = readout[1:,0]
header = readout[0,1:]
data = readout[1:,1:]
return first_column,header,data
pass
def get_header_data_from_csv(self, fpath:Path, sn,fname):
data =[]
file_name = fpath.joinpath( fname + SAVE_EXT_NAME)
try:
readout = np.loadtxt(file_name, dtype = float, delimiter = TOKEN)
except IOError:
# self.makeMsg( 2, file_name + " 文件不存在 " )
readout = np.array([])
raise Exception( "IOError : 文件不存在")
except Exception as e :
# self.makeMsg( 2, "警告 %s" % e )
readout = np.array([])
header = readout[0,:]
data = readout[1:,:]
return header,data
pass
def combine_col_row_data (self, col, row, data ):
"""
@description : 结合 时间 波长 数据存到 csv
考虑 data 是一维的情况不考虑为空
col header data 皆为 ndarray 格式
col data 二维 ,header 一维二维都可以 尽量用2维
"""
print( "__combine_col_row_data and return" )
# print( col.shape )
# print( row.shape )
# print( data.shape )
new_d = np.array( [ ] )
# 处理数据维度不符
if col.shape[0] != data.shape[0]:
raise Exception("ndarray shape 不对不能合并!")
return new_d
if row.shape[1] != col.shape[1] + data.shape[1]:
raise Exception("ndarray shape 不对不能合并!")
return new_d
# 给新数据 拼接上新的时间 column
try:
new_d = np.column_stack( ( col, data) )
except Exception as e :
raise Exception("合并数据col data 失败!")
# 拼接上波长作为 头部
try:
new_d = np.row_stack( ( row ,new_d ) )
except Exception as e :
raise Exception("合并数据row data 失败!")
# print( " new_d %s " % new_d.shape)
return new_d
pass
def combine_col_row_data_to_csv(self,col,row,data, path_name:Path):
"""
@description : 结合 时间 波长 数据存到 csv
考虑 data 是一维的情况不考虑为空
col header data 皆为 ndarray 格式
col data 二维 ,header 一维二维都可以 尽量用2维
"""
print( "__combine_col_row_data_to_csv" )
# print( col.shape )
# print( row.shape )
# print( data.shape )
new_d = np.array( [ ] )
# 处理数据维度不符
if col.shape[0] != data.shape[0]:
return new_d
if row.shape[0] != col.shape[1] + data.shape[1]:
return new_d
# 给新数据 拼接上新的时间 column
try:
new_d = np.column_stack( ( col, data) )
except Exception as e :
# self.makeMsg ( 2, "警告:拼接出错。 " + e )
raise Exception("合并数据col data 失败!")
# 拼接上波长作为 头部
try:
new_d = np.row_stack( ( row ,new_d ) )
except Exception as e :
# self.makeMsg ( 2, "警告:拼接出错。 " + e )
raise Exception("合并数据row data 失败!")
# print( " new_d %s " % new_d.shape)
try:
np.savetxt( path_name, new_d, fmt='%8f', delimiter=TOKEN)
except Exception as e:
# self.makeMsg(2, "警告:%s %s " % (e, path_name) )
raise Exception("保存文件 失败!")
pass
pass
if __name__ == '__main__':
mnp = MyNumpy()
a = np.arange(0, 60, 5)
a = a.reshape(3, 4)
print(a)
aa = np.array([1,2,3])
bb = np.array([4,5,6])
cc = np.array([7,8,9])
s = np.stack( (aa,bb) ,0 ) # 行合并
ss = np.vstack( (s,cc) )
sss = np.stack( (aa,bb) ,1 )
ssss = np.hstack( (sss,cc.reshape(-1,1))) # 列合并,reshape(-1,1)
aa = np.stack( (aa,bb) ,0 ) # 行合并
print(s)
print(ss)
print(sss)
print(cc)
print(cc.reshape(-1,1))
print(ssss)
print(aa)
pass
'''
np.stack( (aa,bb) ,0 ) 增加了维度
np.stack( (aa,bb) ,1 )
np.vstack( (s,cc) ) # 不增加维度
np.column_stack( (sss,cc.T))
'''

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

@ -0,0 +1,526 @@
#!/usr/bin/env python
# coding:utf-8
'''
# 因为图片帧不是必须,必须按帧处理数据。 可能摄像头坏掉,没有传感器数据??
# 按帧处理数据,必须在每帧接收完毕判断,数据是否完整, 完整则进一步处理 !!!!!!!!!!!!
# 时间作为目录
'''
import socket
import socketserver
from socketserver import TCPServer,ThreadingMixIn
import threading
# import datetime
import time
# import os
import struct
from tools.mypath import MyDir
from tools.mylogger import log
from pathlib import Path,PurePath
from myconfig import DATA_DIR,DeviceType
from profiler import Profiler,ProfilerHandle
# from myRamses import RamsesFactoryHandle,AirWater
IP = ""
PORT = 7887
ADDRESS = (IP, PORT) # 绑定地址
# LOGGING_LEVEL = logging.DEBUG
# LOGGING_LEVEL = logging.INFO
# LOGGING_LEVEL = logging.WARNING
DATA_FRAME_HEAD = b'\x11\x13\x55\xaa'
DATA_FRAME_TAIL = b'\xff\xd9'
PIC_BEGIN_BYTES = b'\xff\xd8'
# 连接超时
TIMEOUT_SECOND = 8 * 3600
# 连接线程池
conn_pool = []
# save_path = Path
class MyTCPServer(TCPServer):
def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True, cfg=None, calcfg=None, retrieve=None, profiler_handle = None):
self.cfg = cfg
self.calcfg = calcfg
self.retrieve = retrieve
self.profiler_handle = profiler_handle
TCPServer.__init__(self, server_address, RequestHandlerClass, bind_and_activate=True )
class MyThreadingTCPServer(ThreadingMixIn, MyTCPServer): pass
class MyException(Exception):
def __init__(self, message="自定义异常"):
self.message = message
class illumination_sensor:
def __init__(self, socket: socket.socket) -> None:
self.__buf = b''
self.__head = {
# "id" : -1, # 设备id
# 'type' : -1, # 类型 信息 传感器 图片
# 'num' : -1, # 光学传感器的第几次测量
# 'con' : -1, # 总的测量序号
# 'size' : -1, # 字节大小
# 'packet_con' : -1, # 第几帧
# 'packet_all' : -1, # 总帧数
# 'head' : b'', # 帧头
# 'payload' : b'' # 具体内容
}
self.state = 0
self.socket = socket
self.id = 0
# self.is_data_complete = {
# "info_frame": False,
# 'sensor_frame': False,
# 'pic_frame': False
# }
# self.data = {
# "info_frame": {},
# 'sensor_frame': {},
# 'pic_frame': {}
# }
self.timeout_base = int(time.time())
def set_id(self, id) -> None: # 对应设备ID
self.id = id
# def set_socket(self,socket:socket.socket) -> socket.socket:
# tmp = self.socket
# self.socket=socket
# return tmp
def read_buf(self, size: int) -> bytes:
if size > self.__buf.__len__():
return b''
ret = self.__buf[0:size]
self.__buf = self.__buf[size:]
return ret
def write_buf(self, buf: bytes) -> None:
id = self.id
len = buf.__len__()
# logging.info(f'Received ID:{id} Size:{len}')
self.__buf = self.__buf+buf
def get_buf_size(self) -> int:
return self.__buf.__len__()
def back_bytes(self, buf: bytes) -> None:
self.__buf = buf+self.__buf
def reset_head(self) -> None:
self.__head = {}
# self.__head['id'] = -1
# self.__head['type'] = -1
# self.__head['num'] = -1
# self.__head['con'] = -1
# self.__head['size'] = -1
# self.__head['packet_con'] = -1
# self.__head['packet_all'] = -1
# self.__head['head'] = b''
# self.__head['payload'] = b''
def reset_data(self) -> None:
self.data['info_frame']: dict = {}
self.data['sensor_frame']: dict = {}
self.data['pic_frame']: dict = {}
def decode(self) -> dict:
if self.__head == {}:
while self.get_buf_size() >= 15:
if self.read_buf(1) != b'\x11':
continue
c = self.read_buf(1)
if c != b'\x13':
self.back_bytes(c)
continue
c = self.read_buf(1)
if c != b'\x55':
self.back_bytes(c)
continue
c = self.read_buf(1)
if c != b'\xaa':
self.back_bytes(c)
continue
head = self.read_buf(11)
head_list = struct.unpack('<HBIHBB', head)
self.__head['id'] = head_list[0]
self.__head['type'] = head_list[1] >> 4
self.__head['num'] = head_list[1] & 0x0f
self.__head['con'] = head_list[2]
self.__head['size'] = head_list[3]
self.__head['packet_con'] = head_list[4]
self.__head['packet_all'] = head_list[5]
self.__head['head'] = b'\x11\x13\x55\xaa'+head
break
if self.__head != {}:
# 判断是否是测量结束标志
if self.__head['type'] == 15:
log.info(f" end frame recieved! ")
self.__head['payload'] = b'\xff\xff'
data = self.__head.copy()
self.__head = {}
self.id = data['id']
return data
pass
payload = self.read_buf(self.__head['size'])
if payload != b'':
self.__head['payload'] = payload
data = self.__head.copy()
self.__head = {}
self.id = data['id']
return data
return {}
class DealData:
"""
@description : 调用AWRAMS类处理数据
@param :
@Returns :
"""
def __init__(self) -> None:
self.device_id = None
self.devie_type = DeviceType.PROFILE.name
self.measure_id = None
self.cfg = {}
self.calcfg = {}
self.profiler_hdl = None
pass
def deal(self, id: int, con: int, calcfg:dict , retrieve,proflier_handle) -> None: # 取字典中的 payload
log.info(f" 接收到数据开始处理数据 device_id {id} ")
self.device_id = id
self.measure_id = con
if self.device_id is None:
self.device_id = id
if self.cfg == {}:
self.cfg = calcfg
if self.calcfg == {}:
self.calcfg = calcfg
# self.cfg = cfg.get(self.device_id)
self.profiler_hdl:ProfilerHandle = proflier_handle.get(self.device_id)
fpath = Path.cwd()
infopath = fpath.joinpath( 'data',self.device_id,self.measure_id,'info.bin')
sensorpath = fpath.joinpath( 'data',self.device_id,self.measure_id,'sensor.bin')
savedir = fpath.joinpath('data',self.device_id,self.measure_id )
self.profiler_hdl.set_ramses_number(3)
self.profiler_hdl.set_tilt_range(21.0)
self.profiler_hdl.read_info_path(infopath)
self.profiler_hdl.profiler.reset_profiler()
self.profiler_hdl.profiler.data.set_wavelength( ) # 设置波长
# self.profiler_hdl.read_immersion_factors( ) # 读取浸没因子
self.profiler_hdl.profiler.set_immersion_factors( self.profiler_hdl.read_immersion_factors( ) ) #设置浸没因子
self.profiler_hdl.profiler.get_depth_offset()
self.profiler_hdl.read_sensor_path(sensorpath)
self.profiler_hdl.profiler.get_Ed0_kd()
self.profiler_hdl.profiler.get_Lu0_Ku()
self.profiler_hdl.profiler.get_Lw_Rs(self.profiler_hdl.retrieve["n_t_square"])
self.profiler_hdl.profiler.save(savedir)
# self.profiler_hdl.read_info_path(infopath)
# self.profiler_hdl.read_sensor_path(sensorpath)
# self.profiler_hdl.profiler.process_profiler()
# self.profiler.setSyscfg(self.cfg)
# self.profiler.setRetrieve(retrieve)
# self.profiler.setDeviceID(self.device_id)
# self.profiler.setMeasureID(self.measure_id)
# path_tuple = ( "data", str(id), str(con) )
# self.profiler.setOldFolder( path_tuple )
# self.profiler.getInfoDict( )
# self.profiler.transferFromOldFolder()
# self.profiler.deleteOldFolder()
# self.profiler.dealOneMeasurement_Profiler(self.profiler.new_folder)
log.info(f" Complete Dealing one group.")
# self.profiler.readOneFolder( )
@staticmethod
def read_bin(fpath:Path):
ret = None
if fpath.exists() == False:
log.warning(f"not find file: {fpath} ")
return ret
ret = fpath.read_bytes()
return ret
pass
@staticmethod
def decode_info(info: bytes) -> dict:
'''info 分为两部分 : 传感器部分, 深度 倾斜部分 '''
ret = {}
try:
temp = struct.unpack("<BBBBBBHHHHHHIIHHHHHBBBHHIfff \
HHHBHBHHHHH \
HHHHHHBBBBBBBBBBBBBB",
info)
except Exception as e:
log.info( "decode info 有误, 收到info frame 字节有误" )
return ret
time_ = "20"+f"{temp[0]:02d}" + "-" + f"{temp[1]:02d}" + "-" + f"{temp[2]:02d}" + " " \
+ f"{temp[3]:02d}" + ":" + f"{temp[4]:02d}" + ":" + f"{temp[5]:02d}"
ret.update({"time": time_})
ret.update({"year": temp[0]})
ret.update({"month": temp[1]})
ret.update({"day": temp[2]})
ret.update({"hour": temp[3]})
ret.update({"minute": temp[4]})
ret.update({"second": temp[5]})
ret.update({"Roll": temp[6]})
ret.update({"Pitch": temp[7]})
ret.update({"Yaw": temp[8]})
ret.update({"Hx": temp[9]})
ret.update({"Hy": temp[10]})
ret.update({"Hz": temp[11]})
ret.update({"lon": temp[12]})
ret.update({"lat": temp[13]})
ret.update({"satelite_num": temp[14]})
ret.update({"PDOP": temp[15]})
ret.update({"HDOP": temp[16]})
ret.update({"VDOP": temp[17]})
ret.update({"Temperature": temp[18]})
ret.update({"Humidity": temp[19]})
ret.update({"Battery": temp[20]})
ret.update({"ErrorCode": temp[21]})
ret.update({"Azimuth": temp[22]})
ret.update({"RunAngle": temp[23]})
ret.update({"MeasuyeGroupNum": temp[24]})
ret.update({"Tiltx": temp[25]})
ret.update({"Tilty": temp[26]})
ret.update({"Depth": temp[27]})
ret.update({"Sensor1": hex(temp[28])[2:].upper()}) # 28 27 转16进制
ret.update({"Sensor2": hex(temp[29])[2:].upper()}) # 30 29
ret.update({"Sensor3": hex(temp[30])[2:].upper()}) # 32 31
ret.update({"Measure_Num": temp[31]}) # 33
ret.update({"Measure_Interval": temp[32]}) # 34
ret.update({"Measure_Repeat": temp[33]}) # 35
ret.update({"Byte11": temp[46]}) # 46
ret.update({"Byte12": temp[47]}) # 47
ret.update({"Byte13": temp[48]}) # 48
ret.update({"Byte14": temp[49]}) # 49
ret.update({"Byte15": temp[50]}) # 50
ret.update({"Byte16": temp[51]}) # 51
ret.update({"Byte17": temp[52]}) # 52
ret.update({"Byte18": temp[53]}) # 53
ret.update({"Byte19": temp[54]}) # 54
ret.update({"Byte20": temp[55]}) # 55
ret.update({"Byte21": temp[56]}) # 56
ret.update({"Byte22": temp[57]}) # 57
ret.update({"Byte23": temp[58]}) # 58
return ret
pass
@staticmethod
def save_dict_to_file(info_dict:dict, fpath:Path) ->None:
temp_str = ""
for key, value in info_dict.items():
temp_str = temp_str + key + " : " + str(value) + "\n"
with open(fpath, "w+") as f:
f.write(temp_str)
ret = None
if fpath.exists() == False:
log.info(f"not find file: {fpath} ")
return ret
with open(fpath, 'rb') as file:
ret = file.read()
return ret
return ret
pass
@staticmethod
def check_spectrum_data(dst_dir:Path):
# 判断目录下是否有 0.bin ...15.bin 文件
sensor_file_list = dst_dir.glob( '*[0-9].bin' )
fname_without_ext = []
for fl in sensor_file_list:
temp = fl.stem
if not temp.isdigit:
log.warning( f" {dst_dir} 目录光谱文件的文件名 {temp} 不为数字,type:{type(temp)},请检查异常" )
return False
fname_without_ext.append( int(temp) )
if len(fname_without_ext) ==0:
log.warning( f" {dst_dir} 目录没有发现光谱文件,请检查异常" )
return False
# 排序,然后检查是否有遗漏项
fname_without_ext.sort()
for i in fname_without_ext:
if fname_without_ext[i] !=i:
log.warning( f" {dst_dir} 目录,序号{i}光谱文件的文件名没有发现,请检查异常" )
return False
return False
pass
@staticmethod
def calibrate_spectrum_data(dst_dir):
'''
用ini back 等文件获得标定后数据
'''
log.info("calibrate_spectrum_data.... ")
pass
@staticmethod
def retrieve_data(dst_dir):
'''
反演遥感反射率等参数
'''
log.info(" retrieve_data.... ")
pass
# 收到的全部扔到 sensor.bin, 追加保存
def save(self,data: dict) -> None:
log.info(f"save .....to first dir {str(data['con'])} - type:{data['type']} - num {data['num']}")
# 路径 传感器id/测量序号(唯一) -- 处理数据时候改时间
saveDir = DATA_DIR.joinpath(str(data['id']), str(data['con']) )
if saveDir.exists() == False:
saveDir.mkdir(parents=True)
if data['type'] == 0:
log.debug( f" {data['type']} - {data['num']}")
fpath = saveDir.joinpath("info.bin")
fpath.write_bytes( data['payload'] )
elif data['type'] == 1:
log.debug( f" {data['type']} - {data['num']}")
senor_path = saveDir.joinpath( "sensor.bin" )
with open( senor_path, "ab+") as f:
f.write(data['payload'])
pass
elif data['type'] == 2:
pass
else:
pass
# class MyServer(socketserver.BaseRequestHandler):
class MyServer(socketserver.BaseRequestHandler):
def setup(self) -> None:
log.debug(f"retrieve {self.server.retrieve}",__name__, "", "" )
self.cfg =self.server.cfg
self.calcfg =self.server.calcfg
self.retrieve =self.server.retrieve
self.profiler_handle = self.server.profiler_handle
self.sk: socket.socket = self.request
self.sensor = illumination_sensor(self.request)
self.dealData = DealData()
self.begin_time = time.time()
conn_pool.append(self.client_address)
pass
def handle(self) -> None:
log.info('... connected from {}'.format(self.client_address),'__name__')
while True:
# self.request.recv 方法接收客户端发来的消息
try:
data_byte = self.sk.recv(1000)
except ConnectionResetError as e:
log.warning(
f"recv ConnectionResetError, client {self.client_address} had close .....")
break
except:
log.warning(" sk.recv(1000) exception .....")
pass
log.debug(len(data_byte))
# 客户端主动关闭连接后,会不断接收b'', 所以跳出循环,运行到程序结尾,自动关闭线程
if data_byte == b'':
log.info(
" b'' is received , maybe client {self.client_address} had close. ")
self.sk.close()
if hasattr(self, "sensor"):
del self.sensor # 销毁对象
break
else:
break
continue
else:
self.sensor.write_buf(data_byte)
data_byte = b'' # 客户端掉线后以前数据不长居内存
try:
data_ = self.sensor.decode()
except MyException as e:
log.warning(e)
break
except Exception as e:
log.warning("decode data 出现异常 ")
log.warning(e)
break
if data_ != {}:
id = data_['id']
data_code = data_['type']
log.info(f'Received From ID:{id} DATA CODE:{data_code}')
# 保存当前数据
self.dealData.save(data_)
head = data_['head']
log.info(f'Head :{head}')
# 返回head给服务器
self.sk.send(data_['head'])
# 判断是否是最后一帧, 修改目录为时间格式并
if data_["packet_con"] == data_["packet_all"]:
log.info(f'最后一帧数据已经收到并保存')
# id 为传感器测量id ,con 测量序号
self.dealData.deal(data_['id'], data_["con"], self.cfg,self.calcfg, self.retrieve,self.profiler_handle)
pass
if time.time() - self.begin_time > TIMEOUT_SECOND:
log.info(f'Received data timeout')
break
def finish(self) -> None:
# 什么时候执行 finish
# 执行handle 出现意外错误时执行 finish,或handle break时执行 finish
# 关闭连接
if self.sk:
self.sk.close()
# conn_pool 连接池销毁
if self.client_address in conn_pool:
conn_pool.remove(self.client_address)
log.info(
f"finish(): stop one socket from client {self.client_address} ")
if __name__ == '__main__':
server_ = socketserver.ThreadingTCPServer(ADDRESS, MyServer)
log.info('listening...........')
try:
server_.serve_forever()
except KeyboardInterrupt:
log.info(" Ctrl+C 退出主程序 ")
server_.server_close()
except Exception as e:
log.info(" 系统异常, 如下: \n ")
log.info(e)
# 有闪退,可以用线程将server_.serve_forever 包起来
# threading.Thread(target=server_.serve_forever).start()

@ -2,3 +2,4 @@ beginWL: 350
endWL: 950 endWL: 950
interval: 1 interval: 1
rowFactor: 0.026 rowFactor: 0.026
n_t_square: 0.543

@ -0,0 +1,373 @@
# tcp Handheld 客户端 模拟 ,模拟数据打包
# 直接平一个小包测试数据 直接写tou
import socket
import time
# IP = "39.96.0.224"
IP = "127.0.0.1"
PORT = 7887
ADDRESS = ( IP, PORT ) # 绑定地址
INFO_HEADER = "111355AA020000250000004F000107"
DATA_HEADER = "11 13 55 AA 02 00 10 25 00 00 00 DA 06 02 07"
END_FRAME = "11 13 55 AA 02 00 FF 25 00 00 00 00 00 00 00"
# 改数据
class DataContent:
# 11 13 55 AA 0200 00 11 00 00 00 4F00 01 07
# id type-num 序号 17 字节数 包号 总
info_frame = "1703140E313518565D1E51D55605CCE812068CDDC347D0239515000000000000000000000064000000000000000000000000000000000000000000F450F450F4500600000300000000000000000000"
# "1707070c161800000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0c000808e41778cf83df450f450f4500000000000000000000000000000131123600020000000524844557691e700cb054c054a05a10001"
sensor_frame =[
# 11 13 55 AA 02 00 10 11 00 00 00 DA 06 02 07
'131123600020000000524844557691E700CB054C054A05A10001\
23A000300700000A07FD062A073707440750074D074C07530759075A07610765076A07720790079107A407C3070709BE0AAC0ABF080F080808270849089E0880094F0BB70F2A1901\
23A000300600005223CD28242B3830E235813BE9401B46675A3181C68D5C7916715D74C676617658742E71B26C9C674363DA5F1C5E0160F164DF66A262F85AD153764E4F4C014D01\
23A00030050000EA4D8C4D314DF44D3C4FC250E453BA5E4486B8C5BCECC4D29A96436BFA56734E4B4A55473446364A845140582A5A9C55A54D91465440303C1B3FDE5783718E7001\
23A00030040000DC565046C140F63D21392E32D12B5B28A226F3253525662366219E20DD1FB11E971DC51C2F1C901B921A6419C21882185818E418181B401DEC1C1D1A3917F71501\
23A00030030000EE153316F516CA176E18B218CA18B118701845186A1730155913E51314153015E1146C1420147D13C11208128C1128113011BF121614DB12F70F3B0EE50D320E01\
23A00030020000FD0D3C0D930C470C0D0CB80B710B1E0BCD0A920A560A1F0A000A140A460A3E0AD0097A096C095F092109B60870085F0834082B081C0808080B08DD07B907950701\
23A000300100007007620755074A0740074C074607460748074A07500758075D0757074F0743075F0756075F0758074F073F07240745076207770756073F072A070907E606D60601\
23A00030000000F3060F07250722072E07200703070B07EC06FF0619073E07590734071807190719070A07E106DD06F006EC061B072F073E073E07220725070B07F806C806DE0601\
23A000300700000A07FD062A073707440750074D074C07530759075A07610765076A07720790079107A407C3070709BE0AAC0ABF080F080808270849089E0880094F0BB70F2A1901\
23A000300600005223CD28242B3830E235813BE9401B46675A3181C68D5C7916715D74C676617658742E71B26C9C674363DA5F1C5E0160F164DF66A262F85AD153764E4F4C014D01\
23A00030050000EA4D8C4D314DF44D3C4FC250E453BA5E4486B8C5BCECC4D29A96436BFA56734E4B4A55473446364A845140582A5A9C55A54D91465440303C1B3FDE5783718E7001\
23A00030040000DC565046C140F63D21392E32D12B5B28A226F3253525662366219E20DD1FB11E971DC51C2F1C901B921A6419C21882185818E418181B401DEC1C1D1A3917F71501\
23A00030030000EE153316F516CA176E18B218CA18B118701845186A1730155913E51314153015E1146C1420147D13C11208128C1128113011BF121614DB12F70F3B0EE50D320E01\
23A00030020000FD0D3C0D930C470C0D0CB80B710B1E0BCD0A920A560A1F0A000A140A460A3E0AD0097A096C095F092109B60870085F0834082B081C0808080B08DD07B907950701\
23A000300100007007620755074A0740074C074607460748074A07500758075D0757074F0743075F0756075F0758074F073F07240745076207770756073F072A070907E606D60601\
23A00030000000F3060F07250722072E07200703070B07EC06FF0619073E07590734071807190719070A07E106DD06F006EC061B072F073E073E07220725070B07F806C806DE0601\
23A000300700000A07FD062A073707440750074D074C07530759075A07610765076A07720790079107A407C3070709BE0AAC0ABF080F080808270849089E0880094F0BB70F2A1901\
23A000300600005223CD28242B3830E235813BE9401B46675A3181C68D5C7916715D74C676617658742E71B26C9C674363DA5F1C5E0160F164DF66A262F85AD153764E4F4C014D01\
23A00030050000EA4D8C4D314DF44D3C4FC250E453BA5E4486B8C5BCECC4D29A96436BFA56734E4B4A55473446364A845140582A5A9C55A54D91465440303C1B3FDE5783718E7001\
23A00030040000DC565046C140F63D21392E32D12B5B28A226F3253525662366219E20DD1FB11E971DC51C2F1C901B921A6419C21882185818E418181B401DEC1C1D1A3917F71501\
23A00030030000EE153316F516CA176E18B218CA18B118701845186A1730155913E51314153015E1146C1420147D13C11208128C1128113011BF121614DB12F70F3B0EE50D320E01\
23A00030020000FD0D3C0D930C470C0D0CB80B710B1E0BCD0A920A560A1F0A000A140A460A3E0AD0097A096C095F092109B60870085F0834082B081C0808080B08DD07B907950701\
23A000300100007007620755074A0740074C074607460748074A07500758075D0757074F0743075F0756075F0758074F073F07240745076207770756073F072A070907E606D60601\
23A00030000000F3060F07250722072E07200703070B07EC06FF0619073E07590734071807190719070A07E106DD06F006EC061B072F073E073E07220725070B07F806C806DE0601',
]
end_frame = "11 13 55 AA 02 00 FF 25 00 00 00 00 00 00 00" #0xFF
class MyBuf:
'''一次测量三个传感器数据打一个包'''
def __init__(self,) -> None:
self.__buf = b''
self.__head = {}
self.__begin_sign = b'\x23'
self.__end_sign = b'\x0D'
self.send_head = b'\x11\x13\x55\xAA'
self.send_id = 2 # 2byte 地位在前
self.send_type = 0 # info 0 data 1 pic 2
self.send_num = 0 # 一次测量最多十六次平均
self.send_con = 0 # 总的测量序号 4byte ,16次平均算几次?每次算一个
self.send_size = 0 #字节数 2byte
self.send_packet_con = 0
self.send_packet_all = 0
self.repeat = 0 # 依据这个拆包
self.groups = 0
self.state = 0
def readFile2Buf(self, fpath) -> None:
with open(fpath,"rb") as f:
self.__buf = f.read()
pass
pass
def read_buf(self, size: int) -> bytes:
if size > self.__buf.__len__():
return b''
ret = self.__buf[0:size]
self.__buf = self.__buf[size:]
return ret
def write_buf(self, buf: bytes) -> None:
len = buf.__len__()
# logging.info(f'Received ID:{id} Size:{len}')
self.__buf = self.__buf+buf
def get_buf_size(self) -> int:
return self.__buf.__len__()
def back_bytes(self, buf: bytes) -> None:
self.__buf = buf+self.__buf
def reset_head(self) -> None:
self.__head = {}
def reset_buf(self) -> None:
self.__buf = b''
def pack_info_send(self,):
length = 26
ret = self.read_buf(length)
id = self.send_id.to_bytes(2, byteorder='little')
self.send_type = 0
type_num = (self.send_type *16 + self.send_num).to_bytes(1,byteorder='little' ) # ??
con = self.send_con.to_bytes(4, byteorder='little')
size = length.to_bytes(2, byteorder='little')
packet_con = self.send_packet_con.to_bytes(1,byteorder='little' )
packet_all = self.send_packet_all.to_bytes(1,byteorder='little' )
ret = self.send_head + id + type_num + con + size + packet_con + packet_all +ret
self.send_packet_con += 1
# 取重复次数和测量间隔
return ret
def pack_handheld_send(self,):
length = 26+576+576+576
ret = self.read_buf(length)
id = self.send_id.to_bytes(2, byteorder='little')
self.send_type = 1
type_num = self.send_type << 4 + self.send_num # ??
con = self.send_con.to_bytes(4, byteorder='little')
size = length.to_bytes(2, byteorder='little')
packet_con = self.send_packet_con.to_bytes(1,byteorder='little' )
packet_all = self.send_packet_all.to_bytes(1,byteorder='little' )
ret = self.send_head + id + type_num + con + size + packet_con + packet_all +ret
self.send_con+=1 # 总测量序号+1
self.send_num += 1 # 是平均中的第几次
self.send_packet_con += 1
return ret
pass
def pack_end_send(self,):
ret = b'\x11\x13\x55\xAA\x02\x00\xFF\x11\x00\x00\x00\x00\x00\x00\x00'
return ret
pass
class ProfilerBuf:
'''一次测量三个传感器数据打一个包'''
def __init__(self,) -> None:
self.__buf = b''
self.__head = {}
self.__begin_sign = b'\x23'
self.__end_sign = b'\x0D'
self.send_head = b'\x11\x13\x55\xAA'
self.send_id = 2 # 2byte 地位在前
self.send_type = 0 # info 0 data 1 pic 2
self.send_num = 0 # 一次测量最多十六次平均
self.send_con = 0 # 总的测量序号 4byte ,16次平均算几次?每次算一个
self.send_size = 0 #字节数 2byte
self.send_packet_con = 0
self.send_packet_all = 0
self.repeat = 0 # 依据这个拆包
self.groups = 0
self.state = 0
def readFile2Buf(self, fpath) -> None:
with open(fpath,"rb") as f:
self.__buf = f.read()
pass
pass
def read_buf(self, size: int) -> bytes:
if size > self.__buf.__len__():
return b''
ret = self.__buf[0:size]
self.__buf = self.__buf[size:]
return ret
def write_buf(self, buf: bytes) -> None:
len = buf.__len__()
# logging.info(f'Received ID:{id} Size:{len}')
self.__buf = self.__buf+buf
def get_buf_size(self) -> int:
return self.__buf.__len__()
def back_bytes(self, buf: bytes) -> None:
self.__buf = buf+self.__buf
def reset_head(self) -> None:
self.__head = {}
def reset_buf(self) -> None:
self.__buf = b''
def get_info_cnt(self, mode= 0, len=0) -> None:
ret = b''
if mode == 0:
ret = self.read_buf(len)
else:
ret = self.read_buf(len)
return ret
def pack_info_send(self,):
length = 26
ret = self.self.read_buf(26)
id = self.send_id.to_bytes(2, byteorder='little')
self.send_type = 0
type_num = (self.send_type *16 + self.send_num).to_bytes(1,byteorder='little' ) # ??
con = self.send_con.to_bytes(4, byteorder='little')
size = length.to_bytes(2, byteorder='little')
packet_con = self.send_packet_con.to_bytes(1,byteorder='little' )
packet_all = self.send_packet_all.to_bytes(1,byteorder='little' )
ret = self.send_head + id + type_num + con + size + packet_con + packet_all +ret
self.send_packet_con += 1
# 取重复次数和测量间隔
return ret
def pack_handheld_send(self,):
length = 26+576+576+576
ret = self.read_buf(length)
id = self.send_id.to_bytes(2, byteorder='little')
self.send_type = 1
type_num = self.send_type << 4 + self.send_num # ??
con = self.send_con.to_bytes(4, byteorder='little')
size = length.to_bytes(2, byteorder='little')
packet_con = self.send_packet_con.to_bytes(1,byteorder='little' )
packet_all = self.send_packet_all.to_bytes(1,byteorder='little' )
ret = self.send_head + id + type_num + con + size + packet_con + packet_all +ret
self.send_con+=1 # 总测量序号+1
self.send_num += 1 # 是平均中的第几次
self.send_packet_con += 1
return ret
pass
def pack_end_send(self,):
ret = b'\x11\x13\x55\xAA\x02\x00\xFF\x11\x00\x00\x00\x00\x00\x00\x00'
return ret
pass
class TcpProfiler(object):
def __init__(self ):
super(TcpProfiler, self).__init__()
self.flag = True
self.delay_time = 15
self.recv_times = 10
self.head = b''
self.socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
self.socket.setblocking(True)
def connect(self,):
print(f"== connect to server : {ADDRESS}")
self.socket.connect( ADDRESS )
def disconnect(self,):
self.socket.close( )
def rcv(self,):
recv_data = self.socket.recv( 1024 )
if recv_data == self.head:
self.flag =True
time.sleep( 0.01 )
def send_rcv(self,buf):
self.socket.send( buf )
self.flag = False
self.head = buf[:15]
# 当前接收到数据就不阻塞了,后加数据不对继续阻塞
try:
data = self.socket.recv(1024)
if data != b'':
print("not empty")
print(data)
if data==self.head:
print(f"recv.... {data}" )
self.flag = True
self.head = b''
time.sleep( 0.1 )
except BlockingIOError as e:
print(f" 阻塞 中断 ....")
except KeyboardInterrupt as e:
print(f" == ctrl +c , exit")
def send_info(self,):
buf = bytes.fromhex (INFO_HEADER+ DataContent.info_frame)
self.flag = False
self.head = buf[:15]
print(f"head ....{self.head.hex()}")
self.send_rcv(buf)
def send_data(self,):
buf = b''
buf = bytes.fromhex (DATA_HEADER+ DataContent.sensor_frame[0])
self.flag = False
self.head = buf[:15]
print(f"head ....{self.head.hex()}")
self.send_rcv(buf)
# for i in range( len( DataContent.sensor_frame) ):
# print( "sensorframe..." )
# buf = bytes.fromhex ( DataContent.sensor_frame[i] )
# self.flag = False
# self.head = buf[:15]
# print(f"head ....{self.head.hex()} ")
# self.send_rcv(buf)
def send_profiler_frame(self,num):
'''一次三个传感器数据作为一帧'''
buf = b''
buf = bytes.fromhex (DATA_HEADER+ DataContent.sensor_frame[0])
self.flag = False
self.head = buf[:15]
print(f"head ....{self.head.hex()}")
self.send_rcv(buf)
for i in range( num ):
i = i%256
print( "sensorframe..." )
buf = bytes.fromhex ( DataContent.sensor_frame[i] )
self.flag = False
self.head = buf[:15]
print(f"head ....{self.head.hex()} ")
self.send_rcv(buf)
def send_end_frame(self,):
buf = bytes.fromhex (DataContent.end_frame)
self.flag = False
self.head = buf[:15]
print(f"head ....{self.head.hex()}")
self.send_rcv(buf)
def send_protocol_head(self,):
pass
if __name__ == '__main__':
pass
# print( bytes.fromhex (DataContent.info_frame) )
th = TcpProfiler()
th.connect()
send_num = 10;
try :
th.send_info()
print("send info frame...")
time.sleep( 10)
except KeyboardInterrupt as e:
print(e)
try :
th.send_data()
print("send sensor frame...")
time.sleep( 10)
except KeyboardInterrupt as e:
print(e)
try :
th.send_end_frame()
print("send end frame...")
time.sleep( 10)
except KeyboardInterrupt as e:
print(e)
th.disconnect( )
# with open("info.bin","rb") as f:
# d = f.read()
# print(d.hex())
'''
131123600020000000524844557691e700cb054c054a05a10001
23a000300700000a07fd062a073707440750074d074c07530759075a07610765076a07720790079107a407c3070709be0aac0abf080f080808270849089e0880094f0bb70f2a190123a000300600005223cd28242b3830e235813be9401b46675a3181c68d5c7916715d74c676617658742e71b26c9c674363da5f1c5e0160f164df66a262f85ad153764e4f4c014d0123a00030050000ea4d8c4d314df44d3c4fc250e453ba5e4486b8c5bcecc4d29a96436bfa56734e4b4a55473446364a845140582a5a9c55a54d91465440303c1b3fde5783718e700123a00030040000dc565046c140f63d21392e32d12b5b28a226f3253525662366219e20dd1fb11e971dc51c2f1c901b921a6419c21882185818e418181b401dec1c1d1a3917f7150123a00030030000ee153316f516ca176e18b218ca18b118701845186a1730155913e51314153015e1146c1420147d13c11208128c1128113011bf121614db12f70f3b0ee50d320e0123a00030020000fd0d3c0d930c470c0d0cb80b710b1e0bcd0a920a560a1f0a000a140a460a3e0ad0097a096c095f092109b60870085f0834082b081c0808080b08dd07b90795070123a000300100007007620755074a0740074c074607460748074a07500758075d0757074f0743075f0756075f0758074f073f07240745076207770756073f072a070907e606d6060123a00030000000f3060f07250722072e07200703070b07ec06ff0619073e07590734071807190719070a07e106dd06f006ec061b072f073e073e07220725070b07f806c806de060123a000300700000a07fd062a073707440750074d074c07530759075a07610765076a07720790079107a407c3070709be0aac0abf080f080808270849089e0880094f0bb70f2a190123a000300600005223cd28242b3830e235813be9401b46675a3181c68d5c7916715d74c676617658742e71b26c9c674363da5f1c5e0160f164df66a262f85ad153764e4f4c014d0123a00030050000ea4d8c4d314df44d3c4fc250e453ba5e4486b8c5bcecc4d29a96436bfa56734e4b4a55473446364a845140582a5a9c55a54d91465440303c1b3fde5783718e700123a00030040000dc565046c140f63d21392e32d12b5b28a226f3253525662366219e20dd1fb11e971dc51c2f1c901b921a6419c21882185818e418181b401dec1c1d1a3917f7150123a00030030000ee153316f516ca176e18b218ca18b118701845186a1730155913e51314153015e1146c1420147d13c11208128c1128113011bf121614db12f70f3b0ee50d320e0123a00030020000fd0d3c0d930c470c0d0cb80b710b1e0bcd0a920a560a1f0a000a140a460a3e0ad0097a096c095f092109b60870085f0834082b081c0808080b08dd07b90795070123a000300100007007620755074a0740074c074607460748074a07500758075d0757074f0743075f0756075f0758074f073f07240745076207770756073f072a070907e606d6060123a00030000000f3060f07250722072e07200703070b07ec06ff0619073e07590734071807190719070a07e106dd06f006ec061b072f073e073e07220725070b07f806c806de060123a000300700000a07fd062a073707440750074d074c07530759075a07610765076a07720790079107a407c3070709be0aac0abf080f080808270849089e0880094f0bb70f2a190123a000300600005223cd28242b3830e235813be9401b46675a3181c68d5c7916715d74c676617658742e71b26c9c674363da5f1c5e0160f164df66a262f85ad153764e4f4c014d0123a00030050000ea4d8c4d314df44d3c4fc250e453ba5e4486b8c5bcecc4d29a96436bfa56734e4b4a55473446364a845140582a5a9c55a54d91465440303c1b3fde5783718e700123a00030040000dc565046c140f63d21392e32d12b5b28a226f3253525662366219e20dd1fb11e971dc51c2f1c901b921a6419c21882185818e418181b401dec1c1d1a3917f7150123a00030030000ee153316f516ca176e18b218ca18b118701845186a1730155913e51314153015e1146c1420147d13c11208128c1128113011bf121614db12f70f3b0ee50d320e0123a00030020000fd0d3c0d930c470c0d0cb80b710b1e0bcd0a920a560a1f0a000a140a460a3e0ad0097a096c095f092109b60870085f0834082b081c0808080b08dd07b90795070123a000300100007007620755074a0740074c074607460748074a07500758075d0757074f0743075f0756075f0758074f073f07240745076207770756073f072a070907e606d6060123a00030000000f3060f07250722072e07200703070b07ec06ff0619073e07590734071807190719070a07e106dd06f006ec061b072f073e073e07220725070b07f806c806de
1707070c161800000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0c000808e41778cf83df450f450f4500000000000000000000000000000131123600020000000524844557691e700cb054c054a05a10001
'''

@ -0,0 +1,11 @@
class TCPIPException(Exception):
def __init__(self, message="TCPIP 自定义异常"):
self.message = "TCPIP exception : " + message
class SerialException(Exception):
def __init__(self, message="Serial 自定义异常"):
self.message = "serial exception : " + message
class MyException(Exception):
def __init__(self, message=" 自定义异常"):
self.message = "自定义异常: " + message

@ -0,0 +1,285 @@
# coding=utf-8
'''
单例模式日志 -- 使用一次关闭 handler
这种方法优缺点
缺点 输出的format 需要自己定义 并过滤
过滤要看是否以什么开头或包含什么
优点 不占用文件资源占用系统资源小
调用 log.info( ) log.error()
'''
import logging
import logging.handlers
import os
import time
import threading
# from config import LOG_PATH,LOG_LEVEL,LOG_ENABLED,LOG_FORMAT, \
# LOG_TO_CONSOLE,LOG_TO_FILE
MY_LOGGER_NAME = "DefaultLogger"
LOG_ENABLED = True # 是否启用日志
LOG_TO_CONSOLE = True # 是否启用控制台输出日志
LOG_TO_FILE = False # 是否启用文件输出
LOG_COLOR_ENABLE = True # 是否启用颜色日志
LOGGER_DIR = "logs"
LOGGER_PATH = os.path.join( os.path.dirname(__file__), LOGGER_DIR )
LOGGER_FILENAME = os.path.join( LOGGER_PATH, 'logs.log' )
"""
logging.INFO , logging.DEBUG , logging.WARNING , logging.ERROR ,
"""
LOG_LEVEL = logging.INFO # 日志等级DEBUG INFO WARNIG ERROR
# LOG_LEVEL = logging.DEBUG
# LOG_LEVEL = logging.WARNING
"""
# LOG_FORMAT = " %(name)s - %(module)s - %(filename)s - %(lineno)d | %(levelname)s : %(message)s"
# LOG_FORMAT = "%(levelname)s - %(asctime)s - process: %(process)d - threadname: %(thread)s " \
# "- %(filename)s - %(funcName)s - %(lineno)d - %(module)s " \
# "- %(message)s "
# LOG_FORMAT = "%(asctime)s - %(thread)s " \
# "- %(levelname)s ::: %(message)s "
# '[%(asctime)s] |%(thread)s| %(levelname)-6s: %(message)s'
# fm = '%(levelname):%(levelno)s:%(name)s:%(funcName)s:%(asctime):%(pathname):%(filename):%(module):%(thread):%(threadName)'
# 此处日志颜色,修改日志颜色是通过 Filter实现的
"""
LOG_FORMAT = '%(levelname)s\t[%(asctime)s] %(package)s:%(classname)s:%(funcname)s \t>> %(message)s'
"""
# 此处日志颜色,修改日志颜色是通过 Filter实现的
"""
LOG_FORMAT_COLOR_DICT = {
'ERROR' : "\033[31mERROR\033[0m",
'INFO' : "\033[36mINFO\033[0m",
'DEBUG' : "\033[1mDEBUG\033[0m",
'WARN' : "\033[33mWARN\033[0m",
'WARNING' : "\033[33mWARNING\033[0m",
'CRITICAL': "\033[35mCRITICAL\033[0m",
}
"""
# Filter 用法, 以package class function 过滤 __package__ __class__
# log.error( f"{__package__}::{__class__.__name__}::{sys._getframe().f_code.co_name} >> ")
# log.error( f"PacakgeName::ClassName::FunctionName:: ")
# LOGGER_FILTER_PACKAGE=[] 为空, 则Filter不起作用
# 不为空,则只显示定义的报名
# LOGGER_FILTER_CLASS=[] 为空, 则Filter不起作用
# 不为空,则只显示定义的类或
# LOGGER_FILTER_FUNCNAME=[] 为空, 则Filter不起作用
# 不为空,则只显示定义的函数
"""
# LOGGER_FILTER_PACKAGE = [ "test_logger" ] # 包名,文件名去 .py??
LOGGER_FILTER_PACKAGE = [ ]
LOGGER_FILTER_CLASS = [ ] # 类名,文件名去 .py??
# LOGGER_FILTER_CLASS = [ "LogTest" ]
# LOGGER_FILTER_FUNCNAME = [ "test1","test" ] # 函数名
LOGGER_FILTER_FUNCNAME = [ ]
LOGGER_FILTER_LEVELNAME = [ ] # INFO DEBUG WARNING
class PackageFilter(logging.Filter):
def __init__(self, filter_word:list = []):
self.filter_word = filter_word
pass
def filter(self, record: logging.LogRecord) -> bool:
if self.filter_word is not None:
return record.package in self.filter_word
class ClassFilter(logging.Filter):
def __init__(self, filter_word:list = []):
self.filter_word = filter_word
pass
def filter(self, record: logging.LogRecord) -> bool:
if self.filter_word is not None:
return record.classname in self.filter_word
pass
class FunctionFilter(logging.Filter):
def __init__(self, filter_word:list = []):
self.filter_word = filter_word
pass
def filter(self, record:logging.LogRecord) -> bool:
if self.filter_word is not None:
return record.funcname in self.filter_word
class LevelNameFilter(logging.Filter):
def __init__(self, filter_word:list = []):
self.filter_word = filter_word
pass
def filter(self, record:logging.LogRecord) -> bool:
if self.filter_word is not None:
return record.levelname in self.filter_word
class ColorFilter(logging.Filter):
def __init__(self,):
pass
def filter(self, record: logging.LogRecord) -> bool:
record.levelname = LOG_FORMAT_COLOR_DICT.get(record.levelname)
return True
class Log(object):
_instance_lock = threading.Lock()
def __new__(cls, *args, **kwargs):
if not hasattr(Log, "_instance"):
with Log._instance_lock:
if not hasattr(Log, "_instance"):
Log._instance = object.__new__(cls)
return Log._instance
def __init__(self, loggername = "DefaultLog" ):
# 文件命名 os.path.join(): 将多个路径组合后返回
self.logger_filepath = LOGGER_FILENAME
self.loggername = loggername
self.level = LOG_LEVEL
# 日志输出格式
fm = LOG_FORMAT
self.formatter = logging.Formatter( fm )
# 生成记录器对象
self.logger = logging.getLogger( self.loggername )
self.logger.setLevel(LOG_LEVEL)
# 日志过滤
self.__add_filter()
def __console(self, level, message, extra={} ):
# 添加 handler
self.__add_handler()
# 判断日志级别
if level == logging.INFO:
self.logger.info( message, extra=extra)
elif level == logging.DEBUG:
self.logger.debug(message,extra=extra)
elif level == logging.WARNING:
self.logger.warning(message,extra=extra)
elif level == logging.ERROR:
self.logger.error(message,extra=extra)
# removeHandler在记录日志之后移除句柄,避免日志输出重复问题
self.__remove_handler()
# if LOG_TO_FILE and self.file_handler:
# self.logger.removeHandler(self.file_handler)
# # 关闭打开的文件
# self.file_handler.close()
# if LOG_TO_CONSOLE and self.stream_handler:
# self.logger.removeHandler(self.stream_handler)
# # 关闭打开的文件
# self.stream_handler.close()
pass
# debug < info< warning< error< critical
# debug模式
def debug(self, message, package="Unknown", classname="Unknown", funcname="Unknown" ):
self.__console(logging.DEBUG, message, extra={"package":package, "classname":classname, "funcname":funcname} )
# self.__remove_handler()
# info模式
def info(self, message, package="Unknown", classname="Unknown", funcname="Unknown" ):
self.__console(logging.INFO, message, extra={"package":package, "classname":classname, "funcname":funcname} )
# self.__remove_handler()
# warning模式
def warning(self, message, package="Unknown", classname="Unknown", funcname="Unknown"):
self.__console(logging.WARNING, message, extra={"package":package, "classname":classname, "funcname":funcname} )
# self.__remove_handler()
# error模式
def error(self, message, package="Unknown", classname="Unknown", funcname="Unknown"):
self.__console(logging.ERROR, message, extra={"package":package, "classname":classname, "funcname":funcname} )
# self.__remove_handler()
def __add_filter(self ):
if len( LOGGER_FILTER_PACKAGE ) > 0 :
self.logger.addFilter( PackageFilter( filter_word=LOGGER_FILTER_PACKAGE ) )
if len( LOGGER_FILTER_CLASS ) > 0 :
self.logger.addFilter( ClassFilter( filter_word=LOGGER_FILTER_CLASS ) )
if len( LOGGER_FILTER_FUNCNAME ) > 0 :
self.logger.addFilter( FunctionFilter( filter_word=LOGGER_FILTER_FUNCNAME ) )
if len(LOGGER_FILTER_LEVELNAME) > 0 :
self.logger.addFilter( LevelNameFilter( filter_word=LOGGER_FILTER_LEVELNAME ) )
def __add_handler(self ):
if LOG_ENABLED and LOG_TO_FILE:
# 考虑使用 RotatingFileHandler TimedRotatingFileHandler防止日志过大
# RotatingFileHandler("test", "a", 4096, 2, "utf-8")
# TimedRotatingFileHandler(filename=LOG_PATH+"thread_", when="D", interval=1, backupCount=7)
self.file_handler = logging.handlers.TimedRotatingFileHandler(filename=self.logger_filepath, when='D', interval=1, backupCount=30, encoding='utf-8')
# self.file_handler = logging.FileHandler( self.logger_filepath, encoding='utf-8' )
self.file_handler.setFormatter( self.formatter )
# self.file_handler.setLevel( LOG_LEVEL )
# if LOG_COLOR_ENABLE: # 文件日志无需加彩色
# self.file_handler.addFilter( ColorFilter( ) )
self.logger.addHandler(self.file_handler)
if LOG_ENABLED and LOG_TO_CONSOLE:
# 创建一个StreamHandler,用于输出到控制台
self.stream_handler = logging.StreamHandler()
self.stream_handler.setFormatter(self.formatter)
# self.stream_handler.setLevel( LOG_LEVEL )
if LOG_COLOR_ENABLE:
self.stream_handler.addFilter( ColorFilter( ) )
self.logger.addHandler(self.stream_handler)
def __remove_handler(self ):
if LOG_TO_FILE and self.file_handler:
self.logger.removeHandler(self.file_handler)
if len(self.logger.handlers)>0:
self.logger.handlers.pop()
# 关闭打开的文件
self.file_handler.close()
if LOG_TO_CONSOLE and self.stream_handler:
self.logger.removeHandler(self.stream_handler)
if len(self.logger.handlers)>0:
self.logger.handlers.pop()
# 关闭控制台
self.stream_handler.close()
def __remove_handler2(self ):
if LOG_ENABLED and LOG_TO_CONSOLE:
self.logger.removeHandler(self.stream_handler)
self.logger.handlers.pop()
# 关闭控制台
self.stream_handler.close()
if LOG_ENABLED and LOG_TO_FILE:
self.logger.removeHandler(self.file_handler)
self.logger.handlers.pop()
# 关闭打开的文件
self.file_handler.close()
log = Log( loggername = "DefaultLog")
"""
filename: 指定日志文件名
filemode: 和file函数意义相同指定日志文件的打开模式wa
format: 指定输出的格式和内容format可以输出很多有用信息显示的条目可以是以下内容
%(levelname) 日志级别的名字格式
%(levelno)s 日志级别的数字表示
%(name)s 日志名字 loggername
%(funcName)s 函数名字
%(asctime) 日志时间可以使用datefmt去定义时间格式如上图
%(pathname) 脚本的绝对路径
%(filename) 脚本的名字
%(module) 模块的名字
%(thread): thread id
%(threadName) 线程的名字
"""
"""
文件名行号 函数名, 要在调用的时候想办法了
# 绝对路径
print( __file__ )
print( sys.argv[0] )
# 文件名
print( os.path.basename(__file__) )
print( os.path.basename(sys.argv[0]) )
self.__class__.__name__
self.__class__.__name__, get_current_function_name()
logger名 __name__
"""

@ -0,0 +1,265 @@
from pathlib import PurePath, Path
# from myconfig import NEWLINE,TOKEN,SEPARATOR
"""
"""
class MyDir(object):
"""
操作方法:设置base tuple_dir header
设置的是路径, 文件名要 ifNotNewFile 传入
"""
def __init__(self) -> None:
self.base_dir = Path()
self.dir_tuple = ()
self.header = []
self.header_str = ""
self.content = []
self.content_str = ""
self.current_dir = None
self.current_filepath = None
pass
def getDir(self,):
return self.current_dir
pass
def setBaseDir(self, dir: Path):
self.base_dir = dir
self.current_dir = self.base_dir
pass
def setDir(self, t:tuple=()):
self.dir_tuple = t
if len(self.dir_tuple) == 0 :
self.current_dir = self.base_dir
else:
self.current_dir = self.base_dir.joinpath( *t )
pass
def getDirFromBaseAndTuple(self, base_dir:Path, dir_tuple: tuple):
'''外部调用返回路径'''
ret_path = base_dir
t = dir_tuple
if len(t) == 0 :
ret_path = ret_path
else:
ret_path = ret_path.joinpath( *t )
return ret_path
pass
def setHeader(self, headerlist:list, headerSeperator: str = ";", headerinfo: str = None):
header_str = ""
if len(headerlist) == 0:
return
if headerinfo != None:
header_str = headerinfo + headerSeperator
for hl in headerlist:
header_str = header_str + str(hl) + headerSeperator
self.header_str = header_str[:-1]
pass
def setContent(self, contentlist: list, contentSeperator: str = ";", contentinfo: str = None):
content_str = ""
if len(contentlist) == 0:
return
if contentinfo != None:
content_str = contentinfo + contentSeperator
tmp_str = ""
for cl in contentlist:
tmp_str = tmp_str + str(cl) + contentSeperator
self.content_str = content_str + tmp_str[:-1]
pass
def newDirIfNot(self,) -> None:
# self.current_path = self.base_path.joinpath(self.path_tuple)
self.current_dir.mkdir(parents=True, exist_ok=True)
pass
def newFileIfNot(self, fname: str) -> None:
self.newDirIfNot()
self.current_filepath = self.current_dir.joinpath(fname)
if not self.current_filepath.exists():
with open(self.current_filepath, 'a') as f:
pass
return
pass
def getCurrentFileSize(self,):
return self.current_filepath.stat().st_size
def getFirstline(self,):
first_line = ""
with open(self.current_filepath, 'r') as f: # 打开文件
first_line = f.readline() # 取第一行
return first_line.strip('\n').strip('\r')
def checkHeader(self,) -> int:
'''
返回:
0 : 文件为空,可以直接写header
1 : header对应上 无需处理
-1: 需要提醒用户保存数据后,删除文件后再处理
'''
if self.getCurrentFileSize() == 0:
return 0
first_line = self.getFirstline()
# print(f"firstline: {first_line}" )
# print(f"header_str: {self.header_str}" )
if first_line == self.header_str:
return 1
return -1
pass
def writeHeader(self,) -> None:
with open(self.current_filepath, "a") as f:
f.write(self.header_str)
return None
pass
def writeContent(self,new_line="\n") -> None:
with open(self.current_filepath, "a") as f:
f.write(new_line+self.content_str)
return None
pass
def is_dir_empty(self, ):
'''文件夹是否为空'''
has_next = next(self.current_dir.iterdir(), None)
if has_next is None:
return True
return False
def is_file_empty(self,):
'''文件是否为空'''
if self.current_dir.stat().st_size ==0:
return True
return False
def deleteDir(self,):
'''文件夹是否为空'''
try:
if self.current_dir.exists():
self.current_dir.rmdir()
except OSError as e:
raise Exception(e)
return True
## 其他需求
def get_child_dir(self,) -> list:
ret = []
tmp_dir = self.current_dir.glob("**/")
for td in tmp_dir:
if td.is_dir():
ret.append(td.relative_to(self.current_dir))
return ret
pass
def get_child_dir_only(self,) -> list:
ret = []
for d in self.current_dir.iterdir():
if d.is_dir():
ret.append(d.relative_to(self.current_dir))
return ret
pass
def get_files_from_currentdir(self, fmt:str="*/*" ) -> list:
'''fmt: * */* */*/*'''
ret = []
tmp_dir = self.current_dir.glob(fmt)
print(tmp_dir)
for td in tmp_dir:
if td.is_file():
ret.append(td)
return ret
pass
def sort_dir_and_check( self, dirs:list ):
'''相对目录排序,目录最后一级'''
ret = []
if len(dirs) == 0:
return ret
tmp = {}
tmp_lst = []
for d in dirs:
last:str = d.parts[-1]
if last.isdigit() :
tmp.update( {last:d} )
tmp_lst.append(int(last))
pass
tmp_lst.sort()
for t in tmp:
ret.append(tmp.get(str(t)))
pass
return ret
def sort_filepath_and_check(self, path_files:list):
'''相对目录排序,目录最后一级'''
ret = []
if len(path_files) == 0:
return ret
tmp = {}
tmp_lst = []
for d in path_files:
last:str = d.stem
if last.isdigit() :
tmp.update( {last:d} )
tmp_lst.append(int(last))
pass
tmp_lst.sort()
for t in tmp:
ret.append(tmp.get(str(t)))
pass
return ret
def group_and_sort_filepath(self,path_files:list):
ret = {}
# dirs_lst = []
# len_files = len(path_files)
# if len_files == 0:
# return False
# for pf in path_files:
# pf_dir:str = pf.parts[-2]
# if pf_dir.isdigit() and int(pf_dir) not in dirs_lst:
# dirs_lst.append( int(pf_dir) )
# dirs_lst.sort()
def check_dirs(self, dirs:list, begin:int =0, step:int=1):
'''检查目录是否从begin开始递增'''
len_dirs = len(dirs)
if len_dirs == 0:
return False
for i in range(begin,len_dirs,step) :
if dirs[i].parts[-1] != str(i) :
return False
return True
def check_path_files(self,path_files:list,begin:int =0, step:int=1):
'''检查文件名从begin开始递增'''
len_files = len(path_files)
if len_files == 0:
return False
for i in range(begin,len_files,step) :
if path_files[i].stem != str(i) :
return False
return True
if __name__ == "__main__":
mp = MyDir()
mp.setBaseDir(Path())
print(mp.current_dir)
# t = ("test_dir","1","11")
t = ("test_dir", )
mp.setDir( t )
print(mp.current_dir)
cd = mp.get_child_dir_only()
c = mp.sort_dir_and_check(cd)
print(cd )
print(c )

@ -0,0 +1,66 @@
from datetime import datetime, timedelta
# import locale
# locale.setlocale(locale.LC_ALL, '')
TIME_STR = "2022-06-10 16:16:16"
STD_TIME_STR_FMT = "%Y-%m-%d %H:%M:%S" # 小写y是两位年份
CUR_TIME_STR_FMT = "%Y-%m-%d %H:%M:%S"
class MyTime(object):
"""
操作方法:设置base tuple_path header
"""
def __init__(self) -> None:
self.cur_time_str_fmt = "%Y-%m-%d %H:%M:%S"
self.std_time_str_fmt = "%Y-%m-%d %H:%M:%S"
self.cur_time_str = ""
self.std_time_str = ""
self.cur_datetime = ""
pass
def setCurrentTimeStrFmt(self, s):
self.cur_time_str_fmt = s
pass
def setStdTimeStrFmt(self, s):
self.std_time_str_fmt = s
pass
def setCurrentTimeStr(self, s):
self.cur_time_str = s
self.cur_datetime = datetime.strptime(self.cur_time_str, self.cur_time_str_fmt)
pass
def setStdTimeStr(self, s):
self.std_time_str = s
self.cur_datetime = datetime.strptime(
self.std_time_str, STD_TIME_STR_FMT)
pass
def Current2STD(self):
# self.cur_datetime = datetime.strptime(self.cur_time_str , CUR_TIME_STR_FMT)
self.std_time_str = datetime.strftime(
self.cur_datetime, STD_TIME_STR_FMT)
pass
def STD2Current(self, format: str):
# self.cur_datetime = datetime.strptime(self.std_time_str , STD_TIME_STR_FMT)
self.cur_time_str = datetime.strftime(
self.cur_datetime, CUR_TIME_STR_FMT)
pass
def timeDelta(self, days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0):
self.cur_datetime = self.cur_datetime + \
timedelta(days=0, seconds=0, microseconds=0,
milliseconds=0, minutes=0, hours=0, weeks=0)
pass
if __name__ == "__main__":
s = "2023-02-07 14:02:46"
mt = MyTime()
mt.setCurrentTimeStr(s)
print(mt.cur_datetime)
pass
Loading…
Cancel
Save