.. _catalyst-sec-tutorial: Tutorial: a week of Alaska picks ================================ This tutorial builds a reviewed catalogue from one week of automatic picks of the Alaska Earthquake Center (public data of the AK, AV and neighbouring networks): load the picks, nucleate seeds, locate them, remove the false ones with QC rules, merge duplicates, confirm the real ones with the spectra test, review the largest events and send the result. Each step shows the window with numbered markers; the numbers match the list below the figure. Step 1: Load the picks ---------------------- .. figure:: media/catalyst/tutorial-1-load.png :alt: Toolbar with the profile, the database window and the load options :width: 100% Choose the profile and load one week of picks. #. **Profile**: choose *alaska*. A profile holds the settings of the nucleation, the locator, the association and the QC rules for one network, see :ref:`catalyst-sec-profiles`. #. **Load** applies the profile. #. Set the **database window** to 2025-03-01 00:00 - 2025-03-08 00:00. #. Tick **picks** only. The catalogue is built from the picks, so no origins are loaded. *aggregate* stays ticked: it merges picks of the same onset made by several pickers. #. **DB** loads the window. A progress dialog shows the loading and the building of the tables; a week of picks takes a few seconds. Afterwards the number of picks appears at the top right of the Picks panel. .. figure:: media/catalyst/tutorial-1-picks.png :alt: Pick histogram of the loaded week, all picks unassociated :width: 60% The loaded week in the **Histogram** tab of the Picks panel. #. 124 331 picks are loaded. #. The colours separate associated picks (dark) from unassociated ones (light), per phase family P, S and Is. Without origins every pick is unassociated. #. Each bar counts the picks of six hours; there are about 3 500 to 5 000. Clicking a bar shows only its picks, see :ref:`catalyst-sec-pickfilters`. Step 2: Nucleate seeds with DBSCAN ---------------------------------- .. figure:: media/catalyst/tutorial-2-nucleate.png :alt: DBSCAN parameters, the seed origins in the table and on the map :width: 100% DBSCAN turns the week of picks into 2122 seed origins. #. In the Pick processing panel open **DBSCAN**. It clusters picks that are close in time and whose stations are close to each other, see :ref:`catalyst-sec-nucleation`. #. **Auto dist.** and **Auto vel.** derive the parameters from well-located origins selected in the origin table. The *alaska* profile already holds values found this way, so nothing needs to be selected here. #. Check the parameters: **Max dist** P / S (39.3 / 100.8 s) is the largest time distance between neighbouring picks, the velocities (7.86 / 4.39 km/s) turn station distances into time. **Phase** P+S clusters both phases, **Min size** 6 and **Min sta** 3 are the smallest cluster that becomes a seed. #. Press **Nucleate**. #. The seeds appear in the origin table: 2122 *preliminary* origins without an event. They are not located yet: the position is the centre of the cluster, the depth the default of 30 km, and the RMS is large. #. The map shows the seeds along the Aleutian arc and in southern and interior Alaska. #. In the histogram most picks are now associated (dark). The light rest belongs to no seed: noise picks and events too small to cluster. #. The location buttons now count the seeds: **Smart-locate all (2122)** is the next step. Step 3: Locate the seeds ------------------------ .. figure:: media/catalyst/tutorial-3-smartlocate.png :alt: The Smart-locate all confirmation and the progress dialog :width: 100% Smart-locate all: confirmation and progress. #. In the Origin processing panel, tab **Relocate**, press **Smart-locate all (2122)**. With no origin selected it works on all visible origins. Smart-locate relocates each seed, removes outlier arrivals and tries the alternative phase of doubtful picks, see :ref:`catalyst-sec-refine`. #. The confirmation says what will happen: every seed is located and the result accepted. Seeds that cannot be located, or whose picks do not fit one source, stay as they are and are not marked as updated. #. Press **Yes**. #. The progress dialog counts the located seeds; the origins are processed in parallel, here with 16 threads. A week of seeds takes a few minutes. #. **Cancel** stops after the origins in progress; the ones done so far keep their new location. Step 4: Look at the result -------------------------- .. figure:: media/catalyst/tutorial-4-result.png :alt: The origin table sorted by phase count, the active origin on the map and its arrivals :width: 100% After smart-locate: the origins sorted by phase count, the largest one selected. #. Click the **#Ph** header twice to sort by phase count, largest first. The best-constrained origins come to the top; the small ones, where most of the quality control happens later, go to the bottom. #. Click the top row. It is now the active origin: 217 phases, RMS 0.96 s and a depth of 207 km. The *preliminary* status is gone: the origin was located and accepted. #. Some of the large seeds are still *preliminary*, with a depth of 30 km and an RMS of 100 s and more. Smart-locate left them untouched because their picks do not fit one source. Typical reasons are two events close in time that DBSCAN put into one cluster, or a distant event whose arrivals cross the whole network. These seeds are handled in the next steps. #. The map shows the active origin (star), the rays to its stations and the stations coloured by their residual. #. The **Arrivals** tab lists its picks with phase, weight, residual, distance and azimuth. #. With an origin selected, the location buttons work on the selection only: **Smart-locate** and **Relocate** no longer show a count. Step 5: Remove the bad outliers with QC --------------------------------------- .. figure:: media/catalyst/tutorial-5-qc.png :alt: The QC tab with the rule set "Reject - bad fit" and the matching origins selected in the table :width: 100% The first reject rule selects the origins with an RMS over 1.7 s. #. Open the **QC** tab in the Origin processing panel, see :ref:`catalyst-sec-qc`. #. **Rule set** lists the rules of the *alaska* profile. The reject rules were derived from the confirmed origins of the network, so they hit almost no real event. Start with **1 Reject - bad fit (RMS over 1.7 s)**. #. The conditions of the rule, here **RMS [s] > 1.70**. **Read as** repeats them as a sentence. #. **Select matching** selects the origins that match the rule. **Match** shows how many. #. The matching origins are selected in the origin table. Check a few of them before rejecting: click one and look at its travel-time plot. #. **Reject matching** sets them to *rejected*. Repeat with the rule sets 2 and 3. .. figure:: media/catalyst/tutorial-5-deep.png :alt: The second reject rule, deeper than 300 km, with one match selected and its travel-time plot :width: 100% After the first rule: 707 origins left; the second rule finds 37 origins below the slab. #. Rejected origins are hidden: the origin table now counts 707. #. The next rule set, **2 Reject - below slab (deeper than 300 km)**. The Alaska slab has no earthquakes below about 300 km, so deeper solutions are artefacts. #. **Select matching** finds 37 origins. #. Click one of them, here a 469 km deep solution with 62 phases and an RMS of 1.66 s. #. Its travel-time plot shows why it is wrong: the used P arrivals start at about 400 km distance and there is no S. Without near stations depth and origin time trade off, and the locator moves the source down. Press **Reject matching**. #. The histogram shows the price of the first rule: the picks of the rejected seeds are unassociated (light) again. They are not lost, a second nucleation round can use them. .. figure:: media/catalyst/tutorial-5-far.png :alt: The third reject rule, nearest station over 160 km, refined with a mismatch condition :width: 100% Rule 3 with an extra condition: far from the stations *and* not seen by the stations nearby. #. After rule 2, 670 origins are left. #. Rule set **3 Reject - far from stations (nearest over 160 km)**. #. Alone, the distance condition would also hit real earthquakes: along the Aleutian arc and offshore the nearest station is often more than 160 km away. The rule therefore has a second condition, **AND Mismatch > 0.9**; the *alaska* profile already contains it. The mismatch is the weighted fraction of the nearby available stations that the origin does not use (0 = all used, 1 = none). A real event far from the network is still seen by the stations closest to it; a false solution far away is not. #. **Select matching** now finds 139 origins. Check a few and press **Reject matching**. #. For your own rules, **+ condition** adds a condition and **+ Save as…** stores the changed rule in the profile, so it is available next time. #. The travel-time plot of an offshore origin: the used P arrivals (red) follow the P curve from about 550 km on. The goal of this step is not a final catalogue, but a smaller set without the obvious false origins: the spectra of the next step load waveforms for every origin, so each origin removed here saves waiting time. Around 500 origins are a good size; in this week the first three rules already bring the 2122 seeds down to 531, so the tutorial continues with them. The rule sets 4 to 8 of the profile work the same way and can be applied in addition; they are not used here. Step 6: Merge duplicate origins ------------------------------- DBSCAN can produce two seeds for one earthquake, for example when a cluster is split at a gap in the picks. After smart-locate both end up at nearly the same place and time, often with picks in common: the event is in the list twice. Merging them before the spectra saves another waveform request and keeps the catalogue clean. .. figure:: media/catalyst/tutorial-6-aggregate.png :alt: The Aggregation tab of the Origin processing panel with the merge ranking :width: 100% Merging duplicate origins. #. Open the **Aggregation** tab in the Origin processing panel. #. **Merge origins** combines origins that describe the same event: their hypocentres and origin times are close, or they share enough picks, see :ref:`catalyst-sec-refine`. #. **Advanced parameters** holds the limits: merge distance and time, minimum shared picks and the pick match tolerance. #. The ranking decides which origin of a group is kept. The criteria are compared from top to bottom: here the origin with more phases wins, and with the same phase count the one with the lower RMS. #. **Add criterion** adds another one, for example Author or Method. #. **Calculate score** fills the Score column with the origin score plugin, which can then be used as a criterion as well. In this week merging removes only 6 origins (531 to 525): DBSCAN and smart-locate rarely produce the same event twice. The step is cheap, so it is worth doing anyway before the waveforms are loaded. Step 7: Calculate the spectra ----------------------------- .. figure:: media/catalyst/tutorial-7-spectra-run.png :alt: The 525 remaining origins on the map while the spectra are calculated :width: 100% 525 origins are left after QC and merging; the spectra are being calculated. #. The origin table counts 525 origins. #. The map shows what is left: the Aleutian arc, the Alaska Peninsula, Cook Inlet and interior Alaska, and only a few isolated origins. #. Press **Calculate spectra** in the QC tab. Catalyst loads the waveforms of the stations within the profile's spectra distance (200 km for Alaska) and compares the signal after the origin time with the noise before it, see :ref:`catalyst-sec-qc-spectra` and :ref:`catalyst-sec-vis-spectra`. While it runs the button becomes **Stop spectra** with the progress (40 of 525). For the 525 origins of this week it takes 2 to 3 minutes, depending on the connection to the waveform server. .. figure:: media/catalyst/tutorial-7-spectra-event.png :alt: The origin table sorted by Post with the spectra columns, and the Spectra tab of an origin near Mount Spurr :width: 100% The spectra columns in the origin table and the Spectra tab of a clear event. #. When the run is done, the origin table has three new values per origin: **Arch [dB]**, the height of the spectra above the noise, **Arch n**, the number of stations showing an event, and **Post [dB]**, the level of the window after S. Here the table is sorted by Post, highest first. #. A dash means no value: no station within the spectra distance, or no waveforms. A spectra rule does not match these origins, so they are neither rejected nor confirmed by it. #. The selected origin: Arch 58.5 dB on 5 stations, a clear event. Its Post of 50.6 dB is high as well: the stations are those of Mount Spurr volcano (AV.SP*), and another small earthquake follows within the window. #. The **Spectra** tab of the Active origin panel: for each station the P window (solid, left) and the S window (dashed, right) rise far above the noise (dotted) and form an arch over the middle line. #. The station table: distance, S−P time, the height of P and S above the noise, the arch, the post level and the verdict per station. #. **Threshold** (4 dB in the *alaska* profile) decides when a station counts as *event*; **scan ±** shifts the windows by up to 2 s to absorb small location errors. #. The summary: 5 of 5 stations show an event. .. figure:: media/catalyst/tutorial-7-spectra-noise.png :alt: The spectra rule "no event" with 101 matches and the Spectra tab of one of them :width: 100% The spectra rule *no event* and one of its 101 matches. #. Select the rule set **10 Spectra - no event (Arch under 3 dB)**. #. Its condition is **Arch [dB] < 3**: no station lifts the spectra 3 dB above the noise. #. **Select matching** finds 101 of the 525 origins. #. One of them: the P window (solid) barely rises above the noise (dotted), and in the S window the noise is even higher than the signal. There is no arch. #. Only one station lies within 200 km, AV.ANPB at 122 km, with an arch of 0.8 dB and the verdict *noise*. #. The summary: 0 of 1 stations show an event. #. **Reject matching** rejects them. Look at a few first: with a single distant station, as here, a small real event can stay below the threshold too. Such origins are better checked by hand than rejected blindly. .. figure:: media/catalyst/tutorial-7-confirm.png :alt: The spectra rule "confirmed" with 354 matching origins selected :width: 100% The spectra rule *confirmed* selects 354 of the remaining 424 origins. #. After rejecting the 101 *no event* origins, 424 are left. #. Select the rule set **12 Spectra - confirmed (Arch 4 dB, 3+ stations)**. #. Two conditions: **Arch [dB] ≥ 4 AND Arch n ≥ 3**, a clear arch on at least three stations. #. **Select matching** finds 354 origins. #. The origins without spectra values (dash) do not match and stay unselected. #. The matching origins are selected in the table and on the map. #. **Confirm matching** sets them to *confirmed*. The 70 origins that are neither rejected nor confirmed are the ones worth an analyst's time: no spectra values, an arch between 3 and 4 dB, or fewer than three stations with an event. Filter on them and check them one by one with the Travel-time, Move-out and Spectra tabs. .. figure:: media/catalyst/tutorial-7-confirmed.png :alt: The origin table sorted by phase count with the confirmed origins, and the spectra of the deepest one :width: 100% After confirming: the table sorted by phase count again. #. **Status** shows *confirmed* and **Mode** *manual* for the confirmed origins. #. Two well-recorded origins in the Aleutians (142 and 66 phases) are not confirmed: no station lies within the 200 km of the spectra test, so they have no spectra values. They belong to the origins to review. #. The Spectra tab of the largest origin, 207 km deep below the Alaska Peninsula: a clear arch on all stations. #. The S−P time of about 23 s at only 80 to 95 km epicentral distance fits the depth: the waves travel more than 200 km to the stations. #. 5 of 5 stations show an event. Step 8: Review the large origins -------------------------------- Confirmed or not, the origins with the most phases deserve a look: they are the best-recorded events of the week, and smart-locate may have left picks out that belong to them. Sort by **#Ph** again and go through them from the top. .. figure:: media/catalyst/tutorial-8-addpicks.png :alt: An Aleutian origin with its travel-time plot zoomed in, a box selection of picks next to the P curve and the relocation result in the status bar :width: 100% Adding picks that lie just outside the tolerance band. #. Select the origin, here the Aleutian event of 2025-03-01 16:14 with 142 phases. #. Zoom into the **Travel-time** plot, here to 1500 to 1900 km. The used picks (red) follow the P curve inside its tolerance band (shaded). Blue picks are not associated with the origin. #. Picks just next to the band at the right time are very likely P of this event, missed because of a small travel-time error at that distance. Hold **Shift** and draw a box around them: they are added to the origin and the arrivals already in use stay. A box without Shift keeps only the picks inside it. A double-click on a single pick adds it as well, see :ref:`catalyst-sec-refine`. #. Press **Relocate**. #. The status bar shows the result before it is accepted: 144 of 146 arrivals used, the location moved by 0.00 km and the RMS did not change. The added picks fit. #. **Accept origin** keeps the result; **Reset origin** discards it. .. figure:: media/catalyst/tutorial-8-arrivals.png :alt: The arrival table sorted by residual with the four added picks at the top and the context menu to rename their phase :width: 100% The added picks in the arrival table, sorted by residual. #. Open the **Arrivals** tab of the Active origin panel. #. Click the **Res [s]** header to sort by residual, largest first. #. The added picks come to the top: J17K, L18K, P19K and ILS, with residuals of 3.1 to 5.0 s at about 1500 km, just above the association tolerance of 3 s. Their marker (blue inside, red ring) shows a pending add: they are part of the origin from the next relocation on. #. If an added pick is not a P, select the rows and choose **Rename phase** from the context menu, see :ref:`catalyst-sec-vis-active`. #. The arrivals already in use follow with residuals below 3 s. #. After **Relocate** the status bar reports 144 of 146 arrivals used and no change of the location: the added picks fit the solution. Press **Accept origin**. .. figure:: media/catalyst/tutorial-8-rename.png :alt: The Rename phases dialog with source phase P and target pP for four selected arrivals :width: 100% Renaming the phase of the four added picks. #. Select the arrivals to rename, right-click and choose **Rename phase**. #. **Source** lists the phases of the selected arrivals, here P. #. Choose the **Target** phase, for example pP. #. **OK** renames them. The locator takes the new phase as given at the next relocation. Check a rename with the next **Relocate**: the residuals of the renamed picks must become small. A later phase has its own delay after P; for pP it grows with the depth of the source, about 13 to 15 s for 117 km at 1500 km. A pick 3 to 5 s after P at this depth therefore gets a large residual as pP, while it fits as P. **Reset origin** undoes the relocation if the rename does not fit. Step 9: Send the result ----------------------- Only the confirmed origins go out. Filter the table on them, select them and send them to the messaging system. .. figure:: media/catalyst/tutorial-9-filter.png :alt: The filter popup of the origin table with the status filter set to confirmed :width: 80% Filtering the origin table on confirmed origins. #. The filter button in the header of the origin table opens the filters. #. Under **Status** tick only **confirmed**. #. The table then lists only origins whose **Status** is *confirmed*; the count next to the filter button shows how many. .. figure:: media/catalyst/tutorial-9-send.png :alt: The 354 confirmed origins selected in the table and on the map, with the File menu entry Send Selection to Messaging :width: 100% The 354 confirmed origins of the week, ready to be sent. #. Press **Ctrl+A** in the origin table and choose **File → Send Selection to Messaging**. Catalyst sends the selected origins that are new or were changed, with their arrivals and magnitudes, see :ref:`catalyst-sec-workflow-send`. #. The filter shows **354 of 424** origins. #. All of them are selected. #. The map shows the confirmed events of the week: the Aleutian arc, the Alaska Peninsula, Cook Inlet and interior Alaska. #. The buttons count the selection: **Smart-locate 354**, **Relocate (354)**. .. figure:: media/catalyst/tutorial-9-confirm-send.png :alt: The confirmation before sending 354 origins to the messaging bus :width: 60% The confirmation before the origins are sent. #. Catalyst asks before sending and names the number of origins. #. The origins go out as new objects to the LOCATION group, with their arrivals; the picks they refer to are already in the system and are not sent again. #. **Yes** sends them. A progress dialog follows the three stages (collecting, preparing, sending). The sent origins then appear in :program:`scolv` and the other |scname| applications. What you did ------------ In nine steps a week of picks became a reviewed catalogue: .. csv-table:: :header: "Step", "Origins" :widths: 60, 20 "DBSCAN seeds", "2122" "After the QC rules 1 to 3", "531" "After merging duplicates", "525" "After rejecting *no event* by spectra", "424" "Confirmed by spectra", "354" "Left for review", "70" Where to go from here: * **A second round on the remaining picks.** The histogram still shows many unassociated picks: noise, small events, and the picks of the rejected seeds. Untick **Show associated** in the pick filters, so that only these picks are listed, and run another nucleator over them, for example **GaMMA-lite**, which separates events that overlap in time - the case DBSCAN merged into one seed in step 4. Then repeat steps 3 to 7 on the new seeds: smart-locate, QC, merging, spectra and confirmation. See :ref:`catalyst-sec-nucleation-gamma`. * **The next week.** The arrow buttons next to the database window move it by one week and load it; the profile stays the same, see :ref:`catalyst-sec-gui-toolbar`. * **The origins left for review.** Filter on the status *located* and go through them with the Travel-time, Move-out and Spectra tabs. * **Your own rules.** Change a QC rule set, test it with **Select matching** and store it with **+ Save as…**, see :ref:`catalyst-sec-qc`. * **Your own profile.** **Save as…** in the toolbar stores all parameters used in this tutorial, see :ref:`catalyst-sec-profiles`.