示例#1
0
 def __fromh5__(self, dic, attrs):
     # TODO: this is called more times than needed, maybe we should cache it
     sg_data = group_array(dic['sg_data'], 'sm_id')
     sm_data = dic['sm_data']
     vars(self).update(attrs)
     self.gsim_fname = decode(self.gsim_fname)
     if self.gsim_fname.endswith('.xml'):
         # otherwise it would look in the current directory
         GMPETable.GMPE_DIR = os.path.dirname(self.gsim_fname)
         trts = sorted(self.trts)
         tmp = gettemp(self.gsim_lt_xml, suffix='.xml')
         self.gsim_lt = logictree.GsimLogicTree(tmp, trts)
     else:  # fake file with the name of the GSIM
         self.gsim_lt = logictree.GsimLogicTree.from_(self.gsim_fname)
     self.source_models = []
     for sm_id, rec in enumerate(sm_data):
         tdata = sg_data[sm_id]
         srcgroups = [
             sourceconverter.SourceGroup(
                 self.trts[data['trti']], id=data['grp_id'],
                 name=get_field(data, 'name', ''),
                 eff_ruptures=data['effrup'],
                 tot_ruptures=get_field(data, 'totrup', 0))
             for data in tdata]
         path = tuple(str(decode(rec['path'])).split('_'))
         trts = set(sg.trt for sg in srcgroups)
         sm = logictree.LtSourceModel(
             rec['name'], rec['weight'], path, srcgroups,
             rec['num_rlzs'], sm_id, rec['samples'])
         self.source_models.append(sm)
     self.init()
     try:
         os.remove(tmp)  # gsim_lt file
     except NameError:  # tmp is defined only in the regular case, see above
         pass
示例#2
0
    def filter(self, src_filter, monitor=performance.Monitor()):
        """
        Generate a new CompositeSourceModel by filtering the sources on
        the given site collection.

        :param src_filter: a SourceFilter instance
        :param monitor: a Monitor instance
        :returns: a new CompositeSourceModel instance
        """
        sources_by_grp = src_filter.pfilter(self.get_sources(), monitor)
        source_models = []
        for sm in self.source_models:
            src_groups = []
            for src_group in sm.src_groups:
                sg = copy.copy(src_group)
                sg.sources = sources_by_grp.get(sg.id, [])
                src_groups.append(sg)
            newsm = logictree.LtSourceModel(sm.names, sm.weight, sm.path,
                                            src_groups, sm.num_gsim_paths,
                                            sm.ordinal, sm.samples)
            source_models.append(newsm)
        new = self.__class__(self.gsim_lt, self.source_model_lt, source_models,
                             self.optimize_same_id)
        new.info.update_eff_ruptures(new.get_num_ruptures().__getitem__)
        return new
示例#3
0
 def fake(cls, gsimlt=None):
     """
     :returns:
         a fake `CompositionInfo` instance with the given gsim logic tree
         object; if None, builds automatically a fake gsim logic tree
     """
     weight = 1
     gsim_lt = gsimlt or logictree.GsimLogicTree.from_('FromFile')
     fakeSM = logictree.LtSourceModel(
         'scenario', weight,  'b1',
         [sourceconverter.SourceGroup('*', eff_ruptures=1)],
         gsim_lt.get_num_paths(), ordinal=0, samples=1)
     return cls(gsim_lt, seed=0, num_samples=0, source_models=[fakeSM],
                totweight=0)
示例#4
0
    def new(self, sources_by_grp):
        """
        Generate a new CompositeSourceModel from the given dictionary.

        :param sources_by_group: a dictionary grp_id -> sources
        :returns: a new CompositeSourceModel instance
        """
        source_models = []
        for sm in self.source_models:
            src_groups = []
            for src_group in sm.src_groups:
                sg = copy.copy(src_group)
                sg.sources = sorted(sources_by_grp.get(sg.id, []),
                                    key=operator.attrgetter('id'))
                src_groups.append(sg)
            newsm = logictree.LtSourceModel(sm.names, sm.weight, sm.path,
                                            src_groups, sm.num_gsim_paths,
                                            sm.ordinal, sm.samples)
            source_models.append(newsm)
        new = self.__class__(self.gsim_lt, self.source_model_lt, source_models)
        new.info.update_eff_ruptures(new.get_num_ruptures())
        return new
示例#5
0
 def __fromh5__(self, dic, attrs):
     # TODO: this is called more times than needed, maybe we should cache it
     sg_data = group_array(dic['sg_data'], 'sm_id')
     sm_data = dic['sm_data']
     vars(self).update(attrs)
     self.gsim_lt = dic['gsim_lt']
     self.source_models = []
     for sm_id, rec in enumerate(sm_data):
         tdata = sg_data[sm_id]
         srcgroups = [
             sourceconverter.SourceGroup(
                 self.trts[data['trti']], id=data['grp_id'],
                 name=get_field(data, 'name', ''),
                 eff_ruptures=data['effrup'],
                 tot_ruptures=get_field(data, 'totrup', 0))
             for data in tdata]
         path = tuple(str(decode(rec['path'])).split('_'))
         sm = logictree.LtSourceModel(
             rec['name'], rec['weight'], path, srcgroups,
             rec['num_rlzs'], sm_id, rec['samples'])
         self.source_models.append(sm)
     self.init()