Changes for page FDSN Guide

Last modified by robert on 2025/03/24 12:02

From version 1.1
edited by robert
on 2025/03/24 10:00
Change comment: There is no comment for this version
To version 4.1
edited by robert
on 2025/03/24 10:36
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -2,29 +2,337 @@
2 2  {{toc/}}
3 3  {{/box}}
4 4  
5 += [[How to Install ObsPy>>url:https://github.com/obspy/obspy/wiki#installation]] =
6 +
7 += [[Seed-Vault>>https://github.com/AuScope/seed-vault]] =
8 +
5 5  = Connecting to an FDSN Server =
6 6  
11 +== How to connect to AusPass with & without authenticated access ==
12 +
13 +
14 +{{code language="python"}}
15 +import obspy
16 +from obspy.clients.fdsn import Client
17 +
18 +# Initialize FDSN client for AusPass
19 +
20 +# For open access data, no username or password is required.
21 +client = Client('AUSPASS')
22 +
23 +# To access restricted data, supply your username and password
24 +# Replace 'Z1' and '12345' with your actual credentials
25 +client = Client('AUSPASS', user='Z1', password='12345')
26 +{{/code}}
27 +
7 7  = Station Metadata =
8 8  
9 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
30 +Information such as site locations, sensor and data logger types, response information, etc are in the station metadata. This can be accessed directly(link) or via the obspy get_stations (link) tool.
10 10  
11 -
12 12  
13 -== Sub-paragraph ==
33 +== How to download event, station, instrument response ==
14 14  
15 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
16 16  
17 -=== Sub-sub paragraph ===
36 +{{code language="python"}}
37 +import obspy
38 +from obspy.clients.fdsn import Client
18 18  
19 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
40 +# Use AusPass client for station, waveform, and earthquake information
41 +client = Client("AUSPASS")
20 20  
21 21  
44 +# Download station information for AUMTC station in S1 network at the response level
45 +inv = client.get_stations(network="S1", station="AUMTC", location="*",
46 + channel="*", level="response")
47 +
48 +# Inventory metadata is stored in a Inventory > Network > Station > Channel hierarchy
49 +
50 +print(inv) #inventory level
51 +
52 +print(inv[0]) # network level (the first network in the inventory)
53 +
54 +print(inv[0][0]) # station level (the first station of the first network in the inventory)
55 +
56 +print(inv[0][0][0]) # channel level (the first channel of the first station of the first network in the inventoy)
57 +
58 +# you can also select items directly
59 +
60 +print(inv.select(station='AUMTC',channel='HHZ')[0][0][0])
61 +
62 +# instrument response is attached to a channel object
63 +
64 +response = inv.select(station='AUMTC',channel='HHZ')[0][0][0].response
65 +{{/code}}
66 +
22 22  = Waveform Data =
23 23  
24 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
69 +Waveform data (e.g. the actual seismic data) can be accessed directly (link) or via obspy's get_waveforms (link) tool. It can also be accessed via various tools such as seed-vault, pyweed, etc (add links).
25 25  
26 -== Sub-paragraph ==
71 +== Downloading and Storing data ==
27 27  
28 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
73 +=== How to download waveform data ===
29 29  
75 +{{code language="python"}}
76 +from obspy import UTCDateTime
77 +from obspy.clients.fdsn import Client
78 +
79 +# Initialize the FDSN client (you can also specify other data centers)
80 +client = Client("AUSPASS")
81 +
82 +# Event information
83 +network = "S1"
84 +station = "AUGRF"
85 +starttime = UTCDateTime("2021-09-21T23:15:53") # The time of the earthquake
86 +endtime = starttime + 360 # One hour of data after the earthquake
87 +
88 +# Download the MiniSEED data
89 +st = client.get_waveforms(network=network, station=station, location="*", channel="BHZ",
90 + starttime=starttime, endtime=endtime)
91 +# Save the stream to a MiniSEED file
92 +st.write("Woodspoint_2021.mseed", format="MSEED")
93 +print("Downloaded and saved the MiniSEED file.")
94 +{{/code}}
95 +
96 +=== How to download a LOT of waveform data ===
97 +
98 +{{code language="python"}}
99 +from obspy import UTCDateTime
100 +from obspy.clients.fdsn import Client
101 +import datetime
102 +
103 +# Initialize client and set parameters
104 +client = Client("IRIS")
105 +start_date = UTCDateTime("2023-07-01")
106 +end_date = UTCDateTime("2023-07-02")
107 +network = "S1"
108 +station = "AUMTS"
109 +channel = "BHZ"
110 +
111 +# Loop to download data one day at a time
112 +while start_date <= end_date:
113 + next_date = start_date + datetime.timedelta(days=1)
114 + try:
115 + st = client.get_waveforms(network, station, "*", channel, start_date, next_date)
116 + st.write(f"{start_date.date}.mseed", format="MSEED")
117 + except:
118 + print(f"Failed for {start_date} to {next_date}")
119 + start_date = next_date
120 +{{/code}}
121 +
122 +=== How to store and archive waveform data in SeisComP Data Structure (SDS) ===
123 +
124 +{{code language="python"}}
125 +import os
126 +from obspy import UTCDateTime, read
127 +from obspy.clients.fdsn import Client
128 +
129 +# Initialize the client
130 +client = Client("AUSPASS") # Replace with the correct client endpoint if different
131 +
132 +# Define event time and time window
133 +event_time = UTCDateTime("2021-09-21T23:15:53")
134 +starttime = event_time - 600 # 10 minutes before the event
135 +endtime = event_time + 1800 # 30 minutes after the event
136 +
137 +# Download the waveform data
138 +st = client.get_waveforms(network="S1", station="AUMTS", location="*", channel="*", starttime=starttime, endtime=endtime)
139 +
140 +# Create SDS structure: ROOT/YEAR/NET/STA/CHAN.TYPE/NET.STA.LOC.CHAN.YEAR.DAY
141 +sds_root = "." # Replace with your desired directory
142 +
143 +for tr in st:
144 + net = tr.stats.network
145 + sta = tr.stats.station
146 + loc = tr.stats.location
147 + chan = tr.stats.channel
148 + year = str(tr.stats.starttime.year)
149 + jday = str(tr.stats.starttime.julday).zfill(3)
150 +
151 + sds_path = os.path.join(sds_root, year, net, sta, f"{chan}.D", f"{net}.{sta}.{loc}.{chan}.{year}.{jday}")
152 +
153 + # Create directories if they don't exist
154 + os.makedirs(os.path.dirname(sds_path), exist_ok=True)
155 +
156 + # Save the trace as a MiniSEED file
157 + tr.write(sds_path, format="MSEED")
158 +{{/code}}
159 +
160 +== Common Data Operations ==
161 +
162 +=== How to remove instrument response ===
163 +
164 +{{code language="python"}}
165 +from obspy import read
166 +from obspy.core.util import AttribDict
167 +
168 +# Load the MiniSEED file
169 +st = read("Woodspoint_2021.mseed")
170 +
171 +# Download the instrument response
172 +inv = client.get_stations(network=network, station=station, location="*",
173 + channel="*", starttime=starttime, endtime=endtime,
174 + level="response")
175 +
176 +# Remove the instrument response
177 +output = 'VEL' # Output unit ('VEL' = velocity (default), 'DISP' = displacement, 'ACC' = acceleration)
178 +
179 +for tr in st:
180 + tr.remove_response(inventory=inv, output=output, plot=True)
181 +
182 +# Save the corrected MiniSEED file
183 +st.write("Woodspoint_2021_corrected.mseed", format="MSEED")
184 +{{/code}}
185 +
186 +=== How to apply a bandpass filter ===
187 +
188 +{{code language="python"}}
189 +from obspy import read
190 +
191 +# Load the MiniSEED file
192 +st = read("Woodspoint_2021.mseed")
193 +
194 +# Define the frequency band
195 +freq_min = 0.1 # Minimum frequency in Hz
196 +freq_max = 1.0 # Maximum frequency in Hz
197 +
198 +# Apply the bandpass filter
199 +for tr in st:
200 + tr.filter(type='bandpass', freqmin=freq_min, freqmax=freq_max)
201 +
202 +# Save the filtered MiniSEED file
203 +st.write("Woodspoint_2021_filtered.mseed", format="MSEED")
204 +{{/code}}
205 +
206 +=== How to slice a waveform ===
207 +
208 +{{code language="python"}}
209 +from obspy import read, UTCDateTime, Stream # Importing Stream here
210 +
211 +# Load the filtered MiniSEED file
212 +st = read("Woodspoint_2021_filtered.mseed")
213 +
214 +# Define the time window for slicing
215 +slice_start = UTCDateTime("2021-09-21T23:20:00")
216 +slice_end = slice_start +10
217 +
218 +# Slice the waveform for each Trace in the Stream
219 +sliced_st = Stream() # Now Stream is defined
220 +for tr in st:
221 + sliced_tr = tr.slice(starttime=slice_start, endtime=slice_end)
222 + sliced_st.append(sliced_tr)
223 +
224 +# Save the sliced MiniSEED file
225 +sliced_st.write("Woodspoint_2021_filtered_sliced.mseed", format="MSEED")
226 +{{/code}}
227 +
228 +=== How to save a waveform ===
229 +
230 +{{code language="python"}}
231 +# Save the sliced file as MiniSEED
232 +sliced_st.write("Woodspoint_2021_filtered_sliced.mseed", format="MSEED")
233 +
234 +# Or, save the sliced SAC file
235 +sliced_st.write("Woodspoint_2021_filtered_sliced.sac", format="SAC")
236 +{{/code}}
237 +
238 +=== How to convert miniSEED to SAC ===
239 +
240 +{{code language="python"}}
241 +from obspy import read
242 +
243 +# Read the MiniSEED file
244 +st = read("Woodspoint_2021.mseed")
245 +
246 +# Take the first Trace from the Stream
247 +tr = st[0]
248 +
249 +# Save that Trace as a SAC file
250 +tr.write("Woodspoint_2021.sac", format="SAC")
251 +{{/code}}
252 +
253 +
30 30  = Earthquake Data =
255 +
256 +Earthquake data can be accessed directly or via ObsPy's get_events code
257 +
258 +== How to download an Earthquake Catalog ==
259 +
260 +{{code language="python"}}
261 +from obspy.clients.fdsn import Client
262 +from obspy import UTCDateTime
263 +
264 +# Initialize the AusPass FDSN client
265 +client = Client("AUSPASS")
266 +
267 +# Define the time range for the earthquake catalog
268 +start_time = UTCDateTime("2021-08-01")
269 +end_time = UTCDateTime("2022-01-01") # End of year
270 +
271 +# Define the geographic region (latitude and longitude for Woodspoint, Victoria, Australia)
272 +latitude = -37.47
273 +longitude = 146.10
274 +max_radius = 5 # in degrees
275 +
276 +# Download the earthquake catalog
277 +catalog = client.get_events(starttime=start_time, endtime=end_time,
278 + minmagnitude=2, latitude=latitude, longitude=longitude,
279 + maxradius=max_radius)
280 +
281 +# Save the catalog to a file (e.g., QuakeML format)
282 +catalog.write("Woodspoint_earthquakes.xml", format="QUAKEML")
283 +{{/code}}
284 +
285 +== How to plot (Global) Earthquakes ==
286 +
287 +{{code language="python"}}
288 +from obspy import UTCDateTime
289 +from obspy.clients.fdsn import Client
290 +
291 +# Initialize FDSN client to connect to the IRIS data center
292 +client = Client("IRIS")
293 +
294 +# Set the time range for fetching earthquake data
295 +# Start time: January 1, 2023
296 +# End time: Current time
297 +starttime = UTCDateTime("2023-01-01")
298 +endtime = UTCDateTime()
299 +
300 +# Fetch earthquake events with a minimum magnitude of 7
301 +catalog = client.get_events(starttime=starttime, endtime=endtime, minmagnitude=7)
302 +#client.get_events(). This function returns a Catalog object that contains a list of Event objects.
303 +#Each Event object, in turn, has an Origins attribute that contains the depth information
304 +
305 +# Plot the fetched earthquake data using an orthographic projection
306 +catalog.plot(projection="ortho", title="Global Earthquakes with Magnitude >= 7 since 2023")
307 +#catalog.plot(), ObsPy automatically uses the depth information to color the events in the plot
308 +{{/code}}
309 +
310 +== How to plot (Local) Earthquakes ==
311 +
312 +{{code language="python"}}
313 +from obspy import UTCDateTime
314 +from obspy.clients.fdsn import Client
315 +
316 +# Initialize FDSN client
317 +client = Client("AUSPASS")
318 +
319 +# Define time range
320 +starttime = UTCDateTime("2023-01-01")
321 +endtime = UTCDateTime()
322 +
323 +# Latitude and longitude bounds for Australia
324 +minlatitude = -44.0
325 +maxlatitude = -10.0
326 +minlongitude = 113.0
327 +maxlongitude = 154.0
328 +
329 +# Fetch event data for Australia with a minimum magnitude
330 +catalog = client.get_events(starttime=starttime, endtime=endtime, minmagnitude=4,
331 + minlatitude=minlatitude, maxlatitude=maxlatitude,
332 + minlongitude=minlongitude, maxlongitude=maxlongitude)
333 +
334 +# Plot the earthquakes
335 +catalog.plot(projection="local", title="Australia Earthquakes", resolution="i")
336 +{{/code}}
337 +
338 +