Skip to content

Commit 487de57

Browse files
committed
New option --detailed for print_families
1 parent fd53892 commit 487de57

File tree

3 files changed

+77
-24
lines changed

3 files changed

+77
-24
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ to the latest version.
2222
files without asking
2323
- New option `--freq_band` for trace plotting commands, to override the
2424
frequency band specified in the config file
25+
- New option `--detailed` for `print_families`, to print more detailed
26+
information about each family, including the list of events
2527
- Config option `waveform_data_path` renamed to `sds_data_path`
2628
- New config option `event_data_path` to specify the path to a local directory
2729
with waveform files organized per event

requake/config/parse_arguments.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,13 +309,18 @@ def parse_arguments(progname='requake'):
309309
)
310310
# ---
311311
# --- print_families
312-
subparser.add_parser(
312+
printfamilies = subparser.add_parser(
313313
'print_families',
314314
parents=[
315315
longerthan, shorterthan, minevents, family_numbers, print_format
316316
],
317317
help='print families to screen'
318318
)
319+
printfamilies.add_argument(
320+
'-d', '--detailed', action='store_true',
321+
help='print detailed information for each family, including a list '
322+
'of events'
323+
)
319324
# ---
320325
# --- plot_families
321326
plotfamilies = subparser.add_parser(

requake/families/print_families.py

Lines changed: 69 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,37 +11,49 @@
1111
"""
1212
import logging
1313
import numpy as np
14-
from ..config import generic_printer, rq_exit
14+
from ..config import config, generic_printer, rq_exit
1515
from .families import FamilyNotFoundError, read_selected_families
1616
logger = logging.getLogger(__name__.rsplit('.', maxsplit=1)[-1])
1717

1818

19-
def print_families():
19+
def _print_family_details(family, duration_units, duration_multiplier):
2020
"""
21-
Print families to screen.
21+
Print details of a family to screen.
22+
23+
:param family: Family to print.
24+
:type family: requake.families.Family
25+
:param duration_units: Units for duration.
26+
:type duration_units: str
27+
:param duration_multiplier: Multiplier for duration.
28+
:type duration_multiplier: float
2229
"""
23-
try:
24-
families = read_selected_families()
25-
except (FileNotFoundError, FamilyNotFoundError) as msg:
26-
logger.error(msg)
27-
rq_exit(1)
30+
print(f'Family: {family.number}')
31+
print(f'Number of events: {len(family)}')
32+
print(f'Longitude: {family.lon:.4f}')
33+
print(f'Latitude: {family.lat:.4f}')
34+
print(f'Depth: {family.depth:.3f} km')
35+
print(f'Start time: {family.starttime}')
36+
print(f'End time: {family.endtime}')
37+
duration = family.duration * duration_multiplier
38+
print(f'Duration: {duration:.2f} {duration_units}')
39+
print(f'Slip rate: {family.slip_rate:.1f} cm/y')
40+
print(f'Magnitude range: {family.magmin:.1f} - {family.magmax:.1f}')
41+
print('Events:')
42+
for event in family:
43+
print(f' {event}')
2844

29-
# determine duration units
30-
average_duration = np.mean([f.duration for f in families])
31-
avg_duration_in_days = average_duration * 365
32-
if 30 < avg_duration_in_days < 365:
33-
duration_multiplier = 12
34-
duration_units = 'mons'
35-
elif 1 < avg_duration_in_days < 30:
36-
duration_multiplier = 365
37-
duration_units = 'days'
38-
elif 1/24 < avg_duration_in_days < 1:
39-
duration_multiplier = 365 * 24
40-
duration_units = 'hours'
41-
else:
42-
duration_multiplier = 365 * 24 * 60
43-
duration_units = 'mins'
4445

46+
def _print_family_list(families, duration_units, duration_multiplier):
47+
"""
48+
Print a list of families to screen.
49+
50+
:param families: Families to print.
51+
:type families: list of requake.families.Family
52+
:param duration_units: Units for duration.
53+
:type duration_units: str
54+
:param duration_multiplier: Multiplier for duration.
55+
:type duration_multiplier: float
56+
"""
4557
headers_fmt = [
4658
('family', None),
4759
('nevents', None),
@@ -72,3 +84,37 @@ def print_families():
7284
]
7385
rows.append(row)
7486
generic_printer(rows, headers_fmt)
87+
88+
89+
def print_families():
90+
"""
91+
Print families to screen.
92+
"""
93+
try:
94+
families = read_selected_families()
95+
except (FileNotFoundError, FamilyNotFoundError) as msg:
96+
logger.error(msg)
97+
rq_exit(1)
98+
99+
# determine duration units
100+
average_duration = np.mean([f.duration for f in families])
101+
avg_duration_in_days = average_duration * 365
102+
if 30 < avg_duration_in_days < 365:
103+
duration_multiplier = 12
104+
duration_units = 'mons'
105+
elif 1 < avg_duration_in_days < 30:
106+
duration_multiplier = 365
107+
duration_units = 'days'
108+
elif 1/24 < avg_duration_in_days < 1:
109+
duration_multiplier = 365 * 24
110+
duration_units = 'hours'
111+
else:
112+
duration_multiplier = 365 * 24 * 60
113+
duration_units = 'mins'
114+
115+
if config.args.detailed:
116+
for family in families:
117+
_print_family_details(family, duration_units, duration_multiplier)
118+
print()
119+
else:
120+
_print_family_list(families, duration_units, duration_multiplier)

0 commit comments

Comments
 (0)