Пример #1
0
    def _get_site_scaling(self, C, pga_rock, sites, rjb):
        """
        Returns the site-scaling term in Equation 5, broken down into a
        linear and a nonlinear component

        Unlike in BSSA14, basin depth effects are not accounted for in this
        model.
        """
        flin = BooreEtAl2014._get_linear_site_term(self, C, sites.vs30)
        fnl = BooreEtAl2014._get_nonlinear_site_term(self, C, sites.vs30,
                                                     pga_rock)
        return flin + fnl
Пример #2
0
 def test_fotopoulou_pitilakis_2015_pgv(self):
     sites = gtu._setup_sites_yield_accel()
     gdem = FotopoulouPitilakis2015PGV(gsim_by_imt={"PGV": BooreEtAl2014()},
                                       truncation=6.,
                                       nsample=100)
     curves = self._run_calculator(gdem, LS_IMTLS, sites)
     self._check_curves(curves["PGDfSlope"], "landsliding_fp15_pgv.csv")
Пример #3
0
 def test_hazus_landsliding_ky(self):
     sites = gtu._setup_sites_yield_accel()
     gdem = HAZUSLandslidingKy(gsim_by_imt={"PGA": BooreEtAl2014()},
                               truncation=6.,
                               nsample=100)
     curves = self._run_calculator(gdem, LS_IMTLS, sites)
     self._check_curves(curves["PGDfSlope"], "hazus_landsliding_ky.csv")
Пример #4
0
    def setUp(self):

        fname = gettemp(ampl_func)
        df = read_csv(fname, {
            'ampcode': ampcode_dt,
            None: numpy.float64
        },
                      index='ampcode')
        self.df = AmplFunction(df)

        # Set GMMs
        gmmA = BooreAtkinson2008()
        gmmB = BooreEtAl2014()

        # Set parameters
        dsts = [10., 15., 20., 30., 40.]
        dsts = [10.]
        imts = [PGA(), SA(1.0)]
        sites = Dummy.get_site_collection(len(dsts), vs30=760.0)
        self.mag = 5.5
        rup = Dummy.get_rupture(mag=self.mag)
        ctx = RuptureContext.full(rup, sites)
        ctx.rjb = numpy.array(dsts)
        ctx.rrup = numpy.array(dsts)
        self.rrup = ctx.rrup

        # Compute GM on rock
        self.meastd = gmmA.get_mean_std([ctx], imts)  # shape (2, N=1, M=2)
Пример #5
0
 def test_rathje_saygili_2009_pga(self):
     sites = gtu._setup_sites_yield_accel()
     gdem = RathjeSaygili2009PGA(gsim_by_imt={"PGA": BooreEtAl2014()},
                                 truncation=6.,
                                 nsample=100)
     curves = self._run_calculator(gdem, LS_IMTLS, sites)
     self._check_curves(curves["PGDfSlope"],
                        "landsliding_rathje_saygili09_pga.csv")
Пример #6
0
 def test_jibson_2007_pga_mag(self):
     sites = gtu._setup_sites_yield_accel()
     gdem = Jibson2007PGAMag(gsim_by_imt={"PGA": BooreEtAl2014()},
                             truncation=6.,
                             nsample=100)
     curves = self._run_calculator(gdem, LS_IMTLS, sites)
     self._check_curves(curves["PGDfSlope"],
                        "landsliding_jibson2007_pga_mag.csv")
Пример #7
0
 def test_hazus_liquefaction_classical(self):
     sites = gtu._setup_sites_liquefaction()
     gdem = HAZUSLiquefaction(gsim_by_imt={"PGA": BooreEtAl2014()},
                              truncation=6.,
                              nsample=100)
     curves = self._run_calculator(gdem, LIQ_IMTLS, sites)
     self._check_curves(curves["PGDfLatSpread"],
                        "hazus_liquefaction_lateral_spread.csv")
     self._check_curves(curves["PGDfSettle"],
                        "hazus_liquefaction_settlement.csv")
Пример #8
0
 def test_zhu_2015_global(self):
     sites = gtu._setup_sites_liquefaction_zhu()
     gdem = ZhuEtAl2015Global(gsim_by_imt={"PGA": BooreEtAl2014()},
                              truncation=6.,
                              nsample=100)
     curves = self._run_calculator(gdem, LIQ_IMTLS, sites)
     self._check_curves(curves["PGDfLatSpread"],
                        "zhu_liquefaction_lateral_spread.csv")
     self._check_curves(curves["PGDfSettle"],
                        "zhu_liquefaction_settlement.csv")
Пример #9
0
def get_fs_SeyhanStewart2014(imt, pga_rock, vs30):
    """
    Implements eq. 11 and 12 at page 1992 in Yenier and Atkinson (2015)

    :param pga_rock:
        Median peak ground horizontal acceleration for reference
    :param vs30:
    """
    # Get coefficients
    gmm = BooreEtAl2014()
    C = gmm.COEFFS[imt]
    # Linear term
    flin = vs30 / gmm.CONSTS['Vref']
    flin[vs30 > C['Vc']] = C['Vc'] / gmm.CONSTS['Vref']
    fl = C['c'] * np.log(flin)
    # Non-linear term
    v_s = np.copy(vs30)
    v_s[vs30 > 760.] = 760.
    # parameter (equation 8 of BSSA 2014)
    f_2 = C['f4'] * (np.exp(C['f5'] * (v_s - 360.)) - np.exp(C['f5'] * 400.))
    fnl = gmm.CONSTS['f1'] + f_2 * np.log(
        (pga_rock + gmm.CONSTS['f3']) / gmm.CONSTS['f3'])
    return fl + fnl
Пример #10
0
pd.DataFrame(vs30_data).to_csv(
    '/home/eking/Documents/internship/data/Kappa/vs30.csv')

kappa_data = fullfile[' tstar(s) ']

#############    GMPEs     ###################
imt_pga = imt.PGA()
imt_pgv = imt.PGV()
imt_arias = imt.IA()
uncertaintytype = const.StdDev.TOTAL

## Set GMPEs:
zhao2006 = ZhaoEtAl2006SInter()
travasarou = TravasarouEtAl2003()
bssa14 = BooreEtAl2014()

## Set the empty arrays:
median_zhao2006 = np.array([])
median_travasarou = np.array([])
median_bssa14 = np.array([])

sd_zhao2006 = np.array([])
sd_travasarou = np.array([])
sd_bssa14 = np.array([])

## Run per recording:
for recording_i in range(len(station)):
    ## Make the rupture and distance contexts:
    i_rctx = RuptureContext()
    i_dctx = DistancesContext()
Пример #11
0
 def _get_style_of_faulting_term(self, C, rup):
     """
     Returns the style-of-faulting term component, defined in Equation 2
     """
     return BooreEtAl2014._get_style_of_faulting_term(self, C, rup)
Пример #12
0
    limits_filename = f_in.readline().rstrip().split(',')[1]
except:
    limits_filename = None
if event_name == '1852Banda_area' or event_name == '1852Banda_domain_ryan_mmi' or \
        event_name == '1852Banda_domain_FH_mmi' or event_name == '1852Banda_exclude_20min_ryan_mmi' or\
        event_name == '1852Banda_exclude_20min_FH_mmi' or event_name == '1852Banda_exclude_15min_FH_mmi' or \
        event_name == '1852Banda_exclude_15min_ryan_mmi':
    disc = 10
else:
    disc = 5
# Area or fault source model is used to define the parameter space to be searched
if trt == 'Subduction Intraslab':
    gsim_list = [ZhaoEtAl2006SSlab(), AtkinsonBoore2003SSlab(), AtkinsonBoore2003SSlabCascadia(), AbrahamsonEtAl2015SSlab()]
if trt == 'Active':
#    gsim_list = [ChiouYoungs2008(), ChiouYoungs2014(), BooreAtkinson2008(), BooreEtAl2014(), CampbellBozorgnia2008(), CampbellBozorgnia2014() ]
    gsim_list = [ChiouYoungs2014(), BooreEtAl2014(), CampbellBozorgnia2014()]
if trt == 'Subduction Interface':
    gsim_list = [AbrahamsonEtAl2015SInter(), ZhaoEtAl2006SInter(), YoungsEtAl1997SInter(), AtkinsonBoore2003SInter()]
if trt == 'Mixed':
    gsim_list = [AbrahamsonEtAl2015SInter(), BooreEtAl2014(), ChiouYoungs2014(), ZhaoEtAl2006SInter()]
def build_site_col(sites_data, site_model_file, filename=None):
    """Interpolate vs30 values to sites of interest
    """
#    sites_data = np.genfromtxt(site_file)
    site_points = []
    for i in range(len(sites_data[:,0])):
        site_pt = Point(sites_data[i,0], sites_data[i,1])
        site_points.append(site_pt)
    sitecol = get_site_collection(site_model_file, site_points, None,filename)
    return sitecol
Пример #13
0
def test_virtualipe():

    #
    # Set up the GMPE, IPE, and GMICE
    #
    gmpe_cy14 = ChiouYoungs2014()
    gmpe = MultiGMPE.from_list([gmpe_cy14], [1.0])
    gmice = WGRW12()
    ipe = VirtualIPE.fromFuncs(gmpe, gmice)

    #
    # Use the Calexico event info
    #
    homedir = os.path.dirname(os.path.abspath(__file__))
    datadir = os.path.abspath(
        os.path.join(homedir, 'virtualipe_data', 'Calexico', 'input'))

    #
    # Read the event, origin, and rupture files and produce Rupture and Origin
    # objects
    #
    # inputfile = os.path.join(datadir, 'stationlist_dat.xml')
    # dyfifile = os.path.join(datadir, 'ciim3_dat.xml')
    eventfile = os.path.join(datadir, 'event.xml')
    rupturefile = os.path.join(datadir, 'wei_fault.txt')

    origin_obj = Origin.fromFile(eventfile)
    rupture_obj = get_rupture(origin_obj, rupturefile)
    rx = rupture_obj.getRuptureContext([gmpe])
    rx.rake = 45.

    smdx = 0.0083333333
    smdy = 0.0083333333
    lonspan = 6.0
    latspan = 4.0
    vs30filename = os.path.join(datadir, '..', 'vs30', 'vs30.grd')

    sites_obj_grid = Sites.fromCenter(rx.hypo_lon,
                                      rx.hypo_lat,
                                      lonspan,
                                      latspan,
                                      smdx,
                                      smdy,
                                      defaultVs30=760.0,
                                      vs30File=vs30filename,
                                      vs30measured_grid=None,
                                      padding=False,
                                      resample=False)

    npts = 200
    lats = np.empty(npts)
    lons = np.empty(npts)
    depths = np.zeros(npts)
    for i in range(npts):
        lats[i] = rx.hypo_lat
        lons[i] = rx.hypo_lon + i * 0.01
    lldict = {'lats': lats, 'lons': lons}

    sx = sites_obj_grid.getSitesContext(lldict=lldict, rock_vs30=760.0)

    dobj = Distance(gmpe, lons, lats, depths, rupture_obj)
    dx = dobj.getDistanceContext()

    sd_types = [oqconst.StdDev.TOTAL]
    mmi_const_vs30, mmi_sd_const_vs30 = \
        ipe.get_mean_and_stddevs(sx, rx, dx, MMI(), sd_types)

    # These prints are just so a human can examine the outputs
    #    print(mmi_const_vs30)
    #    print(mmi_sd_const_vs30)

    sx = sites_obj_grid.getSitesContext(lldict=lldict)
    mmi_variable_vs30, mmi_sd_variable_vs30 = \
        ipe.get_mean_and_stddevs(sx, rx, dx, MMI(), sd_types)

    #    print(mmi_variable_vs30)
    #    print(mmi_sd_variable_vs30)

    sd_types = [
        oqconst.StdDev.TOTAL, oqconst.StdDev.INTRA_EVENT,
        oqconst.StdDev.INTER_EVENT
    ]
    mmi_variable_vs30_intra, mmi_sd_variable_vs30_intra = \
        ipe.get_mean_and_stddevs(sx, rx, dx, MMI(), sd_types)

    #    print(mmi_variable_vs30_intra)
    #    print(mmi_sd_variable_vs30_intra)
    #    assert(0)      # Assert causes test to fail and prints to be displayed

    #
    # Try with PGA
    #
    gmpe.DEFINED_FOR_INTENSITY_MEASURE_TYPES.remove(PGV)
    gmpe.ALL_GMPES_HAVE_PGV = False
    ipe = VirtualIPE.fromFuncs(gmpe, gmice)
    mmi_pga, mmi_sd_pga = \
        ipe.get_mean_and_stddevs(sx, rx, dx, MMI(), sd_types)
    #
    # Try with SA(1.0)
    #
    gmpe.DEFINED_FOR_INTENSITY_MEASURE_TYPES.remove(PGA)
    ipe = VirtualIPE.fromFuncs(gmpe, gmice)
    mmi_psa, mmi_sd_psa = \
        ipe.get_mean_and_stddevs(sx, rx, dx, MMI(), sd_types)

    #
    # This should raise an exception because the IMT isn't MMI
    #
    with pytest.raises(ValueError) as e:
        mmi_psa, mmi_sd_psa = \
            ipe.get_mean_and_stddevs(sx, rx, dx, PGA(), sd_types)
    #
    # This should raise an exception because no valid IMTs are available
    #
    gmpe.DEFINED_FOR_INTENSITY_MEASURE_TYPES.remove(SA)
    with pytest.raises(ShakeLibException) as e:  # noqa
        ipe = VirtualIPE.fromFuncs(gmpe, gmice)

    #
    # Now do a GMPE that uses Rjb instead of Rrup
    #
    gmpe_ba14 = BooreEtAl2014()
    gmpe = MultiGMPE.from_list([gmpe_ba14], [1.0])
    ipe = VirtualIPE.fromFuncs(gmpe, gmice)
    rx = rupture_obj.getRuptureContext([gmpe])
    rx.rake = 45.
    dobj = Distance(gmpe, lons, lats, depths, rupture_obj)
    dx = dobj.getDistanceContext()

    mmi_rjb, mmi_sd_rjb = \
        ipe.get_mean_and_stddevs(sx, rx, dx, MMI(), sd_types)

    #
    # Test the results against a known standard
    #
    savefile = os.path.abspath(
        os.path.join(homedir, 'virtualipe_data', 'Calexico', 'virtualipe_test',
                     'savefile.npz'))

    #
    # If things change, set remake_save to True, and it will rebuild the
    # saved data file against which the comparisons are done
    # Remember to set this back to False once you've remade the test datafile
    #
    remake_save = False
    if remake_save:
        np.savez_compressed(
            savefile,
            mmi_const_vs30=mmi_const_vs30,
            mmi_sd_const_vs30=mmi_sd_const_vs30[0],
            mmi_variable_vs30=mmi_variable_vs30,
            mmi_sd_variable_vs30=mmi_sd_variable_vs30[0],
            mmi_variable_vs30_intra=mmi_variable_vs30_intra,
            mmi_sd_variable_vs30_total=mmi_sd_variable_vs30_intra[0],
            mmi_sd_variable_vs30_intra=mmi_sd_variable_vs30_intra[1],
            mmi_sd_variable_vs30_inter=mmi_sd_variable_vs30_intra[2],
            mmi_pga=mmi_pga,
            mmi_sd_pga=mmi_sd_pga[0],
            mmi_psa=mmi_psa,
            mmi_sd_psa=mmi_sd_psa[0],
            mmi_rjb=mmi_rjb,
            mmi_sd_rjb=mmi_sd_rjb[0])

    td = np.load(savefile)

    assert (np.allclose(td['mmi_const_vs30'], mmi_const_vs30))
    assert (np.allclose(td['mmi_sd_const_vs30'], mmi_sd_const_vs30[0]))
    assert (np.allclose(td['mmi_variable_vs30'], mmi_variable_vs30))
    assert (np.allclose(td['mmi_sd_variable_vs30'], mmi_sd_variable_vs30[0]))
    assert (np.allclose(td['mmi_variable_vs30_intra'],
                        mmi_variable_vs30_intra))
    assert (np.allclose(td['mmi_sd_variable_vs30_total'],
                        mmi_sd_variable_vs30_intra[0]))
    assert (np.allclose(td['mmi_sd_variable_vs30_intra'],
                        mmi_sd_variable_vs30_intra[1]))
    assert (np.allclose(td['mmi_sd_variable_vs30_inter'],
                        mmi_sd_variable_vs30_intra[2]))
    assert (np.allclose(td['mmi_pga'], mmi_pga))
    assert (np.allclose(td['mmi_sd_pga'], mmi_sd_pga[0]))
    assert (np.allclose(td['mmi_psa'], mmi_psa))
    assert (np.allclose(td['mmi_sd_psa'], mmi_sd_psa[0]))
    assert (np.allclose(td['mmi_rjb'], mmi_rjb))
    assert (np.allclose(td['mmi_sd_rjb'], mmi_sd_rjb[0]))

    # The total uncertainties should be greater than the intra-event
    assert (np.all(mmi_sd_variable_vs30[0] > mmi_sd_variable_vs30_intra[1]))

    # The combined intra and inter-event uncertainty should be equal
    # to the total
    tot = np.sqrt(mmi_sd_variable_vs30_intra[1]**2 +
                  mmi_sd_variable_vs30_intra[2]**2)
    assert (np.allclose(tot, mmi_sd_variable_vs30_intra[0], rtol=1e-2))
Пример #14
0
 def _get_magnitude_scaling_term(self, C, rup):
     """
     Returns the magnitude scaling term component, defined in Equation 2
     """
     return BooreEtAl2014._get_magnitude_scaling_term(self, C, rup)
Пример #15
0
    limits_filename = None
if event_name == '1852Banda_area':
    disc = 15
else:
    disc = 5
# Area or fault source model is used to define the parameter space to be searched
if trt == 'Subduction Intraslab':
    gsim_list = [
        ZhaoEtAl2006SSlab(),
        AtkinsonBoore2003SSlab(),
        AtkinsonBoore2003SSlabCascadia(),
        AbrahamsonEtAl2015SSlab()
    ]
if trt == 'Active':
    #    gsim_list = [ChiouYoungs2008(), ChiouYoungs2014(), BooreAtkinson2008(), BooreEtAl2014(), CampbellBozorgnia2008(), CampbellBozorgnia2014() ]
    gsim_list = [ChiouYoungs2014(), BooreEtAl2014(), CampbellBozorgnia2014()]
if trt == 'Subduction Interface':
    gsim_list = [
        YoungsEtAl1997SInter(),
        AtkinsonBoore2003SInter(),
        ZhaoEtAl2006SInter(),
        AbrahamsonEtAl2015SInter()
    ]


def build_site_col(sites_data, site_model_file, filename=None):
    """Interpolate vs30 values to sites of interest
    """
    #    sites_data = np.genfromtxt(site_file)
    site_points = []
    for i in range(len(sites_data[:, 0])):
Пример #16
0
def gmpe_avg(ztest):
    '''
    transforms cybershake dips and Rx
    
    Parameters
    ----------
    ztest: 2d numpy array of 12 feature data
    
    Returns
    -------
    model_avg: average of base model predictions in ln m/s2
    '''
    import numpy as np
    import openquake
    from openquake.hazardlib.gsim.abrahamson_2014 import AbrahamsonEtAl2014  #ASK
    from openquake.hazardlib.gsim.campbell_bozorgnia_2014 import CampbellBozorgnia2014  #CB
    from openquake.hazardlib.gsim.chiou_youngs_2014 import ChiouYoungs2014  #CY
    from openquake.hazardlib.gsim.boore_2014 import BooreEtAl2014  #BSSA
    import openquake.hazardlib.imt as imt
    from openquake.hazardlib.const import StdDev
    import openquake.hazardlib.gsim.base as base

    stddev_types = [StdDev.TOTAL]

    period = [10, 7.5, 5, 4, 3, 2, 1, 0.5, 0.2, 0.1]

    gmpeBSSAdata = np.zeros((ztest.shape[0], len(period)))
    gmpeASKdata = np.zeros((ztest.shape[0], len(period)))
    gmpeCBdata = np.zeros((ztest.shape[0], len(period)))
    gmpeCYdata = np.zeros((ztest.shape[0], len(period)))

    gmpeBSSAstd = np.zeros((ztest.shape[0], len(period)))
    gmpeASKstd = np.zeros((ztest.shape[0], len(period)))
    gmpeCBstd = np.zeros((ztest.shape[0], len(period)))
    gmpeCYstd = np.zeros((ztest.shape[0], len(period)))

    gmpeASK = AbrahamsonEtAl2014()
    gmpeCB = CampbellBozorgnia2014()
    gmpeCY = ChiouYoungs2014()
    gmpeBSSA = BooreEtAl2014()

    for i in range(ztest.shape[0]):
        dx = base.DistancesContext()
        dx.rjb = np.array([ztest[i, 9]])

        #dx.rjb = np.logspace(-1, 2, 10)
        # Magnitude and rake
        rx = base.RuptureContext()
        rx.mag = np.array([ztest[i, 0]])
        rx.rake = np.array([ztest[i, 5]])
        rx.hypo_depth = np.array([ztest[i, 7]])
        # Vs30
        sx = base.SitesContext()
        sx.vs30 = np.array([ztest[i, 2]])
        sx.vs30measured = 0

        dx.rrup = np.array([ztest[i, 1]])
        rx.ztor = np.array([ztest[i, 11]])
        rx.dip = np.array([ztest[i, 6]])
        rx.width = np.array([ztest[i, 8]])
        # dx.rx=np.array([rxkeep[i]])
        dx.rx = np.array([ztest[i, 10]])

        dx.ry0 = np.array([0])
        sx.z1pt0 = np.array([ztest[i, 3]])
        sx.z2pt5 = np.array([ztest[i, 4]])

        # Evaluate GMPE
        #Unit of measure for Z1.0 is [m] (ASK)

        #for period1 in period:
        for ii in range(len(period)):
            sx.vs30measured = 0
            period1 = period[ii]
            gmpeBSSAdata[i, ii], g = gmpeBSSA.get_mean_and_stddevs(
                sx, rx, dx, imt.SA(period1), stddev_types)
            gmpeBSSAstd[i, ii] = g[0][0]

            gmpeCBdata[i, ii], g = gmpeCB.get_mean_and_stddevs(
                sx, rx, dx, imt.SA(period1), stddev_types)
            gmpeCBstd[i, ii] = g[0][0]

            gmpeCYdata[i, ii], g = gmpeCY.get_mean_and_stddevs(
                sx, rx, dx, imt.SA(period1), stddev_types)
            gmpeCYstd[i, ii] = g[0][0]

            sx.vs30measured = [0]
            gmpeASKdata[i, ii], g = gmpeASK.get_mean_and_stddevs(
                sx, rx, dx, imt.SA(period1), stddev_types)
            gmpeASKstd[i, ii] = g[0][0]

    model_avg = np.log(9.81 * np.exp(
        np.mean([gmpeBSSAdata, gmpeCBdata, gmpeCYdata, gmpeASKdata], axis=0)))

    #outputs ln m/s2
    return model_avg
Пример #17
0
from openquake.hazardlib.gsim.boore_2014 import BooreEtAl2014
from openquake.hazardlib.gsim.campbell_bozorgnia_2014 import CampbellBozorgnia2014
from openquake.hazardlib.gsim.abrahamson_2014 import AbrahamsonEtAl2014
from openquake.hazardlib.gsim.chiou_youngs_2014 import ChiouYoungs2014
from openquake.hazardlib.imt import PGA, SA
from openquake.hazardlib.gsim.base import SitesContext
from openquake.hazardlib.gsim.base import DistancesContext
from openquake.hazardlib.gsim.base import RuptureContext
from openquake.hazardlib import const
from shakelib.multigmpe import MultiGMPE
from shakelib.rupture.factory import get_rupture
from shakelib.rupture.origin import Origin

# List of GMPEs to use.
gmpe_list = [
    BooreEtAl2014(),
    CampbellBozorgnia2014(),
    AbrahamsonEtAl2014(),
    ChiouYoungs2014()
]

# GMPE weights.
weight_list = [0.25] * 4

# Intensity measure component.
imc = const.IMC.RotD50

# Create multigmpe instance.
gmpe = MultiGMPE.from_list(gmpe_list, weight_list, imc)

# Define IMTs and standard deviations.
Пример #18
0
 def __init__(self, focal_depth=None, region='CENA', **kwargs):
     super().__init__(focal_depth=focal_depth, region=region, **kwargs)
     self.focal_depth = focal_depth
     self.region = region
     self.gmpe = BooreEtAl2014()
Пример #19
0
 def setUp(self):
     """
     Builds a simple dipping/bending fault source with a characteristic
     source model. Compares the curves for four sites, two on the hanging
     wall and two on the footwall.
     The source model is taken from the PEER Tests
     """
     point_order_dipping_east = [
         Point(-64.78365, -0.45236),
         Point(-64.80164, -0.45236),
         Point(-64.90498, -0.36564),
         Point(-65.0000, -0.16188),
         Point(-65.0000, 0.0000)
     ]
     trace_dip_east = Line(point_order_dipping_east)
     site_1 = Site(Point(-64.98651, -0.15738),
                   760.0,
                   48.0,
                   0.607,
                   vs30measured=True)
     site_2 = Site(Point(-64.77466, -0.45686),
                   760.0,
                   48.0,
                   0.607,
                   vs30measured=True)
     site_3 = Site(Point(-64.92747, -0.38363),
                   760.0,
                   48.0,
                   0.607,
                   vs30measured=True)
     site_4 = Site(Point(-65.05396, -0.17088),
                   760.0,
                   48.0,
                   0.607,
                   vs30measured=True)
     self.sites = SiteCollection([site_1, site_2, site_3, site_4])
     self.imtls = {
         "PGA": [
             0.001, 0.01, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45,
             0.5, 0.55, 0.6, 0.7, 0.8, 0.9, 1.0
         ]
     }
     fault_surface1 = SimpleFaultSurface.from_fault_data(
         trace_dip_east, 0.0, 12.0, 60., 0.5)
     mfd1 = EvenlyDiscretizedMFD(6.75, 0.01, [0.01])
     tom = PoissonTOM(1.0)
     self.sources = [
         CharacteristicFaultSource(
             "PEER_CHAR_FLT_EAST",
             "Peer Bending Fault Dipping East - Characteristic",
             "Active Shallow Crust", mfd1, tom, fault_surface1, 90.0)
     ]
     # We will check all the GMPEs
     self.gsim_set = {
         "ASK": [
             NSHMP2014(gmpe_name='AbrahamsonEtAl2014', sgn=0),
             (0.185, NSHMP2014(gmpe_name='AbrahamsonEtAl2014', sgn=-1)),
             (0.63, AbrahamsonEtAl2014()),
             (0.185, NSHMP2014(gmpe_name='AbrahamsonEtAl2014', sgn=1))
         ],
         "BSSA": [
             NSHMP2014(gmpe_name='BooreEtAl2014', sgn=0),
             (0.185, NSHMP2014(gmpe_name='BooreEtAl2014', sgn=-1)),
             (0.63, BooreEtAl2014()),
             (0.185, NSHMP2014(gmpe_name='BooreEtAl2014', sgn=1))
         ],
         "CB": [
             NSHMP2014(gmpe_name='CampbellBozorgnia2014', sgn=0),
             (0.185, NSHMP2014(gmpe_name='CampbellBozorgnia2014', sgn=-1)),
             (0.63, CampbellBozorgnia2014()),
             (0.185, NSHMP2014(gmpe_name='CampbellBozorgnia2014', sgn=1))
         ],
         "CY": [
             NSHMP2014(gmpe_name='ChiouYoungs2014', sgn=0),
             (0.185, NSHMP2014(gmpe_name='ChiouYoungs2014', sgn=-1)),
             (0.63, ChiouYoungs2014()),
             (0.185, NSHMP2014(gmpe_name='ChiouYoungs2014', sgn=1))
         ],
         "ID": [
             NSHMP2014(gmpe_name='Idriss2014', sgn=0),
             (0.185, NSHMP2014(gmpe_name='Idriss2014', sgn=-1)),
             (0.63, Idriss2014()),
             (0.185, NSHMP2014(gmpe_name='Idriss2014', sgn=1))
         ]
     }