forked from obspy/obspy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG.txt
1689 lines (1659 loc) · 83.2 KB
/
CHANGELOG.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
master
======
Changes:
- obspy.*
* removed os.path calls with pathlib library calls (see #2751).
- obspy.clients.seishub:
* added deprecation message
- obspy.db:
* added deprecation message
* removed from default test suite
- obspy.core:
* add option to suppress evalresp sensitivity mismatch warning when removing
instrument response (see #2677)
* round magnitudes in Catalog/Event string representation to one decimal
(see #2742)
* add support for pathlib.Path objects in read(), read_inventory() and
read_events() functions (see #2743)
- obspy.clients.fdsn:
* introduce fine-grained FDSN client exceptions (see #2653)
* support for "eventtype" parameter in get_events(), as specified in version
1.2 of the FDSN event web service (see #2780)
- obspy.clients.filesystem:
* add get_waveforms_bulk() method to SDS client (see #2616, #2626)
- obspy.io.css:
* open CSS waveforms even if gzip-compressed (see #2736)
- obspy.io.hypodd
* add PHA write support (see #2687)
* add read support for horizontal and vertical origin uncertainty (see #2687)
- obspy.io.reftek:
* enable reading data with floating point sampling rates like low sampling
rate state-of-health channels (see #2678)
* fix reading data in '16' and '32' encodings, when packets do not use
the fixed maximum amount of available number of samples per data packet
(see #2678)
* properly take into account native system byteorder, should fix reading
rt130 data on big endian systems (see #2678)
- obspy.io.xseed:
* fix a bug reading SEED blockettes 48 and 58 which was likely never
encountered (see #2668)
- obspy.signal.array_analysis
* fixed an issue in array_processing function returning wrong times
for matplotlib versions >= 3.3 due to the epoch change in matplotlib
(see #2723)
- obspy.signal.cross_correlation:
* Remove deprecated xcorr function, remove deprecated domain keyword
argument in correlate function (see #1979)
- obspy.signal.spectral_estimation.PPSD:
* Added special handling option for infrasound data and global infrasound noise
models for plotting (see #2740)
maintenance_1.2.x
=================
Changes:
- obspy.core:
* Inventory addition now consistently uses shallow copies (#2675, #2694)
- obspy.clients.fdsn:
* add URL mapping for IRISPH5 (see #2739)
- obspy.clients.seedlink:
* Fix a bug in basic client when printing debug output (see #2734)
- obspy.io.gse2:
* When reading GSE2 bulletins, station magnitudes now include waveform IDs
and have associated station magnitude contributions (see #2718)
- obspy.io.xseed:
* Properly read a given value of 0.0 in station elevation and not replace it
with bogus value (see #2763)
1.2.2 (doi: 10.5281/zenodo.3921997)
===================================
Changes:
- obspy.core:
* Fix wrong values in Stats object after deepcopy or pickle of Stats object
for edge cases (see #2601)
- obspy.clients.fdsn:
* EIDA routing client: fix an issue that leaded to a request of *all* EIDA
data when requesting an invalid, out-of-epochs time window for a valid
station (see #2611)
* update RASPISHAKE URL mapping to use https
* fix a bug of not handling HTTPException in mass_downloader (see #2606)
* use the client's set timeout in service discovery, too (see #2656)
* add URL mapping for FDSNWS at UIB-NORSAR (see #2659)
- obspy.clients.filesystem:
* sds: continue get_all_stations() even if encountering an invalid channel
code (see #2636)
- obspy.clients.neic:
* Make client socket blocking (see #2617)
- obspy.io.hypodd:
* Allow 60.0 seconds in the second field of origin times, allow NaN in
the magnitude field for pha format (see #2627)
- obspy.io.nordic:
* Fixed a bug raising an exception when reading a nordic file with a non
positive-definite covariance matrix (see #2593)
- obspy.io.seiscomp:
* Fixed an issue where a response has zero zeros or poles (see #2633)
1.2.1 (doi: 10.5281/zenodo.3706479)
===================================
Changes:
- fix an installation issue with pip and setuptools version 46 (see #2578)
- fix response plots when providing `axes=...` with a numpy array of Axes
instances (see #2579)
1.2.0 (doi: 10.5281/zenodo.3674646)
===================================
Work on this release was in parts and among others supported by the following
institutions/companies and grants (in alphabetical order):
- Earthquake Commision of New Zealand (EQC), grant 18/753
- École et Observatoire des Sciences de la Terre - Université de Strasbourg
- ETH Zürich
- Friedrich-Schiller-Universität Jena
- Geoscience Australia
- Incorporated Research Institutions for Seismology (IRIS), NSF (SAGE) award
:: EAR-1851048
- Institut de Physique du Globe de Strasbourg
- Institut de Physique du Globe de Paris
- Institutions for Seismology (IRIS) through the PASSCAL Instrument Center at
New Mexico Tech. The facilities of the IRIS Consortium are supported by the
National Science Foundation under Cooperative Agreement EAR-1261681 and the
DOE National Nuclear Security Administration.
- Istituto Nazionale di Geofisica e Vulcanologia, Osservatorio Etneo (Italy),
Allegato B2 DPC-INGV 2012-2021 Task 10
- Ludwig-Maximilians-Universität München
- National Institute for Occupational Safety and Health
- Royal Netherlands Meteorological Institute (KNMI)
- School of Geography, Environment and Earth Sciences, Victoria University of
Wellington
- The European Union’s Horizon 2020 research and innovation programme under
the ChEESE project, grant agreement No. 823844
- The Royal Observatory of Belgium
- U.S. Geological Survey
Changes:
- obspy.core:
* Inventory objects have been adapted to StationXML 1.1 for details on
changes see #2510 and
https://github.com/FDSN/StationXML/blob/master/Changes.md
* Fixed import of custom plugins (see #2423)
* Fixed "==" comparison for Stream and Trace which was very slow in case of
traces with >1e6 samples (see #2377)
* Added almost_equal method for Stream and Trace classes (see #2286).
* Casting FDSN identifiers to strings upon setting in the stats dictionary
(see #1997).
* UTCDateTime objects will now always evaluate equal if their string
representations are equal (see #2049).
* UTCDateTime objects now issue depreciation warnings when setting any
attributes outside of init, or comparing UTCDateTime objects with
different precisions (see #2077).
* UTCDateTime objects can now accept hour, minute, second, and microsecond
values greater than their normal limits by setting the strict keyword
argument to False (see #2232).
* Fixed UTCDateTime(..., julday=366) for non-leap years. This was returning
January 1st of the next year in case of non-leap years being used. Now it
properly raises an out-of-bounds ValueError (see #2369)
* When reading StationXML/SC3ML, make sure to properly read empty string
fields as empty strings instead of "None" (see #2519 and #2527)
* Better ISO8601 detection for UTCDateTime objects and UTCDateTime(...,
iso8601=False) now completely disables ISO8601 handling (see #2447)
* Added replace method to UTCDateTime class (see #2077).
* Added remove method to Inventory class (see #2088).
* Added id property to WaveformStreamID (see #2131).
* Added __str__ and _repr_pretty_ method for Comment class (see #2115)
* Added __eq__ to QuantityError so empty instances equal None (see #2185).
* Reworked the event scoped resource identifiers for the event classes
hopefully fixing all edge-cases (see #2091).
* Added a hook to allow users to customize finding objects for
resource_ids which are not found via the normal means (see #2279).
* Calling Stream.write(...) on an empty stream will now raise an
ObsPyException consistently across all I/O plugins (see #2201)
* Stream.get_gaps() will now properly report gaps within Traces that
have masked arrays (i.e. Traces that have been merged without a fill
value, see #2299 and #2300).
* Added copy method to Inventory class (see #2322).
* The Response.recalculate_overall_sensitivity() method now accepts integers
(see #2338, #2343).
* Added wildcard and url support to read_inventory (see #2326).
* Modified stream.get_gaps() to deal with overlaps correctly (see #1403)
* Added option "label_epoch_dates" to Inventory/Network.plot_response() to
optionally add channel epoch start/end dates to legend labels (see #2309)
* Deprecated the convert_id_to_quakeml_uri, regenerate_uuid, and
get_quakeml_uri methods of the ResourceIdentifier class (see #2303).
* Added get_quakeml_uri_str and get_quakeml_id methods to the
ResourceIdentifier class (see #2303).
* New method to create response objects directly from poles and zeros (see
#1962).
* Added Stream.stack method (see #2440).
* Added a component field to the Stats object which allows to get and set
the last character of the SEED channel (see #2484).
* Fixed a bug in Stream.plot(type='section', reftime=..., ...) that caused
wrong relative start times of traces relative to given reftime (see #2493)
* Fixed a Windows-specific path case issue in a helper function that returns
a list of untracked files in the git repository (see #2296)
* Fix a bug that was causing an exception being raised in `Response.plot()`
because a float was being passed down to numpy.linspace as length of array
(see #2533)
* Geographic select of inventory/network/station (see #2515)
* Select traces in Stream based on an Inventory (see #2531)
- obspy.clients.fdsn:
* Add new `_discover_services` boolean flag to the Client, which allows the
Client to skip the initial services query at instantiation. This can
reduce the load on service providers, but skips checks against unsupported
query parameters.
* Adding more location codes to the default priority list in the mass
downloader (see #2155, #2159).
* The mass downloader now raises a warning if all channels from a station
have been deselected due to the default location priorities setting. This
is a pure usability improvement as it has been confusing users
(see #2159).
* Make sure that streams fetched via FDSN are properly trimmed to user
requested times if data center serves additional data around the start/end
(see #1887, #2298)
* Fix a problem that could spam subprocesses that were not closed in routed
clients (see #2342 and #2344)
* Make it possible to use signed EIDA tokens and also skip token validation
completely (see #2297)
* Adding a mapping for RASPISHAKE
- obspy.clients.filesystem.tsindex:
* Add new Client & Indexer modules based on IRIS time series index (see
#2206)
- obspy.clients.iris:
* Results of distaz method are now returned as native floats (see #2499)
- obspy.clients.neic:
* Properly use specified timeout value (see #2450)
- obspy.clients.seedlink:
* Add method "get_info()" to fetch information on what
networks/stations/locations/channels are served by the seedlink server
(see #2405)
* "get_waveforms()" can now be used with '*' and '?' wildcards in any part
of requested SEED ID, i.e. network, station, location and channel (see
#2405)
- obspy.clients.seishub:
* Properly handle fetching poles and zeros in presence of multiple metadata
files for a given station (see #2411)
- obspy.geodetics:
* New utility function `inside_geobounds()` to check whether an object is
inside a geographic bound (see #2515)
- obspy.imaging:
* obspy-scan can now be used with wildcarded SEED IDs when specifying what
to plot after scanning data (see #2227)
* Fix a problem in Scanner when loading npz on Python3 that was written on
Python2 (see #2413)
* Fix an issue that could make small landmasses not get plotted in basemap
plots (see #2471, #2477)
* Fixed a bug in Stream.plot(type='section', reftime=..., ...) that caused
wrong relative start times of traces relative to given reftime (see #2493)
- obspy.io:
* Added read support for receiver gather format v. 1.6 (see #2070)
* Added read support for FOCMEC 'out' and 'lst' files (see #2156)
* Added read support for HypoDD 'pha' files (see #2378)
- obspy.io.arclink:
* Accommodate change in SeisComP3 publicID delimiter from '#' to '/' in
ArclinkXML (see #2552)
- obspy.io.dmx:
* Add read support for INGV's DMX format (see #2452)
- obspy.io.gcf:
* Fixes Python 3.8 compatibility of GCF reader. (see #2505)
- obspy.io.mseed:
* Fix a bug resulting in an infinite loop when trying to read a FullSEED
file without any data records (see #2534 and #2535)
* Add ability to write int64 data to mseed if it can safely be downcast
to int32 data, otherwise raises ObsPyMSEEDError. (see #2356)
* The recordanalyzer can now detect calibration blockettes 300, 310,
and 320 (see #2370).
* Can now write zero sampling-rate traces. (see #2488, 2509)
- obspy.io.nordic:
* Add ability to read and write focal mechanisms and moment tensor
information. (see #1924)
* Add explicit warnings regarding unsupported sections of Nordic files.
* Fix mapping of magnitude-types between MS to S and Ms to s.
* Output preferred origin when writing to Nordic format instead of using
the first origin (see #2195)
* Include high-accuracy phase-pick reading and writing - high-accuracy is
now the default phase-writing format, a boolean flag `high_accuracy`
has been added to turn this off. (see #2351 and #2348)
* Allow long-phase names (both reading and writing) - longer than 4 char.
(see #2351)
* Include AIN as takeoff-angle when reading and writing nordic files
(see #2404).
* Add error ellipses and read high-accuracy hypocenter lines (see #2451)
* Fix the incorrect handling of events missing pick evaluation information
(see #2520)
- obspy.io.reftek:
* Implement reading reftek encodings '16' and '32' (uncompressed data,
16/32bit integers, see #2058 and #2059)
- obspy.io.rg16:
* Implement module to read waveforms and headers from fcnt format (see #2265).
* Fix reading when start+endtime are inside one data packet (see #2485).
- obspy.io.sac:
* Fix bug writing inventory with SOH channels to SACPZ (see #2200).
* Blank-pad character header variables, as opposed to NUL-padding them, to
comply with SAC behavior (see #2543).
- obspy.io.segy:
* Raise nicer error messages when header packing fails (see #2194, #2196).
* Show nice error message when trying to write a trace with too many samples
in it (see #2358, #1393)
- obspy.io.seg2:
* Handle data format code 3 trace data (#2022, #2385).
* Improve parsing of free-form entries (#2385).
* Fix non-native endian data loading (#2385).
- obspy.io.seiscomp:
* Adding support for SC3ML 0.10 (see #2024).
* Update xsl to allow conversion of amplitude picks not associated with
origins (see #2273).
* Very large performance improvement reading large sc3ml inventory files by
pre-indexing sensors, dataloggers and responses and reducing lxml calls
(see #2296).
* When reading StationXML/SC3ML, make sure to properly read empty string
fields as empty strings instead of "None" (see #2519 and #2527)
- obspy.io.sh:
* Add read support for SeismicHandler EVT event files (see #2109)
- obspy.io.shapefile:
* Add possibility to add custom database columns when writing catalog or
inventory objects to shapefile (see #2012 and #2305)
- obspy.io.stationxml:
* When reading StationXML/SC3ML, make sure to properly read empty string
fields as empty strings instead of "None" (see #2519 and #2527)
* Inventory objects have been adapted to StationXML 1.1 for details on
changes see #2510 and
https://github.com/FDSN/StationXML/blob/master/Changes.md
- obspy.io.quakeml:
* Allow writing invalid ids but raise a warning
(see #2104, #2090, #2093, #1872).
* Skip invalid enumeration values during reading but raise a warning.
(see #2106, #2098, #2095)
* Catalogs with empty event description objects can be round-tripped (see
#2339, #2340).
* Correctly handle QuakeML native namespaces (if they are not matching the
document root's namespace) as custom namespaces and parse them into
`.extra` (see #2466)
- obspy.io.xseed:
* Ability to parse SEED files with extra newlines between blockettes
(see #2383)
- obspy.signal.cross_correlation:
* Add new `correlate_template()` function with 'full' normalization option,
required for correlations in template-matching
(see #2035 and #2042).
* 'domain' parameter in correlate function is deprecated in favour of new
'method' parameter to be consistent with recent SciPy versions
(see #2042).
* Add `correlate_stream_template()` and `correlation_detector()`
functions to detect events based on template matching (see #2315)
- obspy.signal.PPSD:
* Changed numpy-based serialization as to not require pickling (see #2424).
* Fixed exact trace cutting for PSD segments (see #2040).
* Timestamp representations internally and in npz I/O were changed to use
integer nanosecond POSIX timestamps to avoid any potential floating point
inaccuracies and since this is also what UTCDateTime is based on nowadays
(see #2045).
* Fixed the check for new PSD slices whether they should be added or whether
they would add unwanted duplicated data (see #2229).
* Fix `period_lim` option when `xaxis_frequency=True` (see #2246).
* Added `allow_pickle` parameter to `PPSD.add_npz` and `PPSD.load_npz` and
set its default to `False` (see #2457).
* Added representation of earthquake models from Clinton & Heaton (2002) in
'plot()' method using option 'show_earthquakes' (see #2455).
- obspy.signal.polarization:
* Fix an issue with covariance matrix in vidale algorithm and make adaptive
windowing opt-out (see #2565)
* Fix an issue in selecting Z/N/E traces from given stream (see #2365)
- obspy.signal.trigger:
* Fix a bug in AR picker (see #2157)
* Option to return Baer-Kradolfer characteristic function from pk_mbaer
function added (see #2341)
- obspy.taup:
* Fix cycling through colors in ray path plots (see #2470, #2478)
* Fix a floating point issue on IBM machines (see #2559, #2560)
1.1.1: (doi: 10.5281/zenodo.1040770)
- General:
* Tests pass with numpy 1.14 (see #2044).
* Map plots now also work with matplotlib >= 2.2 (see #2089).
- obspy.core:
* UTCDateTime now raises a meaningful exceptions when passing invalid or
out-of-bounds 'julday' during initialization (see #1988)
* Fix pickling of traces with a sampling rate of 0 (see #1990)
* read_inventory() used with non-existing file path (e.g. typo in filename)
now shows a proper "No such file or directory" error message (see #2062)
* Fix Trace.times(type='matplotlib') being slow (see #2112)
* read_events() and read_inventory() now trial most common plugins first
(QuakeML/StationXML, ...) in case of automatic file format detection (i.e.
when file type was not explicitly specified, see #2113)
* Event instances with Origin instances that have do not have defined
latitude/longitude attributes will no longer raise a TypeError when
creating a string representation (see #2119 and #2127).
* Fix Stream.get_gaps() when a trace is completely overlapping another trace
(see #2218).
* Fix Exception when comparing ComparingObjects (see #2220).
* Fix UTCDateTime.strftime() when year is <1900 on Python 2 (see #2167)
* Inventory objects are more convenient to create now. Network, station, and
channel codes can now be optional. Additionally the source parameter of
inventories must no longer be specified at init time (see #2307, #2314).
- obspy.clients.arclink:
* Raise a warning at import time that the ArcLink protocol will be
deprecated soon (see #1987).
- obspy.clients.fdsn:
* Mass downloader: Priority lists are now correctly overwritten if `channel`
and/or `location` are set (see #1810, #2031, #2047).
* A few fixes and stability improvements for the mass downloader (see
#2081).
* Fixed routing startup error when running under certain locales (see #2147)
* Update the IPGP mapping (see #2268).
* Adding a mapping for the KNMI (see #2270) services.
- obspy.clients.nrl:
* Set input units of overall sensitivity to input units of first stage in
NRL.get_response() (see #2248)
- obspy.geodetics:
* Fix the vincenty inverse calculation for equatorial lines (see #2282).
- obspy.imaging:
* Normalize moment tensors prior to plotting in the mopad wrapper to
stabilize the algorithm (see #2114, #2125).
* fix some map plotting issues with cartopy and local projection (see #2193,
#2204)
- obspy.io.ascii:
* Fixes an issue with the time representation (see #2165, #2179).
- obspy.io.cnv:
* Bugfix when phase_mapping is passed as argument when writing a Catalog
object to CNV (see #2001)
- obspy.io.css:
* Fix automatic filetype detection (see #2160 and #2162)
- obspy.io.gcf:
* Fix reading stream ID for station/channel code in header (see #2289,
#2311)
* Fix bitmask in getting compression code (see #2290, #2310)
- obspy.io.mseed:
* Ability to read files that have embedded chunks of non SEED data. (see
#1981, #2057).
* Fix util.get_start_and_end_time returning sample rate = 0 when sample rate
= 1 (see #2069)
* Avoid showing invalid warnings when guessing endian during parsing
timestamps (see #1988)
* util.get_record_information() now works correctly for negative sampling
rate factors and multipliers (see #2030, #2191).
- obspy.io.nordic
* Bug-fix for amplitudes without magnitude_hint (see #2021)
* Bug-fix for wavefiles with full path stripping (see #2021)
* Bug-fix for longitudes between -100 and -180 (see #2197)
- obspy.io.reftek:
* Fix problems reading some Reftek 130 files, presumably due to floating
point accuracy issues in comparing timestamps. Internal representation of
time stamps is changed to integer nanosecond POSIX timestamp (see #2036,
#2038, #2105)
* Fix a bug that prevents reading files that have no data in first channel
(see #2101)
- obspy.io.sac:
* Allow passing on the byteorder flag from the top-level `obspy.read()`
function (see #2285, #2292).
- obspy.io.seiscomp:
* Fix inventory read when maxClockDrift is unset in SC3ML (see #1993)
* Fix the reading of FIR coefficients when multiple whitespaces in SC3ML
(see #2259)
* Fix the reading of the poles and zeros when multiple whitespaces in SC3ML
(see #2260).
* Fix reading files with zero sampling rates (see #2294 and #2293)
* Fix divide by zero error when parsing sc3ml files of zero sampling rage
(see #2294).
- obspy.io.stationxml
* Allow writing of dates before 1900 also on Python 2 (see #2013, #2015).
* Write the UTC time zone specifier to all times (see #2015).
* Units of first response stage as well as unit response stages are now
determined with some heuristics (see #2250, #2318).
- obspy.io.xseed:
* Third condition to split blockettes when reading RESP files. Now more
forgiving for slightly different files (see #2170, #2189)
- obspy.signal:
* Allow singular COUNT units in evalresp (see #2003, #2011).
* Fix an evalresp issue in case of an analog PAZ stage zero denominator (see
#2171 and #2190)
* PPSD: for safety reasons, raise an ObsPyException if trying to read a PPSD
npz file that was written with a newer version of the npz representation
than is used by current ObsPy version (see #2051)
* The ar_pick() trigger function now raises an error if the three data
arrays don't have the same length (see #1801, #2148).
* fix a precision issue in AR picker in case of low amplitude input (see
#2252 and #2253)
- obspy.taup:
* Fallback to linear slowness interpolation for very small and shallow
layers (see #2126, #2129).
* Fix bug preventing constant-velocity models with discontinuities at every
layer boundary from being built (see #2264).
* More robust resize method so TauPy now works properly on Python 3.7 (see
#2280, #2319).
1.1.0: (doi: 10.5281/zenodo.165135)
- General:
* Read support for Guralp Compressed Format (GCF) waveform data,
obspy.io.gcf (see #1449)
* Read support for Reftek 130 (rt130) waveform data,
obspy.io.reftek (see #1433)
* Add Nordic format (s-file) read/write (see #1517)
* Read and write support for events in the SCARDEC catalogue format
(see #1391).
* Read support for IASPEI ISF ISM 1.0 Bulletin event data,
(see #1946)
* Write support for AH (Ad Hoc version 1) format (see #1754)
* Client to access the Nominal Response Library (NRL) (see #1185).
* `obspy.read_inventory()` can now read dataless SEED and RESP files
(see #1185).
* change version number scheme for scenarios when no official version number
can be determined (see #1889 and #1916)
* Support for the IRIS Federator and EIDAWS FDSNWS web routing services
(see #1779 and #1919).
- obspy.core:
* UTCDateTime is now based on nanoseconds (long) instead of a unix
timestamp in microseconds (float) - resulting in higher precision and
support for years 1-9999 (see #1325)
* Ensure that Trace.data is always C-contiguous in memory (see #1704)
* Event/ResourceIdentifier is now object aware, meaning even if two
objects share a resource_id the distinct objects will be returned with
the get_referred_object method provided both are still in scope. If one
of the objects gets garbage collected, however, a warning will be issued
and the behavior will be the same as before (see #1644).
* Better error message when attempting to write invalid QuakeML resource
ids (see #1699).
* Stream/Trace.write() can now autodetect file format from file extension
(see #1321).
* New convenience property `.matplotlib_date` for `UTCDateTime` objects to
get matplotlib datetime float representation (which can be used in
time-based matplotlib axes, e.g. by Stream.plot(); see #1339).
* Trace.times() has new options `type` and `reftime` to support fetching an
array of sampletimes in various different timing varieties ("relative":
the old default, float relative to trace starttime or `reftime` in
seconds; "utcdatetime": absolute times as UTCDateTime objects;
"timestamp": array of float POSIX timestamps, compare
`UTCDateTime.timestamp`; "matplotlib": array of float matplotlib dates,
useful for plotting on matplotlib time axes; see #1307)
* A trace's stats.network/station/location/channel can now also be set in
one line using a SEED ID string (e.g. `trace.id = "GR.FUR..HHZ"`,
see #1439).
* Instrument correction for response list stages originating from inventory
objects (see #1514).
* `Stream.rotate(...)` can now also be used to rotate unaligned channels to
Z-N-E, given an Inventory (see #1310)
* Non finite floats (NaN, inf, -inf) can now no longer be set for all
event objects (see #1597).
* Instrument responses can now also be calculated for a given list of
frequencies (see #1598).
* Order of extra tags for event type classes serialized to QuakeML can now
be controlled by using an OrderedDict (see #1617)
* Bode plots can now optionally plot the phase in degrees (see #1763).
* `Stream.select()` now also works on the component level if channels only
have one letter (see #1847).
* Now strips all invalid characters from the temporary filenames used for
downloading data using the `read_X()` methods (see #1958).
- obspy.clients.earthworm:
* Much faster trace unpacking (see #1762).
- obspy.clients.fdsn:
* empty SEED codes (e.g. ``network=''``) will now be properly sent to the
server as options and not omitted, which led to wildcard matching (for
details see #1578)
* The mass downloader now has `exclude_networks` and `exclude_stations`
arguments to not download certain pieces of data. (see #1305)
* The mass downloader can now download stations that are part of a given
inventory object.
* The mass downloader now also works with restricted data. (See #1350)
* No data (HTTP 204) responses now raise `FDSNNoDataException` rather than
the more general `FDSNException`.
* Fixing cross implementation of bulk waveform and station requests (see
#1685).
* Adding mappings for the TEXNET (see #1852) and the ICGC (see #1902)
services.
* Support for the non-standard EIDA token authentication (see #1928).
- obspy.imaging:
* The functionality behind the `obspy-scan` command line script has been
refactored into a `Scanner` class so that it can be reused in custom
workflows. (see #1444)
* Almost always return the figure handle for the plots to make it work with
the jupyter notebooks (see #1615).
- obspy.imaging.cm:
* new colormap: viridis_white. This is a modification of viridis that
goes to white instead of yellow but remains perceptually uniform. It
is especially useful for printing when an image should merge with the
white background.
- obspy.imaging.waveform:
* Support for filling the wiggles when plotting sections (horizontal and
vertical, see #1445).
- obspy.io.arclink:
* Read support for Arclink Inventory XML (see #1539)
* default for `route` parameter in metadata requests is changed to `False`
(see #1756)
- obspy.io.ascii:
* Custom formatting of sample values when writing SLIST and TSPAIR.
- obspy.io.datamark:
* Renamed without deprectation to obspy.io.win to match its original name.
Datamark is a datalogger, saving the WIN format.
- obspy.io.gse2:
* Read support for GSE2.0 bulletin (see #1528)
- obspy.io.nlloc:
* Also parse author information and COMMENT line (see #1484)
* Fix reading hypocenter files created by NonLinLoc versions of the 6.0.x
beta branch (see #1760 and #1783)
* Fix reading NonLinLoc files that have 24:00 as hours or 60 seconds (see
#2222, #2324)
- obspy.io.quakeml:
* Read and write support for nested custom tags (see #1463)
* Fix some minor bugs that could lead to empty stub elements, e.g. like
empty MomentTensor when reading and later writing again a QuakeML file
with a FocalMechanism but no MomentTensor, potentially resulting in
QuakeML files that breach the QuakeML schema (see #1896)
- obspy.io.seiscomp:
* Read and write support for SC3ML event (see #1638 and #1848)
* Fix bug where files with arbitrary publicIDs and files with missing
depth, latitude, longitude, or elevation tags could not be read
(see #1817)
- obspy.io.stationtxt:
* Write support for stationtxt format (see #1466)
- obspy.io.stationxml:
* Read and write support for custom tags (see #1024)
* No longer add the (unused) time zone field to StationXML datetimes to
follow the example of big data centers. (see #1572)
* Level of detail can be specified during inventory write (see #1830)
using the level keyword (one of: network, station, channel, response).
* Skip empty and incomplete channels during reading (see #1839, #1840).
- obspy.io.segy:
* Fixing an issue when comparing two still packed SEG-Y trace headers
(see #1735).
* Iterative reading of large SEG-Y and SU files with
`obspy.io.segy.segy.iread_segy` and `obspy.io.segy.segy.iread_su`.
(see #1400).
* Write correct revision number (see #1737).
* Textual headers will now always contain the file revision number and the
end header mark if nothing else exists at these positions (see #1738).
* The SEG-Y format detection now also checks the format version number
(see #1781).
* Enable reading SEG-Y files that have day of year 0 in trace header
(see #1722).
* Write textual file headers also if given as a text string
(see #1811, #1813).
- obspy.io.css:
* Read support for NNSA KB Core format waveform data. (see #1332)
- obspy.io.mseed:
* New generic get_flags() utility function able to retrieve statistics
about all fixed header flags and the timing quality. This makes the
get_timing_and_data_quality() function obsolete which is thus
deprecated and will be removed with the next release. The get_flags()
function is also much faster. (see #1141)
* Always hook up the libmseed logging to its Python counterpart to avoid
some rare segfaults. (see #1658)
* Update to libmseed v2.19.5 (see #1703, #1780, #1939).
* Correctly read MiniSEED files with a data offset of 48 bytes (see #1540).
* InternalMSEEDReadingError now called InternalMSEEDError and
InternalMSEEDReadingWarning now called InternalMSEEDWarning as both
can now also be raised in non-reading contexts (see #1658).
* Should no-longer segfault with arbitrarily truncated files (see #1728).
* Will now raise an exception when attempting to directly read mini-SEED
files larger than 2048 MiB (#1746).
* `.stats.mseed` attributes are no longer per-file but per-trace where
applicable (see #1782).
* `get_record_information()` - Don't fail if the word order is invalid.
- obspy.io.nlloc:
* Set preferred origin of event (see #1570)
- obspy.io.nordic:
* Add Nordic format (s-file) read/write (see #1517)
- obspy.io.win:
* see obspy.io.datamark.
- obspy.io.xseed:
* Added azimuth and dip to the get_coordinates() function. (see #1315)
* Fixing some issues with the get_resp() output on Python 3 (see #1748).
* Can now also parse RESP files (see #1185).
* Can transform responses in the Parser object to ObsPy Inventory objects
(see #1185).
- obspy.scripts:
* obspy-scan command line script now also plots and prints overlaps
alongside gaps (see #1366)
* obspy-plot now has option to disable min/max plot (see #1583)
- obspy.signal:
* fixed a bug in calibration.rel_calib_stack (resulting amplitude response
had wrong scaling if using non-default "overlap_fraction", see #1821)
* fixed a bug in coincidence_trigger() with event templates. when a template
with mismatching SEED ID was encountered all following (potentially valid)
templates were skipped as well (see #1850)
* New obspy.signal.quality_control module to compute quality metrics from
MiniSEED files. (see #1141)
* New correlate function for calculating the cross-correlation function
(new implementation based on Scipy).
To calculate the shift of the maximum of the cross correlation use
xcorr_max. The old xcorr function is deprecated but currently still
exists (see #1585).
* New obspy.signal.regression module to compute linear regressions, with or
without weights, with or without allowing for an intercept. (see #1716,
#1747)
* add new plotting capabilities to PPSD (temporal variations per frequency
and spectrogram-like plot) and also make underlying processed PSDs
available via `PPSD.psd_values` property (see #1327)
* Fixed bug in `rotate2zne()` for non-orthogonal configurations
(see #1913, #1927).
* Fixed build warnings in evalresp, partially backported from evalresp
4.0.6 (see #1939).
- obspy.taup:
* Add obspy.taup.taup_geo.calc_dist_azi, a function to return the distance,
azimuth and backazimuth for a source - receiver pair. (see #1538)
* Fixing calculations through very small regional models. (see #1761)
* Updated ray path plot method, added travel time plot method, and wrapper
functions for both ray path and travel time plotting. (see #1501, #1877)
1.0.3: (doi: 10.5281/zenodo.165134)
- obspy.core:
* properly pass through kwargs specified for Trace.plot() down to the
low-level plotting routines (e.g. events were not shown properly in
dayplot of a trace, see #1566)
* properly pass through kwargs from Stream.detrend() to Trace.detrend()
(see #1607)
* Correctly splitting masked arrays in Trace objects for a couple of corner
cases (see #1650, #1653).
- obspy.core.event.source:
* Fix `farfield` if input `points` is a 2D array. (see #1499, #1553)
- obspy.clients.earthworm:
* Better end of stream detection. (see #1605)
* More efficient unpacking of server response. (see #1680)
- obspy.clients.neic:
* Better end of stream detection. (see #1563)
- obspy.clients.seedlink:
* Better end of stream detection. (see #1605)
- obspy.clients.seishub:
* Fix wrong kwargs `first_pick` and `last_pick` in
`Client.event.get_list()`. (see #1661)
- obspy.io.mseed:
* ObsPy can now also read (Mini)SEED files with noise records. (see #1495)
* ObsPy can now read records with a data-offset of zero. (see #1509, #1525)
* ObsPy can now read MiniSEED files with micro-second wrap arounds.
(see #1531)
* ObsPy can now read MiniSEED files with no blockette 1000. (see #1544)
* ObsPy now always writes Blockette 100 if sampling rate accuracy is
otherwise lost. (see #1550)
* obspy.io.mseed.util.set_flags_in_fixed_header() now works with Python 3
and also for files with Blockette 100 (see #1648).
- obspy.io.quakeml:
* write StationMagnitude.residual even when it is zero (see #1625)
* read & write Event.region
- obspy.io.sac:
* `SACTrace.lpspol` and `lcalda` are `True` and `False` by default, when
created via `SACTrace.from_obspy_trace` with a `Trace` that has no SAC
inheritance. (see #1507)
* Reference time not written to SAC file when made from scratch
(see #1575)
* Reinforce ASCII encoding in reading non-ASCII SAC files regardless of
default encoding setting. (see #1768)
* Implementing encoding flag for reading/writing SAC files.
* Fix passing through "byteorder" kwarg from obspy.read() (see #2292)
- obspy.io.sh:
* Fix writing of long headers for Python 3 (see #1526)
* Whitespace in header fields is not ignored anymore (see #1552)
- obspy.io.stationxml:
* Datetime fields are written with microseconds to StationXML if
microseconds are present. (see #1511)
- obspy.io.zmap:
* Use first origin/magnitude when writing to zmap if no origin/magnitude is
set as preferred. (see #1569)
* Parse origin time seconds as a float to avoid losing accuracy (see #1573)
- obspy.signal:
* PPSD: fix warning message on Python 3 that gets shown when waveforms and
metadata mismatch (see #1506)
- obspy.taup:
* Allow for more than 10 phases with identical names (can happen for certain
custom models, see #1593).
1.0.2: (doi: 10.5281/zenodo.49636)
- obspy.core:
* Added workaround for numpy issue where many FFTs of various lengths fill
a cache that never gets cleared, effectively creating a memory leak
(see #1424).
* Trace.filter and Stream.filter don't work on masked arrays anymore because
it produced unpredictable results due to the un-initialized data-chunk.
The uninitialized masked gap is now also initialized to np.nan in case
of floating point data which and a consistent fill value in case of
integer data. (see #1363)
- obspy.clients.fdsn:
* Fixing issue with location codes potentially resulting in unwanted data
to be requested. (see #1422)
* Included low-gain seismometers in default channel filters in
mass-downloader, also included non-oriented channels by default
(see #1373).
- obspy.db:
* Fixed a bug in obspy-indexer command line script (see #1369,
command line script was not working, probably since 0.10.0)
- obspy.imaging:
* Fixed a bug that leads to pressure/tension color blending when plotting
semi-transparent DC beachball patches (i.e. with "alpha" not equal to 1,
see #1464)
* Fixed a bug when plotting non-DC beachball patches without fill colors
(i.e. with "nofill=True", see #1464)
* Fix arbitrary units in waveform section plot's offset axis, making it
possible to add customizations to the plot afterwards (see #1382, see
#1383)
- obspy.io.ascii:
* Fixed a bug that lead to wrong header information in output files when
writing non-integer sampling rate data to SLIST or TSPAIR formats
(see #1447)
- obspy.io.cmtsolution:
* Make sure newer CMTSOLUTION files can also be read (see #1479).
- obspy.io.gse2:
* Fixed a bug that could lead to network code not present in GSE2 output
(see #1448)
- obspy.io.mseed:
* Fixed a bug in obspy-mseed-recordanalyzer (see #1386)
- obspy.io.nlloc:
* Use geographic coordinates from the NonLinLoc Hypocenter-Phase file if
no custom coordinate converter is provided. (see #1390)
* Fix reading NonLinLoc Hypocenter-Phase files with more than one
hypocenter in it. (see #1480)
* Fix reading NonLinLoc Hypocenter-Phase files with unicode characters in
them. (see #1483)
- obspy.io.quakeml:
* Fixed issue with improperly raised warnings when the same file is read
twice. (#1376)
* Fix writing empty network/station/channel codes in WaveformStreamID
objects to QuakeML. (see #1483)
- obspy.io.sac:
* Try to set SAC distances (dist, az, baz, gcarc) on read, if "lcalda" is
true. If "dist" header is found, distances aren't calculated.
* SACTrace class returns header values as native Python types instead of
NumPy types.
* SACTrace.iqual is no longer accepts enumerated string values, but
arbitrary integer values. (see #1472)
* SACTrace.read now replaces non-ASCII and null-termination characters in
string headers with whitespace unless the "debug_strings=True" flag is
used. (see #1432)
- obspy.io.stationxml:
* Always set the number attribute for poles and zeros. (see #1481)
- obspy.signal:
* PPSD.plot(): fix plotting of percentiles, mode and mean and setting
period limits when using "xaxis_frequency=True" (see #1406, #1416)
* Work around a bug in SciPy that results in wrong results for bandpass
filter when using Nyquist frequency (or higher) as high corner of the
passband (see #1451)
- obspy.taup:
* Fixing path for Pn. (see #1392)
1.0.1: (doi: 10.5281/zenodo.48254)
- General:
* Some methods might have unnecessarily upcasted float32 arrays to float64.
Now methods for which it makes sense and which don't lose accuracy don't
upcast float32 arrays. Integers are still upcasted. Trace.resample() will
also no longer return the original dtype which might have resulted in a
large loss of accuracy but it now always returns float64 arrays.
(see #1302)
- obspy.core:
* Trace.normalize() does no longer divide by zero in case an all-zeros
data trace is being used. (see #1343)
* Inventory.select() and consorts now behave as expected even with empty
child elements. (see #1126, #1348)
* Code formatting is no longer checked for clean release versions. Thus
updates to the linters no longer break the tests for releases.
(see #1312)
* remove_response(..., pre_file=None, plot=True) works again. (see #1320)
- obspy.clients.arclink:
* Restored ArcLink encryption support. (see #1352, #1347)
- obspy.clients.fdsn:
* Local URLs are now recognized as valid URLs. (see #1309)
* Some bug fixes for the mass downloader. (see #1293, #1304)
* The NOA node has been added to the list of known nodes.
(see 2347a25714bc3e16068031f4b6138fafd627d34e)
- obspy.io.sac:
* More automatic merging of SAC and ObsPy headers. The new `obspy.io.sac`
modules thus behaves more like the old one and more in line with
expectations of users. (see #1285)
* No more out of bounds errors when assigning coordinates. (see #1300)
* The evdp header can be set again. (see #1345)
* Correctly propagating sampling rate changes to the SAC headers.
(see #1317)
* Always set nvhdr, leven, lovrok, iftype to ensure valid SAC files.
(see #1204)
- obspy.io.xseed:
* The Parser.get_paz() method now works with multiple blockette 53s.
(see #1281)
- obspy.taup
* Fixed wrong azimuth direction for paths > 180 degrees distance (see #1289)
* Azimuth is appended to arrivals as well (see #1289)
* Fixed issue with taup cache function on Python 2.7. (see #1308)
1.0.0: (doi: 10.5281/zenodo.46151)
- General:
* Requirements have been increased to reflect latest distributions:
* Removed support for Python 2.6.
* Added support for Python 3.5.
* matplotlib >= 1.1.0 is now required.
* numpy >= 1.6.1 is now required
* scipy >= 0.9.0 is now required
* Reorganized the submodule structure. We provide a deprecation path so the
old imports will continue to work for one ObsPy version.
* Consistent naming scheme across the code base. This results in some
functions having different names. Most things that worked with ObsPy 0.10
will continue to work with this version, but starting with the next
version they will fail. Pay attention to the deprecation warnings.
* Support for additional waveform data formats:
- Read support for the ASCII format for waveforms from the K-NET and
KiK-net strong-motion seismograph networks.
* Support for additional event data formats:
- CMTSOLUTION files used by many waveform solvers.
- ESRI shapefile write support, useful in GIS applications (see #1066)
- Google Earth KML output.
* Support for additional station data format:
- The FDSN web service station text format can now be read.
- Read support for the NIED's moment tensor TEXT format (see #1125)
- Google Earth KML output.
- Read support for SeisComP3 inventory files.
- obspy.core:
* New method for generating sliding windows from Stream/Trace windows.
(see #860)
* Stream/Trace.slice() now has the optional `nearest_sample` argument from
Stream/Trace.trim().
* Trace.remove_response() now has `plot` option to show/output a plot of all
individual steps of instrument response removal in frequency domain
(see #1116).
* New method Stream/Trace.remove_sensitivity() to remove instrument
sensitivity
* Fix incorrect parsing of some non-ISO8601 date/time strings. (see #1215)
* Added plotting method to Event (customizable subplots from a selection
of map, beachball and farfield radiation plots, see #1192)
- obspy.clients.fdsn:
* Replace FDSN webservice shortcut `NERIES` with `EMSC` and deprecate the
`NERIES` shortcut, will be removed in a future release (see #1146).
* Now requests gzipped data for the XML files. Much smaller files!
* The station service can now also be used to download files in the text
format. This has limited information but is much faster.
* New mass downloader to assist in downloading data across a large number
of FDSN web services.
* Catch invalid URLs when initialising Client and avoid confusing error
messages (see #1162)
- obspy.clients.filesystem.sds:
* New client to read data from local SDS directory structure (see #1135).
* Command line script `obspy-sds-report` to generate html page with
information on latency, data availability percentage and number of gaps
for a local SDS archive (see #1202)
- obspy.clients.neries:
* Removed the dedicated client. Data can still be accessed by using the FDSN
client.
- obspy.clients.syngine:
* New client for the IRIS Syngine service to retrieve custom synthetic
seismograms.
- obspy.imaging:
* Experimental support for Cartopy when plotting maps. Use the `method`
argument to functions that plot maps to select between Basemap or Cartopy.
* New default colormap for all plots. A backport of the new viridis colormap
from matplotlib is available for those using older matplotlib releases.
* Added plotting routines for farfield radiation patterns of moment tensors
- obspy.io.kml:
* New module for Google KML output of Inventory and Catalog objects
(e.g. for use in Google Earth)
- obspy.io.mseed:
* Upgrade to libmseed 2.16
- obspy.io.seiscomp.sc3ml:
* New module reading SeisComP3 inventory files to ObsPy inventory objects
(see #1182).
- obspy.io.shapefile:
* New module for ESRI shapefile write support (see #1066)
- obspy.io.stationtxt:
* New module reading the FDSN station files.
- obspy.signal:
* Switch to second-order sections for filters; backported from SciPy 0.16.0
(see #1028)
* New Lanczos interpolation/resampling (see #1101)
* Higher order detrending methods (see #1173)
* PPSD (see #931, #1108, #1130, #1187):
- Algorithm for PSD computation was improved, especially affecting results
at long periods (for detailed discussion see #931 and #1108).
- Keywords `paz` and `parser` were removed in favor of new keyword
`metadata`. PPSD now accepts `metadata` in a much wider range
of formats:
* Inventory objects (e.g. from StationXML or from FDSN webservice)
* obspy.io.xseed Parser objects (e.g. from dataless SEED file)
* filename of a RESP file
* dictionary with poles and zeros information (like in
prior versions)
Most old codes should still work, issuing a deprecation warning, but
old code that specifies *both* `paz` and `parser` keywords will raise
an exception.
- Whenever possible (i.e. when using for `metadata` an Inventory,
a Parser or a RESP file), response calculation now takes into account
the full response (all stages) as opposed to only using the poles and
zeros response stage (as was done in previous versions when using a
Parser object). When using a poles and zeros dictionary response
calculation is unchanged (as no information on other stages is
available, of course).
- PPSD now stores the psd for each time segment that gets processed,
instead of only storing the stacked histogram. That way, differing
custom stacks with various selection criteria (e.g. time of day, by
weekday, etc.) can now be made from the same processed data
(see #1130).
- New save/load mechanism using numpy .npz binary format that circumvents
some problems with the old pickle mechanism:
`PPSD.save_npz()` and `PPSD.load_npz()` (and `PPSD.add_npz()` to add
data from additional npz files)
- Change default colormap to new obspy default sequential colormap
(matplotlibs new viridis colormap). The old PQLX colormap is provided by
`obspy.imaging.cm.pqlx` and can be used with
`PPSD.plot(..., cmap=...)`.
- new option `PPSD.plot(..., cumulative=True)` for a cumulative plot of
the histogram, i.e. a non-exceedence percentage visualization, similar
to the `percentile` option.
- x axis in `PPSD.plot()` can be switched to frequency in Hz with
`PPSD.plot(..., xaxis_frequency=True)` (see #1130)
- changes to special handling of rotational: now handled by kwarg
`special_handling="ringlaser"` (kwarg `is_rotational_data` is
deprecated, see #916)
- special handling option for hydrophone data (no differentiation, see
#916)
- bin width on frequency axis can now be controlled using