diff --git a/json_schemas/schema_MultiSlc.json b/json_schemas/schema_MultiSlc.json new file mode 100644 index 0000000000000000000000000000000000000000..45a21150d10e9eb5dad27fba1e8521a78eed6c45 --- /dev/null +++ b/json_schemas/schema_MultiSlc.json @@ -0,0 +1,132 @@ +{ + "$schema": "http://json-schema.org/schema#", + "title": "JSON SCHEMA for MultiSlc", + "description": "JSON organization for the script SAR_MultiSlc.py", + + "type": "object", + + "allOf": [{"required": ["Global", "Pre_Processing", "Metadata_Correction", "DIn_SAR"]}], + + "properties": + { + "Global": + { + "type": "object", + "properties": + { + "in": + { + "type": "object", + "required": ["SRTM_Shapefile", "SRTM_Path", "Geoid", "Master_Image", "Start_Date", + "End_Date", "Input_Path"], + "additionalProperties": false, + "properties": {"SRTM_Shapefile": {"type": "string"}, + "SRTM_Path": {"type": "string"}, + "Geoid": {"type": "string"}, + "Master_Image": {"type": "string"}, + "Start_Date": {"type": "string"}, + "End_Date": {"type": "string"}, + "Exclude": {"type": "string", "default": "-9999"}, + "Input_Path": {"type": "string"}} + }, + "out": + { + "type": "object", + "required": ["Output_Path"], + "additionalProperties": false, + "properties": {"Output_Path": {"type": "string"}} + }, + "parameter": + { + "type": "object", + "additionalProperties": false, + "properties": {"clean": {"type": "string", "default": "yes"}, + "optram": {"type": "number", "default": 4000}} + } + }, + "additionalProperties": false, + "required": ["in", "out"] + }, + + "Pre_Processing": + { + "type": "object", + "properties": + { + "out": + { + "type": "object", + "required": ["doppler_file"], + "additionalProperties": false, + "properties": {"doppler_file": {"type": "string"}} + }, + "parameter": + { + "type": "object", + "required": ["ML_gain"], + "additionalProperties": false, + "properties": {"ML_ran": {"type": "number", "default" : 3}, + "ML_azi": {"type": "number", "default" : 3}, + "ML_gain": {"type": "number"}} + + } + }, + "additionalProperties": false, + "required": ["out", "parameter"] + }, + + "Metadata_Correction": + { + "type": "object", + "properties": + { + "out": + { + "type": "object", + "required": ["fine_metadata_file"], + "additionalProperties": false, + "properties": {"fine_metadata_file": {"type": "string"}} + }, + "parameter": + { + "type": "object", + "required": ["activate", "GridStep_range", "GridStep_azimut"], + "additionalProperties": false, + "properties": {"activate": {"type": "boolean"}, + "GridStep_range": {"type": "number"}, + "GridStep_azimut": {"type": "number"}} + + } + }, + "additionalProperties": false, + "required": ["out", "parameter"] + }, + + "DIn_SAR": + { + "type": "object", + "properties": + { + "parameter": + { + "type": "object", + "required": ["GridStep_range", "GridStep_azimut", "Grid_Threshold", "Grid_Gap", + "Interferogram_gain"], + "additionalProperties": false, + "properties": {"GridStep_range": {"type": "number"}, + "GridStep_azimut": {"type": "number"}, + "Grid_Threshold": {"type": "number"}, + "Grid_Gap": {"type": "number"}, + "Interferogram_gain": {"type": "number"}, + "Activate_Interferogram": {"type": "string", "default": "yes"}, + "Activate_Ortho": {"type": "string"}, + "Spacingxy": {"type": "number", "default": 0.0001}, + "roi": {"type": "string"} + } + } + }, + "additionalProperties": false, + "required": ["parameter"] + } + } +} diff --git a/json_schemas/schema_MultiSlc_IW.json b/json_schemas/schema_MultiSlc_IW.json new file mode 100644 index 0000000000000000000000000000000000000000..774f1cd9372bdabfc37e0dd30ae8b562e21549c1 --- /dev/null +++ b/json_schemas/schema_MultiSlc_IW.json @@ -0,0 +1,107 @@ +{ + "$schema": "http://json-schema.org/schema#", + "title": "JSON SCHEMA for MultiSlc", + "description": "JSON organization for the script SAR_MultiSlc_IW.py", + + "type": "object", + + "allOf": [{"required": ["Global", "Pre_Processing", "DIn_SAR"]}], + + "properties": + { + "Global": + { + "type": "object", + "properties": + { + "in": + { + "type": "object", + "required": ["SRTM_Shapefile", "SRTM_Path", "Geoid", "Master_Image", "Start_Date", + "End_Date", "Input_Path"], + "additionalProperties": false, + "properties": {"SRTM_Shapefile": {"type": "string"}, + "SRTM_Path": {"type": "string"}, + "Geoid": {"type": "string"}, + "Master_Image": {"type": "string"}, + "Start_Date": {"type": "string"}, + "End_Date": {"type": "string"}, + "Exclude": {"type": "string", "default": "-9999"}, + "Input_Path": {"type": "string"}} + }, + "out": + { + "type": "object", + "required": ["Output_Path"], + "additionalProperties": false, + "properties": {"Output_Path": {"type": "string"}} + }, + "parameter": + { + "type": "object", + "additionalProperties": false, + "properties": {"clean": {"type": "string", "default": "yes"}, + "burst_index": {"type": "string", "default": "0-8"}, + "optram": {"type": "number", "default": 4000}} + } + }, + "additionalProperties": false, + "required": ["in", "out"] + }, + + "Pre_Processing": + { + "type": "object", + "properties": + { + "out": + { + "type": "object", + "required": ["doppler_file"], + "additionalProperties": false, + "properties": {"doppler_file": {"type": "string"}} + }, + "parameter": + { + "type": "object", + "required": ["ML_gain"], + "additionalProperties": false, + "properties": {"ML_ran": {"type": "number", "default" : 3}, + "ML_azi": {"type": "number", "default" : 3}, + "ML_gain": {"type": "number"}} + + } + }, + "additionalProperties": false, + "required": ["out", "parameter"] + }, + + "DIn_SAR": + { + "type": "object", + "properties": + { + "parameter": + { + "type": "object", + "required": ["GridStep_range", "GridStep_azimut", "Grid_Threshold", "Grid_Gap", + "Interferogram_gain"], + "additionalProperties": false, + "properties": {"GridStep_range": {"type": "number"}, + "GridStep_azimut": {"type": "number"}, + "Grid_Threshold": {"type": "number"}, + "Grid_Gap": {"type": "number"}, + "Interferogram_gain": {"type": "number"}, + "Activate_Interferogram": {"type": "string", "default": "yes"}, + "Activate_Ortho": {"type": "string"}, + "Spacingxy": {"type": "number", "default": 0.0001}, + "roi": {"type": "string"}, + "ESD_iter" : {"type": ["integer","string"]} + } + } + }, + "additionalProperties": false, + "required": ["parameter"] + } + } +} diff --git a/python_src/SAR_MultiSlc.py b/python_src/SAR_MultiSlc.py index fc893d7fd24fc02ed0487919f0f205960466843d..c3e68d880afe5a1fa61416c90db7ce1650aa2431 100644 --- a/python_src/SAR_MultiSlc.py +++ b/python_src/SAR_MultiSlc.py @@ -66,45 +66,6 @@ if __name__ == "__main__": parser.add_argument("configfile", help="""input conguration file for the application DiapOTB""") - parser.add_argument("-d", "--start_date", dest="start_date", - action="store", help="start date, fmt('20151222')", - default=None) - parser.add_argument("-f", "--end_date", dest="end_date", action="store", - help="end date, fmt('20151223')", default=None) - parser.add_argument("-m", "--master", dest="master", action="store", - help="master image, fmt (.tiff or .h5)", default=None) - parser.add_argument("-e", "--exclude", dest="exclude", nargs="+", - action="store", help=""""excluded date(s) from the time - serie, exemple('20151221 20160114')""", default="-9999") - parser.add_argument("-roi", "--roi", dest="roi", nargs="+", action="store", - help=""""Define the lat lng ROI coordinates, - fmt('ulx uly lrx lry'), ex: -roi 2.44115 48.96126 - 2.44176 48.95927""", default=None) - parser.add_argument("-i", "--interferogram", dest="interferogram", - action="store", help=""" Simply write ' -i no ' to - deactivate interferogram output. Activated by default. - Returns: Interferogram.tif""", default="yes") - parser.add_argument("-o", "--ortho", dest="ortho", - action="store", help=""" Simply write ' -o yes ' to - activate Orthorectified interferogram output. If activated, - returns: Ortho_Interferogram.tif""", default=None) - parser.add_argument("-l", "--light", dest="light", action="store", - help="""" -l no' to deactivate. If activated, returns a - light version: Interferogram.tif + Coregistrated.tif + - Concatenated (deramped, and multilooked) bursts.tif""", - default="yes") - parser.add_argument("-ram", "--optram", dest="optram", - action="store", help="""Available RAM (mb), - by default value is 4OOO""", - default="4000") - parser.add_argument("-spacingxy", "--spacingxy", dest="spacingxy", - action="store", help="""Set the spatial resolution - for OrthoRectification in degrees, - Default value is 0.0001""", - default="0.0001") - parser.add_argument("-ml", "--multilook", dest="multi", nargs="+", action="store", - help=""""Set the range and azimuth (in this order) you want - for the multilook. Default is 3 3""", default='3' '3') args = parser.parse_args() print(args.configfile) @@ -112,61 +73,63 @@ if __name__ == "__main__": func_utils.init_logger() # ====== Read and Load the configuration file - dataConfig = func_utils.load_configfile(args.configfile) + dataConfig = func_utils.load_configfile(args.configfile, mode="multi_S1") + + # ====== Get dictionaries + dict_Global = dataConfig['Global'] + dict_PreProcessing = dataConfig['Pre_Processing'] + dict_Metadata_Correction = dataConfig['Metadata_Correction'] + dict_DInSAR = dataConfig['DIn_SAR'] # ====== Check extension (if .h5 => HDF5 file => Cosmo Sensor) - master_ext = args.master.split(".")[-1:] + master_ext = dict_Global['in']['Master_Image'].split(".")[-1:] - # ================================= - # Get elements from users arguments - # ================================= + # ====== Get elements from configuration file + # ====== Global + srtm_shapefile = dict_Global['in']['SRTM_Shapefile'] + hgts_path = dict_Global['in']['SRTM_Path'] + geoid_path = dict_Global['in']['Geoid'] + + output_dir = dict_Global['out']['Output_Path'] - # ====== Set the variables names - iso_start, iso_end = func_utils.argDates_to_isoDates(args.start_date, args.end_date) - start_time = int(args.start_date) - end_time = int(args.end_date) - master_Image_base = args.master + if not os.path.exists(output_dir): + print("The output directory does not exist and will be created") + os.makedirs(output_dir) + else : + print("The output directory exists. Some files can be overwritten") + + iso_start, iso_end = func_utils.argDates_to_isoDates(dict_Global['in']['Start_Date'], dict_Global['in']['End_Date']) + start_time = int(dict_Global['in']['Start_Date']) + end_time = int(dict_Global['in']['End_Date']) + master_Image_base = dict_Global['in']['Master_Image'] master_Image = "" pol = "" - spacingxy = args.spacingxy - exclude = args.exclude - roi = args.roi - light_version = args.light + exclude = "-9999" + if 'Exclude' in dict_Global['in']: + exclude = dict_Global['in']['Exclude'] relative_orbit = "" manifest = "" + light_version = "yes" + ram = 4000 + if 'parameter' in dict_Global: + if 'optram' in dict_Global['parameter']: + ram = dict_Global['parameter']['optram'] + if 'clean' in dict_Global['parameter']: + light_version = dict_Global['parameter']['clean'] + light_version = func_utils.str2bool(light_version) if master_ext[0] == "h5" : # Cosmo case - master_Image = func_utils.get_imgFromDir(args.master) + master_Image = func_utils.get_imgFromDir(dict_Global['in']['Master_Image'], dict_Global['in']['Input_Path']) master_date = master_Image_base.split("_")[8][:8] pol = master_Image_base.split("_")[5] else : #S1 SM case - master_Image = func_utils.get_imgFromSAFE(args.master) + master_Image = func_utils.get_imgFromSAFE(dict_Global['in']['Master_Image'], dict_Global['in']['Input_Path']) master_date = master_Image_base.split("-")[4].split("t")[0] pol = master_Image_base.split("-")[3] manifest = master_Image.split("measurement")[0]+"/manifest.safe" relative_orbit = func_utils.get_relative_orbit(manifest) - version_interferogram = args.interferogram - ortho_interferogram = args.ortho - if roi: - ortho_interferogram = "yes" - print("ortho_interferogram", ortho_interferogram) - ram = args.optram - rng,azi = args.multi - - # ====== Get dictionaries - dict_Global = dataConfig['Global'] - dict_PreProcessing = dataConfig['Pre_Processing'] - dict_Metadata_Correction = dataConfig['Metadata_Correction'] - dict_DInSAR = dataConfig['DIn_SAR'] - - # ====== Get elements from configuration file - # ====== Global - srtm_shapefile = dict_Global['in']['SRTMShapefile'] - hgts_path = dict_Global['in']['Datalake'] - geoid_path = dict_Global['in']['Geoid'] - satellite = "default" mode = "default" @@ -175,6 +138,12 @@ if __name__ == "__main__": mode = dict_Global['sensor']['mode'] # ====== Pre_Processing + rng = 3 + azi = 3 + if "ML_ran" in dict_PreProcessing['parameter']: + rng = dict_PreProcessing['parameter'].get('ML_ran') + if "ML_azi" in dict_PreProcessing['parameter']: + azi = dict_PreProcessing['parameter'].get('ML_azi') ml_range = int(rng) ml_azimut = int(azi) ml_gain = dict_PreProcessing['parameter']['ML_gain'] @@ -192,13 +161,23 @@ if __name__ == "__main__": fine_metadata_file = dict_Metadata_Correction['out']['fine_metadata_file'] # ====== DIn_SAR + spacingxy = 0.0001 + if "Spacingxy" in dict_DInSAR['parameter']: + spacingxy = dict_DInSAR['parameter']['Spacingxy'] + roi = None + if 'roi' in dict_DInSAR['parameter']: + roi = dict_DInSAR['parameter']['roi'] + version_interferogram = dict_DInSAR['parameter']['Activate_Interferogram'] + ortho_interferogram = None + if 'Activate_Ortho' in dict_DInSAR['parameter']: + ortho_interferogram = dict_DInSAR['parameter']['Activate_Ortho'] + if roi: + ortho_interferogram = "yes" + print("ortho_interferogram", ortho_interferogram) geoGrid_gridstep_range = dict_DInSAR['parameter']['GridStep_range'] geoGrid_gridstep_azimut = dict_DInSAR['parameter']['GridStep_azimut'] geoGrid_threshold = dict_DInSAR['parameter']['Grid_Threshold'] - if not master_ext[0] == "h5": - geoGrid_gap = dict_DInSAR['parameter']['Grid_Gap_S1'] - else: - geoGrid_gap = dict_DInSAR['parameter']['Grid_Gap_Co'] + geoGrid_gap = dict_DInSAR['parameter']['Grid_Gap'] ml_geoGrid_range = ml_range ml_geoGrid_azimut = ml_azimut gain_interfero = dict_DInSAR['parameter']['Interferogram_gain'] @@ -213,14 +192,15 @@ if __name__ == "__main__": func_utils.check_ifExist(master_Image) # ====== Create global folder with starting and ending dates + master date - output_glob = "./output_{}_to_{}_m_{}".format(start_time, end_time, - master_date) + output_glob = "{}/output_{}_to_{}_m_{}".format(output_dir, start_time, + end_time, master_date) if not os.path.exists(output_glob): os.makedirs(output_glob) # ====== Create Digital Elevation Model dem, target_dir = func_utils.build_virutal_raster(master_Image, start_time, end_time, - master_date, srtm_shapefile, hgts_path) + master_date, srtm_shapefile, hgts_path, + output_dir) print("\n Removing master_image_envelope shp files...\n") for i in os.listdir(target_dir): if i.startswith("master_envelope"): @@ -233,11 +213,22 @@ if __name__ == "__main__": # Recap of input parameter into info.log func_utils.log(logging.INFO, "########### Input Parameters for the current execution ############## ") + # Global func_utils.log(logging.INFO, " Global : ") func_utils.log(logging.INFO, "srtm_shapefile : {param}".format(param=srtm_shapefile)) func_utils.log(logging.INFO, "hgts_path : {param}".format(param=hgts_path)) func_utils.log(logging.INFO, "geoid_path : {param}".format(param=geoid_path)) - + func_utils.log(logging.INFO, "Input_Path : {param}".format(param=dict_Global['in']['Input_Path'])) + func_utils.log(logging.INFO, "Start_Date : {param}".format(param=start_time)) + func_utils.log(logging.INFO, "End_Date : {param}".format(param=end_time)) + func_utils.log(logging.INFO, "Master_Image : {param}".format(param=master_Image_base)) + func_utils.log(logging.INFO, "Exclude : {param}".format(param=exclude)) + func_utils.log(logging.INFO, "clean : {param}".format(param=light_version)) + func_utils.log(logging.INFO, "optram : {param}".format(param=ram)) + func_utils.log(logging.INFO, "satellite : {param}".format(param=satellite)) + func_utils.log(logging.INFO, "mode : {param}".format(param=mode)) + + # Pre_Processing func_utils.log(logging.INFO, " Pre_Processing : ") func_utils.log(logging.INFO, "ml_range : {param}".format(param=ml_range)) func_utils.log(logging.INFO, "ml_azimut : {param}".format(param=ml_azimut)) @@ -252,13 +243,17 @@ if __name__ == "__main__": func_utils.log(logging.INFO, "ml_geoGrid_range : {param}".format(param=ml_geoGrid_range)) func_utils.log(logging.INFO, "ml_geoGrid_azimut : {param}".format(param=ml_geoGrid_azimut)) func_utils.log(logging.INFO, "gain_interfero : {param}".format(param=gain_interfero)) + func_utils.log(logging.INFO, "Spacingxy : {param}".format(param=spacingxy)) + func_utils.log(logging.INFO, "roi : {param}".format(param=roi)) + func_utils.log(logging.INFO, "Activate_Interferogram : {param}".format(param=version_interferogram)) + func_utils.log(logging.INFO, "Activate_Ortho : {param}".format(param=ortho_interferogram)) # ============================= # Get the elements from os.dirs # ============================= # ====== Get the list of GTiff corresponding to dates - tiff_list = func_utils.get_AllTiff(pol=pol, ext=master_ext[0]) + tiff_list = func_utils.get_AllTiff(pol=pol, ext=master_ext[0], searchDir=dict_Global["in"]["Input_Path"]) tiff_dates = func_utils.get_Tiff_WithDates(start_time, end_time, exclude, tiff_list, master_ext[0]) counter = 0 @@ -268,9 +263,9 @@ if __name__ == "__main__": slave_Image_base = i slave_Image = "" if not master_ext[0] == "h5" : - slave_Image = func_utils.get_imgFromSAFE(slave_Image_base) + slave_Image = func_utils.get_imgFromSAFE(slave_Image_base, searchDir=dict_Global["in"]["Input_Path"]) else : - slave_Image = func_utils.get_imgFromDir(slave_Image_base) + slave_Image = func_utils.get_imgFromDir(slave_Image_base, searchDir=dict_Global["in"]["Input_Path"]) slave_date = func_utils.get_Date(i, master_ext[0]) counter += 1 output_dir = output_glob + "/{}_m_{}_s".format(master_date, slave_date) @@ -550,7 +545,7 @@ if __name__ == "__main__": func_utils.silentremove(output_dir, interf_roi) - if light_version == "yes": + if light_version is True: func_utils.log(logging.INFO, "\n Removing files for light version \n") func_utils.silentremove(output_dir, dop_file) func_utils.silentremove(output_dir, demProj_Slave) @@ -565,7 +560,7 @@ if __name__ == "__main__": func_utils.silentremove(output_dir, i_file) - if light_version == "yes": + if light_version is True: func_utils.log(logging.INFO, "\n Removing files for light version \n") if os.path.exists(os.path.join(master_data_dir, dop_file)): func_utils.silentremove(master_data_dir, dop_file) diff --git a/python_src/SAR_MultiSlc_IW.py b/python_src/SAR_MultiSlc_IW.py index 9fc4e2ed807a536f937e1679ad86d8b1871164c7..2ed1cb87481e182a9a71f44f4cebde54251b5fd3 100644 --- a/python_src/SAR_MultiSlc_IW.py +++ b/python_src/SAR_MultiSlc_IW.py @@ -69,84 +69,14 @@ if __name__ == "__main__": parser.add_argument("configfile", help="""input conguration file for the application DiapOTB""") - parser.add_argument("-d", "--start_date", dest="start_date", - action="store", help="start date, fmt('20151222')", - default=None) - parser.add_argument("-f", "--end_date", dest="end_date", action="store", - help="end date, fmt('20151223')", default=None) - parser.add_argument("-m", "--master", dest="master", action="store", - help="master image, fmt (.tiff or .h5)", default=None) - parser.add_argument("-e", "--exclude", dest="exclude", nargs="+", - action="store", help=""""excluded date(s) from the time - serie, exemple('20151221 20160114')""", default="-9999") - parser.add_argument("-b", "--burst", dest="burst", action="store", - help="Select the bursts you want to work on, fmt(0-4)", - default="0-8") - parser.add_argument("-roi", "--roi", dest="roi", nargs="+", action="store", - help=""""Define the lng lat ROI coordinates, - fmt('ulx uly lrx lry'), ex: -roi 2.44115 48.96126 - 2.44176 48.95927""", default=None) - parser.add_argument("-i", "--interferogram", dest="interferogram", - action="store", help=""" Simply write ' -i no ' to - deactivate interferogram output. Activated by default. - Returns: Interferogram.tif""", default="yes") - parser.add_argument("-o", "--ortho", dest="ortho", - action="store", help=""" Simply write ' -o yes ' to - activate Orthorectified interferogram output. If activated, - returns: Ortho_Interferogram.tif""", default=None) - parser.add_argument("-l", "--light", dest="light", action="store", - help="""" -l no' to deactivate. If activated, returns a - light version: Interferogram.tif + Coregistrated.tif + - multilook.tif""", default="yes") - parser.add_argument("-ram", "--optram", dest="optram", - action="store", help="""Available RAM (mb), - by default value is 4OOO""", - default="4000") - parser.add_argument("-spacingxy", "--spacingxy", dest="spacingxy", - action="store", help="""Set the spatial resolution - for OrthoRectification in degrees, - Default value is 0.0001""", - default="0.0001") - parser.add_argument("-ml", "--multilook", dest="multi", nargs="+", action="store", - help=""""Set the range and azimuth (in this order) you want - for the multilook. Default is 3 3""", default='3' '3') args = parser.parse_args() print(args.configfile) func_utils.init_logger() - dataConfig = func_utils.load_configfile(args.configfile, "S1_IW") + dataConfig = func_utils.load_configfile(args.configfile, "multi_SW") - # ================================= - # Get elements from user's arguments - # ================================= - - # ====== Set the variables names - iso_start, iso_end = func_utils.argDates_to_isoDates(args.start_date, args.end_date) - start_time = int(args.start_date) - end_time = int(args.end_date) - master_Image_base = args.master - master_Image = func_utils.get_imgFromSAFE(args.master) - master_date = master_Image_base.split("-")[4].split("t")[0] - pol = master_Image_base.split("-")[3] - iw = master_Image_base.split("-")[1] - burst_index = args.burst - print(burst_index)############################################################################### - exclude = args.exclude - version_interferogram = args.interferogram - light_version = args.light - manifest = master_Image.split("measurement")[0]+"/manifest.safe" - relative_orbit = func_utils.get_relative_orbit(manifest) - ortho_interferogram = args.ortho - roi = args.roi - if roi: - ortho_interferogram = "yes" - print("ortho_interferogram", ortho_interferogram) - ram = args.optram - spacingxy = args.spacingxy - rng,azi = args.multi - # ==================================== # Get elements from configuration file # ==================================== @@ -156,15 +86,55 @@ if __name__ == "__main__": dict_PreProcessing = dataConfig['Pre_Processing'] dict_Ground = dataConfig['Ground'] dict_DInSAR = dataConfig['DIn_SAR'] - # ====== Get elements from dictionaries # ====== Global - srtm_shapefile = dict_Global['in']['SRTMShapefile'] - hgts_path = dict_Global['in']['Datalake'] + srtm_shapefile = dict_Global['in']['SRTM_Shapefile'] + hgts_path = dict_Global['in']['SRTM_Path'] geoid_path = dict_Global['in']['Geoid'] + output_dir = dict_Global['out']['Output_Path'] + + if not os.path.exists(output_dir): + print("The output directory does not exist and will be created") + os.makedirs(output_dir) + else : + print("The output directory exists. Some files can be overwritten") + + # ====== Set the variables names + iso_start, iso_end = func_utils.argDates_to_isoDates(dict_Global['in']['Start_Date'], dict_Global['in']['End_Date']) + start_time = int(dict_Global['in']['Start_Date']) + end_time = int(dict_Global['in']['End_Date']) + master_Image_base = dict_Global['in']['Master_Image'] + master_Image = func_utils.get_imgFromSAFE(dict_Global['in']['Master_Image'], dict_Global['in']['Input_Path']) + master_date = master_Image_base.split("-")[4].split("t")[0] + pol = master_Image_base.split("-")[3] + iw = master_Image_base.split("-")[1] + burst_index = "0-8" + ram = 4000 + light_version = "yes" + if 'parameter' in dict_Global: + if 'optram' in dict_Global['parameter']: + ram = dict_Global['parameter']['optram'] + if 'clean' in dict_Global['parameter']: + light_version = dict_Global['parameter']['clean'] + if 'burst_index' in dict_Global['parameter']: + burst_index = dict_Global['parameter']['burst_index'] + light_version = func_utils.str2bool(light_version) + print(burst_index)############################################################################### + exclude = "-9999" + if 'Exclude' in dict_Global['in']: + exclude = dict_Global['in']['Exclude'] + manifest = master_Image.split("measurement")[0]+"/manifest.safe" + relative_orbit = func_utils.get_relative_orbit(manifest) + # ====== Pre_Processing + rng = 3 + azi = 3 + if "ML_ran" in dict_PreProcessing['parameter']: + rng = dict_PreProcessing['parameter'].get('ML_ran') + if "ML_azi" in dict_PreProcessing['parameter']: + azi = dict_PreProcessing['parameter'].get('ML_azi') ml_range = int(rng) ml_azimut = int(azi) ml_gain = dict_PreProcessing['parameter']['ML_gain'] @@ -173,6 +143,21 @@ if __name__ == "__main__": # ====== Ground # ====== DIn_SAR + version_interferogram = "yes" + if "Activate_Interferogram" in dict_DInSAR['parameter']: + version_interferogram = dict_DInSAR['parameter']['Activate_Interferogram'] + ortho_interferogram = None + if 'Activate_Ortho' in dict_DInSAR['parameter']: + ortho_interferogram = dict_DInSAR['parameter']['Activate_Ortho'] + roi = None + if 'roi' in dict_DInSAR['parameter']: + roi = dict_DInSAR['parameter']['roi'] + if roi: + ortho_interferogram = "yes" + print("ortho_interferogram", ortho_interferogram) + spacingxy = 0.0001 + if "Spacingxy" in dict_DInSAR['parameter']: + spacingxy = dict_DInSAR['parameter']['Spacingxy'] geoGrid_gridstep_range = dict_DInSAR['parameter']['GridStep_range'] geoGrid_gridstep_azimut = dict_DInSAR['parameter']['GridStep_azimut'] geoGrid_threshold = dict_DInSAR['parameter']['Grid_Threshold'] @@ -180,6 +165,10 @@ if __name__ == "__main__": ml_geoGrid_range = int(rng) ml_geoGrid_azimut = int(azi) gain_interfero = dict_DInSAR['parameter']['Interferogram_gain'] + esd_NbIter = 0 + esd_AutoMode = "none" + if 'ESD_iter' in dict_DInSAR['parameter']: + esd_NbIter, esd_AutoMode = dict_DInSAR['parameter']['ESD_iter'] # ====== Check Threshold if (geoGrid_threshold < 0) or (geoGrid_threshold > 1) : @@ -196,8 +185,8 @@ if __name__ == "__main__": print("from check regex",firstBurst, lastBurst)########################################################### # ====== Create global folder with starting and ending dates + master date - output_glob = "./output_{}_to_{}_m_{}".format(start_time, end_time, - master_date) + output_glob = "{}/output_{}_to_{}_m_{}".format(output_dir, start_time, + end_time, master_date) if os.path.exists(output_glob): shutil.rmtree(output_glob) if not os.path.exists(output_glob): @@ -205,7 +194,8 @@ if __name__ == "__main__": # ====== Create Digital Elevation Model dem, target_dir = func_utils.build_virutal_raster(master_Image, start_time, end_time, - master_date, srtm_shapefile, hgts_path) + master_date, srtm_shapefile, hgts_path, + output_dir) print("\n Removing master_image_envelope shp files...\n") for i in os.listdir(target_dir): if i.startswith("master_envelope"): @@ -219,9 +209,17 @@ if __name__ == "__main__": # Recap of input parameter into info.log func_utils.log(logging.INFO, "########### Input Parameters for the current execution ############## ") func_utils.log(logging.INFO, " Global : ") + func_utils.log(logging.INFO, "Input_Path : {param}".format(param=dict_Global['in']['Input_Path'])) + func_utils.log(logging.INFO, "Master_Image : {param}".format(param=master_Image_base)) + func_utils.log(logging.INFO, "Start_Date : {param}".format(param=start_time)) + func_utils.log(logging.INFO, "End_Date : {param}".format(param=end_time)) func_utils.log(logging.INFO, "srtm_shapefile : {param}".format(param=srtm_shapefile)) func_utils.log(logging.INFO, "hgts_path : {param}".format(param=hgts_path)) func_utils.log(logging.INFO, "geoid_path : {param}".format(param=geoid_path)) + func_utils.log(logging.INFO, "optram : {param}".format(param=ram)) + func_utils.log(logging.INFO, "clean : {param}".format(param=light_version)) + func_utils.log(logging.INFO, "burst_index : {param}".format(param=burst_index)) + func_utils.log(logging.INFO, "Exclude : {param}".format(param=exclude)) func_utils.log(logging.INFO, " Pre_Processing : ") func_utils.log(logging.INFO, "ml_range : {param}".format(param=ml_range)) @@ -237,20 +235,25 @@ if __name__ == "__main__": func_utils.log(logging.INFO, "ml_geoGrid_range : {param}".format(param=ml_geoGrid_range)) func_utils.log(logging.INFO, "ml_geoGrid_azimut : {param}".format(param=ml_geoGrid_azimut)) func_utils.log(logging.INFO, "gain_interfero : {param}".format(param=gain_interfero)) - + func_utils.log(logging.INFO, "Activate_Interferogram : {param}".format(param=version_interferogram)) + func_utils.log(logging.INFO, "Activate_Ortho : {param}".format(param=ortho_interferogram)) + func_utils.log(logging.INFO, "roi : {param}".format(param=roi)) + func_utils.log(logging.INFO, "Spacingxy : {param}".format(param=spacingxy)) + func_utils.log(logging.INFO, "esd_NbIter : {param}".format(param=esd_NbIter)) + func_utils.log(logging.INFO, "esd_AutoMode : {param}".format(param=esd_AutoMode)) # ============================ # Get the elements from os.dirs # ============================ - tiff_list = func_utils.get_AllTiff(pol, iw) + tiff_list = func_utils.get_AllTiff(pol, iw, searchDir=dict_Global["in"]["Input_Path"]) tiff_dates = func_utils.get_Tiff_WithDates(start_time, end_time, exclude, tiff_list) counter = 0 for i in (i for i in tiff_dates if i != master_Image_base): total_slaves = len(tiff_dates)-1 slave_Image_base = i - slave_Image = func_utils.get_imgFromSAFE(slave_Image_base) + slave_Image = func_utils.get_imgFromSAFE(slave_Image_base, searchDir=dict_Global["in"]["Input_Path"]) slave_date = func_utils.get_Date(i) counter += 1 output_dir = output_glob + "/{}_m_{}_s".format(master_date, slave_date) @@ -370,7 +373,7 @@ if __name__ == "__main__": # Master deramp - if light_version == "no": + if light_version is not True: masterDeramp = os.path.splitext(master_Image_base)[0]+"_deramp.tif" Con_masterDeramp = os.path.join(master_data_dir, masterDeramp) diapOTBApp.concatenate(Deramp_BurstToConcatenateM, master_Image, firstBurst, Con_masterDeramp) @@ -391,7 +394,7 @@ if __name__ == "__main__": # ###### Concatenating and georeferencing bursts ###### # # Slave Deramp - if light_version == "no": + if light_version is not True: Con_slaveDeramp = os.path.splitext(master_Image_base)[0] + "_deramp.tif" diapOTBApp.concatenate(Deramp_BurstToConcatenateS, slave_Image, firstBurst, Con_slaveDeramp) @@ -447,8 +450,8 @@ if __name__ == "__main__": param['doppler0'] = dop0Slave param['gain_interfero'] = gain_interfero param['advantage'] = "projection" # By default projection - param['esd_NbIter'] = 0 - param['esd_AutoMode'] = "none" + param['esd_NbIter'] = esd_NbIter + param['esd_AutoMode'] = esd_AutoMode param['with_interferogram'] = version_interferogram param['with_concatenate'] = "no" diff --git a/python_src/utils/func_utils.py b/python_src/utils/func_utils.py index 21b869c133a03869ef3df767d8c75fae97e3a246..62efd84defb6b707482d358b95405b7ec16b91e8 100644 --- a/python_src/utils/func_utils.py +++ b/python_src/utils/func_utils.py @@ -156,9 +156,14 @@ def load_configfile(configfile, mode="Others"): schema_json = "schema_S1SM.json" if mode == "S1_IW": schema_json = "schema_S1IW.json" + elif mode == "multi_S1": + schema_json = "schema_MultiSlc.json" + elif mode == "multi_SW": + schema_json = "schema_MultiSlc_IW.json" # Load schema (into DiapOTB install) diapOTB_install = os.getenv('DIAPOTB_INSTALL') + if diapOTB_install is not None and os.path.exists(diapOTB_install): schemas_path = os.path.join(diapOTB_install, "json_schemas") if os.path.exists(schemas_path): @@ -221,27 +226,25 @@ def getDEMInformation(dem): ### Functions for image/file selection -def get_imgFromSAFE(arg): +def get_imgFromSAFE(arg, searchDir="."): """ Retrive selected image from a SAFE directory """ img = [] - for root, dirs, files in os.walk("."): + for root, dirs, files in os.walk(searchDir): for i in (i for i in files if i == arg): - img.append(os.path.join(os.getcwd()+root.split(".")[1] + - ".SAFE/measurement/"+(i))) + img.append(os.path.join(root, i)) img = str("".join(img)) return img -def get_imgFromDir(arg): +def get_imgFromDir(arg, searchDir="."): """ Retrive selected image from a directory (for Cosmo sensor) """ img = [] - for root, dirs, files in os.walk("."): + for root, dirs, files in os.walk(searchDir): for i in (i for i in files if i == arg): - img.append(os.path.join(os.getcwd()+root.split(".")[1] + - "/"+(i))) + img.append(os.path.join(root, i)) img = str("".join(img)) return img @@ -286,27 +289,27 @@ def check_srtm_coverage(inSHP_Geometry, SRTM): needed_srtm_tiles = srtm_tiles return needed_srtm_tiles -def get_AllTiff(pol, iw="", ext=""): +def get_AllTiff(pol, iw="", ext="", searchDir="."): """ Get all tiff from an input directory """ TiffList = [] if not iw == "" : - for root, dirs, files in os.walk("."): + for root, dirs, files in os.walk(searchDir): for i in (i for i in files): # if i != inTIF): if i.endswith(".tiff") and pol == i.split("-")[3]: if iw == i.split("-")[1]: TiffList.append(i) else : if ext == "h5": - for root, dirs, files in os.walk("."): + for root, dirs, files in os.walk(searchDir): for i in (i for i in files): # if i != inTIF): if i.endswith(".h5") and pol == i.split("_")[5]: TiffList.append(i) if not ext == "h5": - for root, dirs, files in os.walk("."): + for root, dirs, files in os.walk(searchDir): for i in (i for i in files): # if i != inTIF): if i.endswith(".tiff") and pol == i.split("-")[3]: TiffList.append(i) @@ -359,7 +362,7 @@ def get_relative_orbit(manifest): return int(root.find("metadataSection/metadataObject/metadataWrap/xmlData/{http://www.esa.int/safe/sentinel-1.0}orbitReference/{http://www.esa.int/safe/sentinel-1.0}relativeOrbitNumber").text) def build_virutal_raster(master_Image, start_time, end_time, master_date, - srtm_shapefile, hgts_path): + srtm_shapefile, hgts_path, output_dir="."): """ Build a vrt file corresponding to a dem from hgt (SRTM) files. The hgt file are contained into a global path : hgts_path @@ -377,10 +380,10 @@ def build_virutal_raster(master_Image, start_time, end_time, master_date, hgts_tuple.append(hgts_path + hgt) print("\n Creating virtual raster from intersected hgt files...\n") - dem = gdal.BuildVRT("./output_{}_to_{}_m_{}/dem_scene.vrt".format( - start_time, end_time, master_date), hgts_tuple) - dem = "./output_{}_to_{}_m_{}/dem_scene.vrt".format(start_time, end_time, - master_date) + dem = gdal.BuildVRT("{}/output_{}_to_{}_m_{}/dem_scene.vrt".format( + output_dir, start_time, end_time, master_date), hgts_tuple) + dem = "{}/output_{}_to_{}_m_{}/dem_scene.vrt".format(output_dir, start_time, + end_time, master_date) return dem, target_dir def argDates_to_isoDates(start_date, end_date):