import logging import os import shutil import subprocess logger = logging.getLogger("mylog") class SurfaceInversionDubois: """ 调用polsarpro4.2.0的surface_inversion_dubois.exe做土壤水分反演 """ def __init__(self, exeFilterName='surface_inversion_dubois.exe'): self.__exeName = exeFilterName pass def api_surface_inversion_dubois( self, exeDir, inT3Dir, outDir, incidence, rectX, rectY, row, col, frequency, # GHZ angleFlag, # 0:deg, 1:rad ): """ :param exeDir:exe所在目录 :param inT3Dir:T3矩阵目录 :param outDir:输出目录 :param rectX:有效区域x :param rectY:有效区域y :param rectWidth:有效区域宽 :param rectHeight:有效区域高 :param Nwin:滤波窗口大小 3 5 7 9 11 :param Nlook:一般是1 """ if len(exeDir) == 0: if not os.path.exists(self.__exeName): raise Exception(self.__exeName + ' not exists.') exePath = self.__exeName else: if not os.path.exists(exeDir + '\\' + self.__exeName): raise Exception( exeDir + '\\' + self.__exeName + ' not exists.') exePath = exeDir + '\\' + self.__exeName if not self._checkT3Matrix(inT3Dir): raise Exception('T3 Matrix check failed.') if not os.path.exists(outDir): os.makedirs(outDir) Off_lig = rectX Off_col = rectY Sub_Nlig = row Sub_Ncol = col dataFormat = 'T3' calibration_flag = 1 calibration_coefficient = 0.0 threshold_HHHH_VVVV = 0.0 threshold_HVHV_VVVV = 0.0 para_list = [ exePath, inT3Dir, outDir, dataFormat, incidence, Off_lig, Off_col, Sub_Nlig, Sub_Ncol, frequency, # GHZ angleFlag, ] cmd = "surface_inversion_dubois.exe -id {} -od {} -iodf {} -ang {} -ofr {} -ofc {} -fnr {} -fnc {} -fr {} -un {} -caf {} -cac {} -th1 {} -th2 {}".format( inT3Dir, outDir, dataFormat, incidence, Off_lig, Off_col, Sub_Nlig, Sub_Ncol, frequency, angleFlag, calibration_flag, calibration_coefficient, threshold_HHHH_VVVV, threshold_HVHV_VVVV) logger.info('surface_inversion_dubois:{}'.format(cmd)) result = os.system(cmd) logger.info('cmd_result:{}'.format(result)) logger.info('surface_inversion_dubois finish!') config_path = os.path.join(inT3Dir, 'config.txt') shutil.copyfile(config_path, os.path.join(outDir, 'config.txt')) # cmd = ' '.join(str(i) for i in para_list) # config_path = os.path.join(inT3Dir, 'config.txt') # shutil.copyfile(config_path, os.path.join(outDir, 'config.txt')) # result_tuple = subprocess.getstatusoutput(cmd) # # if result_tuple[0] != 1 or result_tuple[1].find('error') != -1: # raise Exception(result_tuple[1]) @staticmethod def _checkT3Matrix(T3Dir): # 检测T3矩阵 if not os.path.exists(T3Dir): return False file_name_in_out = ['T11.bin', 'T12_real.bin', 'T12_imag.bin', 'T13_real.bin', 'T13_imag.bin', 'T22.bin', 'T23_real.bin', 'T23_imag.bin', 'T33.bin'] for item in file_name_in_out: if not os.path.exists(T3Dir + "\\" + item): return False return True class SurfaceInversionHisto: """ 调用polsarpro4.2.0的surface_inversion_histo.exe做土壤水分反演 """ def __init__(self, exeFilterName='surface_inversion_histo.exe'): self.__exeName = exeFilterName pass def api_surface_inversion_histo( self, exeDir, inT3Dir, outDir, rectX, rectY, rectWidth, rectHeight, Nwin=7, Nlook=1): """ :param exeDir:exe所在目录 :param inT3Dir:T3矩阵目录 :param outDir:输出目录 :param rectX:有效区域x :param rectY:有效区域y :param rectWidth:有效区域宽 :param rectHeight:有效区域高 :param Nwin:滤波窗口大小 3 5 7 9 11 :param Nlook:一般是1 """ if len(exeDir) == 0: if not os.path.exists(self.__exeName): raise Exception(self.__exeName + ' not exists.') exePath = self.__exeName else: if not os.path.exists(exeDir + '\\' + self.__exeName): raise Exception( exeDir + '\\' + self.__exeName + ' not exists.') exePath = exeDir + '\\' + self.__exeName if not self._checkT3Matrix(inT3Dir): raise Exception('T3 Matrix check failed.') if not os.path.exists(outDir): os.makedirs(outDir) if (Nwin % 2) == 0 or Nwin < 0: # 如果为偶数或小于0,则使用默认值 Nwin = 7 Off_lig = rectX Off_col = rectY Sub_Nlig = rectWidth Sub_Ncol = rectHeight para_list = [ exePath, inT3Dir, outDir, Nlook, Nwin, Off_lig, Off_col, Sub_Nlig, Sub_Ncol] cmd = ' '.join(str(i) for i in para_list) config_path = os.path.join(inT3Dir, 'config.txt') shutil.copyfile(config_path, os.path.join(outDir, 'config.txt')) result_tuple = subprocess.getstatusoutput(cmd) if result_tuple[0] != 1 or result_tuple[1].find('error') != -1: raise Exception(result_tuple[1]) @staticmethod def _checkT3Matrix(T3Dir): # 检测T3矩阵 if not os.path.exists(T3Dir): return False file_name_in_out = ['T11.bin', 'T12_real.bin', 'T12_imag.bin', 'T13_real.bin', 'T13_imag.bin', 'T22.bin', 'T23_real.bin', 'T23_imag.bin', 'T33.bin'] for item in file_name_in_out: if not os.path.exists(T3Dir + "\\" + item): return False return True class SurfaceInversionOh: """ 调用polsarpro4.2.0的surface_inversion_oh.exe做土壤水分反演 """ def __init__(self, exeFilterName='surface_inversion_oh.exe'): self.__exeName = exeFilterName pass def api_surface_inversion_oh( self, exeDir, inT3Dir, outDir, rectX, rectY, rectWidth, rectHeight, Nwin=7, Nlook=1): """ :param exeDir:exe所在目录 :param inT3Dir:T3矩阵目录 :param outDir:输出目录 :param rectX:有效区域x :param rectY:有效区域y :param rectWidth:有效区域宽 :param rectHeight:有效区域高 :param Nwin:滤波窗口大小 3 5 7 9 11 :param Nlook:一般是1 """ if len(exeDir) == 0: if not os.path.exists(self.__exeName): raise Exception(self.__exeName + ' not exists.') exePath = self.__exeName else: if not os.path.exists(exeDir + '\\' + self.__exeName): raise Exception( exeDir + '\\' + self.__exeName + ' not exists.') exePath = exeDir + '\\' + self.__exeName if not self._checkT3Matrix(inT3Dir): raise Exception('T3 Matrix check failed.') if not os.path.exists(outDir): os.makedirs(outDir) if (Nwin % 2) == 0 or Nwin < 0: # 如果为偶数或小于0,则使用默认值 Nwin = 7 Off_lig = rectX Off_col = rectY Sub_Nlig = rectWidth Sub_Ncol = rectHeight para_list = [ exePath, inT3Dir, outDir, Nlook, Nwin, Off_lig, Off_col, Sub_Nlig, Sub_Ncol] cmd = ' '.join(str(i) for i in para_list) config_path = os.path.join(inT3Dir, 'config.txt') shutil.copyfile(config_path, os.path.join(outDir, 'config.txt')) result_tuple = subprocess.getstatusoutput(cmd) if result_tuple[0] != 1 or result_tuple[1].find('error') != -1: raise Exception(result_tuple[1]) @staticmethod def _checkT3Matrix(T3Dir): # 检测T3矩阵 if not os.path.exists(T3Dir): return False file_name_in_out = ['T11.bin', 'T12_real.bin', 'T12_imag.bin', 'T13_real.bin', 'T13_imag.bin', 'T22.bin', 'T23_real.bin', 'T23_imag.bin', 'T33.bin'] for item in file_name_in_out: if not os.path.exists(T3Dir + "\\" + item): return False return True class SurfaceInversionOh2004: """ 调用polsarpro4.2.0的surface_inversion_oh2004.exe做土壤水分反演 """ def __init__(self, exeFilterName='surface_inversion_oh2004.exe'): self.__exeName = exeFilterName pass def api_surface_inversion_oh2004( self, exeDir, inT3Dir, outDir, incidence, rectY, rectX, row, col, frequency, # GHZ angleFlag): """ :param exeDir:exe所在目录 :param inT3Dir:T3矩阵目录 :param outDir:输出目录 :param rectX:有效区域x :param rectY:有效区域y :param rectWidth:有效区域宽 :param rectHeight:有效区域高 :param Nwin:滤波窗口大小 3 5 7 9 11 :param Nlook:一般是1 """ if len(exeDir) == 0: if not os.path.exists(self.__exeName): raise Exception(self.__exeName + ' not exists.') exePath = self.__exeName else: if not os.path.exists(exeDir + '\\' + self.__exeName): raise Exception( exeDir + '\\' + self.__exeName + ' not exists.') exePath = exeDir + '\\' + self.__exeName if not self._checkT3Matrix(inT3Dir): raise Exception('T3 Matrix check failed.') if not os.path.exists(outDir): os.makedirs(outDir) Off_lig = rectX Off_col = rectY Sub_Nlig = row Sub_Ncol = col dataFormat = 'T3' threshold_mv = 1.0 threshold_s = 7.0 para_list = [ exePath, inT3Dir, outDir, dataFormat, incidence, Off_lig, Off_col, Sub_Nlig, Sub_Ncol, frequency, # GHZ angleFlag, threshold_mv, threshold_s] cmd = "surface_inversion_oh2004.exe -id {} -od {} -iodf {} -ang {} -ofr {} -ofc {} -fnr {} -fnc {} -fr {} -un {} -th1 {} -th2 {}".format( inT3Dir, outDir, dataFormat, incidence, Off_lig, Off_col, Sub_Nlig, Sub_Ncol, frequency, angleFlag, threshold_mv, threshold_s) logger.info('surface_inversion_oh2004:{}'.format(cmd)) result = os.system(cmd) logger.info('cmd_result:{}'.format(result)) logger.info('surface_inversion_oh2004 finish!') config_path = os.path.join(inT3Dir, 'config.txt') shutil.copyfile(config_path, os.path.join(outDir, 'config.txt')) # cmd = ' '.join(str(i) for i in para_list) # result_tuple = subprocess.getstatusoutput(cmd) # # # if result_tuple[0] != 1 or result_tuple[1].find('error') != -1: # raise Exception(result_tuple[1]) @staticmethod def _checkT3Matrix(T3Dir): # 检测T3矩阵 if not os.path.exists(T3Dir): return False file_name_in_out = ['T11.bin', 'T12_real.bin', 'T12_imag.bin', 'T13_real.bin', 'T13_imag.bin', 'T22.bin', 'T23_real.bin', 'T23_imag.bin', 'T33.bin'] # file_name_in_out = ['T11.img', 'T12_real.img', 'T12_imag.img', # 'T13_real.img', 'T13_imag.img', 'T22.img', # 'T23_real.img', 'T23_imag.img', 'T33.img'] for item in file_name_in_out: if not os.path.exists(T3Dir + "\\" + item): return False return True