meteortools.utils.getShowerDates

 1# Copyright (C) 2018-2023 Mark McIntyre
 2#
 3# simple script to get the active shower list from the IMO working list
 4
 5import datetime
 6import os
 7import numpy as np
 8
 9try:
10    from ..fileformats import imoWorkingShowerList as iwsl
11except Exception:
12    from meteortools.fileformats import imoWorkingShowerList as iwsl
13
14
15def getShowerDets(shwr, stringFmt=False, dataPth=None):
16    """ Get details of a shower 
17    
18    Arguments:  
19        shwr:   [string] three-letter shower code eg PER  
20    Keyword Arguments:
21        stringFmt [bool] default False, return a string rather than a list
22        dataPth   [string] path to the datafiles. Default None means data read from internal files. 
23         
24    Returns:  
25        (id, full name, peak solar longitude, peak date mm-dd)  
26    """
27    sl = iwsl.IMOshowerList()
28    mtch = sl.getShowerByCode(shwr, useFull=True)
29    if len(mtch) > 0 and mtch['@id'] is not None:
30        id = int(mtch['@id'])
31        nam = mtch['name']
32        pkdtstr = mtch['peak']
33        dt = datetime.datetime.now()
34        yr = dt.year
35        pkdt = datetime.datetime.strptime(f'{yr} {pkdtstr}','%Y %b %d')
36        dtstr = pkdt.strftime('%m-%d')
37        pksollong = mtch['pksollon']
38    else:
39        id, nam, pksollong, dtstr = 0, 'Unknown', 0, 'Unknown'
40    if stringFmt:
41        return f"{pksollong},{dtstr},{nam},{shwr}"
42    else:
43        return id, nam, pksollong, dtstr
44
45
46def getShowerPeak(shwr):
47    """ Get date of a shower peak in MM-DD format
48    
49    Arguments:  
50        shwr:   [string] three-letter shower code eg PER  
51         
52    Returns:  
53        peak date mm-dd  
54    """
55    _, _, _, pk = getShowerDets(shwr)
56    return pk
57
58
59def numpifyShowerData():
60    """Refresh the numpy versions of the shower data files """
61    abs_path = os.getenv('WMPL_LOC', default='/home/ec2-user/src/WesternMeteorPyLib')
62    iau_shower_table_file = os.path.join(abs_path, 'wmpl', 'share', 'streamfulldata.csv')
63    iau_shower_table_npy = os.path.join(abs_path, 'wmpl', 'share', 'streamfulldata.npy')
64    iau_shower_list = np.loadtxt(iau_shower_table_file, delimiter="|", usecols=range(20), dtype=str)
65    np.save(iau_shower_table_npy, iau_shower_list)
66
67    gmn_shower_table_file = os.path.join(abs_path, 'wmpl', 'share', 'gmn_shower_table_20230518.txt')
68    gmn_shower_table_npy = os.path.join(abs_path, 'wmpl', 'share', 'gmn_shower_table_20230518.npy')
69    gmn_shower_list = _loadGMNShowerTable(*os.path.split(gmn_shower_table_file))
70    np.save(gmn_shower_table_npy, gmn_shower_list)
71
72
73def _loadGMNShowerTable(dir_path, file_name):
74    gmn_shower_list = []
75    with open(os.path.join(dir_path, file_name), encoding='cp1252') as f:
76        for line in f:
77            if line.startswith('#'):
78                continue
79            line = line.strip()
80            line = line.replace('\n', '').replace('\r', '')
81            if not line:
82                continue
83            la_sun, L_g, B_g, v_g, dispersion, IAU_no, IAU_code = line.split()
84            gmn_shower_list.append([
85                np.radians(float(la_sun)), 
86                np.radians(float(L_g)),
87                np.radians(float(B_g)), 
88                1000*float(v_g), 
89                np.radians(float(dispersion)), 
90                int(IAU_no)]
91            )
92    return np.array(gmn_shower_list)
def getShowerDets(shwr, stringFmt=False, dataPth=None):
16def getShowerDets(shwr, stringFmt=False, dataPth=None):
17    """ Get details of a shower 
18    
19    Arguments:  
20        shwr:   [string] three-letter shower code eg PER  
21    Keyword Arguments:
22        stringFmt [bool] default False, return a string rather than a list
23        dataPth   [string] path to the datafiles. Default None means data read from internal files. 
24         
25    Returns:  
26        (id, full name, peak solar longitude, peak date mm-dd)  
27    """
28    sl = iwsl.IMOshowerList()
29    mtch = sl.getShowerByCode(shwr, useFull=True)
30    if len(mtch) > 0 and mtch['@id'] is not None:
31        id = int(mtch['@id'])
32        nam = mtch['name']
33        pkdtstr = mtch['peak']
34        dt = datetime.datetime.now()
35        yr = dt.year
36        pkdt = datetime.datetime.strptime(f'{yr} {pkdtstr}','%Y %b %d')
37        dtstr = pkdt.strftime('%m-%d')
38        pksollong = mtch['pksollon']
39    else:
40        id, nam, pksollong, dtstr = 0, 'Unknown', 0, 'Unknown'
41    if stringFmt:
42        return f"{pksollong},{dtstr},{nam},{shwr}"
43    else:
44        return id, nam, pksollong, dtstr

Get details of a shower

Arguments:
shwr: [string] three-letter shower code eg PER
Keyword Arguments: stringFmt [bool] default False, return a string rather than a list dataPth [string] path to the datafiles. Default None means data read from internal files.

Returns:
(id, full name, peak solar longitude, peak date mm-dd)

def getShowerPeak(shwr):
47def getShowerPeak(shwr):
48    """ Get date of a shower peak in MM-DD format
49    
50    Arguments:  
51        shwr:   [string] three-letter shower code eg PER  
52         
53    Returns:  
54        peak date mm-dd  
55    """
56    _, _, _, pk = getShowerDets(shwr)
57    return pk

Get date of a shower peak in MM-DD format

Arguments:
shwr: [string] three-letter shower code eg PER

Returns:
peak date mm-dd

def numpifyShowerData():
60def numpifyShowerData():
61    """Refresh the numpy versions of the shower data files """
62    abs_path = os.getenv('WMPL_LOC', default='/home/ec2-user/src/WesternMeteorPyLib')
63    iau_shower_table_file = os.path.join(abs_path, 'wmpl', 'share', 'streamfulldata.csv')
64    iau_shower_table_npy = os.path.join(abs_path, 'wmpl', 'share', 'streamfulldata.npy')
65    iau_shower_list = np.loadtxt(iau_shower_table_file, delimiter="|", usecols=range(20), dtype=str)
66    np.save(iau_shower_table_npy, iau_shower_list)
67
68    gmn_shower_table_file = os.path.join(abs_path, 'wmpl', 'share', 'gmn_shower_table_20230518.txt')
69    gmn_shower_table_npy = os.path.join(abs_path, 'wmpl', 'share', 'gmn_shower_table_20230518.npy')
70    gmn_shower_list = _loadGMNShowerTable(*os.path.split(gmn_shower_table_file))
71    np.save(gmn_shower_table_npy, gmn_shower_list)

Refresh the numpy versions of the shower data files