def get_full_lt(oqparam, branchID=None): """ :param oqparam: an :class:`openquake.commonlib.oqvalidation.OqParam` instance :param branchID: used to read a single sourceModel branch (if given) :returns: a :class:`openquake.commonlib.logictree.FullLogicTree` instance """ source_model_lt = get_source_model_lt(oqparam, branchID) trts = source_model_lt.tectonic_region_types trts_lower = {trt.lower() for trt in trts} reqv = oqparam.inputs.get('reqv', {}) for trt in reqv: if trt in oqparam.discard_trts: continue elif trt.lower() not in trts_lower: raise ValueError('Unknown TRT=%s in %s [reqv]' % (trt, oqparam.inputs['job_ini'])) gsim_lt = get_gsim_lt(oqparam, trts or ['*']) full_lt = logictree.FullLogicTree(source_model_lt, gsim_lt) p = full_lt.source_model_lt.num_paths * gsim_lt.get_num_paths() if oqparam.number_of_logic_tree_samples: logging.info('Considering {:_d} logic tree paths out of {:_d}'.format( oqparam.number_of_logic_tree_samples, p)) else: # full enumeration if oqparam.hazard_curves and p > oqparam.max_potential_paths: raise ValueError( 'There are too many potential logic tree paths (%d):' 'raise `max_potential_paths`, use sampling instead of ' 'full enumeration, or set hazard_curves=false ' % p) elif (oqparam.is_event_based() and (oqparam.ground_motion_fields or oqparam.hazard_curves_from_gmfs) and p > oqparam.max_potential_paths / 100): logging.warning( 'There are many potential logic tree paths (%d): ' 'try to use sampling or reduce the source model' % p) logging.info('Total number of logic tree paths = {:_d}'.format(p)) if source_model_lt.is_source_specific: logging.info('There is a source specific logic tree') dupl = [] for src_id, branchIDs in source_model_lt.source_ids.items(): if len(branchIDs) > 1: dupl.append(src_id) if dupl: logging.info('There are %d non-unique source IDs', len(dupl)) return full_lt
def get_full_lt(oqparam): """ :param oqparam: an :class:`openquake.commonlib.oqvalidation.OqParam` instance :returns: a :class:`openquake.commonlib.logictree.FullLogicTree` instance """ source_model_lt = get_source_model_lt(oqparam) trts = source_model_lt.tectonic_region_types trts_lower = {trt.lower() for trt in trts} reqv = oqparam.inputs.get('reqv', {}) for trt in reqv: if trt in oqparam.discard_trts: continue elif trt.lower() not in trts_lower: raise ValueError('Unknown TRT=%s in %s [reqv]' % (trt, oqparam.inputs['job_ini'])) gsim_lt = get_gsim_lt(oqparam, trts or ['*']) p = source_model_lt.num_paths * gsim_lt.get_num_paths() if oqparam.number_of_logic_tree_samples: logging.info('Considering {:_d} logic tree paths out of {:_d}'.format( oqparam.number_of_logic_tree_samples, p)) else: # full enumeration if (oqparam.is_event_based() and (oqparam.ground_motion_fields or oqparam.hazard_curves_from_gmfs) and p > oqparam.max_potential_paths): raise ValueError( 'There are too many potential logic tree paths (%d):' 'use sampling instead of full enumeration or reduce the ' 'source model with oq reduce_sm' % p) logging.info('Potential number of logic tree paths = {:_d}'.format(p)) if source_model_lt.on_each_source: logging.info('There is a logic tree on each source') full_lt = logictree.FullLogicTree(source_model_lt, gsim_lt) return full_lt