def test_decimal_time2(self): '''Tests the function utils.decimal_time''' self.year = np.array([1990]) np.testing.assert_allclose( utils.decimal_time(self.year, np.array([]), np.array([]), np.array([]), np.array([]), np.array([])), np.array([1990.]))
def get_decimal_time(self): ''' Returns the time of the catalogue as a decimal ''' return decimal_time(self.data['year'], self.data['month'], self.data['day'], self.data['hour'], self.data['minute'], self.data['second'])
def completeness(self, catalogue, config): '''Gets the completeness table :param catalogue: Earthquake catalogue as instance of :class: openquake.hmtk.seismicity.catalogue.Catalogue :param dict config: Configuration parameters of the algorithm, containing the following information: 'magnitude_bin' Size of magnitude bin (non-negative float) 'time_bin' Size (in dec. years) of the time window (non-negative float) 'increment_lock' Boolean to indicate whether to ensure completeness magnitudes always decrease with more recent bins :returns: 2-column table indicating year of completeness and corresponding magnitude numpy.ndarray ''' # If mag_bin is an array then bins are input, otherwise a single # parameter is input dyear = decimal_time( catalogue.data['year'], catalogue.data['month'], catalogue.data['day'], catalogue.data['hour'], catalogue.data['minute'], catalogue.data['second']) mag = catalogue.data['magnitude'] # Get magnitude bins self.magnitude_bin = self._get_magnitudes_from_spacing( catalogue.data['magnitude'], config['magnitude_bin']) # Get time bins _s_year, time_bin = self._get_time_limits_from_config(config, dyear) # Count magnitudes self.sigma, _counter, n_mags, n_times, self.time_values = ( self._count_magnitudes(mag, dyear, time_bin)) # Get completeness magnitudes comp_time, _gradient_2, self.model_line = ( self.get_completeness_points(self.time_values, self.sigma, n_mags, n_times)) # If the increment lock is selected then ensure completeness time # does not decrease if config['increment_lock']: for iloc in range(0, len(comp_time)): cond = ( (iloc > 0 and (comp_time[iloc] < comp_time[iloc - 1])) or np.isnan(comp_time[iloc])) if cond: comp_time[iloc] = comp_time[iloc - 1] self.completeness_table = np.column_stack([ np.floor(self.end_year - comp_time), self.magnitude_bin[:-1]]) return self.completeness_table
def completeness(self, catalogue, config): ''' Gets the completeness table. :param catalogue: Earthquake catalogue as instance of :class:`openquake.hmtk.seismicity.catalogue.Catalogue` :param dict config: Configuration parameters of the algorithm, containing the following information: 'magnitude_bin' Size of magnitude bin (non-negative float) 'time_bin' Size (in dec. years) of the time window (non-negative float) 'increment_lock' Boolean to indicate whether to ensure completeness magnitudes always decrease with more recent bins :returns: 2-column table indicating year of completeness and corresponding magnitude numpy.ndarray ''' # If mag_bin is an array then bins are input, otherwise a single # parameter is input dyear = decimal_time(catalogue.data['year'], catalogue.data['month'], catalogue.data['day'], catalogue.data['hour'], catalogue.data['minute'], catalogue.data['second']) mag = catalogue.data['magnitude'] # Get magnitude bins self.magnitude_bin = self._get_magnitudes_from_spacing( catalogue.data['magnitude'], config['magnitude_bin']) # Get time bins _s_year, time_bin = self._get_time_limits_from_config(config, dyear) # Count magnitudes self.sigma, _counter, n_mags, n_times, self.time_values = ( self._count_magnitudes(mag, dyear, time_bin)) # Get completeness magnitudes comp_time, _gradient_2, self.model_line = ( self.get_completeness_points(self.time_values, self.sigma, n_mags, n_times)) # If the increment lock is selected then ensure completeness time # does not decrease if config['increment_lock']: for iloc in range(0, len(comp_time)): cond = ((iloc > 0 and (comp_time[iloc] < comp_time[iloc - 1])) or np.isnan(comp_time[iloc])) if cond: comp_time[iloc] = comp_time[iloc - 1] self.completeness_table = np.column_stack( [np.floor(self.end_year - comp_time), self.magnitude_bin[:-1]]) return self.completeness_table
def test_decimal_time(self): '''Tests the function utils.decimal_time''' self.year = np.array([1990, 1995, 2000]) self.month = np.array([1, 6, 12]) self.day = np.array([1, 30, 31]) self.hour = np.array([0, 12, 23]) self.minute = np.array([0, 30, 59]) self.second = np.array([0.0, 30.0, 59.0]) np.testing.assert_allclose( utils.decimal_time(self.year, self.month, self.day, self.hour, self.minute, self.second), np.array([1990., 1995.49457858, 2000.99999997]))
def test_decimal_time1(self): '''Tests the function utils.decimal_time''' self.year = np.array([1990]) self.month = np.array([1]) self.day = np.array([1]) self.hour = np.array([0]) self.minute = np.array([0]) self.second = np.array([0.0, 30.0, 59.0]) np.testing.assert_allclose( utils.decimal_time(self.year, self.month, self.day, self.hour, self.minute, self.second), np.array([1990., 1990.000001, 1990.000002]))
def _get_decimal_from_datetime(time): ''' As the decimal time function requires inputs in the form of numpy arrays need to convert each value in the datetime object to a single numpy array ''' # Get decimal seconds from seconds + microseconds temp_seconds = np.float(time.second) + (np.float(time.microsecond) / 1.0E6) return decimal_time(np.array([time.year], dtype=int), np.array([time.month], dtype=int), np.array([time.day], dtype=int), np.array([time.hour], dtype=int), np.array([time.minute], dtype=int), np.array([temp_seconds], dtype=int))
def test_get_decimal_time(self): # Tests the decimal time function. The function itself is tested in # tests.seismicity.utils so only minimal testing is undertaken here to # ensure coverage time_dict = { 'year': np.array([1990, 2000]), 'month': np.array([3, 9]), 'day': np.ones(2, dtype=int), 'hour': np.ones(2, dtype=int), 'minute': np.ones(2, dtype=int), 'second': np.ones(2, dtype=float) } expected_dec_time = decimal_time(time_dict['year'], time_dict['month'], time_dict['day'], time_dict['hour'], time_dict['minute'], time_dict['second']) cat = Catalogue() for key in ['year', 'month', 'day', 'hour', 'minute', 'second']: cat.data[key] = np.copy(time_dict[key]) np.testing.assert_array_almost_equal(expected_dec_time, cat.get_decimal_time())
def test_get_decimal_time(self): # Tests the decimal time function. The function itself is tested in # tests.seismicity.utils so only minimal testing is undertaken here to # ensure coverage time_dict = {'year': np.array([1990, 2000]), 'month': np.array([3, 9]), 'day': np.ones(2, dtype=int), 'hour': np.ones(2, dtype=int), 'minute': np.ones(2, dtype=int), 'second': np.ones(2, dtype=float)} expected_dec_time = decimal_time(time_dict['year'], time_dict['month'], time_dict['day'], time_dict['hour'], time_dict['minute'], time_dict['second']) cat = Catalogue() for key in ['year', 'month', 'day', 'hour', 'minute', 'second']: cat.data[key] = np.copy(time_dict[key]) np.testing.assert_array_almost_equal(expected_dec_time, cat.get_decimal_time())
def test_decimal_time2(self): '''Tests the function utils.decimal_time''' self.year = np.array([1990]) self.assertTrue( np.allclose(utils.decimal_time(self.year, [], [], [], [], []), np.array([1990.])))
def test_decimal_time2(self): '''Tests the function utils.decimal_time''' self.year = np.array([1990]) self.assertTrue(np.allclose( utils.decimal_time(self.year, [], [], [], [], []), np.array([1990.])))