Exemple #1
0
 def inv_to_surf96reader(self, d):
     values = self.inv(d)
     return surf96reader_from_arrays(waves=self.waves,
                                     types=self.types,
                                     modes=self.modes,
                                     freqs=self.freqs,
                                     values=values,
                                     dvalues=self.dvalues)
Exemple #2
0
    def getpack(self, *args, **kwargs):
        """
        same as get except that
            - depth model are packed into a depthmodel object
            - dispersion curves are packed into a surf96reader object
        output :
            item = (MODELID, WEIGHT, LLK, NLAYER, dm, sr)
            dm = depthmodel
            sr = surf96reader
        """
        for MODELID, CHAINID, WEIGHT, LLK, NLAYER, (Z, VP, VS, RH), (W, T, M, F, DV) in \
            self.get(*args, **kwargs):

            dm = depthmodel_from_arrays(Z, VP, VS, RH)
            sr = surf96reader_from_arrays(W, T, M, F, DV, None)
            yield MODELID, CHAINID, WEIGHT, LLK, NLAYER, dm, sr
def _extract_pdf(rootname, extract_mode, extract_limit, extract_llkmin, extract_step, verbose, percentiles, mapkwargs):
    """private"""
    percentiles = np.array(percentiles, float)
    assert len(np.unique(percentiles)) == len(percentiles)
    assert np.all(0 < percentiles)
    assert np.all(1 > percentiles)
    assert np.all(percentiles[1:] > percentiles[:-1])

    runfile = "%s/_HerrMet.run" % rootname
    with RunFile(runfile, verbose=verbose) as rundb:
        print "extract : llkmin %f, limit %d, step %d" % (extract_llkmin, extract_limit, extract_step),
        if extract_mode == "best":
            chainids, weights, llks, ms, ds = \
                rundb.getzip(limit=extract_limit,
                             llkmin=extract_llkmin,
                             step=extract_step,
                             algo="METROPOLIS")
        elif extract_mode == "last":
            chainids, weights, llks, ms, ds = \
                rundb.getlastszip(limit=extract_limit,
                                  llkmin=extract_llkmin,
                                  step=extract_step,
                                  algo="METROPOLIS")
        else:
            raise Exception('unexpected extract mode %s' % extract_mode)

    dms = [depthmodel_from_arrays(ztop, vp, vs, rh) for ztop, vp, vs, rh in ms]
    for p, (vppc, vspc, rhpc, prpc) in \
            dmstats1(dms,
                     percentiles=percentiles,
                     Ndepth=100,
                     Nvalue=100,
                     weights=weights,
                     **mapkwargs):
        try:
            dmout = depthmodel(vppc, vspc, rhpc)
            out = '%s/_HerrMet.p%.2f.mod96' % (rootname, p)
            if verbose:
                print "writing %s" % out
            dmout.write96(out)  # , overwrite=True)
        except KeyboardInterrupt:
            raise
        except Exception as e:
            print "Error", str(e)

    for p in percentiles:
        out = '%s/_HerrMet.p%.2f.surf96' % (rootname, p)
        os.system('trash %s' % out)
    for p, (wpc, tpc, mpc, fpc, vpc) in \
            dispstats(ds,
                      percentiles=percentiles,
                      Ndisp=100,
                      weights=weights,
                      **mapkwargs):
        try:
            srout = surf96reader_from_arrays(wpc, tpc, mpc, fpc, vpc)
            out = '%s/_HerrMet.p%.2f.surf96' % (rootname, p)
            if verbose:
                print "writing to %s" % out
            with open(out, 'a') as fid:
                fid.write(srout.__str__())
                fid.write('\n')
        except KeyboardInterrupt:
            raise
        except Exception as e:
            print "Error", str(e)
Exemple #4
0
def _extract_pdf(rootname, extract_mode, extract_limit, extract_llkmin,
                 extract_step, verbose, percentiles, mapkwargs):
    """private"""
    percentiles = np.array(percentiles, float)
    assert len(np.unique(percentiles)) == len(percentiles)
    assert np.all(0 < percentiles)
    assert np.all(1 > percentiles)
    assert np.all(percentiles[1:] > percentiles[:-1])

    for p in percentiles:
        extract_disp_file = EXTRACTDISPFILE.format(
            rootname=rootname,
            extract_mode=extract_mode,
            extract_limit=extract_limit,
            extract_llkmin=extract_llkmin,
            extract_step=extract_step,
            percentile=p)
        extract_model_file = EXTRACTMODELFILE.format(
            rootname=rootname,
            extract_mode=extract_mode,
            extract_limit=extract_limit,
            extract_llkmin=extract_llkmin,
            extract_step=extract_step,
            percentile=p)
        if os.path.isfile(extract_disp_file) and os.path.isfile(
                extract_model_file):
            continue
        break
    else:
        # did not break => means all files exist already
        print('found existing extraction files in {}, skip'.format(rootname))
        return

    try:
        runfile = _find_runfile(rootname)
    except IOError:
        return

    with RunFile(runfile, verbose=verbose) as rundb:
        print "extract : llkmin %f, limit %d, step %d" % (
            extract_llkmin, extract_limit, extract_step),
        if extract_mode == "best":
            chainids, weights, llks, ms, ds = \
                rundb.getzip(limit=extract_limit,
                             llkmin=extract_llkmin,
                             step=extract_step,
                             algo="METROPOLIS")
        elif extract_mode == "last":
            chainids, weights, llks, ms, ds = \
                rundb.getlastszip(limit=extract_limit,
                                  llkmin=extract_llkmin,
                                  step=extract_step,
                                  algo="METROPOLIS")
        else:
            raise Exception('unexpected extract mode %s' % extract_mode)

    if not len(ms):
        return

    dms = [depthmodel_from_arrays(ztop, vp, vs, rh) for ztop, vp, vs, rh in ms]
    for p, (vppc, vspc, rhpc, prpc) in \
            dmstats1(dms,
                     percentiles=percentiles,
                     Ndepth=100,
                     Nvalue=100,
                     weights=weights,
                     **mapkwargs):
        try:
            dmout = depthmodel(vppc, vspc, rhpc)
            extract_model_file = EXTRACTMODELFILE.format(
                rootname=rootname,
                extract_mode=extract_mode,
                extract_limit=extract_limit,
                extract_llkmin=extract_llkmin,
                extract_step=extract_step,
                percentile=p)
            if verbose:
                print "writing %s" % extract_model_file
            dmout.write96(extract_model_file)  # , overwrite=True)
        except KeyboardInterrupt:
            raise
        except Exception as e:
            print "Error", str(e)

    for p in percentiles:
        extract_disp_file = EXTRACTDISPFILE.format(
            rootname=rootname,
            extract_mode=extract_mode,
            extract_limit=extract_limit,
            extract_llkmin=extract_llkmin,
            extract_step=extract_step,
            percentile=p)
        if os.path.isfile(extract_disp_file):
            os.system('trash {}'.format(extract_disp_file))

    for p, (wpc, tpc, mpc, fpc, vpc) in \
            dispstats(ds,
                      percentiles=percentiles,
                      Ndisp=100,
                      weights=weights,
                      **mapkwargs):
        try:
            srout = surf96reader_from_arrays(wpc, tpc, mpc, fpc, vpc)
            extract_disp_file = EXTRACTDISPFILE.format(
                rootname=rootname,
                extract_mode=extract_mode,
                extract_limit=extract_limit,
                extract_llkmin=extract_llkmin,
                extract_step=extract_step,
                percentile=p)
            if verbose:
                print "writing to {}".format(extract_disp_file)
            with open(extract_disp_file, 'a') as fid:
                fid.write(srout.__str__())
                fid.write('\n')
        except KeyboardInterrupt:
            raise
        except Exception as e:
            print "Error", str(e)