Source code for openquake.smt.tests.residuals.parsers.esm_database_parser_test

import os
import unittest
import numpy as np

from openquake.smt.residuals.parsers.esm_database_parser import (ESMDatabaseParser,
                                                                 ESMTimeSeriesParser,
                                                                 ESMSpectraParser)


BASE = os.path.join(os.path.dirname(__file__), "data")

EXP_ACCELERATION_NSAMPLES = [21000, 21000, 17000, 21000, 21000] # Nsamples of x-component per record
EXP_NRECS = 5 # Number of 3-component records
EXP_SPECTRA = [ # Spectra for x-component of each record's spectra
    np.array([
        202.628708, 230.446594, 240.905212, 266.374207, 462.467346, 506.369049, 555.699463, 571.831543, 514.927185, 547.056519,
        606.130615, 645.109375, 614.291748, 565.715881, 485.112152, 527.021423, 728.931885, 725.576721, 513.012939, 424.850403,
        320.291199, 286.387451, 320.054657, 309.808746, 259.72998, 248.407654, 226.159378, 199.330688, 157.077057, 165.737915,
        161.393829, 152.588699, 162.756027, 187.697922, 186.909729, 161.842331, 136.855392, 149.420074, 139.781876, 149.524078,
        145.540726, 156.546021, 199.309555, 216.361526, 211.814117, 152.414551, 146.491714, 143.5672, 138.106873, 129.440262,
        138.578751, 121.534393, 122.046532, 126.028297, 135.282837, 145.895035, 146.14473, 127.406395, 106.987419, 94.82412,
        81.288597, 78.492065, 83.925568, 90.967651, 79.631569, 73.653206, 79.531509, 80.198563, 88.011093, 87.138069,
        75.314201, 80.634796, 106.473564, 123.163719, 124.73793, 117.708084, 104.784592, 90.567566, 82.70974, 60.290367,
        51.235458, 49.843929, 55.823963, 53.509083, 56.709858, 52.381893, 48.397793, 44.698734, 45.961781, 45.318504,
        42.985977, 39.767498, 37.095665, 35.858555, 36.383343, 36.980034, 34.354485, 30.697994, 24.299124, 18.254791,
        12.913706, 10.277328, 9.376146, 8.380146, 9.375414
    ]),
    np.array([
        136.663696, 139.470291, 140.219345, 141.453659, 141.82576, 143.511826, 145.860077, 149.044144, 149.931, 154.063309,
        155.495728, 151.142685, 147.590088, 149.28392, 153.774048, 162.643448, 185.904114, 207.729126, 248.308456, 260.689514,
        262.475372, 343.002991, 401.145172, 372.695496, 371.628418, 449.22287, 460.638885, 415.722229, 349.497162, 318.326935,
        316.488831, 295.854401, 247.63475, 218.78598, 256.383575, 230.275375, 251.400314, 284.620026, 345.688965, 322.912872,
        321.086609, 342.005432, 302.135925, 326.49469, 326.59494, 299.151215, 230.981308, 264.403412, 295.899658, 316.19397,
        345.90097, 287.070648, 294.178558, 319.21701, 339.765472, 334.658813, 350.705719, 370.052582, 279.75589, 279.251343,
        264.617798, 250.128632, 371.490326, 432.53717, 406.593933, 306.973999, 224.607574, 224.469147, 242.26619, 283.484344,
        237.067734, 192.160477, 169.453629, 168.693237, 151.523773, 125.194107, 105.504799, 92.641602, 66.888702, 62.749157,
        63.455051, 62.948105, 60.523834, 64.43792, 74.737671, 73.227119, 71.600128, 69.877098, 72.322983, 73.273201,
        72.36956, 70.077347, 67.337585, 65.304688, 63.382698, 56.487968, 50.757996, 58.734077, 59.61359, 58.815365,
        53.836952, 49.330708, 45.17865, 41.176826, 36.791828
    ]),
    np.array([
        520.496033, 523.920288, 524.039124, 524.433533, 526.993347, 530.317078, 536.452209, 544.998962, 545.24353, 559.496948,
        563.912537, 575.00354, 576.357117, 577.330933, 580.327515, 583.468628, 619.462708, 637.916382, 626.0578, 637.854126,
        664.073792, 668.009216, 702.791809, 682.797119, 739.655212, 740.331726, 677.799316, 796.405457, 737.199219, 823.29657,
        853.320496, 830.243408, 646.514587, 669.837585, 833.002014, 872.721558, 704.595886, 639.137634, 753.221375, 897.972961,
        892.875977, 949.092529, 871.530396, 848.067261, 803.897949, 896.82428, 1150.831665, 1231.88623, 1329.116699, 1446.293457,
        1437.622681, 1406.237305, 1401.013184, 1384.178711, 1356.603027, 1287.041016, 1133.324707, 884.870056, 708.620422, 644.736816,
        636.703003, 642.001953, 775.790588, 957.53363, 933.30426, 778.851196, 585.164856, 522.01178, 510.477661, 753.846619,
        989.780518, 1007.868347, 892.273865, 809.550537, 752.944702, 649.300842, 591.759338, 542.811401, 414.09198, 343.55069,
        307.651001, 267.941284, 210.000198, 160.257278, 151.277969, 142.443741, 139.476562, 136.263519, 128.33638, 125.738785,
        123.525299, 120.313904, 120.925156, 121.453896, 118.15033, 99.420685, 90.988266, 85.704056, 78.823845, 76.867485,
        71.861374, 65.402428, 58.502331, 51.645321, 45.212784
    ]),
    np.array([
        82.524361, 82.658432, 82.685219, 82.629105, 82.896126, 82.820984, 82.843712, 83.268135, 83.439301, 83.08252,
        84.089577, 84.355476, 84.25576, 84.407845, 84.588379, 84.250755, 85.179306, 84.583641, 84.57502, 84.943085,
        85.206398, 86.766518, 90.610703, 85.780739, 83.352966, 86.652626, 88.712105, 82.049049, 90.457146, 88.406334,
        87.95536, 94.796501, 101.089546, 97.084183, 87.07756, 95.313011, 115.771942, 108.959114, 119.53566, 113.223915,
        109.380074, 103.664566, 109.904099, 112.6007, 117.097351, 141.649887, 120.157333, 121.26123, 124.82444, 124.114464,
        138.935837, 134.461227, 126.547073, 128.455261, 129.355621, 118.440979, 107.882416, 120.878448, 103.985771, 111.686989,
        123.124611, 121.99881, 130.789948, 142.347397, 149.577835, 152.580063, 170.271927, 182.399292, 144.44487, 130.365829,
        126.348686, 111.633324, 133.91333, 129.443436, 129.520737, 143.501495, 180.933121, 188.387009, 181.842484, 185.285919,
        191.886429, 201.46608, 197.28511, 173.999329, 158.206802, 145.018494, 140.628281, 135.593002, 133.529175, 138.488968,
        140.65274, 144.954712, 138.894531, 123.198273, 101.097702, 60.73748, 43.697216, 50.740318, 50.858673, 37.690552,
        31.483379, 29.570732, 27.476252, 26.269234, 27.51573
    ]),
    np.array([
        81.072357, 81.458801, 81.555267, 81.698471, 81.96019, 82.053123, 81.959312, 82.875481, 83.288918, 83.481964,
        84.072319, 83.948456, 84.29631, 84.949028, 86.457466, 87.665703, 82.7024, 94.253754, 98.333061, 95.377098,
        95.362259, 100.909058, 100.177231, 98.155373, 92.159851, 92.492264, 105.380196, 148.184326, 135.725983, 115.926979,
        117.535416, 113.424629, 120.784859, 143.655777, 145.960587, 131.795914, 140.691986, 143.544983, 138.141632, 162.399292,
        150.167236, 154.95549, 153.409088, 142.738297, 122.655533, 134.95694, 135.33139, 126.80294, 121.463318, 109.818596,
        99.079918, 109.277924, 140.913818, 149.118149, 148.834961, 138.685349, 142.545639, 160.298599, 118.666008, 115.959274,
        113.155594, 112.250847, 119.860229, 99.552544, 95.907982, 95.022079, 91.497765, 98.607101, 142.574326, 145.59343,
        170.626724, 196.753632, 198.467422, 184.573441, 166.32962, 152.904434, 130.138718, 106.147209, 71.445129, 59.639874,
        59.205811, 60.11639, 76.602165, 101.635155, 126.070801, 132.602631, 127.110886, 116.503548, 100.453148, 83.671638,
        70.306023, 70.951172, 79.294273, 84.478119, 82.791374, 54.258518, 41.49033, 39.860497, 40.365444, 37.779343,
        36.740837, 31.034426, 28.620152, 26.063612, 23.760561
    ])
]


[docs] class ESMDatabaseParserTest(unittest.TestCase): """ Test that metadata is parsed correctly when using the ESM database parser. """
[docs] @classmethod def setUpClass(cls): records = os.path.join(BASE, "esm_records_and_spectra") instance = ESMDatabaseParser(db_id='1', db_name='db', input_files=records) cls.database = instance.parse() # Parse the metadata of each record del instance
[docs] def test_nrecords(self): self.assertEqual(len(self.database.records), EXP_NRECS)
[docs] def test_time_series_parsing(self): for idx_rec, rec in enumerate(self.database.records): ts = ESMTimeSeriesParser(rec.time_series_files).parse_record() self.assertEqual(EXP_ACCELERATION_NSAMPLES[idx_rec], ts["X"]["Original"]["Acceleration"].shape[0])
[docs] def test_spectra_parsing(self): for idx_rec, rec in enumerate(self.database.records): sp = ESMSpectraParser(rec.spectra_files).parse_spectra() obs = sp["X"]["Spectra"]["Response"]["Acceleration"]['damping_05'] np.testing.assert_allclose(obs, EXP_SPECTRA[idx_rec])