def startup(self): """The starting point of the workflow. It runs everytime. It 1) grab project name if given 2) grab and go to work directory 3) get and read template(s) options """ #1. Get projectName self.projectName = None if self.customTemplateFile: self.projectName = os.path.splitext( os.path.basename(self.customTemplateFile))[0] print('Project name:', self.projectName) #2. Go to the work directory #2.1 Get workDir if not self.workDir: if autoPath and 'SCRATCHDIR' in os.environ and self.projectName: self.workDir = os.path.join(os.getenv('SCRATCHDIR'), self.projectName, 'mintpy') else: self.workDir = os.getcwd() self.workDir = os.path.abspath(self.workDir) #2.2 Go to workDir if not os.path.isdir(self.workDir): os.makedirs(self.workDir) print('create directory:', self.workDir) os.chdir(self.workDir) print("Go to work directory:", self.workDir) #3. Read templates #3.1 Get default template file lfile = os.path.join(os.path.dirname(__file__), 'defaults/smallbaselineApp.cfg') #latest version cfile = os.path.join(self.workDir, 'smallbaselineApp.cfg') #current version if not os.path.isfile(cfile): print('copy default template file {} to work directory'.format( lfile)) shutil.copy2(lfile, self.workDir) else: #cfile is obsolete if any key is missing ldict = readfile.read_template(lfile) cdict = readfile.read_template(cfile) if any([key not in cdict.keys() for key in ldict.keys()]): print( 'obsolete default template detected, update to the latest version.' ) shutil.copy2(lfile, self.workDir) #keep the existing option value from obsolete template file ut.update_template_file(cfile, cdict) self.templateFile = cfile # 3.2 read (custom) template files into dicts self._read_template() return
def startup(self): """The starting point of the workflow. It runs everytime. It 1) grab project name if given 2) grab and go to work directory 3) get and read template(s) options """ #1. Get projectName self.projectName = None if self.customTemplateFile: self.projectName = os.path.splitext(os.path.basename(self.customTemplateFile))[0] print('Project name:', self.projectName) #2. Go to the work directory #2.1 Get workDir if not self.workDir: if autoPath and 'SCRATCHDIR' in os.environ and self.projectName: self.workDir = os.path.join(os.getenv('SCRATCHDIR'), self.projectName, 'mintpy') else: self.workDir = os.getcwd() self.workDir = os.path.abspath(self.workDir) #2.2 Go to workDir if not os.path.isdir(self.workDir): os.makedirs(self.workDir) print('create directory:', self.workDir) os.chdir(self.workDir) print("Go to work directory:", self.workDir) #3. Read templates #3.1 Get default template file lfile = os.path.join(os.path.dirname(__file__), 'defaults/smallbaselineApp.cfg') #latest version cfile = os.path.join(self.workDir, 'smallbaselineApp.cfg') #current version if not os.path.isfile(cfile): print('copy default template file {} to work directory'.format(lfile)) shutil.copy2(lfile, self.workDir) else: #cfile is obsolete if any key is missing ldict = readfile.read_template(lfile) cdict = readfile.read_template(cfile) if any([key not in cdict.keys() for key in ldict.keys()]): print('obsolete default template detected, update to the latest version.') shutil.copy2(lfile, self.workDir) #keep the existing option value from obsolete template file ut.update_template_file(cfile, cdict) self.templateFile = cfile # 3.2 read (custom) template files into dicts self._read_template() return
def get_the_latest_default_template_file(work_dir): """Get the latest version of default template file. If an obsolete file exists in the working directory, the existing option values are kept. """ lfile = os.path.join(os.path.dirname(__file__), 'defaults/smallbaselineApp.cfg') #latest version cfile = os.path.join(work_dir, 'smallbaselineApp.cfg') #current version if not os.path.isfile(cfile): print('copy default template file {} to work directory'.format(lfile)) shutil.copy2(lfile, work_dir) else: #cfile is obsolete if any key is missing ldict = readfile.read_template(lfile) cdict = readfile.read_template(cfile) if any([key not in cdict.keys() for key in ldict.keys()]): print('obsolete default template detected, update to the latest version.') shutil.copy2(lfile, work_dir) #keep the existing option value from obsolete template file ut.update_template_file(cfile, cdict) return cfile
def _read_template_minopy(self): if self.org_custom_template: # Update default template file based on custom template print('update default template based on input custom template') self.templateFile = ut.update_template_file( self.templateFile, self.customTemplate) # 2) backup custome/default template file in inputs/pic folder for backup_dirname in ['inputs']: backup_dir = os.path.join(self.workDir, backup_dirname) # create directory os.makedirs(backup_dir, exist_ok=True) # back up to the directory for tfile in [self.org_custom_template, self.templateFile]: if tfile and ut.run_or_skip(out_file=os.path.join( backup_dir, os.path.basename(tfile)), in_file=tfile, check_readable=False, print_msg=False) == 'run': shutil.copy2(tfile, backup_dir) print('copy {} to {:<8} directory for backup.'.format( os.path.basename(tfile), os.path.basename(backup_dir))) # 3) read default template file print('read default template file:', self.templateFile) self.template = readfile.read_template(self.templateFile) auto_template_file = os.path.join(os.path.dirname(__file__), 'defaults/minopyApp_auto.cfg') self.template = check_template_auto_value( self.template, self.template_mintpy, auto_file=auto_template_file, templateFile=self.templateFile) return
def _read_template(self): # read custom template, to: # 1) update default template # 2) add metadata to ifgramStack file and HDF-EOS5 file self.customTemplate = None if self.customTemplateFile: cfile = self.customTemplateFile # Copy custom template file to inputs directory for backup inputs_dir = os.path.join(self.workDir, 'inputs') if not os.path.isdir(inputs_dir): os.makedirs(inputs_dir) print('create directory:', inputs_dir) if ut.run_or_skip(out_file=os.path.join(inputs_dir, os.path.basename(cfile)), in_file=cfile, check_readable=False) == 'run': shutil.copy2(cfile, inputs_dir) print('copy {} to inputs directory for backup.'.format( os.path.basename(cfile))) # Read custom template print('read custom template file:', cfile) cdict = readfile.read_template(cfile) # correct some loose type errors standardValues = { 'def': 'auto', 'default': 'auto', 'y': 'yes', 'on': 'yes', 'true': 'yes', 'n': 'no', 'off': 'no', 'false': 'no' } for key, value in cdict.items(): if value in standardValues.keys(): cdict[key] = standardValues[value] for key in ['mintpy.deramp', 'mintpy.troposphericDelay.method']: if key in cdict.keys(): cdict[key] = cdict[key].lower().replace('-', '_') if 'processor' in cdict.keys(): cdict['mintpy.load.processor'] = cdict['processor'] # these metadata are used in load_data.py only, not needed afterwards # (in order to manually add extra offset when the lookup table is shifted) # (seen in ROI_PAC product sometimes) for key in ['SUBSET_XMIN', 'SUBSET_YMIN']: if key in cdict.keys(): cdict.pop(key) self.customTemplate = dict(cdict) # Update default template file based on custom template print('update default template based on input custom template') self.templateFile = ut.update_template_file( self.templateFile, self.customTemplate) print('read default template file:', self.templateFile) self.template = readfile.read_template(self.templateFile) self.template = ut.check_template_auto_value(self.template) # correct some loose setup conflicts if self.template['mintpy.geocode'] is False: for key in ['mintpy.save.hdfEos5', 'mintpy.save.kmz']: if self.template[key] is True: self.template['mintpy.geocode'] = True print('Turn ON mintpy.geocode in order to run {}.'.format( key)) break return
def startup(self): """The starting point of the workflow. It runs everytime. It 1) grab project name if given 2) grab and go to work directory 3) get and read template(s) options 4) get plot shell script to work directory """ #1. Get projectName self.projectName = None if self.customTemplateFile: self.projectName = os.path.splitext( os.path.basename(self.customTemplateFile))[0] print('Project name:', self.projectName) #2. Go to the work directory #2.1 Get workDir if not self.workDir: if autoPath and 'SCRATCHDIR' in os.environ and self.projectName: self.workDir = os.path.join(os.getenv('SCRATCHDIR'), self.projectName, 'mintpy') else: self.workDir = os.getcwd() self.workDir = os.path.abspath(self.workDir) #2.2 Go to workDir if not os.path.isdir(self.workDir): os.makedirs(self.workDir) print('create directory:', self.workDir) os.chdir(self.workDir) print("Go to work directory:", self.workDir) #3. Read templates #3.1 Get default template file lfile = os.path.join(os.path.dirname(__file__), 'defaults/smallbaselineApp.cfg') #latest version cfile = os.path.join(self.workDir, 'smallbaselineApp.cfg') #current version if not os.path.isfile(cfile): print('copy default template file {} to work directory'.format( lfile)) shutil.copy2(lfile, self.workDir) else: #cfile is obsolete if any key is missing ldict = readfile.read_template(lfile) cdict = readfile.read_template(cfile) if any([key not in cdict.keys() for key in ldict.keys()]): print( 'obsolete default template detected, update to the latest version.' ) shutil.copy2(lfile, self.workDir) #keep the existing option value from obsolete template file ut.update_template_file(cfile, cdict) self.templateFile = cfile # 3.2 read (custom) template files into dicts self._read_template() # 4. Copy the plot shell file sh_file = os.path.join(os.path.dirname(__file__), '../sh/plot_smallbaselineApp.sh') def grab_latest_update_date(fname, prefix='# Latest update:'): try: lines = open(fname, 'r').readlines() line = [i for i in lines if prefix in i][0] t = re.findall('\d{4}-\d{2}-\d{2}', line)[0] t = datetime.datetime.strptime(t, '%Y-%m-%d') except: t = datetime.datetime.strptime( '2010-01-01', '%Y-%m-%d') #a arbitrary old date return t # 1) copy to work directory (if not existed yet). if not os.path.isfile(os.path.basename(sh_file)): print('copy {} to work directory: {}'.format( sh_file, self.workDir)) shutil.copy2(sh_file, self.workDir) # 2) copy to work directory (if obsolete file detected) and rename the existing one elif grab_latest_update_date( os.path.basename(sh_file)) < grab_latest_update_date(sh_file): os.system( 'mv {f} {f}_obsolete'.format(f=os.path.basename(sh_file))) print('obsolete shell file detected, renamed it to: {}_obsolete'. format(os.path.basename(sh_file))) print('copy {} to work directory: {}'.format( sh_file, self.workDir)) shutil.copy2(sh_file, self.workDir) self.plot_sh_cmd = './' + os.path.basename(sh_file) return
def _read_template(self): # 1) update default template self.customTemplate = None if self.customTemplateFile: # customTemplateFile --> customTemplate print('read custom template file:', self.customTemplateFile) cdict = readfile.read_template(self.customTemplateFile) # correct some loose type errors standardValues = {'def':'auto', 'default':'auto', 'y':'yes', 'on':'yes', 'true':'yes', 'n':'no', 'off':'no', 'false':'no' } for key, value in cdict.items(): if value in standardValues.keys(): cdict[key] = standardValues[value] for key in ['mintpy.deramp', 'mintpy.troposphericDelay.method']: if key in cdict.keys(): cdict[key] = cdict[key].lower().replace('-', '_') if 'processor' in cdict.keys(): cdict['mintpy.load.processor'] = cdict['processor'] # these metadata are used in load_data.py only, not needed afterwards # (in order to manually add extra offset when the lookup table is shifted) # (seen in ROI_PAC product sometimes) for key in ['SUBSET_XMIN', 'SUBSET_YMIN']: if key in cdict.keys(): cdict.pop(key) self.customTemplate = dict(cdict) # customTemplate --> templateFile print('update default template based on input custom template') self.templateFile = ut.update_template_file(self.templateFile, self.customTemplate) # 2) backup custome/default template file in inputs/pic folder for backup_dirname in ['inputs', 'pic']: backup_dir = os.path.join(self.workDir, backup_dirname) # create directory os.makedirs(backup_dir, exist_ok=True) # back up to the directory for tfile in [self.customTemplateFile, self.templateFile]: if tfile and ut.run_or_skip(out_file=os.path.join(backup_dir, os.path.basename(tfile)), in_file=tfile, check_readable=False, print_msg=False) == 'run': shutil.copy2(tfile, backup_dir) print('copy {} to {} directory for backup.'.format(os.path.basename(tfile), os.path.basename(backup_dir))) # 3) read default template file print('read default template file:', self.templateFile) self.template = readfile.read_template(self.templateFile) self.template = ut.check_template_auto_value(self.template) # correct some loose setup conflicts if self.template['mintpy.geocode'] is False: for key in ['mintpy.save.hdfEos5', 'mintpy.save.kmz']: if self.template[key] is True: self.template['mintpy.geocode'] = True print('Turn ON mintpy.geocode in order to run {}.'.format(key)) break return
def _read_template(self): # read custom template, to: # 1) update default template # 2) add metadata to ifgramStack file and HDF-EOS5 file self.customTemplate = None if self.customTemplateFile: cfile = self.customTemplateFile # Copy custom template file to inputs directory for backup inputs_dir = os.path.join(self.workDir, 'inputs') if not os.path.isdir(inputs_dir): os.makedirs(inputs_dir) print('create directory:', inputs_dir) if ut.run_or_skip(out_file=os.path.join(inputs_dir, os.path.basename(cfile)), in_file=cfile, check_readable=False) == 'run': shutil.copy2(cfile, inputs_dir) print('copy {} to inputs directory for backup.'.format(os.path.basename(cfile))) # Read custom template print('read custom template file:', cfile) cdict = readfile.read_template(cfile) # correct some loose type errors standardValues = {'def':'auto', 'default':'auto', 'y':'yes', 'on':'yes', 'true':'yes', 'n':'no', 'off':'no', 'false':'no' } for key, value in cdict.items(): if value in standardValues.keys(): cdict[key] = standardValues[value] for key in ['mintpy.deramp', 'mintpy.troposphericDelay.method']: if key in cdict.keys(): cdict[key] = cdict[key].lower().replace('-', '_') if 'processor' in cdict.keys(): cdict['mintpy.load.processor'] = cdict['processor'] # these metadata are used in load_data.py only, not needed afterwards # (in order to manually add extra offset when the lookup table is shifted) # (seen in ROI_PAC product sometimes) for key in ['SUBSET_XMIN', 'SUBSET_YMIN']: if key in cdict.keys(): cdict.pop(key) self.customTemplate = dict(cdict) # Update default template file based on custom template print('update default template based on input custom template') self.templateFile = ut.update_template_file(self.templateFile, self.customTemplate) print('read default template file:', self.templateFile) self.template = readfile.read_template(self.templateFile) self.template = ut.check_template_auto_value(self.template) # correct some loose setup conflicts if self.template['mintpy.geocode'] is False: for key in ['mintpy.save.hdfEos5', 'mintpy.save.kmz']: if self.template[key] is True: self.template['mintpy.geocode'] = True print('Turn ON mintpy.geocode in order to run {}.'.format(key)) break return