def compute_gmfs_and_curves(getters, oq, monitor): """ :param getters: a list of GmfGetter instances :param oq: an OqParam instance :param monitor: a Monitor instance :returns: a list of dictionaries with keys gmfcoll and hcurves """ results = [] for getter in getters: with monitor('GmfGetter.init', measuremem=True): getter.init() hcurves = {} # key -> poes if oq.hazard_curves_from_gmfs: hc_mon = monitor('building hazard curves', measuremem=False) duration = oq.investigation_time * oq.ses_per_logic_tree_path with monitor('building hazard', measuremem=True): gmfdata = numpy.fromiter(getter.gen_gmv(), getter.gmf_data_dt) hazard = getter.get_hazard(data=gmfdata) for sid, hazardr in zip(getter.sids, hazard): for rlzi, array in hazardr.items(): if len(array) == 0: # no data continue with hc_mon: gmvs = array['gmv'] for imti, imt in enumerate(getter.imtls): poes = calc._gmvs_to_haz_curve( gmvs[:, imti], oq.imtls[imt], oq.investigation_time, duration) hcurves[rsi2str(rlzi, sid, imt)] = poes else: # fast lane with monitor('building hazard', measuremem=True): gmfdata = numpy.fromiter(getter.gen_gmv(), getter.gmf_data_dt) indices = [] if oq.ground_motion_fields: gmfdata.sort(order=('sid', 'rlzi', 'eid')) start = stop = 0 for sid, rows in itertools.groupby(gmfdata['sid']): for row in rows: stop += 1 indices.append((sid, start, stop)) start = stop else: gmfdata = None res = dict(gmfdata=gmfdata, hcurves=hcurves, gmdata=getter.gmdata, taskno=monitor.task_no, indices=numpy.array(indices, (U32, 3))) if len(getter.gmdata): results.append(res) return results
def compute_gmfs_and_curves(getter, rlzs, monitor): """ :param eb_ruptures: a list of blocks of EBRuptures of the same SESCollection :param sitecol: a :class:`openquake.hazardlib.site.SiteCollection` instance :param imts: a list of intensity measure type strings :param rlzs_by_gsim: a dictionary gsim -> associated realizations :param monitor: a Monitor instance :returns: a dictionary with keys gmfcoll and hcurves """ oq = monitor.oqparam haz = {sid: {} for sid in getter.sids} gmfcoll = {} # rlz -> gmfa for rlz in rlzs: gmfcoll[rlz] = [] for sid, gmvdict in zip(getter.sids, getter(rlz)): if gmvdict: for imti, imt in enumerate(getter.imts): if oq.hazard_curves_from_gmfs: try: gmv = gmvdict[imt] except KeyError: # no gmv for the given imt, this may happen pass else: haz[sid][imt, rlz] = gmv for rec in gmvdict.get(imt, []): gmfcoll[rlz].append( (sid, rec['eid'], imti, rec['gmv'])) for rlz in gmfcoll: gmfcoll[rlz] = numpy.array(gmfcoll[rlz], gmv_dt) result = dict(gmfcoll=gmfcoll if oq.ground_motion_fields else None, hcurves={}) if oq.hazard_curves_from_gmfs: with monitor('building hazard curves', measuremem=False): duration = oq.investigation_time * oq.ses_per_logic_tree_path for sid, haz_by_imt_rlz in haz.items(): for imt, rlz in haz_by_imt_rlz: gmvs = haz_by_imt_rlz[imt, rlz]['gmv'] poes = calc._gmvs_to_haz_curve( gmvs, oq.imtls[imt], oq.investigation_time, duration) key = rsi2str(rlz.ordinal, sid, imt) result['hcurves'][key] = poes return result
def compute_gmfs_and_curves(getter, oq, monitor): """ :param getter: a GmfGetter instance :param oq: an OqParam instance :param monitor: a Monitor instance :returns: a dictionary with keys gmfcoll and hcurves """ with monitor('making contexts', measuremem=True): getter.init() grp_id = getter.grp_id hcurves = {} # key -> poes gmfcoll = {} # grp_id, rlz -> gmfa if oq.hazard_curves_from_gmfs: hc_mon = monitor('building hazard curves', measuremem=False) duration = oq.investigation_time * oq.ses_per_logic_tree_path for gsim in getter.rlzs_by_gsim: with monitor('building hazard', measuremem=True): gmfcoll[grp_id, gsim] = data = numpy.fromiter(getter.gen_gmv(gsim), gmf_data_dt) hazard = getter.get_hazard(gsim, data) for r, rlz in enumerate(getter.rlzs_by_gsim[gsim]): hazardr = hazard[r] lst = [] for sid in getter.sids: for imti, imt in enumerate(getter.imts): array = hazardr[sid, imti] if len(array) == 0: # no data continue for rec in array: lst.append((sid, rec['eid'], imti, rec['gmv'])) with hc_mon: poes = calc._gmvs_to_haz_curve( array['gmv'], oq.imtls[imt], oq.investigation_time, duration) hcurves[rsi2str(rlz.ordinal, sid, imt)] = poes else: # fast lane for gsim in getter.rlzs_by_gsim: with monitor('building hazard', measuremem=True): gmfcoll[grp_id, gsim] = numpy.fromiter(getter.gen_gmv(gsim), gmf_data_dt) return dict(gmfcoll=gmfcoll if oq.ground_motion_fields else None, hcurves=hcurves, gmdata=getter.gmdata)
def compute_gmfs_curves(self, monitor): """ :returns: a dict with keys gmdata, gmfdata, indices, hcurves """ oq = self.oqparam dt = oq.gmf_data_dt() with monitor('GmfGetter.init', measuremem=True): self.init() hcurves = {} # key -> poes if oq.hazard_curves_from_gmfs: hc_mon = monitor('building hazard curves', measuremem=False) duration = oq.investigation_time * oq.ses_per_logic_tree_path with monitor('building hazard', measuremem=True): gmfdata = numpy.fromiter(self.gen_gmv(), dt) hazard = self.get_hazard(data=gmfdata) for sid, hazardr in zip(self.sids, hazard): for rlzi, array in hazardr.items(): if len(array) == 0: # no data continue with hc_mon: gmvs = array['gmv'] for imti, imt in enumerate(oq.imtls): poes = _gmvs_to_haz_curve(gmvs[:, imti], oq.imtls[imt], oq.investigation_time, duration) hcurves[rsi2str(rlzi, sid, imt)] = poes elif oq.ground_motion_fields: # fast lane with monitor('building hazard', measuremem=True): gmfdata = numpy.fromiter(self.gen_gmv(), dt) else: return {} indices = [] gmfdata.sort(order=('sid', 'rlzi', 'eid')) start = stop = 0 for sid, rows in itertools.groupby(gmfdata['sid']): for row in rows: stop += 1 indices.append((sid, start, stop)) start = stop res = dict(gmfdata=gmfdata, hcurves=hcurves, gmdata=self.gmdata, indices=numpy.array(indices, (U32, 3))) return res
def compute_gmfs_curves(self, rlzs, monitor): """ :param rlzs: an array of shapeE :returns: a dict with keys gmfdata, indices, hcurves """ oq = self.oqparam mon = monitor('getting ruptures', measuremem=True) hcurves = {} # key -> poes if oq.hazard_curves_from_gmfs: hc_mon = monitor('building hazard curves', measuremem=False) gmfdata = self.get_gmfdata(mon) # returned later hazard = self.get_hazard_by_sid(data=gmfdata) for sid, hazardr in hazard.items(): dic = group_by_rlz(hazardr, rlzs) for rlzi, array in dic.items(): with hc_mon: gmvs = array['gmv'] for imti, imt in enumerate(oq.imtls): poes = _gmvs_to_haz_curve( gmvs[:, imti], oq.imtls[imt], oq.ses_per_logic_tree_path) hcurves[rsi2str(rlzi, sid, imt)] = poes if not oq.ground_motion_fields: return dict(gmfdata=(), hcurves=hcurves) gmfdata = self.get_gmfdata(mon) if len(gmfdata) == 0: return dict(gmfdata=[]) indices = [] gmfdata.sort(order=('sid', 'eid')) start = stop = 0 for sid, rows in itertools.groupby(gmfdata['sid']): for row in rows: stop += 1 indices.append((sid, start, stop)) start = stop times = numpy.array([tup + (monitor.task_no, ) for tup in self.times], time_dt) times.sort(order='rup_id') res = dict(gmfdata=gmfdata, hcurves=hcurves, times=times, sig_eps=numpy.array(self.sig_eps, self.sig_eps_dt), indices=numpy.array(indices, (U32, 3))) return res
def compute_gmfs_curves(self, monitor): """ :returns: a dict with keys gmfdata, indices, hcurves """ oq = self.oqparam with monitor('GmfGetter.init', measuremem=True): self.init() hcurves = {} # key -> poes if oq.hazard_curves_from_gmfs: hc_mon = monitor('building hazard curves', measuremem=False) with monitor('building hazard', measuremem=True): gmfdata = self.get_gmfdata() # returned later hazard = self.get_hazard_by_sid(data=gmfdata) for sid, hazardr in hazard.items(): dic = group_by_rlz(hazardr, self.eid2rlz) for rlzi, array in dic.items(): with hc_mon: gmvs = array['gmv'] for imti, imt in enumerate(oq.imtls): poes = _gmvs_to_haz_curve( gmvs[:, imti], oq.imtls[imt], oq.ses_per_logic_tree_path) hcurves[rsi2str(rlzi, sid, imt)] = poes elif oq.ground_motion_fields: # fast lane with monitor('building hazard', measuremem=True): gmfdata = self.get_gmfdata() else: return dict(gmfdata=(), hcurves=hcurves) if len(gmfdata) == 0: return dict(gmfdata=[]) indices = [] gmfdata.sort(order=('sid', 'eid')) start = stop = 0 for sid, rows in itertools.groupby(gmfdata['sid']): for row in rows: stop += 1 indices.append((sid, start, stop)) start = stop res = dict(gmfdata=gmfdata, hcurves=hcurves, sig_eps=numpy.array(self.sig_eps, self.sig_eps_dt), indices=numpy.array(indices, (U32, 3))) return res
def compute_gmfs_and_curves(getter, oq, monitor): """ :param getter: a GmfGetter instance :param oq: an OqParam instance :param monitor: a Monitor instance :returns: a dictionary with keys gmfcoll and hcurves """ with monitor('making contexts', measuremem=True): getter.init() grp_id = getter.grp_id hcurves = {} # key -> poes gmfcoll = {} # grp_id, rlz -> gmfa if oq.hazard_curves_from_gmfs: hc_mon = monitor('building hazard curves', measuremem=False) duration = oq.investigation_time * oq.ses_per_logic_tree_path with monitor('building hazard', measuremem=True): gmfcoll[grp_id] = data = numpy.fromiter(getter.gen_gmv(), getter.gmf_data_dt) hazard = sorted(getter.get_hazard(data).items()) for rlzi, hazardr in hazard: for sid in getter.sids: array = hazardr[sid] if len(array) == 0: # no data continue with hc_mon: gmvs = array['gmv'] for imti, imt in enumerate(getter.imts): poes = calc._gmvs_to_haz_curve(gmvs[:, imti], oq.imtls[imt], oq.investigation_time, duration) hcurves[rsi2str(rlzi, sid, imt)] = poes else: # fast lane with monitor('building hazard', measuremem=True): gmfcoll[grp_id] = numpy.fromiter(getter.gen_gmv(), getter.gmf_data_dt) return dict(gmfcoll=gmfcoll if oq.ground_motion_fields else None, hcurves=hcurves, gmdata=getter.gmdata)
def compute_gmfs_curves(self, monitor): """ :returns: a dict with keys gmfdata, indices, hcurves """ oq = self.oqparam with monitor('GmfGetter.init', measuremem=True): self.init() hcurves = {} # key -> poes if oq.hazard_curves_from_gmfs: hc_mon = monitor('building hazard curves', measuremem=False) with monitor('building hazard', measuremem=True): gmfdata = self.get_gmfdata() # returned later hazard = self.get_hazard(data=gmfdata) for sid, hazardr in hazard.items(): dic = group_by_rlz(hazardr, self.eid2rlz) for rlzi, array in dic.items(): with hc_mon: gmvs = array['gmv'] for imti, imt in enumerate(oq.imtls): poes = _gmvs_to_haz_curve( gmvs[:, imti], oq.imtls[imt], oq.ses_per_logic_tree_path) hcurves[rsi2str(rlzi, sid, imt)] = poes elif oq.ground_motion_fields: # fast lane with monitor('building hazard', measuremem=True): gmfdata = self.get_gmfdata() else: return {} if len(gmfdata) == 0: return dict(gmfdata=[]) indices = [] gmfdata.sort(order=('sid', 'eid')) start = stop = 0 for sid, rows in itertools.groupby(gmfdata['sid']): for row in rows: stop += 1 indices.append((sid, start, stop)) start = stop res = dict(gmfdata=gmfdata, hcurves=hcurves, sig_eps=numpy.array(self.sig_eps, self.sig_eps_dt), indices=numpy.array(indices, (U32, 3))) return res