Compare commits

...

13 Commits
main ... server

  1. 3
      .gitignore
  2. 286
      Ramses.py
  3. 182
      app.py
  4. 132
      atest.py
  5. 733
      awrams.py
  6. 297
      calfile/awrams/Back_SAM_852F.dat
  7. 297
      calfile/awrams/Back_SAM_859F.dat
  8. 297
      calfile/awrams/Back_SAM_85B5.dat
  9. 297
      calfile/awrams/CalAQ_SAM_852F.dat
  10. 297
      calfile/awrams/CalAQ_SAM_859F.dat
  11. 297
      calfile/awrams/CalAQ_SAM_85B5.dat
  12. 297
      calfile/awrams/Cal_SAM_852F.dat
  13. 297
      calfile/awrams/Cal_SAM_859F.dat
  14. 297
      calfile/awrams/Cal_SAM_85B5.dat
  15. 81
      calfile/awrams/SAMIP_50ED_ALL.ini
  16. 32
      calfile/awrams/SAM_852F.ini
  17. 30
      calfile/awrams/SAM_859F.ini
  18. 30
      calfile/awrams/SAM_85B5.ini
  19. 20
      config.yml
  20. 237
      configuration.py
  21. BIN
      data/2023/03/20/37/info.bin
  22. BIN
      data/2023/03/20/37/sensor.bin
  23. BIN
      data/2023/3/20/37/info.bin
  24. BIN
      data/2023/3/20/37/sensor.bin
  25. 1037
      handheld.py
  26. 789
      myRamses.py
  27. 322
      myconfig.py
  28. 1008
      readcal.py
  29. 485
      receive.py
  30. 4
      retrieve.yml
  31. 234
      tcp_handheld.py
  32. 0
      tools/__init__.py
  33. 11
      tools/myexception.py
  34. 285
      tools/mylogger.py
  35. 265
      tools/mypath.py
  36. 66
      tools/mytime.py

3
.gitignore vendored

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

@ -0,0 +1,286 @@
#! 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
"""
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.current_buf = ""
# self.current_buf_seq = 0
# self.current_it_int = {"it": 0, "light_int": []} # 积分时间及换算的整数值
# self.res = {"wavelength": [], "light": []}
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 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]
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() )

182
app.py

@ -0,0 +1,182 @@
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 awrams import AwramsHandle,HandheldHandle
IP = ""
PORT = 7887
ADDRESS = (IP, PORT) # 绑定地址
class MyApp(object):
def __init__(self,):
log.info(f"******** Awarms server initiate.... *********", __name__, "", "")
self.device_type = DeviceType.AWRAMS.name
self.mycfg = MyConfig() # 传入 cfg retrieve 的yml文件
# 配置反演需要的参数 波长 间隔 , rowFactor
self.retrieve = self.mycfg.get_retrieve() # 读retrieve.yml
log.info(f"Retrieve: {self.retrieve}", __name__, "", "")
# log.info(f"syscfg: {device}", __name__, "", "")
self.mycfg.setDeviceType( DeviceType.AWRAMS )
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.handheld_handle = { }
for k,v in self.cal_cfg.items():
ah = HandheldHandle( deviceid=k, cfg=self.sensor_cfg[k], calcfg=v, rtv=self.retrieve)
self.handheld_handle.update( {k:ah } )
def run_server(self,):
# 启动接受服务器
log.info(f"启动接受服务器, IP: {IP} , Port:{PORT} ", __name__, "", "")
server_ = MyThreadingTCPServer(ADDRESS, MyServer, cfg=self.cal_cfg, retrieve = self.retrieve ,handheld_handle=self.handheld_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 Handheld server initiate.... *********", __name__, "", "")
app = MyApp()
app.init_data_process( )
app.run_server()
# #######################################
# device_id = DEVICE_ID # 多个设备
# device_type = DeviceType.AWRAMS.name
# mycfg = MyConfig()
# # 配置反演需要的参数 波长 间隔
# retrieve = mycfg.get_retrieve()
# log.info(f"Retrieve: {retrieve}", __name__, "", "")
# # log.info(f"syscfg: {device}", __name__, "", "")
# mycfg.setDeviceType(DeviceType.AWRAMS)
# init_para = mycfg.read_yaml()
# log.info(f"Current Device: {device_type} ", __name__, "", "")
# log.info(f"Sensor: {init_para}", __name__, "", "")
# cal_cfg = {}
# 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})
# # 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.warning(" Ctrl+C 退出主程序 ",__name__, "", "")
# server_.server_close()
# except Exception as e:
# log.info(" 系统异常, 如下: \n ",__name__, "", "")
# 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,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)

File diff suppressed because one or more lines are too long

@ -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 =
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,20 @@
2:
1:
FUNC: Lsky
SN: '85B5'
2:
FUNC: Esky
SN: '50ED'
3:
FUNC: Lwater
SN: '852F'
3:
1:
FUNC: Lsky
SN: '85B5'
2:
FUNC: Esky
SN: '50ED'
3:
FUNC: Lwater
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 })

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -0,0 +1,322 @@
#! 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
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:
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:
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:
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
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,485 @@
#!/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 handheld import Handheld
from awrams import AwramsHandle,HandheldHandle
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, retrieve=None,handheld_handle:HandheldHandle=None):
self.cfg = cfg
self.retrieve = retrieve
self.handheld_handle = handheld_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.SURFACE.name
self.measure_id = None
self.cfg = {}
self.awrams = None
pass
# def deal(self, id: int, con: int, cfg:dict , retrieve) -> None: # 取字典中的 payload
def deal(self, pth: Path, cfg: dict, retrieve, handheld_handle):
log.info(f" Handheld 到数据开始处理数据 device_id {id} ")
self.old_folder = pth
self.base_folder = self.old_folder.parent
deviceid = int(self.base_folder.parts[-1]) ## 索引为数字
my_handle:HandheldHandle = handheld_handle[deviceid]
info_path = self.old_folder.joinpath("info.bin")
info_byte = self.read_bin(info_path)
my_handle.aw.data.set_info_frame(info_byte)
# 对应的手持式,处理sensor.bin
sensor_path = self.old_folder.joinpath('sensor.bin')
my_handle.deal_sensor_bin( sensor_path )
# self.awrams.setSyscfg(self.cfg)
# self.awrams.setRetrieve(retrieve)
# self.awrams.setDeviceID(self.device_id)
# self.awrams.setMeasureID(self.measure_id)
# path_tuple = ( "data", str(id), str(con) )
# self.awrams.setOldFolder( path_tuple )
# self.awrams.getInfoDict( )
# self.awrams.transferFromOldFolder()
# self.awrams.deleteOldFolder()
# self.awrams.dealOneMeasurement_Handheld(self.awrams.new_folder)
log.info(f" Complete Dealing one group.")
# self.awrams.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()
# with open( fpath, 'rb') as file:
# ret = file.read()
# return ret
return ret
pass
@staticmethod
def decode_info(info: bytes) -> dict:
ret = {}
try:
temp = struct.unpack( "<BBBBBBHHHHHHIIHHHHHBBBHHIfffIIIII", 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
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.retrieve =self.server.retrieve
self.handheld_handle =self.server.handheld_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.retrieve)
pth = DATA_DIR.joinpath(str(data_['id']),str(data_['con']))
self.dealData.deal(pth, self.cfg, self.retrieve, self.handheld_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()

@ -0,0 +1,4 @@
beginWL: 350
endWL: 950
interval: 1
rowFactor: 0.026

@ -0,0 +1,234 @@
# 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"
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 TcpHandheld(object):
def __init__(self ):
super(TcpHandheld, 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_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)
if __name__ == '__main__':
# print( bytes.fromhex (DataContent.info_frame) )
th = TcpHandheld()
th.connect()
try :
while True:
th.send_info()
th.send_data()
th.send_end_frame()
time.sleep( 10)
except KeyboardInterrupt as e:
print(e)
th.disconnect( )

@ -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