def test_issue165(self): """ Test cases related to #165: - number of poles or zeros can be 0 - an unsupported response information somewhere in the metadata should not automatically raise an Error, if the desired information can still be retrieved This test also tests if a warning is raised if no startime is given. """ parser = Parser() file = os.path.join(self.path, "bug165.dataless") t = UTCDateTime("2010-01-01T00:00:00") # raises UserWarning with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") # Trigger a warning. parser.read(file) self.assertEqual(len(w), 1) self.assertTrue(issubclass(w[-1].category, UserWarning)) self.assertTrue('date' and 'required' in str(w[-1].message).lower()) # Triggers a warning. paz = parser.getPAZ("NZ.DCZ.20.HNZ", t) result = {'digitizer_gain': 419430.0, 'gain': 24595700000000.0, 'poles': [(-981 + 1009j), (-981 - 1009j), (-3290 + 1263j), (-3290 - 1263j)], 'seismometer_gain': 1.01885, 'sensitivity': 427336.0, 'zeros': []} self.assertEqual(paz, result) # triggers a UserWarning but still returns some results paz = parser.getPAZ("NZ.DCZ.10.HHZ", t) result = {'sensitivity': 838861000.0, 'seismometer_gain': 2000.0, 'digitizer_gain': 419430.0} self.assertEqual(paz, result)
def test_issue358(self): """ Test case for issue #358. """ filename = os.path.join(self.path, 'CL.AIO.dataless') parser = Parser() parser.read(filename) dt = UTCDateTime('2012-01-01') parser.getPAZ('CL.AIO.00.EHZ', dt)
def test_issue361(self): """ Test case for issue #361. """ filename = os.path.join(self.path, 'G.SPB.dataless') parser = Parser() parser.read(filename) # 1 - G.SPB..BHZ - raises UserWarning - no Laplace transform with warnings.catch_warnings(record=True): warnings.simplefilter("error", UserWarning) self.assertRaises(UserWarning, parser.getPAZ, 'G.SPB..BHZ') # 2 - G.SPB.00.BHZ - raises exception because of multiple results self.assertRaises(SEEDParserException, parser.getPAZ, 'G.SPB.00.BHZ') # 3 - G.SPB.00.BHZ with datetime - again no Laplace transform dt = UTCDateTime('2007-01-01') with warnings.catch_warnings(record=True): warnings.simplefilter("error", UserWarning) self.assertRaises(UserWarning, parser.getPAZ, 'G.SPB.00.BHZ', dt) # 4 - G.SPB.00.BHZ with later datetime works dt = UTCDateTime('2012-01-01') parser.getPAZ('G.SPB.00.BHZ', dt)
def test_getPAZFromXSEED(self): """ Get PAZ from XSEED file, testcase for #146 """ filename = os.path.join(self.path, 'dataless.seed.BW_FURT') sp1 = Parser(filename) sp2 = Parser(sp1.getXSEED()) paz = sp2.getPAZ('EHE') result = {'gain': 1.00000e+00, 'zeros': [0j, 0j, 0j], 'poles': [(-4.44400e+00 + 4.44400e+00j), (-4.44400e+00 - 4.44400e+00j), (-1.08300e+00 + 0.00000e+00j)], 'sensitivity': 6.71140E+08, 'seismometer_gain': 4.00000E+02, 'digitizer_gain': 1677850.0} self.assertEqual(sorted(paz.items()), sorted(result.items()))
def test_issue361(self): """ Test case for issue #361. """ filename = os.path.join(self.path, 'G.SPB.dataless') parser = Parser() parser.read(filename) # 1 - G.SPB..BHZ - no Laplace transform - works parser.getPAZ('G.SPB..BHZ') # 2 - G.SPB.00.BHZ - raises exception because of multiple results self.assertRaises(SEEDParserException, parser.getPAZ, 'G.SPB.00.BHZ') # 3 - G.SPB.00.BHZ with datetime - no Laplace transform - works dt = UTCDateTime('2007-01-01') parser.getPAZ('G.SPB.00.BHZ', dt) # 4 - G.SPB.00.BHZ with later datetime works dt = UTCDateTime('2012-01-01') parser.getPAZ('G.SPB.00.BHZ', dt)
def test_getPAZ(self): """ Test extracting poles and zeros information """ filename = os.path.join(self.path, 'arclink_full.seed') sp = Parser(filename) paz = sp.getPAZ('BHE') self.assertEqual(paz['gain'], +6.00770e+07) self.assertEqual(paz['zeros'], [0j, 0j]) self.assertEqual(paz['poles'], [(-3.70040e-02 + 3.70160e-02j), (-3.70040e-02 - 3.70160e-02j), (-2.51330e+02 + 0.00000e+00j), (-1.31040e+02 - 4.67290e+02j), (-1.31040e+02 + 4.67290e+02j)]) self.assertEqual(paz['sensitivity'], +7.86576e+08) self.assertEqual(paz['seismometer_gain'], +1.50000E+03) # Raise exception for undefined channels self.assertRaises(SEEDParserException, sp.getPAZ, 'EHE') # # Do the same for another dataless file # filename = os.path.join(self.path, 'dataless.seed.BW_FURT') sp = Parser(filename) paz = sp.getPAZ('EHE') self.assertEqual(paz['gain'], +1.00000e+00) self.assertEqual(paz['zeros'], [0j, 0j, 0j]) self.assertEqual(paz['poles'], [(-4.44400e+00 + 4.44400e+00j), (-4.44400e+00 - 4.44400e+00j), (-1.08300e+00 + 0.00000e+00j)]) self.assertEqual(paz['sensitivity'], +6.71140E+08) self.assertEqual(paz['seismometer_gain'], 4.00000E+02) # Raise exception for undefined channels self.assertRaises(SEEDParserException, sp.getPAZ, 'BHE') # Raise UserWarning if not a Laplacian transfer function ('A'). # Modify transfer_fuction_type on the fly for blk in sp.blockettes[53]: blk.transfer_function_types = 'X' with warnings.catch_warnings(record=True): warnings.simplefilter("error", UserWarning) self.assertRaises(UserWarning, sp.getPAZ, 'EHE') # # And the same for yet another dataless file # filename = os.path.join(self.path, 'nied.dataless.gz') f = StringIO(gzip.open(filename).read()) sp = Parser(f) gain = [+3.94857E+03, +4.87393E+04, +3.94857E+03] zeros = [[+0.00000E+00 + 0.00000E+00j, +0.00000E+00 + 0.00000E+00j], [ +0.00000E+00 + 0.00000E+00j, +0.00000E+00 + 0.00000E+00j, -6.32511E+02 + 0.00000E+00j ], [+0.00000E+00 + 0.00000E+00j, +0.00000E+00 + 0.00000E+00j]] poles = [[ -1.23413E-02 + 1.23413E-02j, -1.23413E-02 - 1.23413E-02j, -3.91757E+01 + 4.91234E+01j, -3.91757E+01 - 4.91234E+01j ], [ -3.58123E-02 - 4.44766E-02j, -3.58123E-02 + 4.44766E-02j, -5.13245E+02 + 0.00000E+00j, -6.14791E+04 + 0.00000E+00j ], [ -1.23413E-02 + 1.23413E-02j, -1.23413E-02 - 1.23413E-02j, -3.91757E+01 + 4.91234E+01j, -3.91757E+01 - 4.91234E+01j ]] sensitivity = [+4.92360E+08, +2.20419E+06, +9.84720E+08] seismometer_gain = [+2.29145E+03, +1.02583E+01, +2.29145E+03] for i, channel in enumerate(['BHZ', 'BLZ', 'LHZ']): paz = sp.getPAZ(channel) self.assertEqual(paz['gain'], gain[i]) self.assertEqual(paz['zeros'], zeros[i]) self.assertEqual(paz['poles'], poles[i]) self.assertEqual(paz['sensitivity'], sensitivity[i]) self.assertEqual(paz['seismometer_gain'], seismometer_gain[i]) sp = Parser(os.path.join(self.path, 'dataless.seed.BW_RJOB')) paz = sp.getPAZ("BW.RJOB..EHZ", UTCDateTime("2007-01-01")) result = { 'gain': 1.0, 'poles': [(-4.444 + 4.444j), (-4.444 - 4.444j), (-1.083 + 0j)], 'seismometer_gain': 400.0, 'sensitivity': 671140000.0, 'zeros': [0j, 0j, 0j], 'digitizer_gain': 1677850.0 } self.assertEqual(paz, result) paz = sp.getPAZ("BW.RJOB..EHZ", UTCDateTime("2010-01-01")) result = { 'gain': 60077000.0, 'poles': [(-0.037004000000000002 + 0.037016j), (-0.037004000000000002 - 0.037016j), (-251.33000000000001 + 0j), (-131.03999999999999 - 467.29000000000002j), (-131.03999999999999 + 467.29000000000002j)], 'seismometer_gain': 1500.0, 'sensitivity': 2516800000.0, 'zeros': [0j, 0j], 'digitizer_gain': 1677850.0 } self.assertEqual(sorted(paz.items()), sorted(result.items())) # last test again, check arg name changed in [3722] paz = sp.getPAZ(channel_id="BW.RJOB..EHZ", datetime=UTCDateTime("2010-01-01")) result = { 'gain': 60077000.0, 'poles': [(-0.037004000000000002 + 0.037016j), (-0.037004000000000002 - 0.037016j), (-251.33000000000001 + 0j), (-131.03999999999999 - 467.29000000000002j), (-131.03999999999999 + 467.29000000000002j)], 'seismometer_gain': 1500.0, 'sensitivity': 2516800000.0, 'zeros': [0j, 0j], 'digitizer_gain': 1677850.0 } self.assertEqual(sorted(paz.items()), sorted(result.items()))
def test_getPAZ(self): """ Test extracting poles and zeros information """ filename = os.path.join(self.path, 'arclink_full.seed') sp = Parser(filename) paz = sp.getPAZ('BHE') self.assertEqual(paz['gain'], +6.00770e+07) self.assertEqual(paz['zeros'], [0j, 0j]) self.assertEqual( paz['poles'], [(-3.70040e-02 + 3.70160e-02j), (-3.70040e-02 - 3.70160e-02j), (-2.51330e+02 + 0.00000e+00j), (-1.31040e+02 - 4.67290e+02j), (-1.31040e+02 + 4.67290e+02j)]) self.assertEqual(paz['sensitivity'], +7.86576e+08) self.assertEqual(paz['seismometer_gain'], +1.50000E+03) # Raise exception for undefined channels self.assertRaises(SEEDParserException, sp.getPAZ, 'EHE') # # Do the same for another dataless file # filename = os.path.join(self.path, 'dataless.seed.BW_FURT') sp = Parser(filename) paz = sp.getPAZ('EHE') self.assertEqual(paz['gain'], +1.00000e+00) self.assertEqual(paz['zeros'], [0j, 0j, 0j]) self.assertEqual(paz['poles'], [(-4.44400e+00 + 4.44400e+00j), (-4.44400e+00 - 4.44400e+00j), (-1.08300e+00 + 0.00000e+00j)]) self.assertEqual(paz['sensitivity'], +6.71140E+08) self.assertEqual(paz['seismometer_gain'], 4.00000E+02) # Raise exception for undefined channels self.assertRaises(SEEDParserException, sp.getPAZ, 'BHE') # Raise UserWarning if not a Laplacian transfer function ('A'). # Modify transfer_fuction_type on the fly for blk in sp.blockettes[53]: blk.transfer_function_types = 'X' with warnings.catch_warnings(record=True): warnings.simplefilter("error", UserWarning) self.assertRaises(UserWarning, sp.getPAZ, 'EHE') # # And the same for yet another dataless file # filename = os.path.join(self.path, 'nied.dataless.gz') f = compatibility.BytesIO(gzip.open(filename).read()) sp = Parser(f) gain = [+3.94857E+03, +4.87393E+04, +3.94857E+03] zeros = [[+0.00000E+00 + 0.00000E+00j, +0.00000E+00 + 0.00000E+00j], [+0.00000E+00 + 0.00000E+00j, +0.00000E+00 + 0.00000E+00j, -6.32511E+02 + 0.00000E+00j], [+0.00000E+00 + 0.00000E+00j, +0.00000E+00 + 0.00000E+00j]] poles = [[-1.23413E-02 + 1.23413E-02j, -1.23413E-02 - 1.23413E-02j, -3.91757E+01 + 4.91234E+01j, -3.91757E+01 - 4.91234E+01j], [-3.58123E-02 - 4.44766E-02j, -3.58123E-02 + 4.44766E-02j, -5.13245E+02 + 0.00000E+00j, -6.14791E+04 + 0.00000E+00j], [-1.23413E-02 + 1.23413E-02j, -1.23413E-02 - 1.23413E-02j, -3.91757E+01 + 4.91234E+01j, -3.91757E+01 - 4.91234E+01j]] sensitivity = [+4.92360E+08, +2.20419E+06, +9.84720E+08] seismometer_gain = [+2.29145E+03, +1.02583E+01, +2.29145E+03] for i, channel in enumerate(['BHZ', 'BLZ', 'LHZ']): paz = sp.getPAZ(channel) self.assertEqual(paz['gain'], gain[i]) self.assertEqual(paz['zeros'], zeros[i]) self.assertEqual(paz['poles'], poles[i]) self.assertEqual(paz['sensitivity'], sensitivity[i]) self.assertEqual(paz['seismometer_gain'], seismometer_gain[i]) sp = Parser(os.path.join(self.path, 'dataless.seed.BW_RJOB')) paz = sp.getPAZ("BW.RJOB..EHZ", UTCDateTime("2007-01-01")) result = {'gain': 1.0, 'poles': [(-4.444 + 4.444j), (-4.444 - 4.444j), (-1.083 + 0j)], 'seismometer_gain': 400.0, 'sensitivity': 671140000.0, 'zeros': [0j, 0j, 0j], 'digitizer_gain': 1677850.0} self.assertEqual(paz, result) paz = sp.getPAZ("BW.RJOB..EHZ", UTCDateTime("2010-01-01")) result = {'gain': 60077000.0, 'poles': [(-0.037004000000000002 + 0.037016j), (-0.037004000000000002 - 0.037016j), (-251.33000000000001 + 0j), (-131.03999999999999 - 467.29000000000002j), (-131.03999999999999 + 467.29000000000002j)], 'seismometer_gain': 1500.0, 'sensitivity': 2516800000.0, 'zeros': [0j, 0j], 'digitizer_gain': 1677850.0} self.assertEqual(sorted(paz.items()), sorted(result.items())) # last test again, check arg name changed in [3722] result = {'gain': 60077000.0, 'poles': [(-0.037004000000000002 + 0.037016j), (-0.037004000000000002 - 0.037016j), (-251.33000000000001 + 0j), (-131.03999999999999 - 467.29000000000002j), (-131.03999999999999 + 467.29000000000002j)], 'seismometer_gain': 1500.0, 'sensitivity': 2516800000.0, 'zeros': [0j, 0j], 'digitizer_gain': 1677850.0} with warnings.catch_warnings(record=True) as w: warnings.resetwarnings() paz = sp.getPAZ(channel_id="BW.RJOB..EHZ", datetime=UTCDateTime("2010-01-01")) self.assertEqual(len(w), 1) self.assertEqual(w[0].category, DeprecationWarning) self.assertEqual(sorted(paz.items()), sorted(result.items())) paz = sp.getPAZ(seed_id="BW.RJOB..EHZ", datetime=UTCDateTime("2010-01-01")) self.assertEqual(sorted(paz.items()), sorted(result.items()))