Пример #1
0
 def test_get_magnitude_vector_properties(self):
     # Tests the function to retreive mmin and number of earthquakes if
     # required for certain functions
     test_catalogue = {
         'magnitude': np.array([3.4, 4.5, 7.6, 5.4, 3.8]),
         'sigmaMagnitude': np.array([0.1, 0.2, 0.3, 0.2, 0.1])
     }
     self.config['input_mmin'] = 4.0
     # Test 1: Finds the number of events from the catalogue with defined
     # minimum magnitude
     neq, mmin = _get_magnitude_vector_properties(test_catalogue,
                                                  self.config)
     self.assertAlmostEqual(neq, 3.0)
     self.assertAlmostEqual(mmin, 4.0)
     # Test 2 Finds the number of events from the catalogue with an
     # unspecified minimum magnitude
     del self.config['input_mmin']
     neq, mmin = _get_magnitude_vector_properties(test_catalogue,
                                                  self.config)
     self.assertAlmostEqual(neq, 5.0)
     self.assertAlmostEqual(mmin, 3.4)
 def test_get_magnitude_vector_properties(self):
     # Tests the function to retreive mmin and number of earthquakes if
     # required for certain functions
     test_catalogue = {
         'magnitude': np.array([3.4, 4.5, 7.6, 5.4, 3.8]),
         'sigmaMagnitude': np.array([0.1, 0.2, 0.3, 0.2, 0.1])
         }
     self.config['input_mmin'] = 4.0
     # Test 1: Finds the number of events from the catalogue with defined
     # minimum magnitude
     neq, mmin = _get_magnitude_vector_properties(test_catalogue,
                                                  self.config)
     self.assertAlmostEqual(neq, 3.0)
     self.assertAlmostEqual(mmin, 4.0)
     # Test 2 Finds the number of events from the catalogue with an
     # unspecified minimum magnitude
     del self.config['input_mmin']
     neq, mmin = _get_magnitude_vector_properties(test_catalogue,
                                                  self.config)
     self.assertAlmostEqual(neq, 5.0)
     self.assertAlmostEqual(mmin, 3.4)
Пример #3
0
    def get_mmax(self, catalogue, config):
        '''
        Calculates Maximum magnitude

        :param catalogue:
            Earthquake catalogue as instance of :class: 
            hmtk.seismicity.catalogue.Catalogue

        :param dict config:
            Configuration file for algorithm, contains the attributes:
            * 'b-value': b-value (positive float)
            * 'input_mmin': Minimum magnitude for integral (if less than 
                            minimum observed magnitude, will be overwritten by
                            minimum observed magnitude)
            * 'tolerance': Tolerance of stabilising of iterator
            * 'maximum_interations': Maximum number of iterations
        
        :returns: **mmax** Maximum magnitude and **mmax_sig** corresponding
                    uncertainty
        '''
        config = check_config(config, catalogue.data)

        obsmax, obsmaxsig = _get_observed_mmax(catalogue.data, config)

        mmin = config['input_mmin']
        beta = config['b-value'] * np.log(10.)

        neq, mmin = _get_magnitude_vector_properties(catalogue.data, config)

        mmax = np.copy(obsmax)
        d_t = np.inf
        iterator = 0

        while d_t > config['tolerance']:
            delta = quadrature(self._ks_intfunc,
                               mmin,
                               mmax,
                               args=(neq, mmax, mmin, beta))[0]
            #print mmin, neq, delta, mmax
            tmmax = obsmax + delta
            d_t = np.abs(tmmax - mmax)
            mmax = np.copy(tmmax)
            iterator += 1
            if iterator > config['maximum_iterations']:
                print 'Kijko-Sellevol estimator reached maximum # of iterations'
                d_t = -np.inf
        return mmax.item(), np.sqrt(obsmaxsig**2. + delta**2.)
Пример #4
0
    def get_mmax(self, catalogue, config):
        '''
        Calculates Maximum magnitude

        :param catalogue:
            Earthquake catalogue as instance of :class:
            hmtk.seismicity.catalogue.Catalogue

        :param dict config:
            Configuration file for algorithm, contains the attributes:
            * 'b-value': b-value (positive float)
            * 'input_mmin': Minimum magnitude for integral (if less than
                            minimum observed magnitude, will be overwritten by
                            minimum observed magnitude)
            * 'tolerance': Tolerance of stabilising of iterator
            * 'maximum_interations': Maximum number of iterations

        :returns: **mmax** Maximum magnitude and **mmax_sig** corresponding
                    uncertainty
        '''
        config = check_config(config, catalogue.data)

        obsmax, obsmaxsig = _get_observed_mmax(catalogue.data, config)

        mmin = config['input_mmin']
        beta = config['b-value'] * np.log(10.)

        neq, mmin = _get_magnitude_vector_properties(catalogue.data, config)

        mmax = np.copy(obsmax)
        d_t = np.inf
        iterator = 0

        while d_t > config['tolerance']:
            delta = quadrature(self._ks_intfunc, mmin, mmax,
                               args=(neq, mmax, mmin, beta))[0]
            #print mmin, neq, delta, mmax
            tmmax = obsmax + delta
            d_t = np.abs(tmmax - mmax)
            mmax = np.copy(tmmax)
            iterator += 1
            if iterator > config['maximum_iterations']:
                print ('Kijko-Sellevol estimator reached '
                       'maximum # of iterations')
                d_t = -np.inf
        return mmax.item(), np.sqrt(obsmaxsig ** 2. + delta ** 2.)
Пример #5
0
    def get_mmax(self, catalogue, config):
        '''Calculate maximum magnitude
        :return: **mmax** Maximum magnitude and **mmax_sig** corresponding
                    uncertainty
        :rtype: Float
        '''
        # Check configuration file
        config = check_config(config, catalogue.data)
        # Negative b-values will return nan - this simply skips the integral
        if config['b-value'] <= 0.0:
            return np.nan, np.nan

        obsmax, obsmaxsig = _get_observed_mmax(catalogue.data, config)

        beta = config['b-value'] * np.log(10.)
        sigbeta = config['sigma-b'] * np.log(10.)

        neq, mmin = _get_magnitude_vector_properties(catalogue.data, config)

        pval = beta / (sigbeta ** 2.)
        qval = (beta / sigbeta) ** 2.

        mmax = np.copy(obsmax)
        d_t = np.inf
        iterator = 0
        while d_t > config['tolerance']:
            rval = pval / (pval + mmax - mmin)
            ldelt = (1. / (1. - (rval ** qval))) ** neq
            delta = ldelt * quadrature(self._ksb_intfunc, mmin, mmax,
                                       args=(neq, mmin, pval, qval))[0]

            tmmax = obsmax + delta
            d_t = np.abs(tmmax - mmax)
            mmax = np.copy(tmmax)
            iterator += 1
            if iterator > config['maximum_iterations']:
                print 'Kijko-Sellevol-Bayes estimator reached'
                print 'maximum # of iterations'
                d_t = -np.inf

        return mmax.item(), np.sqrt(obsmaxsig ** 2. + delta ** 2.)