Exemplo n.º 1
0
 def make_curve_params(self, oqparam):
     # the CurveParams are used only in classical_risk, classical_bcr
     # NB: populate the inner lists .loss_types too
     cps = []
     for l, loss_type in enumerate(self.loss_types):
         if oqparam.calculation_mode in ('classical', 'classical_risk'):
             curve_resolutions = set()
             lines = []
             allratios = []
             for taxo in sorted(self):
                 rm = self[taxo]
                 rf = rm.risk_functions.get((loss_type, 'vulnerability'))
                 if rf and loss_type in rm.loss_ratios:
                     ratios = rm.loss_ratios[loss_type]
                     allratios.append(ratios)
                     curve_resolutions.add(len(ratios))
                     lines.append('%s %d' % (rf, len(ratios)))
             if len(curve_resolutions) > 1:
                 # number of loss ratios is not the same for all taxonomies:
                 # then use the longest array; see classical_risk case_5
                 allratios.sort(key=len)
                 for rm in self.values():
                     if rm.loss_ratios[loss_type] != allratios[-1]:
                         rm.loss_ratios[loss_type] = allratios[-1]
                         # logging.debug(f'Redefining loss ratios for {rm}')
             cp = scientific.CurveParams(
                 l, loss_type, max(curve_resolutions), allratios[-1], True
             ) if curve_resolutions else scientific.CurveParams(
                 l, loss_type, 0, [], False)
         else:  # used only to store the association l -> loss_type
             cp = scientific.CurveParams(l, loss_type, 0, [], False)
         cps.append(cp)
         self.lti[loss_type] = l
     return cps
Exemplo n.º 2
0
 def make_curve_params(self, oqparam):
     # the CurveParams are used only in classical_risk, classical_bcr
     # NB: populate the inner lists .loss_types too
     cps = []
     loss_types = self._get_loss_types()
     for l, loss_type in enumerate(loss_types):
         if oqparam.calculation_mode in ('classical', 'classical_risk'):
             curve_resolutions = set()
             lines = []
             for key in sorted(self):
                 rm = self[key]
                 if loss_type in rm.loss_ratios:
                     ratios = rm.loss_ratios[loss_type]
                     curve_resolutions.add(len(ratios))
                     lines.append(
                         '%s %d' %
                         (rm.risk_functions[loss_type], len(ratios)))
             if len(curve_resolutions) > 1:  # example in test_case_5
                 logging.info('Different num_loss_ratios:\n%s',
                              '\n'.join(lines))
             cp = scientific.CurveParams(l, loss_type,
                                         max(curve_resolutions), ratios,
                                         True)
         else:  # used only to store the association l -> loss_type
             cp = scientific.CurveParams(l, loss_type, 0, [], False)
         cps.append(cp)
         self.lti[loss_type] = l
     return cps