def collapse(self, branchset_ids): """ Collapse the GsimLogicTree by using AgvGMPE instances if needed :param branchset_ids: branchset ids to collapse :returns: a collapse GsimLogicTree instance """ new = object.__new__(self.__class__) vars(new).update(vars(self)) new.branches = [] for trt, grp in itertools.groupby(self.branches, lambda b: b.trt): bs_id = self.bsetdict[trt] brs = [] gsims = [] weights = [] for br in grp: brs.append(br.id) gsims.append(br.gsim) weights.append(br.weight) if len(gsims) > 1 and bs_id in branchset_ids: kwargs = {} for brid, gsim, weight in zip(brs, gsims, weights): kw = gsim.kwargs.copy() kw['weight'] = weight.dic['weight'] kwargs[brid] = {gsim.__class__.__name__: kw} _toml = toml.dumps({'AvgGMPE': kwargs}) gsim = AvgGMPE(**kwargs) gsim._toml = _toml new.values[trt] = [gsim] branch = BranchTuple(trt, bs_id, gsim, sum(weights), True) new.branches.append(branch) else: new.branches.append(br) return new
def test(self): sitecol = SiteCollection([Site(Point(30.0, 30.0), 760., 1.0, 1.0)]) mfd = TruncatedGRMFD(4.5, 8.0, 0.1, 4.0, 1.0) sources = [PointSource('001', 'Point1', 'Active Shallow Crust', mfd, 1.0, WC1994(), 1.0, PoissonTOM(50.0), 0.0, 30.0, Point(30.0, 30.5), PMF([(1.0, NodalPlane(0.0, 90.0, 0.0))]), PMF([(1.0, 10.0)]))] imtls = {'PGA': [0.01, 0.1, 0.2, 0.5, 0.8]} hc1 = calc_hazard_curves(sources, sitecol, imtls, { 'Active Shallow Crust': AkkarBommer2010()})['PGA'] hc2 = calc_hazard_curves(sources, sitecol, imtls, { 'Active Shallow Crust': SadighEtAl1997()})['PGA'] hc = .6 * hc1 + .4 * hc2 ag = AvgGMPE(b1=dict(AkkarBommer2010={'weight': .6}), b2=dict(SadighEtAl1997={'weight': .4})) hcm = calc_hazard_curves(sources, sitecol, imtls, { 'Active Shallow Crust': ag})['PGA'] # the AvgGMPE is not producing real means!! numpy.testing.assert_almost_equal(hc, hcm, decimal=3)