Source code for crtomo.status

"""

"""
import os
import re
import glob


[docs] def is_tomodir(directory): """Check if the supplied directory is a tomodir Parameters ---------- directory: string Check if the supplied path is a valid tomodir Returns ------- is_tomodir: bool True if the supplied directory is a tomodir directory """ if os.path.isdir(directory): if(os.path.isdir( directory + "/exe") and os.path.isdir( directory + "/config") and os.path.isdir( directory + "/rho") and os.path.isdir( directory + "/inv") and os.path.isdir( directory + "/mod")): return True else: return False else: return False
[docs] def td_is_finished(tomodir): """Return the state of modeling and inversion for a given tomodir. The result does not take into account sensitivities or potentials, as optionally generated by CRMod. Parameters ---------- tomodir : string Directory to check Returns ------- crmod_is_finished : bool True if a successful CRMod result is contained in the tomodir directory. crtomo_is_finished : bool True if a successful CRTomo inversion results is contained in the tomodir directory. """ if not is_tomodir(tomodir): raise Exception('Supplied directory is not a tomodir!') # crmod finished is determined by: # config.dat/rho.dat/crmod.cfg are present # volt.dat is present if(os.path.isfile(tomodir + os.sep + 'config/config.dat') and os.path.isfile(tomodir + os.sep + 'rho/rho.dat') and os.path.isfile(tomodir + os.sep + 'grid/elem.dat') and os.path.isfile(tomodir + os.sep + 'grid/elec.dat') and os.path.isfile(tomodir + os.sep + 'exe/crmod.cfg') and os.path.isfile(tomodir + os.sep + 'mod/volt.dat')): crmod_is_finished = True else: crmod_is_finished = False # crtomo is finished if # crtomo.cfg/volt.dat/elem.dat/elec.dat are present # inv/run.ctr contains the word "CPU" in the last line if(os.path.isfile(tomodir + os.sep + 'grid/elem.dat') and os.path.isfile(tomodir + os.sep + 'grid/elec.dat') and os.path.isfile(tomodir + os.sep + 'exe/crtomo.cfg') and os.path.isfile(tomodir + os.sep + 'inv/inv.ctr') and os.path.isfile(tomodir + os.sep + 'inv/run.ctr') and os.path.isfile(tomodir + os.sep + 'mod/volt.dat')): with open(tomodir + os.sep + 'inv/run.ctr', 'r') as fid: lines = fid.readlines() crtomo_is_finished = False # check the last 5 lines for line in lines[-5:]: test_line = line.strip() regex = re.compile('CPU') result = regex.match(test_line) if result is not None: crtomo_is_finished = True else: crtomo_is_finished = False return crmod_is_finished, crtomo_is_finished
[docs] def is_sipdir(directory): """ Simple check if the supplied directory is a SIP directory. Parameters ---------- directory: string Check if the supplied path is a valid SIP directory Returns ------- is_sipdir: bool True if the supplied directory is a SIP directory """ is_sipdir = True if(not os.path.isfile(directory + os.sep + 'frequencies.dat')): is_sipdir = False if(not os.path.isdir(directory + os.sep + 'invmod')): is_sipdir = False return is_sipdir
[docs] def seitdir_is_finished(seitdir): return sipdir_is_finished(seitdir)
[docs] def sipdir_is_finished(sipdir): """Return the state of modeling and inversion for a given SIP dir. The result does not take into account sensitivities or potentials, as optionally generated by CRMod. Parameters ---------- sipdir: string Directory to check Returns ------- crmod_is_finished: bool True if all tomodirs of this SIP directory contain finished modeling results. crtomo_is_finished: bool True if all tomodirs of this SIP directory contain finished inversion results. """ if not is_sipdir(sipdir): raise Exception('Directory is not a valid SIP directory!') subdirs_raw = sorted(glob.glob(sipdir + os.sep + 'invmod' + os.sep + '*')) subdirs = [x for x in subdirs_raw if os.path.isdir(x)] crmod_finished = True crtomo_finished = True for subdir in subdirs: subcrmod, subcrtomo = td_is_finished(subdir) if not subcrmod: crmod_finished = False if not subcrtomo: crtomo_finished = False return crmod_finished, crtomo_finished