예제 #1
0
    def test_align_site_responses_mean(self):
        eps = 1e-7
        r = {
            'E1': {
                'R': {
                    'S1': [4],
                    'S2': [8]
                },
                'W': [1]
            },
            'E2': {
                'R': {
                    'S1': [8],
                    'S2': [1000]
                },
                'W': [2]
            }
        }
        r = {'events': r}
        std1 = _Rstd(_collectR(r))
        align_site_responses(r)
        std2 = _Rstd(_collectR(r))

        s1 = r['events']['E1']['R']['S1'][0]
        s2 = r['events']['E2']['R']['S1'][0]
        s3 = r['events']['E1']['R']['S2'][0]
        s4 = r['events']['E2']['R']['S2'][0]

        self.assertLess(abs(s1 * s2 * s3 * s4 - 1), eps)
        self.assertLess(std2, std1)
예제 #2
0
    def test_align_site_responses_offset(self):
        eps = 1e-7
        r = {
            'E1': {
                'R': {
                    'S1': [4],
                    'S2': [4]
                },
                'W': [1]
            },
            'E2': {
                'R': {
                    'S1': [8],
                    'S2': [8]
                },
                'W': [2]
            }
        }
        r = {'events': r}
        std1 = _Rstd(_collectR(r))
        r2 = align_site_responses(r)
        std2 = _Rstd(_collectR(r2))

        s1 = r2['events']['E1']['R']['S1'][0]
        s2 = r2['events']['E2']['R']['S1'][0]
        w1 = r2['events']['E1']['W'][0]
        w2 = r2['events']['E2']['W'][0]

        self.assertLess(abs(s1 - 1), eps)
        self.assertLess(abs(s2 - 1), eps)
        self.assertLess(abs(w1 - 4), eps)
        self.assertLess(abs(w2 - 16), eps)
        self.assertLess(std2, std1)
예제 #3
0
 def test_align_site_responses_large_dataset_usarray(self):
     eps = 1e-5
     fname = resource_filename('qopen', 'tests/data/usarray_dataset.json')
     with open(fname) as f:
         r = json.load(f)
     sta = 'TA.B12A'
     rsp = 10
     std1 = _Rstd(_collectR(r))
     r2 = align_site_responses(deepcopy(r), station=sta, response=rsp)
     std2 = _Rstd(_collectR(r2))
     Rm = _Rmean(_collectR(r2, only={sta}))
     self.assertLess(abs(Rm - np.log(rsp)), eps)
     rsp = 100
     align_site_responses(r, response=rsp)
     std3 = _Rstd(_collectR(r))
     self.assertLess(abs(_Rmean(_collectR(r)) - np.log(rsp)), eps)
     self.assertLess(std2, std1)
     self.assertLess(std3, std1)
     self.assertLess(abs(std2 - std3), eps)
예제 #4
0
 def test_align_site_responses_only_largest_area(self):
     eps = 1e-7
     r = {
         'E1': {
             'R': {
                 'S1': [4],
                 'S2': [6],
                 'S3': [500],
                 'S0': [None]
             },
             'W': [1]
         },
         'E2': {
             'R': {
                 'S1': [8],
                 'S2': [50],
                 'S4': [3]
             },
             'W': [2]
         },
         'E3': {
             'R': {
                 'S1': [None],
                 'S2': [100],
                 'S3': [10000]
             },
             'W': [4]
         },
         'E4': {
             'R': {
                 'S5': [50000]
             },
             'W': [8]
         },
         'E5': {
             'R': {
                 'S6': [5000],
                 'S7': [None]
             },
             'W': [1]
         },
         'E6': {
             'R': {
                 'S7': [1],
                 'S8': [None]
             },
             'W': [1]
         },
         'E7': {
             'R': {
                 'S9': [1],
                 'S10': [None]
             },
             'W': [1]
         },
     }
     r = {'events': r}
     rsp = 100
     std1 = _Rstd(_collectR(r))
     r2 = align_site_responses(deepcopy(r), response=rsp, station='S1')
     std2 = _Rstd(_collectR(r2))
     s11 = r2['events']['E1']['R']['S1'][0]
     s12 = r2['events']['E2']['R']['S1'][0]
     self.assertLess(abs((s11 * s12)**0.5 - rsp), eps)
     self.assertLess(std2, std1)
     rsp = 0.001
     align_site_responses(r, response=rsp)
     std3 = _Rstd(_collectR(r))
     s11 = r['events']['E1']['R']['S1'][0]
     s12 = r['events']['E2']['R']['S1'][0]
     s13 = r['events']['E3']['R']['S1'][0]
     s21 = r['events']['E1']['R']['S2'][0]
     s22 = r['events']['E2']['R']['S2'][0]
     s23 = r['events']['E3']['R']['S2'][0]
     s31 = r['events']['E1']['R']['S3'][0]
     s33 = r['events']['E3']['R']['S3'][0]
     s4 = r['events']['E2']['R']['S4'][0]
     s5 = r['events']['E4']['R']['S5'][0]
     w4 = r['events']['E4']['W'][0]
     s = ((s11 * s12)**0.5 * (s21 * s22 * s23)**(1. / 3) *
          (s31 * s33)**0.5 * s4)**0.25
     Rm = _Rmean(_collectR(r))
     self.assertLess(abs(Rm - np.log(s)), eps)
     self.assertLess(abs(s - rsp), eps)
     self.assertLess(abs(Rm - np.log(rsp)), eps)
     self.assertEqual(s13, None)
     self.assertEqual(s5, None)
     self.assertEqual(w4, None)
     self.assertLess(std3, std1)
     self.assertLess(abs(std2 - std3), eps)