diff --git a/.gitignore b/.gitignore index b315aa5..0f5a8cd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ /dist/ /build/ /*/__pycache__ -*.log \ No newline at end of file +*.log +/data/output/ \ No newline at end of file diff --git a/README.md b/README.md index ed15eea..c8c7b59 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,16 @@ -AWRAMS 数据接收处理 -分支: server desktop \ No newline at end of file +# 手持式桌面数据处理 +数据处理不需要ID, 默认值为100 + +# 数据目录格式 +info 和sensor文件分别在不同目录,对应的文件名一样 +data/2023_01/11/info +data/2023_01/11/sensor + +# 输出目录 +data/output + +格式 + +信息 +抬头 +数据(时间--值) \ No newline at end of file diff --git a/Ramses.py b/Ramses.py new file mode 100644 index 0000000..0051473 --- /dev/null +++ b/Ramses.py @@ -0,0 +1,187 @@ +#! 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.it = None + self.light_int = None # 未标定的整数值 + self.spectrum = None # 光谱强度 + # 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 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 = 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( ) + 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.light_int = struct.unpack( + " None: + self.__buf = b'' + self.__head = {} + self.__begin_sign = b'\x23' + self.__end_sign = b'\x0D' + self.data_ip = b'' + self.measure_group = { + "Lsky": b'', + "Esky": b'', + "Lwater": b'', + } + self.one_group_data= b'' + 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: + 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 = {} + + def reset_buf(self) -> None: + self.__buf = b'' + + def getResult(self) -> str: + return self.res + + def resetMeasureGroup(self) -> None: + self.measure_group['Lsky'] = b'' + self.measure_group['Esky'] = b'' + self.measure_group['Lwater'] = b'' + + def getMeasureGroup(self) -> dict: + return self.measure_group + + def decode_handheld(self) -> bool: + '''以26个字节开始,一般26个00 ,然后23... 07.... ''' + if self.get_buf_size() < 1754: + self.__buf = b'' + return False + + self.data_ip = self.read_buf(26) + Lsky = self.read_buf(576) + Esky = self.read_buf(576) + Lwater = self.read_buf(576) + + self.measure_group['Lsky'] = self.deal_576_to_512(Lsky) + self.measure_group['Esky'] = self.deal_576_to_512(Esky) + self.measure_group['Lwater'] = self.deal_576_to_512(Lwater) + + if self.measure_group['Lsky'] == b'' \ + or self.measure_group['Esky'] == b'' \ + or self.measure_group['Lwater'] == b'' : + return False + + return True + + def decode_one_group_handheld(self) -> bool: + '''以26个字节开始,一般26个00 ,然后23... 07.... ''' + if self.get_buf_size() < 1754: + self.__buf = b'' + return False + + self.data_ip = self.read_buf(26) + self.one_group_data = self.read_buf(1728) + + return True + + def deal_576_to_512(self,data:bytes) -> bytes: + ''' 576字节校验,拆分成字典 23... 07.... ,然后254*2''' + ret = {} + index = 72 + for i in range(8): + temp = data[i*index : i*index+index] + # print( temp.hex()) + if temp[0] != 35 and temp[0]<8 and temp>0 : + return b'' + pass + ret.update( { temp[4]: temp} ) + if len(ret) != 8: + return b'' + ret_byte = ret[7][7:71]+ ret[6][7:71]+ ret[5][7:71]+ ret[4][7:71] \ + + ret[3][7:71]+ ret[2][7:71]+ ret[1][7:71]+ ret[0][7:71] + return ret_byte + + + def decode(self) -> str: + ret = '' + temp_buf = b'' + token = ";" + if TOKEN: + token = TOKEN + + if self.state == 0: + while self.get_buf_size() >= 1: + if self.read_buf(1) != self.__end_sign: + continue + self.state = 1 + break + + if self.state == 1: + while self.get_buf_size() >= 1: + buf = self.read_buf(1) + if buf != self.__end_sign: + temp_buf += buf + if buf == self.__end_sign: + ret = temp_buf[0:20].decode( + 'utf-8').strip(" ") + token + temp_buf[-9:-1].decode('utf-8').strip(" ") + log.info(f"decode : {ret}") + temp_buf = b'' + self.back_bytes(temp_buf) # 写回临时buf到 + self.res = ret + return ret + pass + + +class HandHeldPath(object): + '''处理一次测量''' + def __init__(self, ): + self.mode = 0 + self.cfg ={} + self.mydir = MyDir() + self.base_path:Path = Path() + self.output_path:Path = Path() + self.data_path:Path = Path() + self.filelist = [] + self.error_result = [] + pass + + def setMode( self, mode:int = 0 ): + self.mode = mode + pass + + def setBasePath( self, fpath:Path ): + self.base_path = fpath + pass + + def setDataPath( self, fpath:Path ): + self.data_path = fpath + pass + + def setOutputPath( self, fpath:Path ): + self.output_path = fpath + pass + + def getSensorPathFromInfoPath( self, info_path:Path, ) -> Path: + # 服务器上转移后的模式 + if self.mode == 1: + sensor_path = self.base_path.joinpath( + info_path.parent, + "sensor.bin" + ) + elif self.mode == 0: + sensor_path = self.base_path.joinpath( + "data", + info_path.parts[1][:4] + "_" + info_path.parts[1][-2:], + info_path.parts[2], + "sensor", + info_path.name + ) + else: + sensor_path = None + return sensor_path + pass + + def getOutputPathFromSensorPath(self,sensor_path:Path ) -> Path: + if self.mode == 1: + output_path = self.output_path.joinpath( + self.info_dict['year'] + "_" + self.info_dict['month'] + + "_" + self.info_dict['day'] + "_" + self.info_dict['hour'] + + "_" + self.info_dict['minute'] + "_" + self.info_dict['second'] + ) + elif self.mode == 0: + output_path = self.output_path.joinpath( + sensor_path.parts[1][:4] + "_" + sensor_path.parts[1][-2:] + + "_" +sensor_path.parts[2] + "_" +sensor_path.name + ) + else: + output_path = None + return output_path + pass + + def getCurrentMeasureTimeFromPath(self,fpath:Path ) -> str: + ret = '' + if self.mode == 1: # 读信息txt获得时间 + txt_path = fpath.parent.glob("*.txt") + txt_stem = txt_path[0].stem + ret = fpath.parts[1][:4]+"-"+fpath.parts[1][-2:]+"-"+fpath.parts[2]+" " \ + + txt_stem[-9:-7] + ":" + txt_stem[-6:-4] + ":" + txt_stem[-3:-1] + pass + elif self.mode == 0: + ret = fpath.parts[1][:4]+"-"+fpath.parts[1][-2:]+"-"+fpath.parts[2]+" " \ + + fpath.name[0:2] + ":" + fpath.name[3:5] + ":" + fpath.name[6:8] + else: + pass + return ret + pass + + def getDataFileList(self, ): + ''' + 获得成对的info sensor 文件 + [目录名,文件名,年月日,时间, measure_id] + ''' + # ret = [] + fs = None + self.filelist = [] + if self.mode == 1: + fs = self.data_path.glob( "*/*/*/*/info.bin" ) + else: + fs = self.data_path.glob( "*/*/info/*" ) + + for f in fs: + error_file = {} + if f.stat().st_size==0: + error_file.update( {"path": f } ) + error_file.update( {"error":"info file size is zero"} ) + self.error_result.append(error_file) + continue + + # self.info_path_fname = f + sensor_path = self.getSensorPathFromInfoPath(f) + # sensor_path = Path(sensor_purepath) + # sensor 文件不存在 + if not sensor_path.exists(): + error_file.update( {"path":f} ) + error_file.update( {"error":"cannot find the sensor file "} ) + self.error_result.append(error_file) + continue + + # sensor文件大小为0 + if sensor_path.stat().st_size==0: + error_file.update( {"path":sensor_path} ) + error_file.update( {"error":"sensor file size of the sensor is zero' "} ) + self.error_result.append(error_file) + continue + self.setFilelist(f,sensor_path ) + pass + + # def getDataFileList_SD(self, mode:int = 0 ): + # ''' + # 获得成对的info sensor 文件 + # [目录名,文件名,年月日,时间] + # ''' + # # ret = [] + # fs = self.data_path.glob( "*/*/info/*" ) + # for f in fs: + # error_file = {} + # if f.stat().st_size==0: + # error_file.update( {"path": f.name } ) + # error_file.update( {"error":"info file size is zero"} ) + # self.error_result.append(error_file) + # continue + # self.info_path_fname = f + # sensor_path = self.getSensorPathFromInfoPath( f ) + # # sensor_path = Path(sensor_purepath) + # # sensor 文件不存在 + # if not sensor_path.exists(): + # error_file.update( { "path" : f } ) + # error_file.update( {"error":"cannot find the sensor file "} ) + # self.error_result.append(error_file) + # continue + + # # sensor文件大小为0 + # if sensor_path.stat().st_size==0: + # error_file.update( { "path" : f } ) + # error_file.update( {"error" : "the file size of the sensor is zero' "} ) + # self.error_result.append(error_file) + # continue + + # self.setFilelist(f,sensor_path,mode=mode) + # # print(self.filelist) + # pass + + def setFilelist(self, info_path:Path, sensor_path:Path): + temp = {} + temp.update( {"info_path" : info_path } ) + temp.update( {"name" : info_path.name} ) + temp.update( {"parent" : info_path.parent} ) + + if self.mode==1: # 服务器转移后目录 + temp.update( {"year" : info_path.parts[-5] } ) + temp.update( {"month" :info_path.parts[-4] } ) + temp.update( {"day" :info_path.parts[-3] } ) + + temp.update( {"year" : info_path.parts[1][:4] } ) + temp.update( {"month" :info_path.parts[1][-2:] } ) + temp.update( {"day" :info_path.parts[2] } ) + temp.update( { "sensor_path" :sensor_path } ) + self.filelist.append(temp) + + def getFilelist(self, ): + return self.filelist + + def printTest(self,d,sleep_time:int=5): + log.info( f"***** : I am testing from HandheldPath ********", __name__ ) + print(d) + log.info( f"***** : Ending testing from HandheldPath ********", __name__ ) + time.sleep(sleep_time) + pass + +class AWRAMS(object): + def __init__(self, ): + """ + @description : 手持数据初始化 + """ + self.device_type = DeviceType.AWRAMS.name + self.device_enum = None + self.device_id = {} + self.syscfg = {} + self.retrieve ={} + self.error_result=[] + self.mode = 0 # 0:默认SD数据, 1:服务器数据 + self.base_path = CURRENT_DIR + self.current_path = CURRENT_DIR + self.data_path = DATA_DIR + self.output_path = OUTPUT_DIR + self.info_path_fname:Path = self.base_path + self.sensor_path_fname:Path = self.base_path + self.filelist = [] # 包含了全部路径信息 + self.intensity_before_avg = None + self.intensity_after_avg = {} # 最终结果{lsky: esky: lwater: } + self.intensity_after_interpo = {} # 最终结果{lsky: esky: lwater: } + + self.one_group_result = {} # 手持式 多次间隔 + self.wavelength = np.array([]) + self.real_wavelength = {} # 最终结果{lsky: esky: lwater: } + self.current_filepath = '' # 不含后缀 + self.current_measure_time = None # 当前测量时间 + self.current_group_num = 0 + self.measurement_interval = 0 + self.measurement_repeat = 1 + # self.sl2f = SaveList2File() + self.mydir = MyDir() + self.my_time = MyTime() + self.hhb = HandHeldBuf() + self.hhp = HandHeldPath() + self.ramses = Ramses() + self.info_dict = {} + self.res = {} # 最终结果{lsky: esky: lwater: Lw: Rs:} + + # 方法 + self.setDeviceEnum() + self.setMode() + self.set_hhp_path() + pass + + def setMode(self,mode=0 ): + self.hhp.setMode (mode) # 0 :读SD卡 1:读服务器数据 + + def set_hhp_path(self, ): + self.hhp.setBasePath (self.base_path) + self.hhp.setDataPath (self.data_path) + self.hhp.setOutputPath (self.output_path) + + def setDeviceEnum(self, ): + if self.device_type == DeviceType.SURFACE.name: + self.device_enum = RamsesSURFACE + if self.device_type == DeviceType.AWRAMS.name: + self.device_enum = RamsesAWRAMS + if self.device_type == DeviceType.PROFILE.name: + self.device_enum = RamsesPROFILE + + def getDataFileList(self, ): + self.hhp.getDataFileList() + self.filelist = self.hhp.getFilelist() + # self.printTest(self.filelist) + pass + + def dealAllMeasurements(self, ): + log.info(f" 所有测量文件", __name__, "dealAllMeasurements", ) + if len(self.filelist)<1: + pass + # 前面已经考虑各种文件错误 + for df in self.filelist: + # 处理信息帧 + self.info_dict = {} + self.info_path_fname:Path = df["info_path"] + self.sensor_path_fname:Path = df["sensor_path"] + hex_info = self.read_bin( self.info_path_fname ) + try: + self.info_dict = self.decode_info( hex_info ) + except: + log.error( f"处理信息文件" + + "/" +self.info_path_fname.stem + + "出现错误", __name__, "dealAllMeasurements" ) + raise MyException( "处理文件"+ self.info_path_fname + "出现错误") + pass + + try: # awrams每次只有一组数据 + self.dealOneMeasurement(self.sensor_path_fname ) + # self.measurement_interval = int(self.info_dict['Measure_Interval']) + # self.measurement_repeat = int(self.info_dict['Measure_Repeat']) + # self.dealOneHandheldMeasurement(self.sensor_path_fname ) + except Exception as e: + log.error( "处理传感器文件" + self.sensor_path_fname.name + " 出现错误",__name__,"dealAllMeasurements") + raise MyException( "处理传感器文件" + self.sensor_path_fname.name + " 出现错误" ) + pass + log.info(f"Finished !! ", __name__, "dealAllMeasurements") + return True,self.error_result + pass + + def dealOneHandheldMeasurement(self, fpath:Path): + '''handheld一次测量包含多组数据''' + # 调用handheldbuf 处理,将一组数据提交出来 + log.info(f" 手持一个文件,多组测量数据", __name__, "dealOneHandheldMeasurement") + if len(self.filelist)<1: + pass + + # 当前文件名 + self.output_path = OUTPUT_DIR + self.current_filepath = fpath + self.current_measure_time = self.hhp.getCurrentMeasureTimeFromPath(fpath) + self.ymdhms = "20"+ str(self.info_dict['year']) + '_' \ + + str(self.info_dict['month']) + '_' \ + + str(self.info_dict['day']) + '_' \ + + str(self.info_dict['hour']) + '_' \ + + str(self.info_dict['minute']) + '_' \ + + str(self.info_dict['second']) + self.output_path = self.output_path.joinpath( self.ymdhms ) + log.debug(f"current_measure_time: {self.current_measure_time}", __name__, "dealOneHandheldMeasurement") + + self.hhb.readFile2Buf(fpath) + log.debug(f"buf: {self.hhb.get_buf_size()}", __name__, "dealOneHandheldMeasurement") + self.decode_sensor_buf() + + # 解析Buf, 对buf分组,获得[{lsky: esky : lwater} .... ] + len_total = len(self.intensity_before_avg) + if len_total%self.measurement_repeat != 0: + self.res = {} + return # 返回退出 + group_num = int(len_total/self.measurement_repeat) + + log.info(f"group_num...: {group_num}", __name__, "dealOneHandheldMeasurement") + self.real_wavelength = self.getWavelenthDict() + if group_num == 1: + self.dealOneGroup() # self.intensity_before_avg + return + + self.dealMultiGroup(group_num) + + def dealMultiGroup(self, group_num:int ): + log.info(f"group_num: {group_num}", __name__, "dealMultiGroup") + # 分组进行处理 + for i in range(group_num): + self.current_group_num = i + # 重设当前测量时间 + self.current_measure_time = "" + self.res = {} + tmp_before_avg = [] + for j in range( self.measurement_repeat ): + tmp_before_avg.append( self.intensity_before_avg[j+i*self.measurement_repeat] ) + pass + self.getAvg(tmp_before_avg) + self.__do_sensor_dict_interpo() + self.appendSave( ) + + + def dealOneGroup(self, ): + # 分组,并获得平均值, 255个未插值结果 (依据 measurement_interval measurement_repeat) + self.getAvg( self.intensity_before_avg ) + + # 插值 + self.real_wavelength = self.getWavelenthDict() + self.__do_sensor_dict_interpo() + + self.ymdhms = "20"+ str(self.info_dict['year']) + '_' \ + + str(self.info_dict['month']) + '_' \ + + str(self.info_dict['day']) + '_' \ + + str(self.info_dict['hour']) + '_' \ + + str(self.info_dict['minute']) + '_' \ + + str(self.info_dict['second']) + + self.output_path = self.output_path.joinpath( self.ymdhms ) + self.appendSave() + + def dealOneMeasurement(self, fpath:Path): + '''handheld一次测量包含多组数据''' + # 调用handheldbuf 处理,将一组数据提交出来 + log.info(f"dealOneMeasurement: 一组测量数据", __name__, "dealOneMeasurement") + if len(self.filelist)<1: + pass + + # 当前文件名 + self.output_path = OUTPUT_DIR + self.current_filepath = fpath + self.current_measure_time = self.hhp.getCurrentMeasureTimeFromPath(fpath) + self.ymdhms = "20"+ str(self.info_dict['year']) + '_' \ + + str(self.info_dict['month']) + '_' \ + + str(self.info_dict['day']) + '_' \ + + str(self.info_dict['hour']) + '_' \ + + str(self.info_dict['minute']) + '_' \ + + str(self.info_dict['second']) + self.output_path = self.output_path.joinpath( self.ymdhms ) + log.debug(f"current_measure_time: {self.current_measure_time}", __name__, "dealOneHandheldMeasurement") + + self.hhb.readFile2Buf(fpath) + self.decode_sensor_buf() + self.real_wavelength = self.getWavelenthDict() + self.dealOneGroup() + + + def decode_sensor_buf(self,) : + # 处理Buf,对多组数据取平均 + self.intensity_before_avg = [] + # res_before_avg = [] + self.clearRes() # 清空数据 + while True: + if not self.hhb.decode_one_group_handheld() : + break # 清空数据 + + res = {} + buf = self.hhb.one_group_data[26:] + for i in range(1,4,1): + temp_buf = buf[7:71] + buf[79:143] + \ + buf[151:215] + buf[223:287] + \ + buf[295:359] + buf[367:431] + \ + buf[439:503] + buf[511:575] + + # Ramses类 标定处理,设置buf 标定文件 + self.ramses.setBuf(temp_buf) + func = self.getFuncBySeq(i) + cfg = self.getCfgByFunc( func) + self.ramses.setCalCfg(cfg) + self.ramses.resetItSpectrum() + self.ramses.ConvertAndCalibrate() + res.update({ func : self.ramses.spectrum }) + self.intensity_before_avg.append( res ) + pass + + def getAvg( self, d:list) : + log.info(f"getAvg: 平均多组数据", __name__, "getAvg") + data = d + ret = {} + len_result = len(data) + if len_result == 0: + self.intensity_after_avg ={} + return None + if len_result == 1: + self.intensity_after_avg = data[0] + return None + ret = data[0] + + res_dict = self.getRetDict() + + for k in res_dict.keys(): + for i in range(1,len_result,1): + data[0][k] = data[0][k] + data[i][k] + ret = data[0][k]/len_result + self.intensity_after_avg.update( { k : ret } ) + log.debug(f"getAvg: {self.intensity_after_avg}", __name__, "getAvg") + pass + + def getRetDict(self,) : + ret_dict = { } + ret_dict.update( {self.device_enum(1).name:np.array([])} ) + ret_dict.update( {self.device_enum(2).name:np.array([])} ) + ret_dict.update( {self.device_enum(3).name:np.array([])} ) + # self.one_group_result = ret_dict + return ret_dict + + def __do_sensor_dict_interpo(self,) : + log.info( f"同步处理多个个插值 ", __name__, "__do_sensor_dict_interpo" ) + self.clearRes() + for k in self.intensity_after_avg.keys(): + tmp = np.interp( self.wavelength, self.real_wavelength[k], self.intensity_after_avg[k] ) + self.res.update( { k : tmp } ) + + def getCfgByDid(self, func:str) : + cfg_id:dict = self.cfg.get(int(self.device_id)) + cfg_sensor = cfg_id.get( func) + return cfg_sensor + pass + + def getFuncBySeq(self, seq:int) : + func = "" + if self.device_type == DeviceType.AWRAMS.name: + func = RamsesAWRAMS(seq).name + if self.device_type == DeviceType.SURFACE.name: + func = RamsesAWRAMS(seq).name + if self.device_type == DeviceType.PROFILE.name: + func = RamsesAWRAMS(seq).name + return func + + def getCfgByFunc(self, func:str) : + cfg_id:dict = self.syscfg.get(int(self.device_id)) + cfg_sensor = cfg_id.get( func) + return cfg_sensor + pass + + def getCfgBySeq(self, seq:int) : + func = "" + if self.device_type == DeviceType.AWRAMS.name: + func = RamsesAWRAMS(seq).name + if self.device_type == DeviceType.SURFACE.name: + func = RamsesAWRAMS(seq).name + if self.device_type == DeviceType.PROFILE.name: + func = RamsesAWRAMS(seq).name + cfg_id:dict = self.syscfg.get(int(self.device_id)) + cfg_sensor = cfg_id.get( func) + return cfg_sensor + pass + + def appendSave(self, ) -> bool: + '''self.output_path''' + self.checkAndSaveData( ) + self.getLwRsAndSave() + path_info_txt = self.output_path.joinpath( "info.txt" ) + self.save_dict_to_file( self.info_dict, path_info_txt ) + + def checkAndSaveData(self, ) -> bool: + """ + check self.Lsky Esky Lwater and Save + 处理self.res 的数据 + """ + log.info(f"checkAndSaveData: {self.output_path.parts}", __name__) + self.mydir.setBaseDir(self.output_path) #基路径 + self.mydir.setHeader( self.wavelength.tolist(), TOKEN, "device_id_"+str(self.device_id) ) + # print(f"header_str : {self.mydir.header_str[-1:]}") + + if self.current_group_num == 0: + self.newFileByFunc( self.device_enum(1).name ) + self.newFileByFunc( self.device_enum(2).name ) + self.newFileByFunc( self.device_enum(3).name ) + pass + + self.appendFileByFunc( self.device_enum(1).name ) + self.appendFileByFunc( self.device_enum(2).name ) + self.appendFileByFunc( self.device_enum(3).name ) + + def newFileByFunc(self, func:str) -> None: + self.mydir.newFileIfNot( func+SAVE_EXT_NAME) + if self.mydir.checkHeader() == -1: + log.error(f"请备份文件:{self.mydir.current_filepath.parent} {self.mydir.current_filepath.name}, 并删除文件后再试!", __name__) + raise MyException( f"请备份文件:{self.mydir.current_filepath.parent} {self.mydir.current_filepath.name}, 并删除文件后再试!" ) + return False + if self.mydir.checkHeader() == 1: + pass + if self.mydir.checkHeader() == 0: + self.mydir.writeHeader() + pass + # 写入数据content + self.mydir.setContent(self.res[func].tolist(), TOKEN, self.current_measure_time) + self.mydir.writeContent() + + def appendFileByFunc(self, func:str) -> None: + # 追加写入数据content + self.mydir.setContent(self.res[func].tolist(), TOKEN, self.current_measure_time) + self.mydir.writeContent() + + def clearRes(self, ) -> None: + self.res = { } + + # def checkLskyEskyLwater(self, ) -> bool: + # if not self.res["Lsky"] : + # return False + # if not self.res["Esky"] : + # return False + # if not self.res["Lwater"] : + # return False + # return True + + def getLwRsAndSave(self, ) -> bool: + """ + 并计算Lw Rs并保存 + """ + Lw = self.res["Lwater"] - ROWFACTOR * self.res["Lsky"] + self.res.update({ "Lw" : Lw }) + Rs = self.res["Lw"] / self.res["Esky"] + self.res.update({ "Rs" : Rs }) + self.mydir.setBaseDir(self.output_path) #基路径 + + # 保存 + + if self.current_group_num == 0: + self.newFileByFunc( "Lw" ) + self.newFileByFunc( "Rs" ) + pass + + self.appendFileByFunc( "Lw" ) + self.appendFileByFunc( "Rs" ) + + return True + + def read_bin(self,fpath: Path): + log.debug(f" readbin: ", __name__, "", "" ) + ret = None + if not fpath.exists() : + log.info(f"not find file: {fpath} ") + return ret + with open(fpath, 'rb') as file: + ret = file.read() + return ret + log.debug(f" readbin: {ret} ", __name__, "", "" ) + return ret + pass + + def decode_info( self,info: bytes ) -> dict: + ret = {} + # 剖面型加了1311+24个字节共26个字节 + # 保留字节有所变化,改为序列号,每个序列号两个字节 + try: + temp = struct.unpack(" 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) + + def save_error_to_file(self, errlist: list, fpath: Path) -> None: + temp_str = "" + if len(errlist) <1: + return None + for errdict in errlist: + temp_str = temp_str + errdict["path"] +" : "+ errdict["error"] + "\n" + pass + with open(fpath, "w+") as f: + f.write(temp_str) + return None + pass + + def getWavelenthDict( self, ) -> dict: + ret_dict = self.getRetDict() + cfg_id:dict = self.syscfg.get( int(self.device_id)) + for k in ret_dict.keys(): + tmp = self.getWavelength( cfg_id.get(k) ) + ret_dict.update({ k : tmp }) + return ret_dict + + def getWavelength(self,ramsesdict:dict) -> np.ndarray: + ret = [] + for i in range(1,256): + tmp = float(ramsesdict['c0s']) + float(ramsesdict['c1s'])*i \ + + float(ramsesdict['c2s'])*i*i + float(ramsesdict['c3s'])*i*i*i + ret.append(tmp) + pass + return np.array(ret) + + def setSyscfg(self, syscfg:dict): + self.syscfg = syscfg + + def setRetrieve(self, retrieve:dict): + log.debug( f"setRetrieve : {retrieve}......", __name__ ) + self.retrieve = retrieve + self.setNewWavelength() + # self.wavelength:np.ndarray = np.arange ( self.retrieve['beginWL'], self.retrieve['endWL'], self.retrieve['interval'] ) + + def setNewWavelength(self, ): + self.wavelength:np.ndarray = np.arange ( + self.retrieve['beginWL'], self.retrieve['endWL'], self.retrieve['interval'] ) + + def setDeviceID(self, did:int): + self.device_id = did + + def setDeviceType(self, device_type): + self.device_type = device_type + + def getErrorInfoDict(self, ): + return self.error_result + + def printResult(self,): + log.info( f"***** : Print Lsky Esky Lwater Lw Rs......", __name__ ) + print(self.res[self.device_enum(1)]) + print(self.res[self.device_enum(2)]) + print(self.res[self.device_enum(3)]) + print(self.res[self.device_enum(4)]) + print(self.res[self.device_enum(5)]) + pass + + def printTest(self,d,sleep_time:int=5): + log.info( f"***** : I am testing ********", __name__ ) + print(d) + log.info( f"***** : Ending testing ********", __name__ ) + time.sleep(sleep_time) + pass + +if __name__ == "__main__": + # hh = HandHeld() + # hh.getDataFileList() + # hh.dealAllMeasurements() + + # data/2023_02/07/sensor/14_02_46 + # hhb= HandHeldBuf() + # hhb.readFile2Buf("data/2023_02/07/sensor/14_02_46") + # hhb.decode_handheld() + # print(hh.error_result) + # print("======") + # print(hh.filelist) + + # print( hh.getDataFname() ) + + # t = b'\x07' + # print( int(t[0])) + # print( 2 << int(t[0])) + + + pass + diff --git a/calfile/surface/Back_SAM_852F.dat b/calfile/surface/Back_SAM_852F.dat new file mode 100644 index 0000000..18f8686 --- /dev/null +++ b/calfile/surface/Back_SAM_852F.dat @@ -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] + diff --git a/calfile/surface/Back_SAM_859F.dat b/calfile/surface/Back_SAM_859F.dat new file mode 100644 index 0000000..8453235 --- /dev/null +++ b/calfile/surface/Back_SAM_859F.dat @@ -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] + diff --git a/calfile/surface/Back_SAM_85B5.dat b/calfile/surface/Back_SAM_85B5.dat new file mode 100644 index 0000000..97934b7 --- /dev/null +++ b/calfile/surface/Back_SAM_85B5.dat @@ -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] + diff --git a/calfile/surface/CalAQ_SAM_852F.dat b/calfile/surface/CalAQ_SAM_852F.dat new file mode 100644 index 0000000..277f8c1 --- /dev/null +++ b/calfile/surface/CalAQ_SAM_852F.dat @@ -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] + diff --git a/calfile/surface/CalAQ_SAM_859F.dat b/calfile/surface/CalAQ_SAM_859F.dat new file mode 100644 index 0000000..9380a3c --- /dev/null +++ b/calfile/surface/CalAQ_SAM_859F.dat @@ -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] + diff --git a/calfile/surface/CalAQ_SAM_85B5.dat b/calfile/surface/CalAQ_SAM_85B5.dat new file mode 100644 index 0000000..2fe5355 --- /dev/null +++ b/calfile/surface/CalAQ_SAM_85B5.dat @@ -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] + diff --git a/calfile/surface/Cal_SAM_852F.dat b/calfile/surface/Cal_SAM_852F.dat new file mode 100644 index 0000000..9b22f3d --- /dev/null +++ b/calfile/surface/Cal_SAM_852F.dat @@ -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] + diff --git a/calfile/surface/Cal_SAM_859F.dat b/calfile/surface/Cal_SAM_859F.dat new file mode 100644 index 0000000..179f228 --- /dev/null +++ b/calfile/surface/Cal_SAM_859F.dat @@ -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] + diff --git a/calfile/surface/Cal_SAM_85B5.dat b/calfile/surface/Cal_SAM_85B5.dat new file mode 100644 index 0000000..6e52832 --- /dev/null +++ b/calfile/surface/Cal_SAM_85B5.dat @@ -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] + diff --git a/calfile/surface/SAMIP_50ED_ALL.ini b/calfile/surface/SAMIP_50ED_ALL.ini new file mode 100644 index 0000000..10275ce --- /dev/null +++ b/calfile/surface/SAMIP_50ED_ALL.ini @@ -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] + + diff --git a/calfile/surface/SAM_852F.ini b/calfile/surface/SAM_852F.ini new file mode 100644 index 0000000..e6c4904 --- /dev/null +++ b/calfile/surface/SAM_852F.ini @@ -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] + diff --git a/calfile/surface/SAM_859F.ini b/calfile/surface/SAM_859F.ini new file mode 100644 index 0000000..a441025 --- /dev/null +++ b/calfile/surface/SAM_859F.ini @@ -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] + diff --git a/calfile/surface/SAM_85B5.ini b/calfile/surface/SAM_85B5.ini new file mode 100644 index 0000000..254132b --- /dev/null +++ b/calfile/surface/SAM_85B5.ini @@ -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] + diff --git a/config.ini b/config.ini new file mode 100644 index 0000000..e99110d --- /dev/null +++ b/config.ini @@ -0,0 +1,4 @@ +[SENSOR] +Lsky = 85B5 +Esky = 50ED +Lwater = 852F diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..185b765 --- /dev/null +++ b/config.yml @@ -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 diff --git a/configuration.py b/configuration.py new file mode 100644 index 0000000..f06b33d --- /dev/null +++ b/configuration.py @@ -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 }) \ No newline at end of file diff --git a/data/2000_01/01/info/12_37_19 b/data/2000_01/01/info/12_37_19 new file mode 100644 index 0000000..82429f7 Binary files /dev/null and b/data/2000_01/01/info/12_37_19 differ diff --git a/data/2000_01/01/ptc08/12_37_19 b/data/2000_01/01/ptc08/12_37_19 new file mode 100644 index 0000000..64ea059 Binary files /dev/null and b/data/2000_01/01/ptc08/12_37_19 differ diff --git a/data/2000_01/01/sensor/12_37_19 b/data/2000_01/01/sensor/12_37_19 new file mode 100644 index 0000000..707352e Binary files /dev/null and b/data/2000_01/01/sensor/12_37_19 differ diff --git a/data/2000_01/02/info/15_15_33 b/data/2000_01/02/info/15_15_33 new file mode 100644 index 0000000..0de800a Binary files /dev/null and b/data/2000_01/02/info/15_15_33 differ diff --git a/data/2000_01/02/info/15_25_33 b/data/2000_01/02/info/15_25_33 new file mode 100644 index 0000000..0f6b4d5 Binary files /dev/null and b/data/2000_01/02/info/15_25_33 differ diff --git a/data/2000_01/02/info/15_35_33 b/data/2000_01/02/info/15_35_33 new file mode 100644 index 0000000..7ac725f Binary files /dev/null and b/data/2000_01/02/info/15_35_33 differ diff --git a/data/2000_01/02/info/15_45_33 b/data/2000_01/02/info/15_45_33 new file mode 100644 index 0000000..57e3e62 Binary files /dev/null and b/data/2000_01/02/info/15_45_33 differ diff --git a/data/2000_01/02/info/15_55_33 b/data/2000_01/02/info/15_55_33 new file mode 100644 index 0000000..cb09f13 Binary files /dev/null and b/data/2000_01/02/info/15_55_33 differ diff --git a/data/2000_01/02/info/16_05_33 b/data/2000_01/02/info/16_05_33 new file mode 100644 index 0000000..95be31a Binary files /dev/null and b/data/2000_01/02/info/16_05_33 differ diff --git a/data/2000_01/02/info/16_15_33 b/data/2000_01/02/info/16_15_33 new file mode 100644 index 0000000..72cdca4 Binary files /dev/null and b/data/2000_01/02/info/16_15_33 differ diff --git a/data/2000_01/02/info/16_25_33 b/data/2000_01/02/info/16_25_33 new file mode 100644 index 0000000..e866292 Binary files /dev/null and b/data/2000_01/02/info/16_25_33 differ diff --git a/data/2000_01/02/info/16_35_33 b/data/2000_01/02/info/16_35_33 new file mode 100644 index 0000000..d3fd91f Binary files /dev/null and b/data/2000_01/02/info/16_35_33 differ diff --git a/data/2000_01/02/info/16_45_33 b/data/2000_01/02/info/16_45_33 new file mode 100644 index 0000000..66d864e Binary files /dev/null and b/data/2000_01/02/info/16_45_33 differ diff --git a/data/2000_01/02/info/16_55_33 b/data/2000_01/02/info/16_55_33 new file mode 100644 index 0000000..75ff617 Binary files /dev/null and b/data/2000_01/02/info/16_55_33 differ diff --git a/data/2000_01/02/info/17_05_33 b/data/2000_01/02/info/17_05_33 new file mode 100644 index 0000000..c87479f Binary files /dev/null and b/data/2000_01/02/info/17_05_33 differ diff --git a/data/2000_01/02/info/17_15_33 b/data/2000_01/02/info/17_15_33 new file mode 100644 index 0000000..1cb82b9 Binary files /dev/null and b/data/2000_01/02/info/17_15_33 differ diff --git a/data/2000_01/02/ptc08/15_15_33 b/data/2000_01/02/ptc08/15_15_33 new file mode 100644 index 0000000..45005e6 Binary files /dev/null and b/data/2000_01/02/ptc08/15_15_33 differ diff --git a/data/2000_01/02/ptc08/15_25_33 b/data/2000_01/02/ptc08/15_25_33 new file mode 100644 index 0000000..311b8df Binary files /dev/null and b/data/2000_01/02/ptc08/15_25_33 differ diff --git a/data/2000_01/02/ptc08/15_35_33 b/data/2000_01/02/ptc08/15_35_33 new file mode 100644 index 0000000..8854249 Binary files /dev/null and b/data/2000_01/02/ptc08/15_35_33 differ diff --git a/data/2000_01/02/ptc08/15_45_33 b/data/2000_01/02/ptc08/15_45_33 new file mode 100644 index 0000000..caceb55 Binary files /dev/null and b/data/2000_01/02/ptc08/15_45_33 differ diff --git a/data/2000_01/02/ptc08/15_55_33 b/data/2000_01/02/ptc08/15_55_33 new file mode 100644 index 0000000..7cfff5a Binary files /dev/null and b/data/2000_01/02/ptc08/15_55_33 differ diff --git a/data/2000_01/02/ptc08/16_05_33 b/data/2000_01/02/ptc08/16_05_33 new file mode 100644 index 0000000..a25cc47 Binary files /dev/null and b/data/2000_01/02/ptc08/16_05_33 differ diff --git a/data/2000_01/02/ptc08/16_15_33 b/data/2000_01/02/ptc08/16_15_33 new file mode 100644 index 0000000..5761e3a Binary files /dev/null and b/data/2000_01/02/ptc08/16_15_33 differ diff --git a/data/2000_01/02/ptc08/16_25_33 b/data/2000_01/02/ptc08/16_25_33 new file mode 100644 index 0000000..24d2fd0 Binary files /dev/null and b/data/2000_01/02/ptc08/16_25_33 differ diff --git a/data/2000_01/02/ptc08/16_35_33 b/data/2000_01/02/ptc08/16_35_33 new file mode 100644 index 0000000..21121c0 Binary files /dev/null and b/data/2000_01/02/ptc08/16_35_33 differ diff --git a/data/2000_01/02/ptc08/16_45_33 b/data/2000_01/02/ptc08/16_45_33 new file mode 100644 index 0000000..35f0a6f Binary files /dev/null and b/data/2000_01/02/ptc08/16_45_33 differ diff --git a/data/2000_01/02/ptc08/16_55_33 b/data/2000_01/02/ptc08/16_55_33 new file mode 100644 index 0000000..232dc4a Binary files /dev/null and b/data/2000_01/02/ptc08/16_55_33 differ diff --git a/data/2000_01/02/ptc08/17_05_33 b/data/2000_01/02/ptc08/17_05_33 new file mode 100644 index 0000000..8e20a3b Binary files /dev/null and b/data/2000_01/02/ptc08/17_05_33 differ diff --git a/data/2000_01/02/ptc08/17_15_33 b/data/2000_01/02/ptc08/17_15_33 new file mode 100644 index 0000000..ea6494c Binary files /dev/null and b/data/2000_01/02/ptc08/17_15_33 differ diff --git a/data/2000_01/02/sensor/15_15_33 b/data/2000_01/02/sensor/15_15_33 new file mode 100644 index 0000000..662673c Binary files /dev/null and b/data/2000_01/02/sensor/15_15_33 differ diff --git a/data/2000_01/02/sensor/15_25_33 b/data/2000_01/02/sensor/15_25_33 new file mode 100644 index 0000000..4506138 Binary files /dev/null and b/data/2000_01/02/sensor/15_25_33 differ diff --git a/data/2000_01/02/sensor/15_35_33 b/data/2000_01/02/sensor/15_35_33 new file mode 100644 index 0000000..787044c Binary files /dev/null and b/data/2000_01/02/sensor/15_35_33 differ diff --git a/data/2000_01/02/sensor/15_45_33 b/data/2000_01/02/sensor/15_45_33 new file mode 100644 index 0000000..8d34a35 Binary files /dev/null and b/data/2000_01/02/sensor/15_45_33 differ diff --git a/data/2000_01/02/sensor/15_55_33 b/data/2000_01/02/sensor/15_55_33 new file mode 100644 index 0000000..f9e013b Binary files /dev/null and b/data/2000_01/02/sensor/15_55_33 differ diff --git a/data/2000_01/02/sensor/16_05_33 b/data/2000_01/02/sensor/16_05_33 new file mode 100644 index 0000000..8678f8b Binary files /dev/null and b/data/2000_01/02/sensor/16_05_33 differ diff --git a/data/2000_01/02/sensor/16_15_33 b/data/2000_01/02/sensor/16_15_33 new file mode 100644 index 0000000..c6d2edc Binary files /dev/null and b/data/2000_01/02/sensor/16_15_33 differ diff --git a/data/2000_01/02/sensor/16_25_33 b/data/2000_01/02/sensor/16_25_33 new file mode 100644 index 0000000..4b98eaf Binary files /dev/null and b/data/2000_01/02/sensor/16_25_33 differ diff --git a/data/2000_01/02/sensor/16_35_33 b/data/2000_01/02/sensor/16_35_33 new file mode 100644 index 0000000..f0067d7 Binary files /dev/null and b/data/2000_01/02/sensor/16_35_33 differ diff --git a/data/2000_01/02/sensor/16_45_33 b/data/2000_01/02/sensor/16_45_33 new file mode 100644 index 0000000..0a15c85 Binary files /dev/null and b/data/2000_01/02/sensor/16_45_33 differ diff --git a/data/2000_01/02/sensor/16_55_33 b/data/2000_01/02/sensor/16_55_33 new file mode 100644 index 0000000..3b62c95 Binary files /dev/null and b/data/2000_01/02/sensor/16_55_33 differ diff --git a/data/2000_01/02/sensor/17_05_33 b/data/2000_01/02/sensor/17_05_33 new file mode 100644 index 0000000..235fec9 Binary files /dev/null and b/data/2000_01/02/sensor/17_05_33 differ diff --git a/data/2000_01/02/sensor/17_15_33 b/data/2000_01/02/sensor/17_15_33 new file mode 100644 index 0000000..05372dc Binary files /dev/null and b/data/2000_01/02/sensor/17_15_33 differ diff --git a/data/2000_01/30/ptc08/15_59_53 b/data/2000_01/30/ptc08/15_59_53 new file mode 100644 index 0000000..e69de29 diff --git a/data/2000_01/30/sensor/15_59_53 b/data/2000_01/30/sensor/15_59_53 new file mode 100644 index 0000000..e69de29 diff --git a/data/2022_12/20/info/17_42_41 b/data/2022_12/20/info/17_42_41 new file mode 100644 index 0000000..2340b35 Binary files /dev/null and b/data/2022_12/20/info/17_42_41 differ diff --git a/data/2022_12/20/info/17_53_41 b/data/2022_12/20/info/17_53_41 new file mode 100644 index 0000000..ac3eb6e Binary files /dev/null and b/data/2022_12/20/info/17_53_41 differ diff --git a/data/2022_12/20/info/18_23_02 b/data/2022_12/20/info/18_23_02 new file mode 100644 index 0000000..9df3692 Binary files /dev/null and b/data/2022_12/20/info/18_23_02 differ diff --git a/data/2022_12/20/info/18_31_52 b/data/2022_12/20/info/18_31_52 new file mode 100644 index 0000000..2433f58 Binary files /dev/null and b/data/2022_12/20/info/18_31_52 differ diff --git a/data/2022_12/20/info/18_36_52 b/data/2022_12/20/info/18_36_52 new file mode 100644 index 0000000..d6960e2 Binary files /dev/null and b/data/2022_12/20/info/18_36_52 differ diff --git a/data/2022_12/20/info/18_41_52 b/data/2022_12/20/info/18_41_52 new file mode 100644 index 0000000..2d93fe1 Binary files /dev/null and b/data/2022_12/20/info/18_41_52 differ diff --git a/data/2022_12/20/info/18_46_52 b/data/2022_12/20/info/18_46_52 new file mode 100644 index 0000000..ebce17d Binary files /dev/null and b/data/2022_12/20/info/18_46_52 differ diff --git a/data/2022_12/20/info/18_51_52 b/data/2022_12/20/info/18_51_52 new file mode 100644 index 0000000..aaa055b Binary files /dev/null and b/data/2022_12/20/info/18_51_52 differ diff --git a/data/2022_12/20/info/18_56_52 b/data/2022_12/20/info/18_56_52 new file mode 100644 index 0000000..a68f15a Binary files /dev/null and b/data/2022_12/20/info/18_56_52 differ diff --git a/data/2022_12/20/info/19_01_52 b/data/2022_12/20/info/19_01_52 new file mode 100644 index 0000000..9194c50 Binary files /dev/null and b/data/2022_12/20/info/19_01_52 differ diff --git a/data/2022_12/20/info/19_06_52 b/data/2022_12/20/info/19_06_52 new file mode 100644 index 0000000..9a66178 Binary files /dev/null and b/data/2022_12/20/info/19_06_52 differ diff --git a/data/2022_12/20/info/19_11_52 b/data/2022_12/20/info/19_11_52 new file mode 100644 index 0000000..0d5e921 Binary files /dev/null and b/data/2022_12/20/info/19_11_52 differ diff --git a/data/2022_12/20/info/19_16_52 b/data/2022_12/20/info/19_16_52 new file mode 100644 index 0000000..a65a58e Binary files /dev/null and b/data/2022_12/20/info/19_16_52 differ diff --git a/data/2022_12/20/info/19_21_52 b/data/2022_12/20/info/19_21_52 new file mode 100644 index 0000000..f5c9e6c Binary files /dev/null and b/data/2022_12/20/info/19_21_52 differ diff --git a/data/2022_12/20/info/19_26_52 b/data/2022_12/20/info/19_26_52 new file mode 100644 index 0000000..ed310f5 Binary files /dev/null and b/data/2022_12/20/info/19_26_52 differ diff --git a/data/2022_12/20/info/19_31_52 b/data/2022_12/20/info/19_31_52 new file mode 100644 index 0000000..e3c5027 Binary files /dev/null and b/data/2022_12/20/info/19_31_52 differ diff --git a/data/2022_12/20/info/19_36_52 b/data/2022_12/20/info/19_36_52 new file mode 100644 index 0000000..09e29a6 Binary files /dev/null and b/data/2022_12/20/info/19_36_52 differ diff --git a/data/2022_12/20/info/19_41_52 b/data/2022_12/20/info/19_41_52 new file mode 100644 index 0000000..96ca572 Binary files /dev/null and b/data/2022_12/20/info/19_41_52 differ diff --git a/data/2022_12/20/info/19_46_52 b/data/2022_12/20/info/19_46_52 new file mode 100644 index 0000000..c2494d1 Binary files /dev/null and b/data/2022_12/20/info/19_46_52 differ diff --git a/data/2022_12/20/info/19_51_52 b/data/2022_12/20/info/19_51_52 new file mode 100644 index 0000000..8437c1e Binary files /dev/null and b/data/2022_12/20/info/19_51_52 differ diff --git a/data/2022_12/20/info/19_56_52 b/data/2022_12/20/info/19_56_52 new file mode 100644 index 0000000..c235593 Binary files /dev/null and b/data/2022_12/20/info/19_56_52 differ diff --git a/data/2022_12/20/info/20_01_52 b/data/2022_12/20/info/20_01_52 new file mode 100644 index 0000000..07b7d39 Binary files /dev/null and b/data/2022_12/20/info/20_01_52 differ diff --git a/data/2022_12/20/info/20_06_52 b/data/2022_12/20/info/20_06_52 new file mode 100644 index 0000000..0cf5df3 Binary files /dev/null and b/data/2022_12/20/info/20_06_52 differ diff --git a/data/2022_12/20/info/20_11_52 b/data/2022_12/20/info/20_11_52 new file mode 100644 index 0000000..267781d Binary files /dev/null and b/data/2022_12/20/info/20_11_52 differ diff --git a/data/2022_12/20/info/20_16_52 b/data/2022_12/20/info/20_16_52 new file mode 100644 index 0000000..79dfba1 Binary files /dev/null and b/data/2022_12/20/info/20_16_52 differ diff --git a/data/2022_12/20/info/20_21_52 b/data/2022_12/20/info/20_21_52 new file mode 100644 index 0000000..c9dae21 Binary files /dev/null and b/data/2022_12/20/info/20_21_52 differ diff --git a/data/2022_12/20/info/20_26_52 b/data/2022_12/20/info/20_26_52 new file mode 100644 index 0000000..c221c86 Binary files /dev/null and b/data/2022_12/20/info/20_26_52 differ diff --git a/data/2022_12/20/info/20_31_52 b/data/2022_12/20/info/20_31_52 new file mode 100644 index 0000000..fd26408 Binary files /dev/null and b/data/2022_12/20/info/20_31_52 differ diff --git a/data/2022_12/20/info/20_36_52 b/data/2022_12/20/info/20_36_52 new file mode 100644 index 0000000..16562a9 Binary files /dev/null and b/data/2022_12/20/info/20_36_52 differ diff --git a/data/2022_12/20/info/20_41_52 b/data/2022_12/20/info/20_41_52 new file mode 100644 index 0000000..c915b2b Binary files /dev/null and b/data/2022_12/20/info/20_41_52 differ diff --git a/data/2022_12/20/info/20_46_52 b/data/2022_12/20/info/20_46_52 new file mode 100644 index 0000000..8882abc Binary files /dev/null and b/data/2022_12/20/info/20_46_52 differ diff --git a/data/2022_12/20/info/20_51_52 b/data/2022_12/20/info/20_51_52 new file mode 100644 index 0000000..0cefc9a Binary files /dev/null and b/data/2022_12/20/info/20_51_52 differ diff --git a/data/2022_12/20/info/20_56_52 b/data/2022_12/20/info/20_56_52 new file mode 100644 index 0000000..ade599c Binary files /dev/null and b/data/2022_12/20/info/20_56_52 differ diff --git a/data/2022_12/20/ptc08/17_42_41 b/data/2022_12/20/ptc08/17_42_41 new file mode 100644 index 0000000..e69de29 diff --git a/data/2022_12/20/ptc08/17_53_41 b/data/2022_12/20/ptc08/17_53_41 new file mode 100644 index 0000000..d4d080a Binary files /dev/null and b/data/2022_12/20/ptc08/17_53_41 differ diff --git a/data/2022_12/20/ptc08/18_23_02 b/data/2022_12/20/ptc08/18_23_02 new file mode 100644 index 0000000..be923d8 Binary files /dev/null and b/data/2022_12/20/ptc08/18_23_02 differ diff --git a/data/2022_12/20/ptc08/18_31_52 b/data/2022_12/20/ptc08/18_31_52 new file mode 100644 index 0000000..4ac5225 Binary files /dev/null and b/data/2022_12/20/ptc08/18_31_52 differ diff --git a/data/2022_12/20/ptc08/18_36_52 b/data/2022_12/20/ptc08/18_36_52 new file mode 100644 index 0000000..52b132b Binary files /dev/null and b/data/2022_12/20/ptc08/18_36_52 differ diff --git a/data/2022_12/20/ptc08/18_41_52 b/data/2022_12/20/ptc08/18_41_52 new file mode 100644 index 0000000..bd394b2 Binary files /dev/null and b/data/2022_12/20/ptc08/18_41_52 differ diff --git a/data/2022_12/20/ptc08/18_46_52 b/data/2022_12/20/ptc08/18_46_52 new file mode 100644 index 0000000..fe0073a Binary files /dev/null and b/data/2022_12/20/ptc08/18_46_52 differ diff --git a/data/2022_12/20/ptc08/18_51_52 b/data/2022_12/20/ptc08/18_51_52 new file mode 100644 index 0000000..7fc3a22 Binary files /dev/null and b/data/2022_12/20/ptc08/18_51_52 differ diff --git a/data/2022_12/20/ptc08/18_56_52 b/data/2022_12/20/ptc08/18_56_52 new file mode 100644 index 0000000..adfdab3 Binary files /dev/null and b/data/2022_12/20/ptc08/18_56_52 differ diff --git a/data/2022_12/20/ptc08/19_01_52 b/data/2022_12/20/ptc08/19_01_52 new file mode 100644 index 0000000..a4ec85d Binary files /dev/null and b/data/2022_12/20/ptc08/19_01_52 differ diff --git a/data/2022_12/20/ptc08/19_06_52 b/data/2022_12/20/ptc08/19_06_52 new file mode 100644 index 0000000..cd96a26 Binary files /dev/null and b/data/2022_12/20/ptc08/19_06_52 differ diff --git a/data/2022_12/20/ptc08/19_11_52 b/data/2022_12/20/ptc08/19_11_52 new file mode 100644 index 0000000..6dcc2bb Binary files /dev/null and b/data/2022_12/20/ptc08/19_11_52 differ diff --git a/data/2022_12/20/ptc08/19_16_52 b/data/2022_12/20/ptc08/19_16_52 new file mode 100644 index 0000000..56c08f6 Binary files /dev/null and b/data/2022_12/20/ptc08/19_16_52 differ diff --git a/data/2022_12/20/ptc08/19_21_52 b/data/2022_12/20/ptc08/19_21_52 new file mode 100644 index 0000000..1d1464c Binary files /dev/null and b/data/2022_12/20/ptc08/19_21_52 differ diff --git a/data/2022_12/20/ptc08/19_26_52 b/data/2022_12/20/ptc08/19_26_52 new file mode 100644 index 0000000..6190d93 Binary files /dev/null and b/data/2022_12/20/ptc08/19_26_52 differ diff --git a/data/2022_12/20/ptc08/19_31_52 b/data/2022_12/20/ptc08/19_31_52 new file mode 100644 index 0000000..cc95824 Binary files /dev/null and b/data/2022_12/20/ptc08/19_31_52 differ diff --git a/data/2022_12/20/ptc08/19_36_52 b/data/2022_12/20/ptc08/19_36_52 new file mode 100644 index 0000000..3911f4d Binary files /dev/null and b/data/2022_12/20/ptc08/19_36_52 differ diff --git a/data/2022_12/20/ptc08/19_41_52 b/data/2022_12/20/ptc08/19_41_52 new file mode 100644 index 0000000..32f9de1 Binary files /dev/null and b/data/2022_12/20/ptc08/19_41_52 differ diff --git a/data/2022_12/20/ptc08/19_46_52 b/data/2022_12/20/ptc08/19_46_52 new file mode 100644 index 0000000..75f8547 Binary files /dev/null and b/data/2022_12/20/ptc08/19_46_52 differ diff --git a/data/2022_12/20/ptc08/19_51_52 b/data/2022_12/20/ptc08/19_51_52 new file mode 100644 index 0000000..2fb8c14 Binary files /dev/null and b/data/2022_12/20/ptc08/19_51_52 differ diff --git a/data/2022_12/20/ptc08/19_56_52 b/data/2022_12/20/ptc08/19_56_52 new file mode 100644 index 0000000..598bbb7 Binary files /dev/null and b/data/2022_12/20/ptc08/19_56_52 differ diff --git a/data/2022_12/20/ptc08/20_01_52 b/data/2022_12/20/ptc08/20_01_52 new file mode 100644 index 0000000..e236a6a Binary files /dev/null and b/data/2022_12/20/ptc08/20_01_52 differ diff --git a/data/2022_12/20/ptc08/20_06_52 b/data/2022_12/20/ptc08/20_06_52 new file mode 100644 index 0000000..50ddbbe Binary files /dev/null and b/data/2022_12/20/ptc08/20_06_52 differ diff --git a/data/2022_12/20/ptc08/20_11_52 b/data/2022_12/20/ptc08/20_11_52 new file mode 100644 index 0000000..18cb84f Binary files /dev/null and b/data/2022_12/20/ptc08/20_11_52 differ diff --git a/data/2022_12/20/ptc08/20_16_52 b/data/2022_12/20/ptc08/20_16_52 new file mode 100644 index 0000000..28f7f74 Binary files /dev/null and b/data/2022_12/20/ptc08/20_16_52 differ diff --git a/data/2022_12/20/ptc08/20_21_52 b/data/2022_12/20/ptc08/20_21_52 new file mode 100644 index 0000000..5938a47 Binary files /dev/null and b/data/2022_12/20/ptc08/20_21_52 differ diff --git a/data/2022_12/20/ptc08/20_26_52 b/data/2022_12/20/ptc08/20_26_52 new file mode 100644 index 0000000..81dbe79 Binary files /dev/null and b/data/2022_12/20/ptc08/20_26_52 differ diff --git a/data/2022_12/20/ptc08/20_31_52 b/data/2022_12/20/ptc08/20_31_52 new file mode 100644 index 0000000..08011ad Binary files /dev/null and b/data/2022_12/20/ptc08/20_31_52 differ diff --git a/data/2022_12/20/ptc08/20_36_52 b/data/2022_12/20/ptc08/20_36_52 new file mode 100644 index 0000000..13642ac Binary files /dev/null and b/data/2022_12/20/ptc08/20_36_52 differ diff --git a/data/2022_12/20/ptc08/20_41_52 b/data/2022_12/20/ptc08/20_41_52 new file mode 100644 index 0000000..d82c096 Binary files /dev/null and b/data/2022_12/20/ptc08/20_41_52 differ diff --git a/data/2022_12/20/ptc08/20_46_52 b/data/2022_12/20/ptc08/20_46_52 new file mode 100644 index 0000000..fb27c02 Binary files /dev/null and b/data/2022_12/20/ptc08/20_46_52 differ diff --git a/data/2022_12/20/ptc08/20_51_52 b/data/2022_12/20/ptc08/20_51_52 new file mode 100644 index 0000000..5e49f58 Binary files /dev/null and b/data/2022_12/20/ptc08/20_51_52 differ diff --git a/data/2022_12/20/ptc08/20_56_52 b/data/2022_12/20/ptc08/20_56_52 new file mode 100644 index 0000000..35e25a6 Binary files /dev/null and b/data/2022_12/20/ptc08/20_56_52 differ diff --git a/data/2022_12/20/sensor/17_42_41 b/data/2022_12/20/sensor/17_42_41 new file mode 100644 index 0000000..e69de29 diff --git a/data/2022_12/20/sensor/17_53_41 b/data/2022_12/20/sensor/17_53_41 new file mode 100644 index 0000000..8fd0c18 Binary files /dev/null and b/data/2022_12/20/sensor/17_53_41 differ diff --git a/data/2022_12/20/sensor/18_23_02 b/data/2022_12/20/sensor/18_23_02 new file mode 100644 index 0000000..ff9c48e Binary files /dev/null and b/data/2022_12/20/sensor/18_23_02 differ diff --git a/data/2022_12/20/sensor/18_31_52 b/data/2022_12/20/sensor/18_31_52 new file mode 100644 index 0000000..3a0b047 Binary files /dev/null and b/data/2022_12/20/sensor/18_31_52 differ diff --git a/data/2022_12/20/sensor/18_36_52 b/data/2022_12/20/sensor/18_36_52 new file mode 100644 index 0000000..bbf139c Binary files /dev/null and b/data/2022_12/20/sensor/18_36_52 differ diff --git a/data/2022_12/20/sensor/18_41_52 b/data/2022_12/20/sensor/18_41_52 new file mode 100644 index 0000000..4936036 Binary files /dev/null and b/data/2022_12/20/sensor/18_41_52 differ diff --git a/data/2022_12/20/sensor/18_46_52 b/data/2022_12/20/sensor/18_46_52 new file mode 100644 index 0000000..9b76eba Binary files /dev/null and b/data/2022_12/20/sensor/18_46_52 differ diff --git a/data/2022_12/20/sensor/18_51_52 b/data/2022_12/20/sensor/18_51_52 new file mode 100644 index 0000000..c3dce4a Binary files /dev/null and b/data/2022_12/20/sensor/18_51_52 differ diff --git a/data/2022_12/20/sensor/18_56_52 b/data/2022_12/20/sensor/18_56_52 new file mode 100644 index 0000000..391a366 Binary files /dev/null and b/data/2022_12/20/sensor/18_56_52 differ diff --git a/data/2022_12/20/sensor/19_01_52 b/data/2022_12/20/sensor/19_01_52 new file mode 100644 index 0000000..ab6ed43 Binary files /dev/null and b/data/2022_12/20/sensor/19_01_52 differ diff --git a/data/2022_12/20/sensor/19_06_52 b/data/2022_12/20/sensor/19_06_52 new file mode 100644 index 0000000..42a9f5d Binary files /dev/null and b/data/2022_12/20/sensor/19_06_52 differ diff --git a/data/2022_12/20/sensor/19_11_52 b/data/2022_12/20/sensor/19_11_52 new file mode 100644 index 0000000..f627e15 Binary files /dev/null and b/data/2022_12/20/sensor/19_11_52 differ diff --git a/data/2022_12/20/sensor/19_16_52 b/data/2022_12/20/sensor/19_16_52 new file mode 100644 index 0000000..9558f85 Binary files /dev/null and b/data/2022_12/20/sensor/19_16_52 differ diff --git a/data/2022_12/20/sensor/19_21_52 b/data/2022_12/20/sensor/19_21_52 new file mode 100644 index 0000000..e44270c Binary files /dev/null and b/data/2022_12/20/sensor/19_21_52 differ diff --git a/data/2022_12/20/sensor/19_26_52 b/data/2022_12/20/sensor/19_26_52 new file mode 100644 index 0000000..917feea Binary files /dev/null and b/data/2022_12/20/sensor/19_26_52 differ diff --git a/data/2022_12/20/sensor/19_31_52 b/data/2022_12/20/sensor/19_31_52 new file mode 100644 index 0000000..e349b41 Binary files /dev/null and b/data/2022_12/20/sensor/19_31_52 differ diff --git a/data/2022_12/20/sensor/19_36_52 b/data/2022_12/20/sensor/19_36_52 new file mode 100644 index 0000000..7c629d6 Binary files /dev/null and b/data/2022_12/20/sensor/19_36_52 differ diff --git a/data/2022_12/20/sensor/19_41_52 b/data/2022_12/20/sensor/19_41_52 new file mode 100644 index 0000000..2ff2fc9 Binary files /dev/null and b/data/2022_12/20/sensor/19_41_52 differ diff --git a/data/2022_12/20/sensor/19_46_52 b/data/2022_12/20/sensor/19_46_52 new file mode 100644 index 0000000..33bbe96 Binary files /dev/null and b/data/2022_12/20/sensor/19_46_52 differ diff --git a/data/2022_12/20/sensor/19_51_52 b/data/2022_12/20/sensor/19_51_52 new file mode 100644 index 0000000..6326eb6 Binary files /dev/null and b/data/2022_12/20/sensor/19_51_52 differ diff --git a/data/2022_12/20/sensor/19_56_52 b/data/2022_12/20/sensor/19_56_52 new file mode 100644 index 0000000..5a73869 Binary files /dev/null and b/data/2022_12/20/sensor/19_56_52 differ diff --git a/data/2022_12/20/sensor/20_01_52 b/data/2022_12/20/sensor/20_01_52 new file mode 100644 index 0000000..ff506ef Binary files /dev/null and b/data/2022_12/20/sensor/20_01_52 differ diff --git a/data/2022_12/20/sensor/20_06_52 b/data/2022_12/20/sensor/20_06_52 new file mode 100644 index 0000000..26b15f4 Binary files /dev/null and b/data/2022_12/20/sensor/20_06_52 differ diff --git a/data/2022_12/20/sensor/20_11_52 b/data/2022_12/20/sensor/20_11_52 new file mode 100644 index 0000000..65466d2 Binary files /dev/null and b/data/2022_12/20/sensor/20_11_52 differ diff --git a/data/2022_12/20/sensor/20_16_52 b/data/2022_12/20/sensor/20_16_52 new file mode 100644 index 0000000..cdbdcb2 Binary files /dev/null and b/data/2022_12/20/sensor/20_16_52 differ diff --git a/data/2022_12/20/sensor/20_21_52 b/data/2022_12/20/sensor/20_21_52 new file mode 100644 index 0000000..b35eea9 Binary files /dev/null and b/data/2022_12/20/sensor/20_21_52 differ diff --git a/data/2022_12/20/sensor/20_26_52 b/data/2022_12/20/sensor/20_26_52 new file mode 100644 index 0000000..3c00c3b Binary files /dev/null and b/data/2022_12/20/sensor/20_26_52 differ diff --git a/data/2022_12/20/sensor/20_31_52 b/data/2022_12/20/sensor/20_31_52 new file mode 100644 index 0000000..5f5e979 Binary files /dev/null and b/data/2022_12/20/sensor/20_31_52 differ diff --git a/data/2022_12/20/sensor/20_36_52 b/data/2022_12/20/sensor/20_36_52 new file mode 100644 index 0000000..9baea28 Binary files /dev/null and b/data/2022_12/20/sensor/20_36_52 differ diff --git a/data/2022_12/20/sensor/20_41_52 b/data/2022_12/20/sensor/20_41_52 new file mode 100644 index 0000000..a32c999 Binary files /dev/null and b/data/2022_12/20/sensor/20_41_52 differ diff --git a/data/2022_12/20/sensor/20_46_52 b/data/2022_12/20/sensor/20_46_52 new file mode 100644 index 0000000..e571622 Binary files /dev/null and b/data/2022_12/20/sensor/20_46_52 differ diff --git a/data/2022_12/20/sensor/20_51_52 b/data/2022_12/20/sensor/20_51_52 new file mode 100644 index 0000000..ed88028 Binary files /dev/null and b/data/2022_12/20/sensor/20_51_52 differ diff --git a/data/2022_12/20/sensor/20_56_52 b/data/2022_12/20/sensor/20_56_52 new file mode 100644 index 0000000..ab98944 Binary files /dev/null and b/data/2022_12/20/sensor/20_56_52 differ diff --git a/data/2022_12/21/info/00_05_23 b/data/2022_12/21/info/00_05_23 new file mode 100644 index 0000000..e57eedf Binary files /dev/null and b/data/2022_12/21/info/00_05_23 differ diff --git a/data/2022_12/21/info/00_10_23 b/data/2022_12/21/info/00_10_23 new file mode 100644 index 0000000..0b4d6a4 Binary files /dev/null and b/data/2022_12/21/info/00_10_23 differ diff --git a/data/2022_12/21/info/00_15_23 b/data/2022_12/21/info/00_15_23 new file mode 100644 index 0000000..28463b9 Binary files /dev/null and b/data/2022_12/21/info/00_15_23 differ diff --git a/data/2022_12/21/info/00_20_23 b/data/2022_12/21/info/00_20_23 new file mode 100644 index 0000000..5335910 Binary files /dev/null and b/data/2022_12/21/info/00_20_23 differ diff --git a/data/2022_12/21/info/00_25_23 b/data/2022_12/21/info/00_25_23 new file mode 100644 index 0000000..194eb14 Binary files /dev/null and b/data/2022_12/21/info/00_25_23 differ diff --git a/data/2022_12/21/info/00_30_23 b/data/2022_12/21/info/00_30_23 new file mode 100644 index 0000000..014400e Binary files /dev/null and b/data/2022_12/21/info/00_30_23 differ diff --git a/data/2022_12/21/info/00_35_23 b/data/2022_12/21/info/00_35_23 new file mode 100644 index 0000000..8e8a7ef Binary files /dev/null and b/data/2022_12/21/info/00_35_23 differ diff --git a/data/2022_12/21/info/00_40_23 b/data/2022_12/21/info/00_40_23 new file mode 100644 index 0000000..861bae1 Binary files /dev/null and b/data/2022_12/21/info/00_40_23 differ diff --git a/data/2022_12/21/info/00_45_23 b/data/2022_12/21/info/00_45_23 new file mode 100644 index 0000000..babcb40 Binary files /dev/null and b/data/2022_12/21/info/00_45_23 differ diff --git a/data/2022_12/21/info/00_50_23 b/data/2022_12/21/info/00_50_23 new file mode 100644 index 0000000..7b527ea Binary files /dev/null and b/data/2022_12/21/info/00_50_23 differ diff --git a/data/2022_12/21/info/00_55_23 b/data/2022_12/21/info/00_55_23 new file mode 100644 index 0000000..20748fa Binary files /dev/null and b/data/2022_12/21/info/00_55_23 differ diff --git a/data/2022_12/21/info/01_00_23 b/data/2022_12/21/info/01_00_23 new file mode 100644 index 0000000..1c8de68 Binary files /dev/null and b/data/2022_12/21/info/01_00_23 differ diff --git a/data/2022_12/21/info/01_05_23 b/data/2022_12/21/info/01_05_23 new file mode 100644 index 0000000..b998780 Binary files /dev/null and b/data/2022_12/21/info/01_05_23 differ diff --git a/data/2022_12/21/info/01_10_23 b/data/2022_12/21/info/01_10_23 new file mode 100644 index 0000000..67049bf Binary files /dev/null and b/data/2022_12/21/info/01_10_23 differ diff --git a/data/2022_12/21/info/01_15_23 b/data/2022_12/21/info/01_15_23 new file mode 100644 index 0000000..daa407e Binary files /dev/null and b/data/2022_12/21/info/01_15_23 differ diff --git a/data/2022_12/21/info/01_20_23 b/data/2022_12/21/info/01_20_23 new file mode 100644 index 0000000..2c9c09b Binary files /dev/null and b/data/2022_12/21/info/01_20_23 differ diff --git a/data/2022_12/21/info/01_25_23 b/data/2022_12/21/info/01_25_23 new file mode 100644 index 0000000..ab05602 Binary files /dev/null and b/data/2022_12/21/info/01_25_23 differ diff --git a/data/2022_12/21/info/01_30_23 b/data/2022_12/21/info/01_30_23 new file mode 100644 index 0000000..3f7bef3 Binary files /dev/null and b/data/2022_12/21/info/01_30_23 differ diff --git a/data/2022_12/21/info/01_35_23 b/data/2022_12/21/info/01_35_23 new file mode 100644 index 0000000..d3416b4 Binary files /dev/null and b/data/2022_12/21/info/01_35_23 differ diff --git a/data/2022_12/21/info/01_40_23 b/data/2022_12/21/info/01_40_23 new file mode 100644 index 0000000..bc10cfb Binary files /dev/null and b/data/2022_12/21/info/01_40_23 differ diff --git a/data/2022_12/21/info/01_45_23 b/data/2022_12/21/info/01_45_23 new file mode 100644 index 0000000..ffcb1f2 Binary files /dev/null and b/data/2022_12/21/info/01_45_23 differ diff --git a/data/2022_12/21/info/01_50_23 b/data/2022_12/21/info/01_50_23 new file mode 100644 index 0000000..335bfa6 Binary files /dev/null and b/data/2022_12/21/info/01_50_23 differ diff --git a/data/2022_12/21/info/01_55_23 b/data/2022_12/21/info/01_55_23 new file mode 100644 index 0000000..1e4c7f6 Binary files /dev/null and b/data/2022_12/21/info/01_55_23 differ diff --git a/data/2022_12/21/info/02_00_23 b/data/2022_12/21/info/02_00_23 new file mode 100644 index 0000000..59708cd Binary files /dev/null and b/data/2022_12/21/info/02_00_23 differ diff --git a/data/2022_12/21/info/02_05_23 b/data/2022_12/21/info/02_05_23 new file mode 100644 index 0000000..0b12a81 Binary files /dev/null and b/data/2022_12/21/info/02_05_23 differ diff --git a/data/2022_12/21/info/02_10_23 b/data/2022_12/21/info/02_10_23 new file mode 100644 index 0000000..bfafb53 Binary files /dev/null and b/data/2022_12/21/info/02_10_23 differ diff --git a/data/2022_12/21/info/02_15_23 b/data/2022_12/21/info/02_15_23 new file mode 100644 index 0000000..4f7d95f Binary files /dev/null and b/data/2022_12/21/info/02_15_23 differ diff --git a/data/2022_12/21/info/02_20_23 b/data/2022_12/21/info/02_20_23 new file mode 100644 index 0000000..afa2450 Binary files /dev/null and b/data/2022_12/21/info/02_20_23 differ diff --git a/data/2022_12/21/info/02_25_23 b/data/2022_12/21/info/02_25_23 new file mode 100644 index 0000000..6e0bc36 Binary files /dev/null and b/data/2022_12/21/info/02_25_23 differ diff --git a/data/2022_12/21/info/02_30_23 b/data/2022_12/21/info/02_30_23 new file mode 100644 index 0000000..8651e17 Binary files /dev/null and b/data/2022_12/21/info/02_30_23 differ diff --git a/data/2022_12/21/info/02_35_23 b/data/2022_12/21/info/02_35_23 new file mode 100644 index 0000000..6700e6f Binary files /dev/null and b/data/2022_12/21/info/02_35_23 differ diff --git a/data/2022_12/21/info/02_40_23 b/data/2022_12/21/info/02_40_23 new file mode 100644 index 0000000..b92d60b Binary files /dev/null and b/data/2022_12/21/info/02_40_23 differ diff --git a/data/2022_12/21/info/02_45_23 b/data/2022_12/21/info/02_45_23 new file mode 100644 index 0000000..755c2e0 Binary files /dev/null and b/data/2022_12/21/info/02_45_23 differ diff --git a/data/2022_12/21/info/02_50_23 b/data/2022_12/21/info/02_50_23 new file mode 100644 index 0000000..b4d8b7e Binary files /dev/null and b/data/2022_12/21/info/02_50_23 differ diff --git a/data/2022_12/21/info/02_55_23 b/data/2022_12/21/info/02_55_23 new file mode 100644 index 0000000..e4cb174 Binary files /dev/null and b/data/2022_12/21/info/02_55_23 differ diff --git a/data/2022_12/21/info/03_00_23 b/data/2022_12/21/info/03_00_23 new file mode 100644 index 0000000..4fa79d1 Binary files /dev/null and b/data/2022_12/21/info/03_00_23 differ diff --git a/data/2022_12/21/info/03_05_23 b/data/2022_12/21/info/03_05_23 new file mode 100644 index 0000000..06bf7da Binary files /dev/null and b/data/2022_12/21/info/03_05_23 differ diff --git a/data/2022_12/21/info/03_10_23 b/data/2022_12/21/info/03_10_23 new file mode 100644 index 0000000..3879aff Binary files /dev/null and b/data/2022_12/21/info/03_10_23 differ diff --git a/data/2022_12/21/info/03_15_23 b/data/2022_12/21/info/03_15_23 new file mode 100644 index 0000000..55a49b4 Binary files /dev/null and b/data/2022_12/21/info/03_15_23 differ diff --git a/data/2022_12/21/info/03_20_23 b/data/2022_12/21/info/03_20_23 new file mode 100644 index 0000000..bdd06d1 Binary files /dev/null and b/data/2022_12/21/info/03_20_23 differ diff --git a/data/2022_12/21/info/03_25_23 b/data/2022_12/21/info/03_25_23 new file mode 100644 index 0000000..e3ff85d Binary files /dev/null and b/data/2022_12/21/info/03_25_23 differ diff --git a/data/2022_12/21/info/03_30_23 b/data/2022_12/21/info/03_30_23 new file mode 100644 index 0000000..2500407 Binary files /dev/null and b/data/2022_12/21/info/03_30_23 differ diff --git a/data/2022_12/21/info/03_35_23 b/data/2022_12/21/info/03_35_23 new file mode 100644 index 0000000..f6c923c Binary files /dev/null and b/data/2022_12/21/info/03_35_23 differ diff --git a/data/2022_12/21/info/03_40_23 b/data/2022_12/21/info/03_40_23 new file mode 100644 index 0000000..fcb86eb Binary files /dev/null and b/data/2022_12/21/info/03_40_23 differ diff --git a/data/2022_12/21/info/03_45_23 b/data/2022_12/21/info/03_45_23 new file mode 100644 index 0000000..146f5f3 Binary files /dev/null and b/data/2022_12/21/info/03_45_23 differ diff --git a/data/2022_12/21/info/03_50_23 b/data/2022_12/21/info/03_50_23 new file mode 100644 index 0000000..2141b6a Binary files /dev/null and b/data/2022_12/21/info/03_50_23 differ diff --git a/data/2022_12/21/info/03_55_23 b/data/2022_12/21/info/03_55_23 new file mode 100644 index 0000000..437b82a Binary files /dev/null and b/data/2022_12/21/info/03_55_23 differ diff --git a/data/2022_12/21/info/04_00_23 b/data/2022_12/21/info/04_00_23 new file mode 100644 index 0000000..986034a Binary files /dev/null and b/data/2022_12/21/info/04_00_23 differ diff --git a/data/2022_12/21/info/04_05_23 b/data/2022_12/21/info/04_05_23 new file mode 100644 index 0000000..9f62837 Binary files /dev/null and b/data/2022_12/21/info/04_05_23 differ diff --git a/data/2022_12/21/info/04_10_23 b/data/2022_12/21/info/04_10_23 new file mode 100644 index 0000000..2b3c694 Binary files /dev/null and b/data/2022_12/21/info/04_10_23 differ diff --git a/data/2022_12/21/info/04_15_23 b/data/2022_12/21/info/04_15_23 new file mode 100644 index 0000000..ea20aa9 Binary files /dev/null and b/data/2022_12/21/info/04_15_23 differ diff --git a/data/2022_12/21/info/04_20_23 b/data/2022_12/21/info/04_20_23 new file mode 100644 index 0000000..6d46c4a Binary files /dev/null and b/data/2022_12/21/info/04_20_23 differ diff --git a/data/2022_12/21/info/04_25_23 b/data/2022_12/21/info/04_25_23 new file mode 100644 index 0000000..8626408 Binary files /dev/null and b/data/2022_12/21/info/04_25_23 differ diff --git a/data/2022_12/21/info/04_30_23 b/data/2022_12/21/info/04_30_23 new file mode 100644 index 0000000..774ab06 Binary files /dev/null and b/data/2022_12/21/info/04_30_23 differ diff --git a/data/2022_12/21/info/04_35_23 b/data/2022_12/21/info/04_35_23 new file mode 100644 index 0000000..e78cd0a Binary files /dev/null and b/data/2022_12/21/info/04_35_23 differ diff --git a/data/2022_12/21/info/04_40_23 b/data/2022_12/21/info/04_40_23 new file mode 100644 index 0000000..130fca5 Binary files /dev/null and b/data/2022_12/21/info/04_40_23 differ diff --git a/data/2022_12/21/info/04_45_23 b/data/2022_12/21/info/04_45_23 new file mode 100644 index 0000000..3d1dc8e Binary files /dev/null and b/data/2022_12/21/info/04_45_23 differ diff --git a/data/2022_12/21/info/04_50_23 b/data/2022_12/21/info/04_50_23 new file mode 100644 index 0000000..557f9a7 Binary files /dev/null and b/data/2022_12/21/info/04_50_23 differ diff --git a/data/2022_12/21/info/04_55_23 b/data/2022_12/21/info/04_55_23 new file mode 100644 index 0000000..6ce1036 Binary files /dev/null and b/data/2022_12/21/info/04_55_23 differ diff --git a/data/2022_12/21/info/05_00_23 b/data/2022_12/21/info/05_00_23 new file mode 100644 index 0000000..5fe9097 Binary files /dev/null and b/data/2022_12/21/info/05_00_23 differ diff --git a/data/2022_12/21/info/05_05_23 b/data/2022_12/21/info/05_05_23 new file mode 100644 index 0000000..e62860b Binary files /dev/null and b/data/2022_12/21/info/05_05_23 differ diff --git a/data/2022_12/21/info/05_10_23 b/data/2022_12/21/info/05_10_23 new file mode 100644 index 0000000..e63c7a7 Binary files /dev/null and b/data/2022_12/21/info/05_10_23 differ diff --git a/data/2022_12/21/info/05_15_23 b/data/2022_12/21/info/05_15_23 new file mode 100644 index 0000000..3026773 Binary files /dev/null and b/data/2022_12/21/info/05_15_23 differ diff --git a/data/2022_12/21/info/05_20_23 b/data/2022_12/21/info/05_20_23 new file mode 100644 index 0000000..4cef5a1 Binary files /dev/null and b/data/2022_12/21/info/05_20_23 differ diff --git a/data/2022_12/21/info/05_25_23 b/data/2022_12/21/info/05_25_23 new file mode 100644 index 0000000..ea5b20a Binary files /dev/null and b/data/2022_12/21/info/05_25_23 differ diff --git a/data/2022_12/21/info/05_30_23 b/data/2022_12/21/info/05_30_23 new file mode 100644 index 0000000..38cc5c0 Binary files /dev/null and b/data/2022_12/21/info/05_30_23 differ diff --git a/data/2022_12/21/info/05_35_23 b/data/2022_12/21/info/05_35_23 new file mode 100644 index 0000000..353157f Binary files /dev/null and b/data/2022_12/21/info/05_35_23 differ diff --git a/data/2022_12/21/info/05_40_23 b/data/2022_12/21/info/05_40_23 new file mode 100644 index 0000000..f52541d Binary files /dev/null and b/data/2022_12/21/info/05_40_23 differ diff --git a/data/2022_12/21/info/05_45_23 b/data/2022_12/21/info/05_45_23 new file mode 100644 index 0000000..b3df0ff Binary files /dev/null and b/data/2022_12/21/info/05_45_23 differ diff --git a/data/2022_12/21/info/05_50_23 b/data/2022_12/21/info/05_50_23 new file mode 100644 index 0000000..e9270f9 Binary files /dev/null and b/data/2022_12/21/info/05_50_23 differ diff --git a/data/2022_12/21/info/05_55_23 b/data/2022_12/21/info/05_55_23 new file mode 100644 index 0000000..27e0874 Binary files /dev/null and b/data/2022_12/21/info/05_55_23 differ diff --git a/data/2022_12/21/info/06_00_23 b/data/2022_12/21/info/06_00_23 new file mode 100644 index 0000000..168fb9d Binary files /dev/null and b/data/2022_12/21/info/06_00_23 differ diff --git a/data/2022_12/21/info/06_05_23 b/data/2022_12/21/info/06_05_23 new file mode 100644 index 0000000..cca8406 Binary files /dev/null and b/data/2022_12/21/info/06_05_23 differ diff --git a/data/2022_12/21/info/06_10_23 b/data/2022_12/21/info/06_10_23 new file mode 100644 index 0000000..e6f3e79 Binary files /dev/null and b/data/2022_12/21/info/06_10_23 differ diff --git a/data/2022_12/21/info/06_15_23 b/data/2022_12/21/info/06_15_23 new file mode 100644 index 0000000..88de8f8 Binary files /dev/null and b/data/2022_12/21/info/06_15_23 differ diff --git a/data/2022_12/21/info/06_20_23 b/data/2022_12/21/info/06_20_23 new file mode 100644 index 0000000..a674cc3 Binary files /dev/null and b/data/2022_12/21/info/06_20_23 differ diff --git a/data/2022_12/21/info/06_25_23 b/data/2022_12/21/info/06_25_23 new file mode 100644 index 0000000..75d824e Binary files /dev/null and b/data/2022_12/21/info/06_25_23 differ diff --git a/data/2022_12/21/info/06_30_23 b/data/2022_12/21/info/06_30_23 new file mode 100644 index 0000000..badc798 Binary files /dev/null and b/data/2022_12/21/info/06_30_23 differ diff --git a/data/2022_12/21/info/06_35_23 b/data/2022_12/21/info/06_35_23 new file mode 100644 index 0000000..79eabcb Binary files /dev/null and b/data/2022_12/21/info/06_35_23 differ diff --git a/data/2022_12/21/info/06_40_23 b/data/2022_12/21/info/06_40_23 new file mode 100644 index 0000000..fbf5f4a Binary files /dev/null and b/data/2022_12/21/info/06_40_23 differ diff --git a/data/2022_12/21/info/06_45_23 b/data/2022_12/21/info/06_45_23 new file mode 100644 index 0000000..e2004bf Binary files /dev/null and b/data/2022_12/21/info/06_45_23 differ diff --git a/data/2022_12/21/info/06_50_23 b/data/2022_12/21/info/06_50_23 new file mode 100644 index 0000000..a8e276f Binary files /dev/null and b/data/2022_12/21/info/06_50_23 differ diff --git a/data/2022_12/21/info/06_55_23 b/data/2022_12/21/info/06_55_23 new file mode 100644 index 0000000..82b2e8c Binary files /dev/null and b/data/2022_12/21/info/06_55_23 differ diff --git a/data/2022_12/21/info/07_00_23 b/data/2022_12/21/info/07_00_23 new file mode 100644 index 0000000..17c6ea7 Binary files /dev/null and b/data/2022_12/21/info/07_00_23 differ diff --git a/data/2022_12/21/info/07_05_23 b/data/2022_12/21/info/07_05_23 new file mode 100644 index 0000000..a142ef9 Binary files /dev/null and b/data/2022_12/21/info/07_05_23 differ diff --git a/data/2022_12/21/info/07_10_23 b/data/2022_12/21/info/07_10_23 new file mode 100644 index 0000000..34b5abc Binary files /dev/null and b/data/2022_12/21/info/07_10_23 differ diff --git a/data/2022_12/21/info/07_15_23 b/data/2022_12/21/info/07_15_23 new file mode 100644 index 0000000..7980943 Binary files /dev/null and b/data/2022_12/21/info/07_15_23 differ diff --git a/data/2022_12/21/info/07_20_23 b/data/2022_12/21/info/07_20_23 new file mode 100644 index 0000000..16e1504 Binary files /dev/null and b/data/2022_12/21/info/07_20_23 differ diff --git a/data/2022_12/21/info/07_25_23 b/data/2022_12/21/info/07_25_23 new file mode 100644 index 0000000..17807e6 Binary files /dev/null and b/data/2022_12/21/info/07_25_23 differ diff --git a/data/2022_12/21/info/07_30_23 b/data/2022_12/21/info/07_30_23 new file mode 100644 index 0000000..023f52b Binary files /dev/null and b/data/2022_12/21/info/07_30_23 differ diff --git a/data/2022_12/21/info/07_35_23 b/data/2022_12/21/info/07_35_23 new file mode 100644 index 0000000..7287169 Binary files /dev/null and b/data/2022_12/21/info/07_35_23 differ diff --git a/data/2022_12/21/info/07_40_23 b/data/2022_12/21/info/07_40_23 new file mode 100644 index 0000000..9494000 Binary files /dev/null and b/data/2022_12/21/info/07_40_23 differ diff --git a/data/2022_12/21/info/07_45_23 b/data/2022_12/21/info/07_45_23 new file mode 100644 index 0000000..5eef284 Binary files /dev/null and b/data/2022_12/21/info/07_45_23 differ diff --git a/data/2022_12/21/info/07_50_23 b/data/2022_12/21/info/07_50_23 new file mode 100644 index 0000000..85c9e0d Binary files /dev/null and b/data/2022_12/21/info/07_50_23 differ diff --git a/data/2022_12/21/info/07_55_23 b/data/2022_12/21/info/07_55_23 new file mode 100644 index 0000000..0aa6044 Binary files /dev/null and b/data/2022_12/21/info/07_55_23 differ diff --git a/data/2022_12/21/info/08_00_23 b/data/2022_12/21/info/08_00_23 new file mode 100644 index 0000000..affa7cc Binary files /dev/null and b/data/2022_12/21/info/08_00_23 differ diff --git a/data/2022_12/21/info/08_05_23 b/data/2022_12/21/info/08_05_23 new file mode 100644 index 0000000..ce39086 Binary files /dev/null and b/data/2022_12/21/info/08_05_23 differ diff --git a/data/2022_12/21/info/08_10_23 b/data/2022_12/21/info/08_10_23 new file mode 100644 index 0000000..0924280 Binary files /dev/null and b/data/2022_12/21/info/08_10_23 differ diff --git a/data/2022_12/21/info/08_15_23 b/data/2022_12/21/info/08_15_23 new file mode 100644 index 0000000..f7a95cd Binary files /dev/null and b/data/2022_12/21/info/08_15_23 differ diff --git a/data/2022_12/21/info/08_20_23 b/data/2022_12/21/info/08_20_23 new file mode 100644 index 0000000..784d7ed Binary files /dev/null and b/data/2022_12/21/info/08_20_23 differ diff --git a/data/2022_12/21/info/08_25_23 b/data/2022_12/21/info/08_25_23 new file mode 100644 index 0000000..0abf923 Binary files /dev/null and b/data/2022_12/21/info/08_25_23 differ diff --git a/data/2022_12/21/info/08_30_23 b/data/2022_12/21/info/08_30_23 new file mode 100644 index 0000000..234b296 Binary files /dev/null and b/data/2022_12/21/info/08_30_23 differ diff --git a/data/2022_12/21/info/08_35_23 b/data/2022_12/21/info/08_35_23 new file mode 100644 index 0000000..7eda0d1 Binary files /dev/null and b/data/2022_12/21/info/08_35_23 differ diff --git a/data/2022_12/21/info/08_40_23 b/data/2022_12/21/info/08_40_23 new file mode 100644 index 0000000..7d74ace Binary files /dev/null and b/data/2022_12/21/info/08_40_23 differ diff --git a/data/2022_12/21/info/08_45_23 b/data/2022_12/21/info/08_45_23 new file mode 100644 index 0000000..048cead Binary files /dev/null and b/data/2022_12/21/info/08_45_23 differ diff --git a/data/2022_12/21/info/08_54_30 b/data/2022_12/21/info/08_54_30 new file mode 100644 index 0000000..2eda419 Binary files /dev/null and b/data/2022_12/21/info/08_54_30 differ diff --git a/data/2022_12/21/info/09_05_51 b/data/2022_12/21/info/09_05_51 new file mode 100644 index 0000000..9e9ce8b Binary files /dev/null and b/data/2022_12/21/info/09_05_51 differ diff --git a/data/2022_12/21/info/09_10_51 b/data/2022_12/21/info/09_10_51 new file mode 100644 index 0000000..2fb8979 Binary files /dev/null and b/data/2022_12/21/info/09_10_51 differ diff --git a/data/2022_12/21/info/09_15_51 b/data/2022_12/21/info/09_15_51 new file mode 100644 index 0000000..8a73d5b Binary files /dev/null and b/data/2022_12/21/info/09_15_51 differ diff --git a/data/2022_12/21/ptc08/00_05_23 b/data/2022_12/21/ptc08/00_05_23 new file mode 100644 index 0000000..1f51a97 Binary files /dev/null and b/data/2022_12/21/ptc08/00_05_23 differ diff --git a/data/2022_12/21/ptc08/00_10_23 b/data/2022_12/21/ptc08/00_10_23 new file mode 100644 index 0000000..88156ec Binary files /dev/null and b/data/2022_12/21/ptc08/00_10_23 differ diff --git a/data/2022_12/21/ptc08/00_15_23 b/data/2022_12/21/ptc08/00_15_23 new file mode 100644 index 0000000..157526e Binary files /dev/null and b/data/2022_12/21/ptc08/00_15_23 differ diff --git a/data/2022_12/21/ptc08/00_20_23 b/data/2022_12/21/ptc08/00_20_23 new file mode 100644 index 0000000..5b507cb Binary files /dev/null and b/data/2022_12/21/ptc08/00_20_23 differ diff --git a/data/2022_12/21/ptc08/00_25_23 b/data/2022_12/21/ptc08/00_25_23 new file mode 100644 index 0000000..8b3f25f Binary files /dev/null and b/data/2022_12/21/ptc08/00_25_23 differ diff --git a/data/2022_12/21/ptc08/00_30_23 b/data/2022_12/21/ptc08/00_30_23 new file mode 100644 index 0000000..d7798cb Binary files /dev/null and b/data/2022_12/21/ptc08/00_30_23 differ diff --git a/data/2022_12/21/ptc08/00_35_23 b/data/2022_12/21/ptc08/00_35_23 new file mode 100644 index 0000000..dc58a82 Binary files /dev/null and b/data/2022_12/21/ptc08/00_35_23 differ diff --git a/data/2022_12/21/ptc08/00_40_23 b/data/2022_12/21/ptc08/00_40_23 new file mode 100644 index 0000000..ae44c1f Binary files /dev/null and b/data/2022_12/21/ptc08/00_40_23 differ diff --git a/data/2022_12/21/ptc08/00_45_23 b/data/2022_12/21/ptc08/00_45_23 new file mode 100644 index 0000000..371bbd1 Binary files /dev/null and b/data/2022_12/21/ptc08/00_45_23 differ diff --git a/data/2022_12/21/ptc08/00_50_23 b/data/2022_12/21/ptc08/00_50_23 new file mode 100644 index 0000000..8ff0af2 Binary files /dev/null and b/data/2022_12/21/ptc08/00_50_23 differ diff --git a/data/2022_12/21/ptc08/00_55_23 b/data/2022_12/21/ptc08/00_55_23 new file mode 100644 index 0000000..ae06399 Binary files /dev/null and b/data/2022_12/21/ptc08/00_55_23 differ diff --git a/data/2022_12/21/ptc08/01_00_23 b/data/2022_12/21/ptc08/01_00_23 new file mode 100644 index 0000000..46d94db Binary files /dev/null and b/data/2022_12/21/ptc08/01_00_23 differ diff --git a/data/2022_12/21/ptc08/01_05_23 b/data/2022_12/21/ptc08/01_05_23 new file mode 100644 index 0000000..cc5f441 Binary files /dev/null and b/data/2022_12/21/ptc08/01_05_23 differ diff --git a/data/2022_12/21/ptc08/01_10_23 b/data/2022_12/21/ptc08/01_10_23 new file mode 100644 index 0000000..514fa85 Binary files /dev/null and b/data/2022_12/21/ptc08/01_10_23 differ diff --git a/data/2022_12/21/ptc08/01_15_23 b/data/2022_12/21/ptc08/01_15_23 new file mode 100644 index 0000000..12a0971 Binary files /dev/null and b/data/2022_12/21/ptc08/01_15_23 differ diff --git a/data/2022_12/21/ptc08/01_20_23 b/data/2022_12/21/ptc08/01_20_23 new file mode 100644 index 0000000..838ab72 Binary files /dev/null and b/data/2022_12/21/ptc08/01_20_23 differ diff --git a/data/2022_12/21/ptc08/01_25_23 b/data/2022_12/21/ptc08/01_25_23 new file mode 100644 index 0000000..52e43a7 Binary files /dev/null and b/data/2022_12/21/ptc08/01_25_23 differ diff --git a/data/2022_12/21/ptc08/01_30_23 b/data/2022_12/21/ptc08/01_30_23 new file mode 100644 index 0000000..74bfac0 Binary files /dev/null and b/data/2022_12/21/ptc08/01_30_23 differ diff --git a/data/2022_12/21/ptc08/01_35_23 b/data/2022_12/21/ptc08/01_35_23 new file mode 100644 index 0000000..baaa895 Binary files /dev/null and b/data/2022_12/21/ptc08/01_35_23 differ diff --git a/data/2022_12/21/ptc08/01_40_23 b/data/2022_12/21/ptc08/01_40_23 new file mode 100644 index 0000000..d802917 Binary files /dev/null and b/data/2022_12/21/ptc08/01_40_23 differ diff --git a/data/2022_12/21/ptc08/01_45_23 b/data/2022_12/21/ptc08/01_45_23 new file mode 100644 index 0000000..cd2eda7 Binary files /dev/null and b/data/2022_12/21/ptc08/01_45_23 differ diff --git a/data/2022_12/21/ptc08/01_50_23 b/data/2022_12/21/ptc08/01_50_23 new file mode 100644 index 0000000..0d7bd34 Binary files /dev/null and b/data/2022_12/21/ptc08/01_50_23 differ diff --git a/data/2022_12/21/ptc08/01_55_23 b/data/2022_12/21/ptc08/01_55_23 new file mode 100644 index 0000000..2723d85 Binary files /dev/null and b/data/2022_12/21/ptc08/01_55_23 differ diff --git a/data/2022_12/21/ptc08/02_00_23 b/data/2022_12/21/ptc08/02_00_23 new file mode 100644 index 0000000..ef9535c Binary files /dev/null and b/data/2022_12/21/ptc08/02_00_23 differ diff --git a/data/2022_12/21/ptc08/02_05_23 b/data/2022_12/21/ptc08/02_05_23 new file mode 100644 index 0000000..d3e0124 Binary files /dev/null and b/data/2022_12/21/ptc08/02_05_23 differ diff --git a/data/2022_12/21/ptc08/02_10_23 b/data/2022_12/21/ptc08/02_10_23 new file mode 100644 index 0000000..f1fe5fb Binary files /dev/null and b/data/2022_12/21/ptc08/02_10_23 differ diff --git a/data/2022_12/21/ptc08/02_15_23 b/data/2022_12/21/ptc08/02_15_23 new file mode 100644 index 0000000..a02b486 Binary files /dev/null and b/data/2022_12/21/ptc08/02_15_23 differ diff --git a/data/2022_12/21/ptc08/02_20_23 b/data/2022_12/21/ptc08/02_20_23 new file mode 100644 index 0000000..8b1cff7 Binary files /dev/null and b/data/2022_12/21/ptc08/02_20_23 differ diff --git a/data/2022_12/21/ptc08/02_25_23 b/data/2022_12/21/ptc08/02_25_23 new file mode 100644 index 0000000..87d89a2 Binary files /dev/null and b/data/2022_12/21/ptc08/02_25_23 differ diff --git a/data/2022_12/21/ptc08/02_30_23 b/data/2022_12/21/ptc08/02_30_23 new file mode 100644 index 0000000..7bc8574 Binary files /dev/null and b/data/2022_12/21/ptc08/02_30_23 differ diff --git a/data/2022_12/21/ptc08/02_35_23 b/data/2022_12/21/ptc08/02_35_23 new file mode 100644 index 0000000..9c2c747 Binary files /dev/null and b/data/2022_12/21/ptc08/02_35_23 differ diff --git a/data/2022_12/21/ptc08/02_40_23 b/data/2022_12/21/ptc08/02_40_23 new file mode 100644 index 0000000..f33bfda Binary files /dev/null and b/data/2022_12/21/ptc08/02_40_23 differ diff --git a/data/2022_12/21/ptc08/02_45_23 b/data/2022_12/21/ptc08/02_45_23 new file mode 100644 index 0000000..acb7167 Binary files /dev/null and b/data/2022_12/21/ptc08/02_45_23 differ diff --git a/data/2022_12/21/ptc08/02_50_23 b/data/2022_12/21/ptc08/02_50_23 new file mode 100644 index 0000000..2920ed2 Binary files /dev/null and b/data/2022_12/21/ptc08/02_50_23 differ diff --git a/data/2022_12/21/ptc08/02_55_23 b/data/2022_12/21/ptc08/02_55_23 new file mode 100644 index 0000000..020cc15 Binary files /dev/null and b/data/2022_12/21/ptc08/02_55_23 differ diff --git a/data/2022_12/21/ptc08/03_00_23 b/data/2022_12/21/ptc08/03_00_23 new file mode 100644 index 0000000..872f898 Binary files /dev/null and b/data/2022_12/21/ptc08/03_00_23 differ diff --git a/data/2022_12/21/ptc08/03_05_23 b/data/2022_12/21/ptc08/03_05_23 new file mode 100644 index 0000000..4f0c2e2 Binary files /dev/null and b/data/2022_12/21/ptc08/03_05_23 differ diff --git a/data/2022_12/21/ptc08/03_10_23 b/data/2022_12/21/ptc08/03_10_23 new file mode 100644 index 0000000..881046c Binary files /dev/null and b/data/2022_12/21/ptc08/03_10_23 differ diff --git a/data/2022_12/21/ptc08/03_15_23 b/data/2022_12/21/ptc08/03_15_23 new file mode 100644 index 0000000..f694abf Binary files /dev/null and b/data/2022_12/21/ptc08/03_15_23 differ diff --git a/data/2022_12/21/ptc08/03_20_23 b/data/2022_12/21/ptc08/03_20_23 new file mode 100644 index 0000000..91ec99e Binary files /dev/null and b/data/2022_12/21/ptc08/03_20_23 differ diff --git a/data/2022_12/21/ptc08/03_25_23 b/data/2022_12/21/ptc08/03_25_23 new file mode 100644 index 0000000..b4f7087 Binary files /dev/null and b/data/2022_12/21/ptc08/03_25_23 differ diff --git a/data/2022_12/21/ptc08/03_30_23 b/data/2022_12/21/ptc08/03_30_23 new file mode 100644 index 0000000..f6cfcb6 Binary files /dev/null and b/data/2022_12/21/ptc08/03_30_23 differ diff --git a/data/2022_12/21/ptc08/03_35_23 b/data/2022_12/21/ptc08/03_35_23 new file mode 100644 index 0000000..ba31e2e Binary files /dev/null and b/data/2022_12/21/ptc08/03_35_23 differ diff --git a/data/2022_12/21/ptc08/03_40_23 b/data/2022_12/21/ptc08/03_40_23 new file mode 100644 index 0000000..9af4fea Binary files /dev/null and b/data/2022_12/21/ptc08/03_40_23 differ diff --git a/data/2022_12/21/ptc08/03_45_23 b/data/2022_12/21/ptc08/03_45_23 new file mode 100644 index 0000000..19fe88d Binary files /dev/null and b/data/2022_12/21/ptc08/03_45_23 differ diff --git a/data/2022_12/21/ptc08/03_50_23 b/data/2022_12/21/ptc08/03_50_23 new file mode 100644 index 0000000..c920b45 Binary files /dev/null and b/data/2022_12/21/ptc08/03_50_23 differ diff --git a/data/2022_12/21/ptc08/03_55_23 b/data/2022_12/21/ptc08/03_55_23 new file mode 100644 index 0000000..53d3ff7 Binary files /dev/null and b/data/2022_12/21/ptc08/03_55_23 differ diff --git a/data/2022_12/21/ptc08/04_00_23 b/data/2022_12/21/ptc08/04_00_23 new file mode 100644 index 0000000..98b45e4 Binary files /dev/null and b/data/2022_12/21/ptc08/04_00_23 differ diff --git a/data/2022_12/21/ptc08/04_05_23 b/data/2022_12/21/ptc08/04_05_23 new file mode 100644 index 0000000..98010fa Binary files /dev/null and b/data/2022_12/21/ptc08/04_05_23 differ diff --git a/data/2022_12/21/ptc08/04_10_23 b/data/2022_12/21/ptc08/04_10_23 new file mode 100644 index 0000000..6256f27 Binary files /dev/null and b/data/2022_12/21/ptc08/04_10_23 differ diff --git a/data/2022_12/21/ptc08/04_15_23 b/data/2022_12/21/ptc08/04_15_23 new file mode 100644 index 0000000..f035bd1 Binary files /dev/null and b/data/2022_12/21/ptc08/04_15_23 differ diff --git a/data/2022_12/21/ptc08/04_20_23 b/data/2022_12/21/ptc08/04_20_23 new file mode 100644 index 0000000..1799567 Binary files /dev/null and b/data/2022_12/21/ptc08/04_20_23 differ diff --git a/data/2022_12/21/ptc08/04_25_23 b/data/2022_12/21/ptc08/04_25_23 new file mode 100644 index 0000000..40e5e25 Binary files /dev/null and b/data/2022_12/21/ptc08/04_25_23 differ diff --git a/data/2022_12/21/ptc08/04_30_23 b/data/2022_12/21/ptc08/04_30_23 new file mode 100644 index 0000000..f2e3f3d Binary files /dev/null and b/data/2022_12/21/ptc08/04_30_23 differ diff --git a/data/2022_12/21/ptc08/04_35_23 b/data/2022_12/21/ptc08/04_35_23 new file mode 100644 index 0000000..c5aaccb Binary files /dev/null and b/data/2022_12/21/ptc08/04_35_23 differ diff --git a/data/2022_12/21/ptc08/04_40_23 b/data/2022_12/21/ptc08/04_40_23 new file mode 100644 index 0000000..29ba060 Binary files /dev/null and b/data/2022_12/21/ptc08/04_40_23 differ diff --git a/data/2022_12/21/ptc08/04_45_23 b/data/2022_12/21/ptc08/04_45_23 new file mode 100644 index 0000000..b691711 Binary files /dev/null and b/data/2022_12/21/ptc08/04_45_23 differ diff --git a/data/2022_12/21/ptc08/04_50_23 b/data/2022_12/21/ptc08/04_50_23 new file mode 100644 index 0000000..f0cb8e3 Binary files /dev/null and b/data/2022_12/21/ptc08/04_50_23 differ diff --git a/data/2022_12/21/ptc08/04_55_23 b/data/2022_12/21/ptc08/04_55_23 new file mode 100644 index 0000000..01edd57 Binary files /dev/null and b/data/2022_12/21/ptc08/04_55_23 differ diff --git a/data/2022_12/21/ptc08/05_00_23 b/data/2022_12/21/ptc08/05_00_23 new file mode 100644 index 0000000..934ed90 Binary files /dev/null and b/data/2022_12/21/ptc08/05_00_23 differ diff --git a/data/2022_12/21/ptc08/05_05_23 b/data/2022_12/21/ptc08/05_05_23 new file mode 100644 index 0000000..caa1150 Binary files /dev/null and b/data/2022_12/21/ptc08/05_05_23 differ diff --git a/data/2022_12/21/ptc08/05_10_23 b/data/2022_12/21/ptc08/05_10_23 new file mode 100644 index 0000000..f4c7eaa Binary files /dev/null and b/data/2022_12/21/ptc08/05_10_23 differ diff --git a/data/2022_12/21/ptc08/05_15_23 b/data/2022_12/21/ptc08/05_15_23 new file mode 100644 index 0000000..ea9a87f Binary files /dev/null and b/data/2022_12/21/ptc08/05_15_23 differ diff --git a/data/2022_12/21/ptc08/05_20_23 b/data/2022_12/21/ptc08/05_20_23 new file mode 100644 index 0000000..4479f0b Binary files /dev/null and b/data/2022_12/21/ptc08/05_20_23 differ diff --git a/data/2022_12/21/ptc08/05_25_23 b/data/2022_12/21/ptc08/05_25_23 new file mode 100644 index 0000000..63038c7 Binary files /dev/null and b/data/2022_12/21/ptc08/05_25_23 differ diff --git a/data/2022_12/21/ptc08/05_30_23 b/data/2022_12/21/ptc08/05_30_23 new file mode 100644 index 0000000..528ee86 Binary files /dev/null and b/data/2022_12/21/ptc08/05_30_23 differ diff --git a/data/2022_12/21/ptc08/05_35_23 b/data/2022_12/21/ptc08/05_35_23 new file mode 100644 index 0000000..5a22bca Binary files /dev/null and b/data/2022_12/21/ptc08/05_35_23 differ diff --git a/data/2022_12/21/ptc08/05_40_23 b/data/2022_12/21/ptc08/05_40_23 new file mode 100644 index 0000000..6cf6564 Binary files /dev/null and b/data/2022_12/21/ptc08/05_40_23 differ diff --git a/data/2022_12/21/ptc08/05_45_23 b/data/2022_12/21/ptc08/05_45_23 new file mode 100644 index 0000000..4d76883 Binary files /dev/null and b/data/2022_12/21/ptc08/05_45_23 differ diff --git a/data/2022_12/21/ptc08/05_50_23 b/data/2022_12/21/ptc08/05_50_23 new file mode 100644 index 0000000..2da815a Binary files /dev/null and b/data/2022_12/21/ptc08/05_50_23 differ diff --git a/data/2022_12/21/ptc08/05_55_23 b/data/2022_12/21/ptc08/05_55_23 new file mode 100644 index 0000000..d938965 Binary files /dev/null and b/data/2022_12/21/ptc08/05_55_23 differ diff --git a/data/2022_12/21/ptc08/06_00_23 b/data/2022_12/21/ptc08/06_00_23 new file mode 100644 index 0000000..a57f9f2 Binary files /dev/null and b/data/2022_12/21/ptc08/06_00_23 differ diff --git a/data/2022_12/21/ptc08/06_05_23 b/data/2022_12/21/ptc08/06_05_23 new file mode 100644 index 0000000..195c670 Binary files /dev/null and b/data/2022_12/21/ptc08/06_05_23 differ diff --git a/data/2022_12/21/ptc08/06_10_23 b/data/2022_12/21/ptc08/06_10_23 new file mode 100644 index 0000000..578dd15 Binary files /dev/null and b/data/2022_12/21/ptc08/06_10_23 differ diff --git a/data/2022_12/21/ptc08/06_15_23 b/data/2022_12/21/ptc08/06_15_23 new file mode 100644 index 0000000..ac5ebda Binary files /dev/null and b/data/2022_12/21/ptc08/06_15_23 differ diff --git a/data/2022_12/21/ptc08/06_20_23 b/data/2022_12/21/ptc08/06_20_23 new file mode 100644 index 0000000..7953d41 Binary files /dev/null and b/data/2022_12/21/ptc08/06_20_23 differ diff --git a/data/2022_12/21/ptc08/06_25_23 b/data/2022_12/21/ptc08/06_25_23 new file mode 100644 index 0000000..349a26d Binary files /dev/null and b/data/2022_12/21/ptc08/06_25_23 differ diff --git a/data/2022_12/21/ptc08/06_30_23 b/data/2022_12/21/ptc08/06_30_23 new file mode 100644 index 0000000..1fb26f4 Binary files /dev/null and b/data/2022_12/21/ptc08/06_30_23 differ diff --git a/data/2022_12/21/ptc08/06_35_23 b/data/2022_12/21/ptc08/06_35_23 new file mode 100644 index 0000000..460282a Binary files /dev/null and b/data/2022_12/21/ptc08/06_35_23 differ diff --git a/data/2022_12/21/ptc08/06_40_23 b/data/2022_12/21/ptc08/06_40_23 new file mode 100644 index 0000000..1c07aa2 Binary files /dev/null and b/data/2022_12/21/ptc08/06_40_23 differ diff --git a/data/2022_12/21/ptc08/06_45_23 b/data/2022_12/21/ptc08/06_45_23 new file mode 100644 index 0000000..ecbff30 Binary files /dev/null and b/data/2022_12/21/ptc08/06_45_23 differ diff --git a/data/2022_12/21/ptc08/06_50_23 b/data/2022_12/21/ptc08/06_50_23 new file mode 100644 index 0000000..15615f9 Binary files /dev/null and b/data/2022_12/21/ptc08/06_50_23 differ diff --git a/data/2022_12/21/ptc08/06_55_23 b/data/2022_12/21/ptc08/06_55_23 new file mode 100644 index 0000000..3c47676 Binary files /dev/null and b/data/2022_12/21/ptc08/06_55_23 differ diff --git a/data/2022_12/21/ptc08/07_00_23 b/data/2022_12/21/ptc08/07_00_23 new file mode 100644 index 0000000..8a75f4b Binary files /dev/null and b/data/2022_12/21/ptc08/07_00_23 differ diff --git a/data/2022_12/21/ptc08/07_05_23 b/data/2022_12/21/ptc08/07_05_23 new file mode 100644 index 0000000..d41fd55 Binary files /dev/null and b/data/2022_12/21/ptc08/07_05_23 differ diff --git a/data/2022_12/21/ptc08/07_10_23 b/data/2022_12/21/ptc08/07_10_23 new file mode 100644 index 0000000..54aca23 Binary files /dev/null and b/data/2022_12/21/ptc08/07_10_23 differ diff --git a/data/2022_12/21/ptc08/07_15_23 b/data/2022_12/21/ptc08/07_15_23 new file mode 100644 index 0000000..e0e9db5 Binary files /dev/null and b/data/2022_12/21/ptc08/07_15_23 differ diff --git a/data/2022_12/21/ptc08/07_20_23 b/data/2022_12/21/ptc08/07_20_23 new file mode 100644 index 0000000..4ceaf8a Binary files /dev/null and b/data/2022_12/21/ptc08/07_20_23 differ diff --git a/data/2022_12/21/ptc08/07_25_23 b/data/2022_12/21/ptc08/07_25_23 new file mode 100644 index 0000000..56a60f4 Binary files /dev/null and b/data/2022_12/21/ptc08/07_25_23 differ diff --git a/data/2022_12/21/ptc08/07_30_23 b/data/2022_12/21/ptc08/07_30_23 new file mode 100644 index 0000000..e4a51f4 Binary files /dev/null and b/data/2022_12/21/ptc08/07_30_23 differ diff --git a/data/2022_12/21/ptc08/07_35_23 b/data/2022_12/21/ptc08/07_35_23 new file mode 100644 index 0000000..63b3d41 Binary files /dev/null and b/data/2022_12/21/ptc08/07_35_23 differ diff --git a/data/2022_12/21/ptc08/07_40_23 b/data/2022_12/21/ptc08/07_40_23 new file mode 100644 index 0000000..f0ef13a Binary files /dev/null and b/data/2022_12/21/ptc08/07_40_23 differ diff --git a/data/2022_12/21/ptc08/07_45_23 b/data/2022_12/21/ptc08/07_45_23 new file mode 100644 index 0000000..450baa7 Binary files /dev/null and b/data/2022_12/21/ptc08/07_45_23 differ diff --git a/data/2022_12/21/ptc08/07_50_23 b/data/2022_12/21/ptc08/07_50_23 new file mode 100644 index 0000000..942147d Binary files /dev/null and b/data/2022_12/21/ptc08/07_50_23 differ diff --git a/data/2022_12/21/ptc08/07_55_23 b/data/2022_12/21/ptc08/07_55_23 new file mode 100644 index 0000000..14c84c0 Binary files /dev/null and b/data/2022_12/21/ptc08/07_55_23 differ diff --git a/data/2022_12/21/ptc08/08_00_23 b/data/2022_12/21/ptc08/08_00_23 new file mode 100644 index 0000000..1d6c1b6 Binary files /dev/null and b/data/2022_12/21/ptc08/08_00_23 differ diff --git a/data/2022_12/21/ptc08/08_05_23 b/data/2022_12/21/ptc08/08_05_23 new file mode 100644 index 0000000..270a6d5 Binary files /dev/null and b/data/2022_12/21/ptc08/08_05_23 differ diff --git a/data/2022_12/21/ptc08/08_10_23 b/data/2022_12/21/ptc08/08_10_23 new file mode 100644 index 0000000..a6c89cd Binary files /dev/null and b/data/2022_12/21/ptc08/08_10_23 differ diff --git a/data/2022_12/21/ptc08/08_15_23 b/data/2022_12/21/ptc08/08_15_23 new file mode 100644 index 0000000..f902538 Binary files /dev/null and b/data/2022_12/21/ptc08/08_15_23 differ diff --git a/data/2022_12/21/ptc08/08_20_23 b/data/2022_12/21/ptc08/08_20_23 new file mode 100644 index 0000000..de807ee Binary files /dev/null and b/data/2022_12/21/ptc08/08_20_23 differ diff --git a/data/2022_12/21/ptc08/08_25_23 b/data/2022_12/21/ptc08/08_25_23 new file mode 100644 index 0000000..bb3dd78 Binary files /dev/null and b/data/2022_12/21/ptc08/08_25_23 differ diff --git a/data/2022_12/21/ptc08/08_30_23 b/data/2022_12/21/ptc08/08_30_23 new file mode 100644 index 0000000..de36e11 Binary files /dev/null and b/data/2022_12/21/ptc08/08_30_23 differ diff --git a/data/2022_12/21/ptc08/08_35_23 b/data/2022_12/21/ptc08/08_35_23 new file mode 100644 index 0000000..7b567ed Binary files /dev/null and b/data/2022_12/21/ptc08/08_35_23 differ diff --git a/data/2022_12/21/ptc08/08_40_23 b/data/2022_12/21/ptc08/08_40_23 new file mode 100644 index 0000000..8c8346b Binary files /dev/null and b/data/2022_12/21/ptc08/08_40_23 differ diff --git a/data/2022_12/21/ptc08/08_45_23 b/data/2022_12/21/ptc08/08_45_23 new file mode 100644 index 0000000..1acbfb0 Binary files /dev/null and b/data/2022_12/21/ptc08/08_45_23 differ diff --git a/data/2022_12/21/ptc08/08_54_30 b/data/2022_12/21/ptc08/08_54_30 new file mode 100644 index 0000000..40ebcf0 Binary files /dev/null and b/data/2022_12/21/ptc08/08_54_30 differ diff --git a/data/2022_12/21/ptc08/09_05_51 b/data/2022_12/21/ptc08/09_05_51 new file mode 100644 index 0000000..edb2a48 Binary files /dev/null and b/data/2022_12/21/ptc08/09_05_51 differ diff --git a/data/2022_12/21/ptc08/09_10_51 b/data/2022_12/21/ptc08/09_10_51 new file mode 100644 index 0000000..b4c1460 Binary files /dev/null and b/data/2022_12/21/ptc08/09_10_51 differ diff --git a/data/2022_12/21/ptc08/09_15_51 b/data/2022_12/21/ptc08/09_15_51 new file mode 100644 index 0000000..e69de29 diff --git a/data/2022_12/21/sensor/00_05_23 b/data/2022_12/21/sensor/00_05_23 new file mode 100644 index 0000000..e2c1da1 Binary files /dev/null and b/data/2022_12/21/sensor/00_05_23 differ diff --git a/data/2022_12/21/sensor/00_10_23 b/data/2022_12/21/sensor/00_10_23 new file mode 100644 index 0000000..eed36d1 Binary files /dev/null and b/data/2022_12/21/sensor/00_10_23 differ diff --git a/data/2022_12/21/sensor/00_15_23 b/data/2022_12/21/sensor/00_15_23 new file mode 100644 index 0000000..a5a93a8 Binary files /dev/null and b/data/2022_12/21/sensor/00_15_23 differ diff --git a/data/2022_12/21/sensor/00_20_23 b/data/2022_12/21/sensor/00_20_23 new file mode 100644 index 0000000..672a4c9 Binary files /dev/null and b/data/2022_12/21/sensor/00_20_23 differ diff --git a/data/2022_12/21/sensor/00_25_23 b/data/2022_12/21/sensor/00_25_23 new file mode 100644 index 0000000..e3b56f6 Binary files /dev/null and b/data/2022_12/21/sensor/00_25_23 differ diff --git a/data/2022_12/21/sensor/00_30_23 b/data/2022_12/21/sensor/00_30_23 new file mode 100644 index 0000000..94eddd0 Binary files /dev/null and b/data/2022_12/21/sensor/00_30_23 differ diff --git a/data/2022_12/21/sensor/00_35_23 b/data/2022_12/21/sensor/00_35_23 new file mode 100644 index 0000000..ef6c6a7 Binary files /dev/null and b/data/2022_12/21/sensor/00_35_23 differ diff --git a/data/2022_12/21/sensor/00_40_23 b/data/2022_12/21/sensor/00_40_23 new file mode 100644 index 0000000..04452a1 Binary files /dev/null and b/data/2022_12/21/sensor/00_40_23 differ diff --git a/data/2022_12/21/sensor/00_45_23 b/data/2022_12/21/sensor/00_45_23 new file mode 100644 index 0000000..0eebd06 Binary files /dev/null and b/data/2022_12/21/sensor/00_45_23 differ diff --git a/data/2022_12/21/sensor/00_50_23 b/data/2022_12/21/sensor/00_50_23 new file mode 100644 index 0000000..2b31977 Binary files /dev/null and b/data/2022_12/21/sensor/00_50_23 differ diff --git a/data/2022_12/21/sensor/00_55_23 b/data/2022_12/21/sensor/00_55_23 new file mode 100644 index 0000000..707bcb6 Binary files /dev/null and b/data/2022_12/21/sensor/00_55_23 differ diff --git a/data/2022_12/21/sensor/01_00_23 b/data/2022_12/21/sensor/01_00_23 new file mode 100644 index 0000000..e04cbff Binary files /dev/null and b/data/2022_12/21/sensor/01_00_23 differ diff --git a/data/2022_12/21/sensor/01_05_23 b/data/2022_12/21/sensor/01_05_23 new file mode 100644 index 0000000..bd4ddfb Binary files /dev/null and b/data/2022_12/21/sensor/01_05_23 differ diff --git a/data/2022_12/21/sensor/01_10_23 b/data/2022_12/21/sensor/01_10_23 new file mode 100644 index 0000000..49868b6 Binary files /dev/null and b/data/2022_12/21/sensor/01_10_23 differ diff --git a/data/2022_12/21/sensor/01_15_23 b/data/2022_12/21/sensor/01_15_23 new file mode 100644 index 0000000..6e31722 Binary files /dev/null and b/data/2022_12/21/sensor/01_15_23 differ diff --git a/data/2022_12/21/sensor/01_20_23 b/data/2022_12/21/sensor/01_20_23 new file mode 100644 index 0000000..c26a136 Binary files /dev/null and b/data/2022_12/21/sensor/01_20_23 differ diff --git a/data/2022_12/21/sensor/01_25_23 b/data/2022_12/21/sensor/01_25_23 new file mode 100644 index 0000000..35c4121 Binary files /dev/null and b/data/2022_12/21/sensor/01_25_23 differ diff --git a/data/2022_12/21/sensor/01_30_23 b/data/2022_12/21/sensor/01_30_23 new file mode 100644 index 0000000..668f404 Binary files /dev/null and b/data/2022_12/21/sensor/01_30_23 differ diff --git a/data/2022_12/21/sensor/01_35_23 b/data/2022_12/21/sensor/01_35_23 new file mode 100644 index 0000000..283d257 Binary files /dev/null and b/data/2022_12/21/sensor/01_35_23 differ diff --git a/data/2022_12/21/sensor/01_40_23 b/data/2022_12/21/sensor/01_40_23 new file mode 100644 index 0000000..e283f88 Binary files /dev/null and b/data/2022_12/21/sensor/01_40_23 differ diff --git a/data/2022_12/21/sensor/01_45_23 b/data/2022_12/21/sensor/01_45_23 new file mode 100644 index 0000000..bb937d9 Binary files /dev/null and b/data/2022_12/21/sensor/01_45_23 differ diff --git a/data/2022_12/21/sensor/01_50_23 b/data/2022_12/21/sensor/01_50_23 new file mode 100644 index 0000000..3f20331 Binary files /dev/null and b/data/2022_12/21/sensor/01_50_23 differ diff --git a/data/2022_12/21/sensor/01_55_23 b/data/2022_12/21/sensor/01_55_23 new file mode 100644 index 0000000..65923ed Binary files /dev/null and b/data/2022_12/21/sensor/01_55_23 differ diff --git a/data/2022_12/21/sensor/02_00_23 b/data/2022_12/21/sensor/02_00_23 new file mode 100644 index 0000000..058e6b9 Binary files /dev/null and b/data/2022_12/21/sensor/02_00_23 differ diff --git a/data/2022_12/21/sensor/02_05_23 b/data/2022_12/21/sensor/02_05_23 new file mode 100644 index 0000000..faef53e Binary files /dev/null and b/data/2022_12/21/sensor/02_05_23 differ diff --git a/data/2022_12/21/sensor/02_10_23 b/data/2022_12/21/sensor/02_10_23 new file mode 100644 index 0000000..a224859 Binary files /dev/null and b/data/2022_12/21/sensor/02_10_23 differ diff --git a/data/2022_12/21/sensor/02_15_23 b/data/2022_12/21/sensor/02_15_23 new file mode 100644 index 0000000..c804c4f Binary files /dev/null and b/data/2022_12/21/sensor/02_15_23 differ diff --git a/data/2022_12/21/sensor/02_20_23 b/data/2022_12/21/sensor/02_20_23 new file mode 100644 index 0000000..954a24c Binary files /dev/null and b/data/2022_12/21/sensor/02_20_23 differ diff --git a/data/2022_12/21/sensor/02_25_23 b/data/2022_12/21/sensor/02_25_23 new file mode 100644 index 0000000..819f1f0 Binary files /dev/null and b/data/2022_12/21/sensor/02_25_23 differ diff --git a/data/2022_12/21/sensor/02_30_23 b/data/2022_12/21/sensor/02_30_23 new file mode 100644 index 0000000..21d4f6a Binary files /dev/null and b/data/2022_12/21/sensor/02_30_23 differ diff --git a/data/2022_12/21/sensor/02_35_23 b/data/2022_12/21/sensor/02_35_23 new file mode 100644 index 0000000..3c977b5 Binary files /dev/null and b/data/2022_12/21/sensor/02_35_23 differ diff --git a/data/2022_12/21/sensor/02_40_23 b/data/2022_12/21/sensor/02_40_23 new file mode 100644 index 0000000..cffef60 Binary files /dev/null and b/data/2022_12/21/sensor/02_40_23 differ diff --git a/data/2022_12/21/sensor/02_45_23 b/data/2022_12/21/sensor/02_45_23 new file mode 100644 index 0000000..8621903 Binary files /dev/null and b/data/2022_12/21/sensor/02_45_23 differ diff --git a/data/2022_12/21/sensor/02_50_23 b/data/2022_12/21/sensor/02_50_23 new file mode 100644 index 0000000..b3de9e6 Binary files /dev/null and b/data/2022_12/21/sensor/02_50_23 differ diff --git a/data/2022_12/21/sensor/02_55_23 b/data/2022_12/21/sensor/02_55_23 new file mode 100644 index 0000000..1c36dae Binary files /dev/null and b/data/2022_12/21/sensor/02_55_23 differ diff --git a/data/2022_12/21/sensor/03_00_23 b/data/2022_12/21/sensor/03_00_23 new file mode 100644 index 0000000..6ae8ebe Binary files /dev/null and b/data/2022_12/21/sensor/03_00_23 differ diff --git a/data/2022_12/21/sensor/03_05_23 b/data/2022_12/21/sensor/03_05_23 new file mode 100644 index 0000000..643b2ee Binary files /dev/null and b/data/2022_12/21/sensor/03_05_23 differ diff --git a/data/2022_12/21/sensor/03_10_23 b/data/2022_12/21/sensor/03_10_23 new file mode 100644 index 0000000..35dfb61 Binary files /dev/null and b/data/2022_12/21/sensor/03_10_23 differ diff --git a/data/2022_12/21/sensor/03_15_23 b/data/2022_12/21/sensor/03_15_23 new file mode 100644 index 0000000..82f2897 Binary files /dev/null and b/data/2022_12/21/sensor/03_15_23 differ diff --git a/data/2022_12/21/sensor/03_20_23 b/data/2022_12/21/sensor/03_20_23 new file mode 100644 index 0000000..70666ff Binary files /dev/null and b/data/2022_12/21/sensor/03_20_23 differ diff --git a/data/2022_12/21/sensor/03_25_23 b/data/2022_12/21/sensor/03_25_23 new file mode 100644 index 0000000..142a741 Binary files /dev/null and b/data/2022_12/21/sensor/03_25_23 differ diff --git a/data/2022_12/21/sensor/03_30_23 b/data/2022_12/21/sensor/03_30_23 new file mode 100644 index 0000000..bcd3c45 Binary files /dev/null and b/data/2022_12/21/sensor/03_30_23 differ diff --git a/data/2022_12/21/sensor/03_35_23 b/data/2022_12/21/sensor/03_35_23 new file mode 100644 index 0000000..48be163 Binary files /dev/null and b/data/2022_12/21/sensor/03_35_23 differ diff --git a/data/2022_12/21/sensor/03_40_23 b/data/2022_12/21/sensor/03_40_23 new file mode 100644 index 0000000..b3e09d7 Binary files /dev/null and b/data/2022_12/21/sensor/03_40_23 differ diff --git a/data/2022_12/21/sensor/03_45_23 b/data/2022_12/21/sensor/03_45_23 new file mode 100644 index 0000000..9739084 Binary files /dev/null and b/data/2022_12/21/sensor/03_45_23 differ diff --git a/data/2022_12/21/sensor/03_50_23 b/data/2022_12/21/sensor/03_50_23 new file mode 100644 index 0000000..fcbc8fa Binary files /dev/null and b/data/2022_12/21/sensor/03_50_23 differ diff --git a/data/2022_12/21/sensor/03_55_23 b/data/2022_12/21/sensor/03_55_23 new file mode 100644 index 0000000..8ce1060 Binary files /dev/null and b/data/2022_12/21/sensor/03_55_23 differ diff --git a/data/2022_12/21/sensor/04_00_23 b/data/2022_12/21/sensor/04_00_23 new file mode 100644 index 0000000..1c2f4d1 Binary files /dev/null and b/data/2022_12/21/sensor/04_00_23 differ diff --git a/data/2022_12/21/sensor/04_05_23 b/data/2022_12/21/sensor/04_05_23 new file mode 100644 index 0000000..337f72b Binary files /dev/null and b/data/2022_12/21/sensor/04_05_23 differ diff --git a/data/2022_12/21/sensor/04_10_23 b/data/2022_12/21/sensor/04_10_23 new file mode 100644 index 0000000..c398333 Binary files /dev/null and b/data/2022_12/21/sensor/04_10_23 differ diff --git a/data/2022_12/21/sensor/04_15_23 b/data/2022_12/21/sensor/04_15_23 new file mode 100644 index 0000000..23f9eb0 Binary files /dev/null and b/data/2022_12/21/sensor/04_15_23 differ diff --git a/data/2022_12/21/sensor/04_20_23 b/data/2022_12/21/sensor/04_20_23 new file mode 100644 index 0000000..adb0c2a Binary files /dev/null and b/data/2022_12/21/sensor/04_20_23 differ diff --git a/data/2022_12/21/sensor/04_25_23 b/data/2022_12/21/sensor/04_25_23 new file mode 100644 index 0000000..d4991fb Binary files /dev/null and b/data/2022_12/21/sensor/04_25_23 differ diff --git a/data/2022_12/21/sensor/04_30_23 b/data/2022_12/21/sensor/04_30_23 new file mode 100644 index 0000000..013e1d5 Binary files /dev/null and b/data/2022_12/21/sensor/04_30_23 differ diff --git a/data/2022_12/21/sensor/04_35_23 b/data/2022_12/21/sensor/04_35_23 new file mode 100644 index 0000000..d5c648f Binary files /dev/null and b/data/2022_12/21/sensor/04_35_23 differ diff --git a/data/2022_12/21/sensor/04_40_23 b/data/2022_12/21/sensor/04_40_23 new file mode 100644 index 0000000..456b02c Binary files /dev/null and b/data/2022_12/21/sensor/04_40_23 differ diff --git a/data/2022_12/21/sensor/04_45_23 b/data/2022_12/21/sensor/04_45_23 new file mode 100644 index 0000000..3344588 Binary files /dev/null and b/data/2022_12/21/sensor/04_45_23 differ diff --git a/data/2022_12/21/sensor/04_50_23 b/data/2022_12/21/sensor/04_50_23 new file mode 100644 index 0000000..6870222 Binary files /dev/null and b/data/2022_12/21/sensor/04_50_23 differ diff --git a/data/2022_12/21/sensor/04_55_23 b/data/2022_12/21/sensor/04_55_23 new file mode 100644 index 0000000..592ffa6 Binary files /dev/null and b/data/2022_12/21/sensor/04_55_23 differ diff --git a/data/2022_12/21/sensor/05_00_23 b/data/2022_12/21/sensor/05_00_23 new file mode 100644 index 0000000..dbae07f Binary files /dev/null and b/data/2022_12/21/sensor/05_00_23 differ diff --git a/data/2022_12/21/sensor/05_05_23 b/data/2022_12/21/sensor/05_05_23 new file mode 100644 index 0000000..2251f6a Binary files /dev/null and b/data/2022_12/21/sensor/05_05_23 differ diff --git a/data/2022_12/21/sensor/05_10_23 b/data/2022_12/21/sensor/05_10_23 new file mode 100644 index 0000000..49b8b58 Binary files /dev/null and b/data/2022_12/21/sensor/05_10_23 differ diff --git a/data/2022_12/21/sensor/05_15_23 b/data/2022_12/21/sensor/05_15_23 new file mode 100644 index 0000000..29ba449 Binary files /dev/null and b/data/2022_12/21/sensor/05_15_23 differ diff --git a/data/2022_12/21/sensor/05_20_23 b/data/2022_12/21/sensor/05_20_23 new file mode 100644 index 0000000..a691fcf Binary files /dev/null and b/data/2022_12/21/sensor/05_20_23 differ diff --git a/data/2022_12/21/sensor/05_25_23 b/data/2022_12/21/sensor/05_25_23 new file mode 100644 index 0000000..a148e1f Binary files /dev/null and b/data/2022_12/21/sensor/05_25_23 differ diff --git a/data/2022_12/21/sensor/05_30_23 b/data/2022_12/21/sensor/05_30_23 new file mode 100644 index 0000000..cfaeba8 Binary files /dev/null and b/data/2022_12/21/sensor/05_30_23 differ diff --git a/data/2022_12/21/sensor/05_35_23 b/data/2022_12/21/sensor/05_35_23 new file mode 100644 index 0000000..a980cb7 Binary files /dev/null and b/data/2022_12/21/sensor/05_35_23 differ diff --git a/data/2022_12/21/sensor/05_40_23 b/data/2022_12/21/sensor/05_40_23 new file mode 100644 index 0000000..ab6837b Binary files /dev/null and b/data/2022_12/21/sensor/05_40_23 differ diff --git a/data/2022_12/21/sensor/05_45_23 b/data/2022_12/21/sensor/05_45_23 new file mode 100644 index 0000000..68327fa Binary files /dev/null and b/data/2022_12/21/sensor/05_45_23 differ diff --git a/data/2022_12/21/sensor/05_50_23 b/data/2022_12/21/sensor/05_50_23 new file mode 100644 index 0000000..d41ecb3 Binary files /dev/null and b/data/2022_12/21/sensor/05_50_23 differ diff --git a/data/2022_12/21/sensor/05_55_23 b/data/2022_12/21/sensor/05_55_23 new file mode 100644 index 0000000..682bc3c Binary files /dev/null and b/data/2022_12/21/sensor/05_55_23 differ diff --git a/data/2022_12/21/sensor/06_00_23 b/data/2022_12/21/sensor/06_00_23 new file mode 100644 index 0000000..3157fd6 Binary files /dev/null and b/data/2022_12/21/sensor/06_00_23 differ diff --git a/data/2022_12/21/sensor/06_05_23 b/data/2022_12/21/sensor/06_05_23 new file mode 100644 index 0000000..3324312 Binary files /dev/null and b/data/2022_12/21/sensor/06_05_23 differ diff --git a/data/2022_12/21/sensor/06_10_23 b/data/2022_12/21/sensor/06_10_23 new file mode 100644 index 0000000..6727027 Binary files /dev/null and b/data/2022_12/21/sensor/06_10_23 differ diff --git a/data/2022_12/21/sensor/06_15_23 b/data/2022_12/21/sensor/06_15_23 new file mode 100644 index 0000000..a3286b9 Binary files /dev/null and b/data/2022_12/21/sensor/06_15_23 differ diff --git a/data/2022_12/21/sensor/06_20_23 b/data/2022_12/21/sensor/06_20_23 new file mode 100644 index 0000000..5ff8e6b Binary files /dev/null and b/data/2022_12/21/sensor/06_20_23 differ diff --git a/data/2022_12/21/sensor/06_25_23 b/data/2022_12/21/sensor/06_25_23 new file mode 100644 index 0000000..0d98e96 Binary files /dev/null and b/data/2022_12/21/sensor/06_25_23 differ diff --git a/data/2022_12/21/sensor/06_30_23 b/data/2022_12/21/sensor/06_30_23 new file mode 100644 index 0000000..417b57a Binary files /dev/null and b/data/2022_12/21/sensor/06_30_23 differ diff --git a/data/2022_12/21/sensor/06_35_23 b/data/2022_12/21/sensor/06_35_23 new file mode 100644 index 0000000..0e024d1 Binary files /dev/null and b/data/2022_12/21/sensor/06_35_23 differ diff --git a/data/2022_12/21/sensor/06_40_23 b/data/2022_12/21/sensor/06_40_23 new file mode 100644 index 0000000..cdf2430 Binary files /dev/null and b/data/2022_12/21/sensor/06_40_23 differ diff --git a/data/2022_12/21/sensor/06_45_23 b/data/2022_12/21/sensor/06_45_23 new file mode 100644 index 0000000..fdd1165 Binary files /dev/null and b/data/2022_12/21/sensor/06_45_23 differ diff --git a/data/2022_12/21/sensor/06_50_23 b/data/2022_12/21/sensor/06_50_23 new file mode 100644 index 0000000..d7f85b7 Binary files /dev/null and b/data/2022_12/21/sensor/06_50_23 differ diff --git a/data/2022_12/21/sensor/06_55_23 b/data/2022_12/21/sensor/06_55_23 new file mode 100644 index 0000000..2b7a46e Binary files /dev/null and b/data/2022_12/21/sensor/06_55_23 differ diff --git a/data/2022_12/21/sensor/07_00_23 b/data/2022_12/21/sensor/07_00_23 new file mode 100644 index 0000000..3f1b65e Binary files /dev/null and b/data/2022_12/21/sensor/07_00_23 differ diff --git a/data/2022_12/21/sensor/07_05_23 b/data/2022_12/21/sensor/07_05_23 new file mode 100644 index 0000000..207d40a Binary files /dev/null and b/data/2022_12/21/sensor/07_05_23 differ diff --git a/data/2022_12/21/sensor/07_10_23 b/data/2022_12/21/sensor/07_10_23 new file mode 100644 index 0000000..7ad188c Binary files /dev/null and b/data/2022_12/21/sensor/07_10_23 differ diff --git a/data/2022_12/21/sensor/07_15_23 b/data/2022_12/21/sensor/07_15_23 new file mode 100644 index 0000000..623fe40 Binary files /dev/null and b/data/2022_12/21/sensor/07_15_23 differ diff --git a/data/2022_12/21/sensor/07_20_23 b/data/2022_12/21/sensor/07_20_23 new file mode 100644 index 0000000..28572eb Binary files /dev/null and b/data/2022_12/21/sensor/07_20_23 differ diff --git a/data/2022_12/21/sensor/07_25_23 b/data/2022_12/21/sensor/07_25_23 new file mode 100644 index 0000000..18641cf Binary files /dev/null and b/data/2022_12/21/sensor/07_25_23 differ diff --git a/data/2022_12/21/sensor/07_30_23 b/data/2022_12/21/sensor/07_30_23 new file mode 100644 index 0000000..77e2241 Binary files /dev/null and b/data/2022_12/21/sensor/07_30_23 differ diff --git a/data/2022_12/21/sensor/07_35_23 b/data/2022_12/21/sensor/07_35_23 new file mode 100644 index 0000000..0f0f76b Binary files /dev/null and b/data/2022_12/21/sensor/07_35_23 differ diff --git a/data/2022_12/21/sensor/07_40_23 b/data/2022_12/21/sensor/07_40_23 new file mode 100644 index 0000000..e750883 Binary files /dev/null and b/data/2022_12/21/sensor/07_40_23 differ diff --git a/data/2022_12/21/sensor/07_45_23 b/data/2022_12/21/sensor/07_45_23 new file mode 100644 index 0000000..2caa70f Binary files /dev/null and b/data/2022_12/21/sensor/07_45_23 differ diff --git a/data/2022_12/21/sensor/07_50_23 b/data/2022_12/21/sensor/07_50_23 new file mode 100644 index 0000000..3675359 Binary files /dev/null and b/data/2022_12/21/sensor/07_50_23 differ diff --git a/data/2022_12/21/sensor/07_55_23 b/data/2022_12/21/sensor/07_55_23 new file mode 100644 index 0000000..fde2699 Binary files /dev/null and b/data/2022_12/21/sensor/07_55_23 differ diff --git a/data/2022_12/21/sensor/08_00_23 b/data/2022_12/21/sensor/08_00_23 new file mode 100644 index 0000000..5a4442c Binary files /dev/null and b/data/2022_12/21/sensor/08_00_23 differ diff --git a/data/2022_12/21/sensor/08_05_23 b/data/2022_12/21/sensor/08_05_23 new file mode 100644 index 0000000..80b8eea Binary files /dev/null and b/data/2022_12/21/sensor/08_05_23 differ diff --git a/data/2022_12/21/sensor/08_10_23 b/data/2022_12/21/sensor/08_10_23 new file mode 100644 index 0000000..1f47068 Binary files /dev/null and b/data/2022_12/21/sensor/08_10_23 differ diff --git a/data/2022_12/21/sensor/08_15_23 b/data/2022_12/21/sensor/08_15_23 new file mode 100644 index 0000000..601fe7b Binary files /dev/null and b/data/2022_12/21/sensor/08_15_23 differ diff --git a/data/2022_12/21/sensor/08_20_23 b/data/2022_12/21/sensor/08_20_23 new file mode 100644 index 0000000..131f540 Binary files /dev/null and b/data/2022_12/21/sensor/08_20_23 differ diff --git a/data/2022_12/21/sensor/08_25_23 b/data/2022_12/21/sensor/08_25_23 new file mode 100644 index 0000000..aaba8c0 Binary files /dev/null and b/data/2022_12/21/sensor/08_25_23 differ diff --git a/data/2022_12/21/sensor/08_30_23 b/data/2022_12/21/sensor/08_30_23 new file mode 100644 index 0000000..07cb08c Binary files /dev/null and b/data/2022_12/21/sensor/08_30_23 differ diff --git a/data/2022_12/21/sensor/08_35_23 b/data/2022_12/21/sensor/08_35_23 new file mode 100644 index 0000000..3b090d6 Binary files /dev/null and b/data/2022_12/21/sensor/08_35_23 differ diff --git a/data/2022_12/21/sensor/08_40_23 b/data/2022_12/21/sensor/08_40_23 new file mode 100644 index 0000000..d5907e7 Binary files /dev/null and b/data/2022_12/21/sensor/08_40_23 differ diff --git a/data/2022_12/21/sensor/08_45_23 b/data/2022_12/21/sensor/08_45_23 new file mode 100644 index 0000000..60632d6 Binary files /dev/null and b/data/2022_12/21/sensor/08_45_23 differ diff --git a/data/2022_12/21/sensor/08_54_30 b/data/2022_12/21/sensor/08_54_30 new file mode 100644 index 0000000..4a216a2 Binary files /dev/null and b/data/2022_12/21/sensor/08_54_30 differ diff --git a/data/2022_12/21/sensor/09_05_51 b/data/2022_12/21/sensor/09_05_51 new file mode 100644 index 0000000..7bc2abf Binary files /dev/null and b/data/2022_12/21/sensor/09_05_51 differ diff --git a/data/2022_12/21/sensor/09_10_51 b/data/2022_12/21/sensor/09_10_51 new file mode 100644 index 0000000..23fb5f4 Binary files /dev/null and b/data/2022_12/21/sensor/09_10_51 differ diff --git a/data/2022_12/21/sensor/09_15_51 b/data/2022_12/21/sensor/09_15_51 new file mode 100644 index 0000000..e69de29 diff --git a/listctrl.py b/listctrl.py new file mode 100644 index 0000000..210bc4f --- /dev/null +++ b/listctrl.py @@ -0,0 +1,32 @@ +from myconfig import TOKEN +import wx + +class Listctrl(wx.Panel): + ''' + # 需要在 Frame 实例化一个实例 + # 改变需要对实例化后的进行操作 + ''' + def __init__(self, parent ): + ''' + * panel 初始化后的样子 + ''' + # self.para_setting = para + super(Listctrl,self).__init__(parent) + self.locale = wx.Locale(wx.LANGUAGE_CHINESE_SIMPLIFIED) + + self.SetBackgroundColour('lightgrey') + + self.box = wx.BoxSizer(wx.HORIZONTAL) + + self.list_ctrl = wx.ListCtrl(self, -1, style = wx.LC_REPORT | wx.LC_SORT_DESCENDING) + self.list_ctrl.SetBackgroundColour( 'lightgrey' ) + + self.list_ctrl.InsertColumn(0, u'测量时间', width = 180) + self.list_ctrl.InsertColumn(1, u'花粉_Pollen', width = 180) + i = 1 + + self.list_ctrl.SetFont( wx.Font( 11, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False ) ) + + self.box.Add(self.list_ctrl,1,wx.EXPAND) + self.SetSizer(self.box) + self.Fit() diff --git a/myconfig.py b/myconfig.py new file mode 100644 index 0000000..b95ec06 --- /dev/null +++ b/myconfig.py @@ -0,0 +1,329 @@ +#! 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 +VERSION = "3.3.5" +LASTDATE = "2023-03-09" +COMPANY = u"奕枫仪器" + +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__": + s = RamsesPROFILE + print(s(1)) + print(s(2)) + + 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 + } diff --git a/mypanel.py b/mypanel.py new file mode 100644 index 0000000..d7aca96 --- /dev/null +++ b/mypanel.py @@ -0,0 +1,48 @@ +import wx + +class MyPanel(wx.Panel): + """docstring for MyPanel.""" + def __init__(self, *arg, **kwarg): + super(MyPanel, self).__init__( *arg,**kwarg) + + self.SetBackgroundColour("#F2F2F2") + self.sb = wx.StaticBox( self, label='系统信息', pos = (30,30) ) + + self.sbs = wx.StaticBoxSizer( self.sb, orient=wx.VERTICAL ) + + self.vbox1 = wx.BoxSizer(wx.VERTICAL) + self.staticText0 = wx.StaticText(self , label='',size=(60, 30), style=wx.ALIGN_CENTRE_VERTICAL ) + + self.staticText1 = wx.StaticText(self, -1,size=(600, -1), + label='''\n上海奕枫仪器设备有限公司 + \n电话: 021-54270075 + \n网站: http://www.yi-win.com + \n邮件: sales@yi-win.com + \n描述: AWRAMS TF 数据处理 ''' ) + + self.vbox1.Add(self.staticText0, flag=wx.TOP|wx.LEFT, border=5) + self.vbox1.Add(self.staticText1, flag=wx.TOP|wx.LEFT, border=5) + # self.hbox1.Add(self.staticText1, flag=wx.TOP|wx.LEFT, border=5) + # self.hbox1.Add(self.textCtrl1, flag=wx.TOP|wx.LEFT, border=5) + self.sbs.Add(self.vbox1, flag=wx.TOP|wx.LEFT, border= 5) + self.SetSizer(self.sbs) + # self.SetBackgroundColour("#F2F2F2") + # self.vbox = wx.BoxSizer(wx.VERTICAL) + + # # self.vbox.Add(num1, proportion=0, border=8, flag=wx.LEFT) + + # self.sb = wx.StaticBox(self, label='信息') + # self.sbs = wx.StaticBoxSizer(self.sb, orient=wx.VERTICAL) + # self.staticText1 = wx.StaticText(self, -1, + # label='''\n上海奕枫仪器设备有限公司 + # \n电话: 021-54270075 + # \n网站: http://www.yi-win.com + # \n邮件: sales@yi-win.com ''' ) + # self.vbox.Add(self.sbs) + # self.sbs.Add(self.vbox) + # self.SetSizer(self.vbox) + + def setStaticText(self, msg:str): + self.staticText1.SetLabel(msg) + + \ No newline at end of file diff --git a/readcal.py b/readcal.py new file mode 100644 index 0000000..a389d9d --- /dev/null +++ b/readcal.py @@ -0,0 +1,1008 @@ +from tools.mylogger import log +from tools.myexception import MyException +from typing import Tuple,List,Optional,Union,Callable +from pathlib import Path, PurePath +from myconfig import MyConfig,DeviceType,RamsesFunc +from myconfig import FILE_MARK,CURRENT_DIR,CAL_DIR,DATA_DIR,SAVE_EXT_NAME,INTERVAL,SEPARATOR + +class ReadCal(): + def __init__(self) -> None: + pass + + # 数据加时间值 + @staticmethod + def read_columns_set_by_mark(fpath:Path, mark:list, *column ) -> Tuple[str,List] : + # def read_column_1set_by_mark(fpath:str, column:int, *args ) -> Tuple[ str, List ] : + ''' + return: time:str List + mark : ['Spectrum','DATA'] + default end with "[END]" + ''' + log.info(f"read_column_1set_by_mark : \ + {fpath} , mark:{mark} , column:{column}", __name__, "", "") + + # 处理mark args[0] = Spectrum + if len(mark) != 2: + log.error( f"read_column_1set_by_mark() wrong args ",__name__, "", "" ) + raise MyException( f"read_column_1set_by_mark() wrong args " ) + + if len(column) == 0: + log.error(f"read_column_1set_by_mark(), no column para, pls input column ",__name__, "", "" ) + raise MyException( f"read_column_1set_by_mark() , pls input column " ) + + if len( mark ) == 0: + mark_1 = '[Spectrum]' + mark_2 = '[DATA]' + + mark_1 = '['+ mark[0] +']' + mark_2 = '['+ mark[1] +']' + res = [] + sn = ReadCal.readFileSNbyIDDevice(fpath) + # 预备返回数据结构 + # res_time = [] + res_data = [] + columnLen = len(column) + for i in range(columnLen): + res_data.append( [] ) + + with fpath.open('r') as f_handle: + rflag = 0 + # res = [] + # res_time = [] + # res_data = [] + + for line in f_handle: + if mark_1 in line and rflag == 0: + log.debug(f" find {mark_1}", __name__, "", "" ) + rflag += 1 + continue + + if mark_2 in line and rflag > 3 : + log.debug(f" find {mark_1} end ", __name__, "", "" ) + rflag = 0 + continue + + # 获取时间 + if rflag == 1 : + data = line.strip('\n').strip(' ').split('=') + if data[0].strip() == "DateTime" : + log.debug(f" find {mark_1} -> DateTime {data[1]} ", __name__, "", "" ) + time_ = data[1].strip() + rflag += 1 + continue + + if rflag == 2 and ( mark_2 in line ) : + log.debug(f" find {mark_2} -> ", __name__, "", "" ) + rflag += 1 + continue + + if rflag == 3 : + if mark_2 not in line: + # log.debug(f" get data {line}", __name__, "", "" ) + data = line.strip('\n').strip(' ').split(' ') + # 忽略第一行,第一行0开头,保存积分时间的 + if data[0].strip() == "0" : + continue + else: + # if data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : + # 处理多列 + for i in range(columnLen): + # res_time.append( time_ ) + res_data[i].append( data[column[i]] ) + continue + + if rflag == 3 and ( mark_2 in line ) : + log.debug(f" find {mark_2} end , line: {line} ", __name__, "", "" ) + rflag += 1 + continue #需要继续让其找到 + + if rflag == 4: + log.debug(f" job done......", __name__, "", "" ) + res_time = time_ + # res_data.append( res ) + # 只读一组数据就 break + rflag += 1 + # res = [] + # rflag = 0 + + if rflag == 5: + log.debug(f" job done, break...", __name__, "", "" ) + break + return ( res_time, res_data) + pass + + # 数据加时间值 + @staticmethod + def read_columns_sets_by_mark(fpath:Path, mark:list, *column + ) -> Tuple[List[str],List[List]] : + # def read_column_1set_by_mark(fpath:str, column:int, *args ) -> Tuple[ str, List ] : + ''' + @desc: 获取多列数据,且为多套数据,非单套数据 + @return: time:List, List + @args : ['Spectrum','DATA'] + default end with "[END]" + ''' + log.info(f"read_column_1set_by_mark : \ + {fpath} , mark:{mark} , column:{column}", __name__, "", "") + + # 处理mark args[0] = Spectrum + if len(mark) != 2: + log.error( f"read_columns_sets_by_mark() wrong args ",__name__, "", "" ) + raise MyException( f"read_columns_sets_by_mark() wrong args " ) + + if len(column) == 0: + log.error(f"read_columns_sets_by_mark(), no column para, pls input column ",__name__, "", "" ) + raise MyException( f"read_columns_sets_by_mark() , pls input column " ) + + if len( mark ) == 0: + mark_1 = '[Spectrum]' + mark_2 = '[DATA]' + + mark_1 = '['+ mark[0] +']' + mark_2 = '['+ mark[1] +']' + res = [] + sn = ReadCal.readFileSNbyIDDevice(fpath) + # 预备返回数据结构 + res_data = [] + res_time = [] + res = [] + columnLen = len(column) + for i in range(columnLen): + # res_time.append( [] ) + res.append( [] ) + + with fpath.open('r') as f_handle: + rflag = 0 + + for line in f_handle: + if mark_1 in line and rflag == 0: + log.debug(f" find {mark_1}", __name__, "", "" ) + rflag += 1 + continue + + if mark_2 in line and rflag > 3 : + log.debug(f" find {mark_1} end ", __name__, "", "" ) + rflag = 0 + continue + + # 获取时间 + if rflag == 1 : + data = line.strip('\n').strip(' ').split('=') + if data[0].strip() == "DateTime" : + log.debug(f" find {mark_1} -> DateTime {data[1]} ", __name__, "", "" ) + time_ = data[1].strip() + rflag += 1 + continue + + if rflag == 2 and ( mark_2 in line ) : + log.debug(f" find {mark_2} -> ", __name__, "", "" ) + rflag += 1 + continue + + if rflag == 3 : + if mark_2 not in line: + # log.debug(f" get data {line}", __name__, "", "" ) + data = line.strip('\n').strip(' ').split(' ') + # 忽略第一行,第一行0开头,保存积分时间的 + if data[0].strip() == "0" : + continue + else: + # if data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : + # 处理多列 + for i in range(columnLen): + # res_time.append( time_ ) + res[i].append( data[column[i]] ) + continue + + if rflag == 3 and ( mark_2 in line ) : + log.debug(f" find {mark_2} end , line: {line} ", __name__, "", "" ) + rflag += 1 + continue #需要继续让其找到 + + if rflag == 4: + log.debug(f" job done......", __name__, "", "" ) + res_time.append( time_ ) + res_data.append( res ) + rflag += 1 + # res = [] + # rflag = 0 + + if rflag == 5: + log.debug(f" job done, break...", __name__, "", "" ) + rflag = 0 + continue + + log.debug(f" res.time len {len(res_time)} , \ + res.data len {len(res_data)} , ", __name__, "", "" ) + + return ( res_time, res_data) + + # 数据加时间值 + @staticmethod + def read_columns_sets_by_mark_callback(fpath:Path, mark:list, callback:Callable, *column ) : + ''' + @desc: 获取多列数据,且为多套数据,非单套数据 + @return: time:List, List + @args : ['Spectrum','DATA'] + default end with "[END]" + ''' + log.debug(f"read_column_1set_by_mark : \ + {fpath} , mark:{mark} , column:{column}", __name__, "", "") + + # 处理mark args[0] = Spectrum + if len(mark) != 2: + log.error( f"read_columns_sets_by_mark() wrong args ",__name__, "", "" ) + raise MyException( f"read_columns_sets_by_mark() wrong args " ) + + if len(column) == 0: + log.error(f"read_columns_sets_by_mark(), no column para, pls input column ",__name__, "", "" ) + raise MyException( f"read_columns_sets_by_mark() , pls input column " ) + + if len( mark ) == 0: + mark_1 = '[Spectrum]' + mark_2 = '[DATA]' + + mark_1 = '['+ mark[0] +']' + mark_2 = '['+ mark[1] +']' + + # 预备返回数据结构 + res_data = [] + res_time = [] + res = [] + sn = ReadCal.readFileSNbyIDDevice(fpath) + + columnLen = len(column) + for i in range(columnLen): + # res_time.append( [] ) + res.append( [] ) + + with fpath.open('r') as f_handle: + rflag = 0 + + for line in f_handle: + if mark_1 in line and rflag == 0: + log.debug(f" find {mark_1}", __name__, "", "" ) + rflag += 1 + continue + + if mark_2 in line and rflag > 3 : + log.debug(f" find {mark_1} end ", __name__, "", "" ) + rflag = 0 + continue + + # 获取时间 + if rflag == 1 : + data = line.strip('\n').strip(' ').split('=') + if data[0].strip() == "DateTime" : + log.debug(f" find {mark_1} -> DateTime {data[1]} ", __name__, "", "" ) + time_ = data[1].strip() + rflag += 1 + continue + + if rflag == 2 and ( mark_2 in line ) : + log.debug(f" find {mark_2} -> ", __name__, "", "" ) + rflag += 1 + continue + + if rflag == 3 : + if mark_2 not in line: + # log.debug(f" get data {line}", __name__, "", "" ) + data = line.strip('\n').strip(' ').split(' ') + # 忽略第一行,第一行0开头,保存积分时间的 + if data[0].strip() == "0" : + continue + else: + # if data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : + # 处理多列 + for i in range(columnLen): + res[i].append( data[column[i]] ) + continue + + if rflag == 3 and ( mark_2 in line ) : + log.debug(f" find {mark_2} end , line: {line} ", __name__, "", "" ) + rflag += 1 + continue #需要继续让其找到 + + if rflag == 4: + log.debug(f" job done......", __name__, "", "" ) + # callable , not return。 每读出一组就回调,不建议。频繁读写硬盘 + # callback(time_, res) + res_time.append( time_ ) + res_data.append( res ) + rflag += 1 + # res = [] + # rflag = 0 + + if rflag == 5: + log.debug(f" job done, break...", __name__, "", "" ) + rflag = 0 + continue + + # callable , not return。 一个文件读完直接处理 + + callback(sn, res_time, res_data) + + log.debug(f" res.time len {len(res_time)} , \ + res.data len {len(res_data)} , ", __name__, "", "" ) + + # return ( res_time, res_data) + + @staticmethod + def readDataIPinfo(fpath:Path, mark:list, callback:Callable ): + ''' + SAMIP sensor ,Inclination Pressure, InclX InclY Pressure + ''' + log.debug(f"readDataIPinfo : {fpath} , mark:{mark} , ", __name__, "", "") + + # 处理mark args[0] = Spectrum + if len(mark) != 2: + log.error( f"readDataIPinfo() wrong args ",__name__, "", "" ) + raise MyException( f"readDataIPinfo() wrong args " ) + + if len( mark ) == 0: + mark_1 = '[Spectrum]' + mark_2 = '[DATA]' + + mark_1 = '['+ mark[0] +']' + + # 预备返回数据结构 + res_data = [] + res_time = [] + res = [] + tags = ['InclX' , 'InclY', 'Pressure'] + + with fpath.open('r') as f_handle: + rflag = 0 + for line in f_handle: + if mark_1 in line and rflag == 0: + log.debug(f" find {mark_1}", __name__, "", "" ) + rflag += 1 + continue + if mark_1 in line and rflag > 5: + log.debug(f" find {mark_1} end", __name__, "", "" ) + rflag = 0 + continue + # 获取时间 + if rflag == 1 : + data = line.strip('\n').strip(' ').split('=') + if data[0].strip() == "DateTime" : + log.debug(f" find {mark_1} -> DateTime {data[1]} ", __name__, "", "" ) + time_ = data[1].strip() + rflag += 1 + continue + if rflag == 2: + if "[" not in line : + data = line.strip('\n').strip(' ').split('=') + # RAMSES 数据通过MethodName 获得传感器序列号 + if data[0].strip() in tags : + res.append( data[1].strip(' ') ) + rflag += 1 + if rflag == 5: + res_time.append(time_) + res_data.append(res) + rflag = 0 + pass + callback(res_time,res_data) + return (res_time,res_data) + + @staticmethod + def readSamSNFromIni( fpath:Path ): + """ + @description : 依据文件路径获得samsn, 兼容 SAM SAMIP传感器 + """ + + with fpath.open('r') as f_handle: + for line in f_handle: + # IDDevice = SAM_85AF + ln = line.strip('\n').strip(' ').split('=') + if ln[0].strip() == "IDDevice": + if ln[1].strip().split('_')[0] == "SAM": + return ln[1].strip().split('_')[1] + return None + pass + + @staticmethod + def readIPCalFromIni( fpath:Path ): + """ + @description : 依据文件路径获得IPCal IP标定信息 + """ + ipcal = {} + with fpath.open('r') as f_handle: + flag = 0 + for line in f_handle: + # IDDevice = SAM_85AF + ln = line.strip('\n').strip(' ').split('=') + + if flag == 0 and ln[0].strip() == "IDDevice": + if ln[1].strip().split('_')[0] == "IP": + ipcal["IPSN"] = ln[1].strip().split('_')[1] + flag += 1 + continue + + if flag == 1 and "[" in line: + flag += 1 + continue + + if flag == 2: + if "[" in line: + flag = flag + 1 + + if not "[" in line: + line_ = line.strip('\n').strip(' ').split('=') + ipcal.update({line_[0].strip():line_[1].strip()}) + + if flag == 3: + break + + return ipcal + + @staticmethod + def readSAMCalFromIni( fpath:Path ): + """ + @description : 依据文件路径获得SAMCal SAM标定信息 + """ + samcal = {} + with fpath.open('r') as f_handle: + flag = 0 + for line in f_handle: + # IDDevice = SAM_85AF + line_ = line.strip('\n').strip(' ').split('=') + if flag == 0 and line_[0].strip() == "IDDevice": + if line_[1].strip().split('_')[0] == "SAM": + samcal["SAMSN"] = line_[1].strip().split('_')[1] + flag += 1 + continue + + if flag == 1 and "[" in line: + flag += 1 + continue + + if flag == 2: + if "[" in line: + flag = flag + 1 + + if not "[" in line: + line_ = line.strip('\n').strip(' ').split('=') + samcal.update({line_[0].strip():line_[1].strip()}) + + if flag == 3: + break + return samcal + + @staticmethod + def readFileSNbyIDDevice(fpath:Path): + sn_from_file = '' + with fpath.open('r') as f_handle: + rflag = 0 + for line in f_handle: + if '[Spectrum]' in line and '[END]' not in line and rflag == 0: + rflag += 1 + pass + if rflag == 1: + data = line.strip('\n').strip(' ').split('=') + # RAMSES 数据通过MethodName 获得传感器序列号 + if data[0].strip() == "IDDevice": + sn_from_file = data[1].strip(' ').split('_')[1] + break + return sn_from_file + + @staticmethod + def readDatafileSNbyMethodName(fpath:Path): + ''' + SAMIP SAM的数据文件中, MethodName对应的值都是 SAM_{SAMSN} + 读SAMIP的数据,建议用 {SAMSN}的处理 + ''' + sn_from_file = '' + with fpath.open('r') as f_handle: + rflag = 0 + for line in f_handle: + if '[Spectrum]' in line and '[END]' not in line and rflag == 0: + rflag += 1 + pass + if rflag == 1: + data = line.strip('\n').strip(' ').split('=') + # RAMSES 数据通过MethodName 获得传感器序列号 + if data[0].strip() == "MethodName": + sn_from_file = data[1].strip(' ').split('_')[1] + break + return sn_from_file + + +if __name__ == "__main__": + log.info(f"******** main read *********", __name__, "", "") + + # path = PurePath() + # print(path) + + pass + + # def read_data_sn(self,fpath): + # with open(fpath, 'r') as f_handle: + # rflag = 0 + # for line in f_handle: + # if '[Spectrum]' in line and '[END]' not in line and rflag == 0: + # rflag += 1 + # pass + # if rflag == 1 : + # data = line.strip('\n').strip(' ').split('=') + # if data[0].strip() == "IDDevice" : + # return data[1].strip(' ').split('_')[1] + # pass + + # def read_data1(self,fpath): + # with open(fpath, 'r') as f_handle: + # rflag = 0 + # res = [] + # res_time = [] + # res_data = [] + + # for line in f_handle: + # if '[Spectrum]' in line and '[END]' not in line and rflag == 0: + # rflag += 1 + # pass + + # if '[Spectrum]' in line and '[END]' in line : + # rflag = 0 + # pass + + # # 获取时间 + # if rflag == 1 : + # data = line.strip('\n').strip(' ').split('=') + # if data[0].strip() == "DateTime" : + # time_ = data[1].strip() + # rflag += 1 + + # if rflag == 2 and ( '[DATA]' in line or '[Data]' in line ) : + # rflag += 1 + + # if rflag == 3 : + # data = line.strip('\n').strip(' ').split(' ') + + # if int(data[0].strip()) == 0 : + # pass + # else: + # # if data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : + + # res.append( float(data[1] ) ) + # if rflag == 3 and '[' in line and ']' in line: + # rflag += 1 + # if rflag == 4: + # # 这个地方 + # # self. __save_absorbance_data( res_time, res, sn ) + # res_time.append( time_ ) + # res_data.append( res ) + # # ?? 可以调用函数直接处理 + # # DealResult.deal_one_data(time_,res) + # res = [] + # rflag = 0 + # # return [['data']] + # pass + + + # def read_data_column( self,fpath, column=1 ): + # column_ = 1 + # if int(column_) : + # column_ = int(column_) + # pass + # else: + # pass + + # with open(fpath, 'r') as f_handle: + # rflag = 0 + # res = [] + # res_time = [] + # res_data = [] + + # for line in f_handle: + # if '[Spectrum]' in line and '[END]' not in line and rflag == 0: + # rflag += 1 + # pass + + # if '[Spectrum]' in line and '[END]' in line : + # rflag = 0 + # pass + + # # 获取时间 + # if rflag == 1 : + # data = line.strip('\n').strip(' ').split('=') + # if data[0].strip() == "DateTime" : + # time_ = data[1].strip() + # rflag += 1 + + # if rflag == 2 and ( '[DATA]' in line or '[Data]' in line ) : + # rflag += 1 + + # if rflag == 3 : + # data = line.strip('\n').strip(' ').split(' ') + + # if int(data[0].strip()) == 0 : + # pass + # else: + # res.append( float(data[column_] ) ) + # if rflag == 3 and '[' in line and ']' in line: + # rflag += 1 + # if rflag == 4: + # # 这个地方 + # # self. __save_absorbance_data( res_time, res, sn ) + # # res_time.append( time_ ) + # # res_data.append( res ) + # # ?? 可以调用函数直接处理 + # return time_, res + + # # return [['data']] + # pass + + # def read_data_wl( self, fpath ): + # wl = self.read_data_column( fpath, column=0 ) + # pass + + # def get_cal_file(self,sn): + # sn_ = sn + # file_ = {} + # if open( os.path.join( CAL_PATH, "SAM_"+sn_+"ini" ),"r"): + # file_ = { + # "type": "SAM", + # "back":"Back_SAM_", + # "cal":"Cal_SAM_", + # "calaq":"CalAQ_SAM_", + # "ini":"SAM_", #ini + # "immersion":"immersion_factors_Lu.DAT" + # } + # return file_ + # if open( os.path.join( CAL_PATH, "SAMIP_"+ sn_ +"_ALL.ini" ),"r"): + # file_ = { + # "type": "SAMIP", + # # "back":"Back_SAM_" + sn_ + CAL_EXT_NAME, + # # "cal":"Cal_SAM_" + sn_ + CAL_EXT_NAME, + # # "calaq":"CalAQ_SAM_" + sn_ + CAL_EXT_NAME, + # "ini":"SAMIP_"+sn+"_ALL.ini", #ini + # "immersion":"immersion_factors_Lu.DAT" + # } + # if file_['ini'] : + # samsn = self.read_ini(file_['ini'], "SAMSN") + # file_.update("cal", "Cal_SAM_" + samsn + CAL_EXT_NAME) + # file_.update("calaq", "CalAQ_SAM_" + samsn + CAL_EXT_NAME) + # file_.update("back", "Back_SAM_" + samsn + CAL_EXT_NAME) + # return file_ + # return + + # def read_cal(self,sn): + # # SAM SAMIP 不同 + # self.cal_data= {} + # # 1. 依据序列号读 ini, 判读是否有文件 SAM_8578.ini SAMIP_50BB_ALL.ini + # self.calfile = self.get_cal_file(sn) # 其中sam的是错误的 + + # # 2 读ini 文件错误 + + # cal_data = {} + # for key in self.calfile: + # if key == "immersion" : + # path_ = os.path.join( CAL_PATH, self.calfile[key] ) + # content_ = [self.read_data_column( path_, column=0 )[1]] + # content_.append( self.read_data_column( path_, column=0 )[1] ) + # cal_data.update({key:content_}) + + # if key == "cal" : + + # path_ = os.path.join( CAL_PATH, self.calfile[key] ) + # content_ = self.read_data_column( path_, column=0 ) + # cal_data.update({key:content_}) + + # if key == "back" : + # path_ = os.path.join( CAL_PATH, self.calfile[key] ) + # content_ = self.read_data_column( path_, column=0 ) + # cal_data.update({key:content_}) + + # if key == "calaq" : + # path_ = os.path.join( CAL_PATH, self.calfile[key] ) + # content_ = self.read_data_column( path_, column=0 ) + # cal_data.update({key:content_}) + + # if key == "ini" : + # cal_data.update({ "samcal" : self.read_ini( os.path.join( CAL_PATH, self.calfile[key] ), "SAMCAL" ) }) + # cal_data.update({ "ipcal" : self.read_ini( os.path.join( CAL_PATH, self.calfile[key] ), "IPCAL" ) }) + + # pass + + # DealResult.deal_cal(cal_data) + + # pass + + # def read_data(self,fname,lst): + # """ + # @description : 线程守护读取数据文件 ,循环读取 + # 考虑一次读取多组,只读一列的情况 + # sn ,begin,end, 指定读的列 + # 返回:[ [[第一组时间],[第二组时间] .... ], [ [第一组data],[第二组data] ...] ] + # RAMSES 要考虑 : InclX = -6.42, InclY = -6.5625 , Pressure = 6.61394049205538 + # 需要读一组波长出来 + # """ + # log.info( ":::::::::::: Class : %s -> Function :__read_data " % ( __name__, ) ) + # log.info( " __read_data : lst %s" % ( lst, ) ) + # sn = lst[0] + # begin = lst[1] + # end = lst[2] + # column = lst[3] + # samip_sn= lst[4] + + # # 检查 sn--- 不检查sn ,读数据就 成csv + + # # 读取一组数据的0列作为波长??? + + # # if is_sn_ok : + + # log.info( "正在处理文件 .... " + fname ) + # with open(fname, 'r') as f_handle: + # time_ = "" + # rflag = 0 + # intlx = 0.0 + # intly = 0.0 + # pressure = 0.0 + # res = [] + # res_time = [] + # res_data = [] + + # for line in f_handle: + # if rflag == 0 and '[Spectrum]' in line and '[END]' not in line : + # rflag += 1 + # pass + + # if '[Spectrum]' in line and '[END]' in line : + # rflag = 0 + # pass + + # # 获取时间, InclX, InclY ,Pressure + # if rflag == 1 : + # data = line.strip('\n').strip(' ').split('=') + # if data[0].strip() == "DateTime" : + # time_ = data[1].strip() + # rflag += 1 + # # InclX, InclY ,Pressure + + # if rflag == 2: + # data = line.strip('\n').strip(' ').split('=') + + # if data[0].strip() == "InclX" : + # intlx = data[1].strip() + + # if data[0].strip() == "InclY" : + # intly = data[1].strip() + + # if data[0].strip() == "Pressure" : + # pressure = data[1].strip() + + + # # DATA set 结束添加数据 + # if rflag == 4 and '[DATA]' in line and '[END]' in line: + # # time.sleep(10) + # res_time.append( [time_,intlx,intly,pressure] ) + # res_data.append( res ) + # res = [] + # rflag += 1 + + # if rflag == 3 : + # data = line.strip('\n').strip(' ').split(' ') + # # print("rflag %s +++++++++++++++++++++++++++++++++ %s" %(rflag,data) ) + # if data[0] != "0" and data[1] != "-NAN" and data[1] != "NAN" and data[1] != "+NAN" : #去掉第一行 0, 对应的积分时间 2^(n+1) + # # print("append %s -- %s" %(data[0],data[1]) ) + # res.append( float( data[column-1] ) ) + # if data[0] != "0" and float(data[0]) > 950 : + # # print("> 950... %s %s" %(data[0],data[1]) ) + # rflag += 1 + + # # 处理data 部分 + # if rflag == 2 and '[DATA]' in line and '[END]' not in line: + # # print("rflag %s +++++++++++++++++++++++++++++++++ data+1 " %(rflag,) ) + # rflag += 1 + + + # if rflag == 5: + # DealResult.deal_ramses_data(time_, [[intlx,intly,pressure], res]) + # # 这个地方 + # # self. __save_absorbance_data( res_time, res, sn ) + # # print("rflag 4 ......................") + # # res_time.append( [time_,intlx,intly,pressure] ) + # # print(" append time %s " %res_time) + # # res_data.append( res ) + # res = [] + # rflag = 0 + # intlx = 0.0 + # intly =0.0 + # pressure =0.0 + # # else: + # # return [] + + # log.info( "已经转换完文件,正在保存... " + fname ) + + # # 分析处理数据,还是返回原始数据 或空 ?? + # log.info( " Function :__read_data %s - %s " % ( res_time[0] ,res_data[0] ) ) + + + # # # 光强保存文件路径 + # # fpath = os.path.join(INTENSITY_PATH, samip_sn + SAVE_EXT_NAME ) + # # fpath_IP = os.path.join(INTENSITY_PATH, samip_sn + "_IP" + SAVE_EXT_NAME ) + + # # for i in range ( len(res_time) ) : + # # # print("1111111111..............%s %s " %(res_time[i],res_time[i][0]) ) + # # # time.sleep(2) + # # ProcessFile.save_time_list( str(res_time[i][0]) , res_data[i], TOKEN, fpath ) + # # # 不是samip 不保存 IP 文件 + # # if sn != samip_sn: + # # ProcessFile.save_time_list( str(res_time[i][0]) , res_time[i][1:], TOKEN, fpath_IP ) + + + # # log.info( "保存结束 ... " + fname ) + + # # 返回 ok 表示文件处理结束 + # return + # pass + + # def read_ini(self,fname ,type_): + # """ + # @description : 三个不同任务, SAM SN, SAM ATTR, IP ATTR + # 分别记为 SAMSN SAMCAL IPCAL + # """ + # log.info( " RAMSES __read_ini -> lst -> %s " % type_) + # typ = type_ + # data = [] + + # if typ == "SAMSN" : + + # with open(fname, 'r') as f_handle: + # for line in f_handle: + # # IDDevice = SAM_85AF + # ln = line.strip('\n').strip(' ').split('=') + # if ln[0].strip() == "IDDevice" : + # if ln[1].strip().split('_')[0] =="SAM" : + # return ln[1].strip().split('_')[1] + # pass + + # if typ == "SAMCAL" : + # samcal= {} + # with open(fname, 'r') as f_handle: + # flag = 0 + # for line in f_handle: + # # IDDevice = SAM_85AF + # line_ = line.strip('\n').strip(' ').split('=') + # if flag == 0 and line_[0].strip() == "IDDevice" : + # if line_[1].strip().split('_')[0] =="SAM" : + # samcal["SAMSN"] = line_[1].strip().split('_')[1] + # flag += 1 + + # if flag == 2 and "[END]" in line: + # flag += 1 + + # if flag == 2: + # # print(" 1 %s %s %s" % (fname,line_[0],line_[1])) + # samcal[line_[0]] = line_[1] + + # if flag == 1 and line_[0].strip() == "[ATTRIBUTES]" : + # flag += 1 + + # if flag == 2 and "[END]" in line: + # flag += 1 + + # return samcal + + # pass + + # if typ == "IPCAL" : + # ipcal= {} + # with open(fname, 'r') as f_handle: + # flag = 0 + # for line in f_handle: + # # IDDevice = SAM_85AF + # ln = line.strip('\n').strip(' ').split('=') + + # if flag == 0 and ln[0].strip() == "IDDevice" : + # if ln[1].strip().split('_')[0] =="IP" : + # ipcal["IPSN"] = ln[1].strip().split('_')[1] + # flag += 1 + + # if flag == 2 and "[END]" in line: + # flag += 1 + + # if flag == 2: + # ipcal[ln[0]] = ln[1] + + # if flag == 1 and ln[0].strip() == "[ATTRIBUTES]" : + # flag += 1 + + # return ipcal + + # return + # pass + + # def read_raw( self, fname , lst, uiraw): + # """ + # @description : 三个不同任务, SAM SN, SAM ATTR, IP ATTR + # 对波长进行标定处理 + # 并存入文件 + # λ(N) = C0s + C1s·N + C2s· N2 + C3s·N3 + # """ + + # sep = uiraw["1"] + # air_water = int(uiraw["2"]) + + # with open(fname, 'r') as f_handle: + # sn = "" + # wl = "" + # is_samip = 0 + # # data = data[2:] + # # cal_data = lst[sn] + # wl_cal = [] + # cal_data = [] + # intg_time = 128 + # ip_cal = [] + # cal = [] + # calaq = [] + # b0 = [] + # b1 = [] + + # for line in f_handle: + # data = line.split(",") + # sn_d = data[0] + + # if sn_d != sn : + # sn = sn_d + # intg_time = int( data[1] ) + # cal_data = lst[sn] + # # 判断sam SAMIP + # if cal_data[0][0] != cal_data[0][1] : + # is_samip = 1 + + # wl_cal = cal_data[1] + # ip_cal = cal_data[2] + + # if air_water == 1 : + # cal = cal_data[3] + # else: + # cal = cal_data[2] + + # b0 = cal_data[4] + # b1 = cal_data[5] + + # for i in range(1,256): + # temp = float(wl_cal["C0s"]) + \ + # float(wl_cal["C1s"]) * i + \ + # float(wl_cal["C2s"]) * i * i + \ + # float(wl_cal["C3s"]) * i *i *i + # wl.append(temp) + + + + # # 处理数据 + # data = data[2:] + # intensity = [] + # Cn = [] + + # for i in range( 255 ): + # # NAN 为 0 + # # if cal[i] = "+NAN": + # # intensity.append(0) + # # else: + # Mn = data[i] / 65535 + # Bn = float( b0[i] ) + float( b1[i] ) * intg_time / 8192 #积分时间比 + # Cn.append(Bn - Mn) + + # offset = 0 # DarkPixelStart = 237 DarkPixelStop = 254的平均值. 数组中236-254 + # for i in range( int( wl_cal['DarkPixelStart']) -1 , int( wl_cal['DarkPixelStop']) ): + # offset = offset + float( Cn[i] ) + # offset = offset/ ( int( wl_cal['DarkPixelStop']) - int( wl_cal['DarkPixelStart']) +1 ) + + # for i in range( 255 ): + # Dn = Cn[i] - offset + # En = 8192 * Dn / intg_time + + # # ???? Sn 来自 cal calaq 文件的部分 + # Sn = cal[i] + # intensity.append( En / Sn ) + + # # 还需要处理传感器的 IP + # if is_samip : + # # ip 数据过来后的格式 + # pass + + # return intensity + + # # 数据分别写到文件 diff --git a/retrieve.yml b/retrieve.yml new file mode 100644 index 0000000..ba0f0ee --- /dev/null +++ b/retrieve.yml @@ -0,0 +1,4 @@ +beginWL: 350 +endWL: 950 +interval: 1 +rowFactor: 0.026 diff --git a/tools/__init__.py b/tools/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tools/myexception.py b/tools/myexception.py new file mode 100644 index 0000000..1b526c0 --- /dev/null +++ b/tools/myexception.py @@ -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 \ No newline at end of file diff --git a/tools/mylogger.py b/tools/mylogger.py new file mode 100644 index 0000000..9c85ec9 --- /dev/null +++ b/tools/mylogger.py @@ -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函数意义相同,指定日志文件的打开模式,’w’或’a’ +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__ +""" \ No newline at end of file diff --git a/tools/mypath.py b/tools/mypath.py new file mode 100644 index 0000000..b8f1064 --- /dev/null +++ b/tools/mypath.py @@ -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 ) diff --git a/tools/mytime.py b/tools/mytime.py new file mode 100644 index 0000000..3481cf8 --- /dev/null +++ b/tools/mytime.py @@ -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 diff --git a/uiconfig/uiabout.py b/uiconfig/uiabout.py new file mode 100644 index 0000000..56a33c7 --- /dev/null +++ b/uiconfig/uiabout.py @@ -0,0 +1,60 @@ +import wx + +# 设置串口参数的对话框类 + +class About(wx.Dialog): + + def __init__(self, *args, **kwds): + + # 参数调入后初始化 + super(About, self).__init__(*args, **kwds) + + self.InitUI() + self.SetSize((400, 400)) + self.SetTitle("使用帮助") + + def InitUI(self): + + self.panel = wx.Panel(self) + self.vbox = wx.BoxSizer(wx.VERTICAL) + + self.sb = wx.StaticBox(self.panel, label='使用帮助') + self.sbs = wx.StaticBoxSizer(self.sb, orient=wx.VERTICAL) + + self.hbox1 = wx.BoxSizer(wx.HORIZONTAL) + self.staticText1 = wx.StaticText(self.panel, + label='''\n上海奕枫仪器设备有限公司 +电话: 021-54270075 +网站: http://www.yi-win.com +邮件: sales@yi-win.com ''' ) + self.hbox1.Add(self.staticText1) + self.sbs.Add(self.hbox1) + + + + self.panel.SetSizer(self.sbs) + + self.hbox_0 = wx.BoxSizer(wx.HORIZONTAL) + self.okButton = wx.Button(self, label=u'确认') + self.closeButton = wx.Button(self, label='关闭') + self.hbox_0.Add(self.okButton) + self.hbox_0.Add(self.closeButton, flag=wx.LEFT, border=5) + + self.vbox.Add(self.panel, proportion=1, + flag=wx.ALL | wx.EXPAND, border=5) + self.vbox.Add(self.hbox_0, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10) + + self.SetSizer(self.vbox) + + self.okButton.Bind(wx.EVT_BUTTON, self.OnSave) + self.closeButton.Bind(wx.EVT_BUTTON, self.OnClose) + + + def saveData(self, e): + pass + + def OnClose(self, e): + self.Destroy() + + def OnSave(self, e): + self.EndModal(wx.ID_OK) \ No newline at end of file diff --git a/uiconfig/uihelp.py b/uiconfig/uihelp.py new file mode 100644 index 0000000..8c7a1c7 --- /dev/null +++ b/uiconfig/uihelp.py @@ -0,0 +1,58 @@ +import wx + +# 设置串口参数的对话框类 + +class Help(wx.Dialog): + + def __init__(self, *args, **kwds): + + # 参数调入后初始化 + super(Help, self).__init__(*args, **kwds) + + self.InitUI() + self.SetSize((400, 400)) + self.SetTitle("使用帮助") + + def InitUI(self): + + self.panel = wx.Panel(self) + self.vbox = wx.BoxSizer(wx.VERTICAL) + + self.sb = wx.StaticBox(self.panel, label='使用帮助') + self.sbs = wx.StaticBoxSizer(self.sb, orient=wx.VERTICAL) + + self.hbox1 = wx.BoxSizer(wx.HORIZONTAL) + self.staticText1 = wx.StaticText(self.panel, + label='''\n上海奕枫仪器设备有限公司 +电话: 021-54270075 +网站: http://www.yi-win.com +邮件: sales@yi-win.com ''' ) + self.hbox1.Add(self.staticText1) + self.sbs.Add(self.hbox1) + + self.panel.SetSizer(self.sbs) + + self.hbox_0 = wx.BoxSizer(wx.HORIZONTAL) + self.okButton = wx.Button(self, label=u'确认') + self.closeButton = wx.Button(self, label='关闭') + self.hbox_0.Add(self.okButton) + self.hbox_0.Add(self.closeButton, flag=wx.LEFT, border=5) + + self.vbox.Add(self.panel, proportion=1, + flag=wx.ALL | wx.EXPAND, border=5) + self.vbox.Add(self.hbox_0, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10) + + self.SetSizer(self.vbox) + + self.okButton.Bind(wx.EVT_BUTTON, self.OnSave) + self.closeButton.Bind(wx.EVT_BUTTON, self.OnClose) + + + def saveData(self, e): + pass + + def OnClose(self, e): + self.Destroy() + + def OnSave(self, e): + self.EndModal(wx.ID_OK) \ No newline at end of file diff --git a/uiconfig/uisensor.py b/uiconfig/uisensor.py new file mode 100644 index 0000000..a957cc8 --- /dev/null +++ b/uiconfig/uisensor.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- +import wx +# from configobj import ConfigObj +from myconfig import MyConfig,RamsesSURFACE +from myconfig import YAML_FILE_NAME + +class UISensor(wx.Dialog): + """ + @description : Sensor 配置 + """ + def __init__(self, parent, id, did): + # 参数调入后初始化 + self.did = did + super(UISensor, self).__init__( parent, id=id ) + self.config = MyConfig() + self.InitUI() + self.SetSize((400, 400)) + self.SetTitle(" 设置页面 串口 采集间隔 ") + + def InitUI(self): + + self.config_sensor = self.config.read_yaml() + # self.sensor = self.config_sensor.get(self.did) + # print(self.config_sensor) + # print(self.sensor) + + self.panel = wx.Panel(self) + self.vbox = wx.BoxSizer(wx.VERTICAL) + + self.sb = wx.StaticBox(self.panel, label='设置页面') + self.sbs = wx.StaticBoxSizer(self.sb, orient=wx.VERTICAL) + + self.hbox1 = wx.BoxSizer(wx.HORIZONTAL) + self.staticText1 = wx.StaticText(self.panel, label='Lsky: ',size=(60, -1), style=wx.ALIGN_CENTRE_VERTICAL ) + self.textCtrl1 = wx.TextCtrl(self.panel, value="",size=(250,25) ) + tmp = self.getSnByDidAndFunc("Lsky",self.did) + if tmp is not None: + self.textCtrl1.SetValue(tmp) + self.hbox1.Add(self.staticText1, flag=wx.TOP|wx.LEFT, border=5) + self.hbox1.Add(self.textCtrl1, flag=wx.TOP|wx.LEFT, border=5) + self.sbs.Add(self.hbox1, flag=wx.TOP|wx.LEFT, border= 5) + + self.hbox2 = wx.BoxSizer(wx.HORIZONTAL) + self.staticText2 = wx.StaticText(self.panel, label='Esky: ' ,size=(60, -1)) + # self.staticText2_1 = wx.StaticText(self.panel, label='分钟 ' ,size=(60, -1)) + self.textCtrl2 = wx.TextCtrl(self.panel, value="",size=(250,25)) + tmp = self.getSnByDidAndFunc("Esky",self.did) + if tmp is not None: + self.textCtrl2.SetValue(tmp) + self.hbox2.Add(self.staticText2, flag=wx.TOP|wx.LEFT, border=5) + self.hbox2.Add(self.textCtrl2,flag=wx.TOP|wx.LEFT, border=5) + # self.hbox2.Add(self.staticText2_1, flag=wx.TOP|wx.LEFT, border=5) + self.sbs.Add(self.hbox2, flag=wx.TOP|wx.LEFT, border=5) + + self.hbox3 = wx.BoxSizer(wx.HORIZONTAL) + self.staticText3 = wx.StaticText(self.panel, label='Lwater: ' ,size=(60, -1)) + # self.staticText3_1 = wx.StaticText(self.panel, label='分钟 ' ,size=(60, -1)) + self.textCtrl3 = wx.TextCtrl(self.panel, value="",size=(250,25)) + tmp = self.getSnByDidAndFunc("Lwater",self.did) + if tmp is not None: + self.textCtrl3.SetValue(tmp) + self.hbox3.Add(self.staticText3, flag=wx.TOP|wx.LEFT, border=5) + self.hbox3.Add(self.textCtrl3,flag=wx.TOP|wx.LEFT, border=5) + # self.hbox3.Add(self.staticText3_1, flag=wx.TOP|wx.LEFT, border=5) + self.sbs.Add(self.hbox3, flag=wx.TOP|wx.LEFT, border=5) + + self.panel.SetSizer(self.sbs) + + self.hbox_0 = wx.BoxSizer(wx.HORIZONTAL) + self.okButton = wx.Button(self, label=u'保存配置') + self.closeButton = wx.Button(self, label='Close') + self.hbox_0.Add(self.okButton) + self.hbox_0.Add(self.closeButton, flag = wx.LEFT, border=5) + + # 添加 vbox 到panel + self.vbox.Add(self.panel, proportion=1, + flag=wx.ALL | wx.EXPAND, border=5) + + self.vbox.Add(self.hbox_0, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10) + + self.SetSizer(self.vbox) + + self.okButton.Bind(wx.EVT_BUTTON, self.OnSave) + self.closeButton.Bind(wx.EVT_BUTTON, self.OnClose) + + def getSnByDidAndFunc(self,func,did): + temp:dict = self.config_sensor.get(did) + for v in temp.values(): + if v["FUNC"] == func: + return v["SN"] + return None + pass + + def setSnByDidAndFunc(self,func,did,val): + temp:dict = self.config_sensor.get(did) + for k,v in temp.items(): + if v["FUNC"] == func: + temp[k]['SN'] =val + self.config_sensor.update({did:temp}) + + pass + + def saveData(self, e): + pass + + def OnClose(self, e): + + self.Destroy() + + def OnSave(self, e): + success = True + # 赋值字典,写入文件 + self.setSnByDidAndFunc('Lsky',self.did,self.textCtrl1.GetValue( )) + self.setSnByDidAndFunc('Esky',self.did,self.textCtrl2.GetValue( )) + self.setSnByDidAndFunc('Lwater',self.did,self.textCtrl3.GetValue( )) + print(self.textCtrl3.GetValue( )) + + print(self.config_sensor) + self.config.write_yaml(self.config_sensor) + del self.config + + if success: + self.EndModal(wx.ID_OK) \ No newline at end of file diff --git a/yiwinframe.py b/yiwinframe.py new file mode 100644 index 0000000..530239d --- /dev/null +++ b/yiwinframe.py @@ -0,0 +1,337 @@ +import wx +import os +import time +import threading +from pathlib import * +# from configobj import ConfigObj + +from listctrl import Listctrl +from mypanel import MyPanel + +from uiconfig.uisensor import UISensor +# from uiconfig.uilogging import UILogging + +from uiconfig.uiabout import About +from uiconfig.uihelp import Help + +from myconfig import TOKEN,DeviceType,YAML_FILE_NAME,RETRIEVE_CFG_FILE +from myconfig import MyConfig +from configuration import Configuration +from awrams import AWRAMS,HandHeldBuf + +from tools.myexception import MyException +from tools.mylogger import log + +# -定义菜单ID,关联Event------------------------- +ID_MEASURE = 1 + +ID_SENSOR_SETTING = 11 +ID_LOGGING_SETTING = 12 +ID_CAL_INFO = 13 + +ID_HELP = 21 +ID_ABOUT = 22 + + +class YiwinFrame(wx.Frame): + '''将buf类传进来''' + def __init__(self, title, parent, size=(900, 750)): + self.device_id = 2 + self.device_type = DeviceType.SURFACE.name + self.syscfg = {} + self.sensor_cfg = {} + self.retrieve = {} + self.calinfo_is_ok = False + self.title = title + self.path = PurePath() + # self.save_fname:Path = Path(self.path.joinpath(DATA_FNAME)) + self.result = '' + self.displayData:list =[] + self.interval = 0 + + super(YiwinFrame, self).__init__( parent, title=self.title, size = size ) + + self.BoxSizer = wx.BoxSizer(wx.HORIZONTAL) # 建立一个Boxsizer + self.SetSizer(self.BoxSizer) + self.Centre(wx.BOTH) + + # 建立 listctrl panel 放到BoxSizer + self.listctrl_panel = Listctrl( self ) # 调用自己建立的 Listctrl panel 类 + self.BoxSizer.Add( self.listctrl_panel, proportion =-10, border = 2, flag = wx.ALL | wx.EXPAND) + self.list_ctrl = self.listctrl_panel.list_ctrl + # 隐藏 等待show + self.listctrl_panel.Hide() + + self.mypanel = MyPanel( self ) # 调用自己建立的 Listctrl panel 类 + self.BoxSizer.Add( self.mypanel, proportion =-10, border = 0, flag = wx.ALL | wx.EXPAND) + self.static_text = self.mypanel.staticText1 + # 隐藏 等待show + self.mypanel.Show() + + self.statusBar = self.CreateStatusBar() # 创建状态栏 + self.statusBar.SetFieldsCount(2) # 状态栏分成3个区域 + self.statusBar.SetStatusWidths([-1, -1]) # 区域宽度比列,用负数 + self.statusBar.SetStatusText(u" 等待接收消息......", 0) + + self.__set_menu() # 添加菜单 + self.__attach_events() # 菜单事件 + self.__set_properties() + # self.__read_config() + self.__setTimer() + log.info(f"system init....",__name__, "__init__") + self.mycfg = MyConfig() + self.hh = AWRAMS() + + # self.hhb = HandHeldBuf() + + pass + + def __set_menu(self): + ''' + # 设置菜单 + ''' + self.menubar = wx.MenuBar() + + settingMenu = wx.Menu() + settingMenu.Append(ID_SENSOR_SETTING, u'&设置', '...') + settingMenu.AppendSeparator() + settingMenu.Append(ID_CAL_INFO, u'&获取标定信息', ' ') + settingMenu.AppendSeparator() + settingMenu.Append(ID_MEASURE, u'&处理数据', ' ') + # settingMenu.AppendSeparator() + # settingMenu.Append(ID_LOGGING_SETTING, u'&采集设置', ' ') + self.menubar.Append(settingMenu, u'&系统 ') + + aboutMenu = wx.Menu() + aboutMenu.Append(ID_HELP, u'&帮助', 'help...') + aboutMenu.AppendSeparator() + aboutMenu.Append(ID_ABOUT, u'&关于我们', '关于我们...') + self.menubar.Append(aboutMenu, u'&帮助 ') + + self.SetMenuBar(self.menubar) + pass + + def __set_properties(self): + self.SetSize((800, 600)) + # self.SetTitle(u'传感器数据采集--上海奕枫仪器设备有限公司') + self.Centre() + + def __attach_events(self): + ''' + # 绑定菜单事件 + ''' + self.Bind(wx.EVT_MENU, self.OnSensorSetting, id=ID_SENSOR_SETTING ) + self.Bind(wx.EVT_MENU, self.OnCalInfo, id=ID_CAL_INFO ) + # self.Bind(wx.EVT_MENU, self.OnStart, id=ID_MEASURE) + self.Bind(wx.EVT_MENU, self.OnDealData, id=ID_MEASURE) + # self.Bind(wx.EVT_MENU, self.OnLoggingSetting, id=ID_LOGGING_SETTING) + + self.Bind(wx.EVT_MENU, self.OnHelpConfig, id=ID_HELP) + self.Bind(wx.EVT_MENU, self.OnAboutConfig, id=ID_ABOUT) + pass + + def __setTimer(self): + self.timer = wx.Timer(self) #创建定时器,菜单以后 + self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer) #绑定一个定时器事件 + pass + + def OnStart( self, event ): + log.info(f"OnStart....interval: {self.interval} min, port: {self.port}") + # self.m = SerialThread() + interval_ms = int(self.interval) * 10 * 1000 + self.timer.Start( interval_ms ) + + def OnStop( self ,event ): + # self.kh.disconnect() + # self.timer.Stop() + pass + + def OnTimer(self, event): + ''' + 定时器实现 + ''' + # log.info( f"OnTimer...." ) + # self.OnDisplaySave() + pass + + def onNotify(self, msg:str): + self.mypanel.setStaticText(msg) + pass + + def __read_config(self,): + # 读取配置文件 + self.mycfg.setDeviceType(DeviceType.SURFACE) + self.sensor_cfg = self.mycfg.read_yaml() + + def OnDealData(self, e)-> None: + log.info(f"OnDealData: 处理测量数据", __name__, "", "") + if not self.calinfo_is_ok: + self.onNotify("Pls get the cal info, and try again" ) + log.warning(f"Pls get the cal info, and try again", __name__, "OnDealData") + self.statusBar.SetStatusText("Pls get the cal info, and try again",0) + pass + + self.hh.getDataFileList() + self.hh.setDeviceID(self.device_id) + self.hh.setRetrieve(self.retrieve) + if self.syscfg != {}: + self.hh.setSyscfg(self.syscfg) + else: + log.warning(f"Pls get the cal info, and try again", __name__, "OnDealData","setCfg") + MyException( f"System Configuration is empty." ) + pass + + if self.hh.dealAllMeasurements( ): + self.onNotify("正在处理数据" ) + self.statusBar.SetStatusText(u" 数据处理完成......", 0) + self.onNotify("处理数据已经结束" ) + pass + + def OnCalInfo(self,e): + '''依据传感器获取标定文件信息''' + ####################################### + self.onNotify("正在获取标定信息") + device_id = self.device_id # 多个设备 + device_type = DeviceType.SURFACE.name + self.mycfg = MyConfig() + + self.mycfg.setDeviceType(DeviceType.SURFACE) + init_para = self.mycfg.read_yaml() + log.info(f"Current Device: {device_type} ", __name__, "", "") + log.info(f"Sensor: {init_para}", __name__, "", "") + # 配置反演需要的参数 波长 间隔 + self.retrieve = self.mycfg.get_retrieve() + log.warning(f"Retrieve: {self.retrieve}", __name__, "", "") + + self.syscfg = {} + + 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__, "", "") + self.syscfg.update({k:cfgr.cal_configuration}) + + # log.warning(f"self.syscfg: {self.syscfg}", __name__, "", "") + log.warning(f"self.syscfg 2: {self.syscfg[2].keys()}", __name__, "", "") + log.warning(f"self.syscfg 3: {self.syscfg[3].keys()}", __name__, "", "") + log.info(f"传感器配置文件读取成功", __name__, "", "") + self.alterStatus_0("传感器配置文件读取成功") + self.onNotify("获取标定信息成功") + self.calinfo_is_ok = True + + pass + + def alterStatus_0(self,msg): + self.statusBar.SetStatusText( msg, 0 ) + + def popDialog(self, msg, msg_type=u"错误提示"): + with wx.MessageDialog( self, msg, msg_type, wx.OK )as dlg: + dlg.ShowModal() + + def OnSensorSetting(self,e): + with UISensor( + self, + -1 , + did = self.device_id ) as Dialog_Sensor_Setting: + Dialog_Sensor_Setting.CenterOnParent() + resultLog = Dialog_Sensor_Setting.ShowModal() + + if resultLog == wx.ID_OK: + print( " Sensor config dialog confirm, call back " ) + self.__read_config() + pass + + def OnHelpConfig(self, e): + with Help( + self, + -1, + "") as Dialog_Help: + resultLog = Dialog_Help.ShowModal() + + if resultLog == wx.ID_OK: + print("Help info") + + pass + + def OnAboutConfig(self, e): + with About( + self, + -1, + "") as Dialog_About: + resultLog = Dialog_About.ShowModal() + + if resultLog == wx.ID_OK: + print("Aboutus") + + pass + + def OnQuit(self, e): + self.Close() + + + +# class SerialThread(threading.Thread): +# """进度条类 """ +# def __init__(self, parent): +# """ +# :param parent: 主线程UI +# """ +# super(SerialThread, self).__init__() # 继承 +# self.parent = parent +# # log.info(f"SerialThread ... {self.parent.kh}") +# self.start() +# self.join() +# # self.setDaemon(True) # 设置为守护线程, 即子线程是守护进程,主线程结束子线程也随之结束。 + + +# def stop(self): +# self.parent.kh.disconnect() +# log.info(" Serial stop.... ") +# pass + + # def run(self): + # log.info(" Serial run.... ") + # wx.CallAfter(self.parent.OnRcv) + + # wx.CallAfter(self.parent.update_process_bar, count) # 调用parent的函数 + # wx.CallAfter(self.parent.close_process_bar) # destroy进度条 + + # def OnSerialThreadStart(self): + # self.m = SerialThread(self) + # pass + + # def OnSerialThreadStop(self): + # self.m.stop() + # pass + + # def OnDisplaySave(self): + # ''' + # 保存数据 self.result + # ''' + # log.info(f"OnDisplaySave ....") + # # self.m = SerialThread(self) + # # self.kh.flush() + # self.OnSerialThreadStart() + + + # def OnRcv( self ): + # log.info(f"OnRcv....") + # self.kh.setPort(self.port) + # if not self.OnDetectPort: + # MyException(f"Can not find port : {self.port}") + # log.info(f"{self.port} ok!") + # # if not self.kh: + # # self.kh = KH3000(self.port) + # # self.result = self.kh.OneMeasure() + # log.info( f"OnRcv success {self.result}", __class__.__name__ ) + # self.OnSave() + # self.OnDisplay() + # pass \ No newline at end of file