• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

nikhil-sarin / redback / 21552326463

31 Jan 2026 10:58PM UTC coverage: 87.858% (+0.1%) from 87.714%
21552326463

push

github

web-flow
Merge pull request #311 from nikhil-sarin/claude/improve-logging-011CUyArWBWkX7cyfVNJF3e3

Enhance logging throughout the package for improved debugging and logging

96 of 117 new or added lines in 11 files covered. (82.05%)

9 existing lines in 3 files now uncovered.

12062 of 13729 relevant lines covered (87.86%)

0.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

64.47
/redback/get_data/utils.py
1
import os
1✔
2
import pandas as pd
1✔
3
import numpy as np
1✔
4

5
import astropy.io.ascii
1✔
6

7
from redback.utils import logger
1✔
8

9
_dirname = os.path.dirname(__file__)
1✔
10

11

12
def get_trigger_number(grb: str) -> str:
1✔
13
    """Gets the trigger number from the GRB table.
14

15
    :param grb: Telephone number of GRB, e.g., 'GRB140903A' or '140903A' are valid inputs.
16
    :type grb: str
17
    :return: The GRB trigger number.
18
    :rtype: str
19
    """
20
    grb = grb.lstrip('GRB')
1✔
21
    logger.debug(f"Looking up trigger number for GRB {grb}")
1✔
22
    grb_table = get_grb_table()
1✔
23
    trigger = grb_table.query('GRB == @grb')['Trigger Number']
1✔
24
    if len(trigger) == 0:
1✔
25
        logger.error(f"Trigger number not found for GRB {grb} in GRB table")
1✔
26
        raise TriggerNotFoundError(f"The trigger for {grb} does not exist in the table.")
1✔
27
    else:
28
        logger.debug(f"Found trigger number {trigger.values[0]} for GRB {grb}")
1✔
29
        return trigger.values[0]
1✔
30

31

32
def get_grb_table() -> pd.DataFrame:
1✔
33
    """
34
    :return: The combined long and short GRB table.
35
    :rtype: pandas.DataFrame
36
    """
37
    short_table = os.path.join(_dirname, '../tables/SGRB_table.txt')
1✔
38
    long_table = os.path.join(_dirname, '../tables/LGRB_table.txt')
1✔
39
    sgrb = pd.read_csv(
1✔
40
        short_table, header=0, on_bad_lines='skip', delimiter='\t', dtype='str')
41
    lgrb = pd.read_csv(
1✔
42
        long_table, header=0, on_bad_lines='skip', delimiter='\t', dtype='str')
43
    return pd.concat([lgrb, sgrb], ignore_index=True)
1✔
44

45

46
def get_batse_trigger_from_grb(grb: str) -> int:
1✔
47
    """Gets the BATSE trigger from the BATSE trigger table. If the same trigger appears multiple times,
48
    successive alphabetical letters need to be appended to distinguish the triggers.
49

50
    :param grb: Telephone number of GRB, e.g., 'GRB910425A' or '910425A' are valid inputs. An alphabetical letter
51
                needs to be appended if the event is listed multiple times.
52
    :type grb: str
53
    :return: The BATSE trigger number.
54
    :rtype: int
55
    """
56
    grb = "GRB" + grb.lstrip("GRB")
1✔
57
    logger.debug(f"Looking up BATSE trigger for {grb}")
1✔
58

59
    ALPHABET = "ABCDEFGHIJKLMNOP"
1✔
60
    try:
1✔
61
        dat = astropy.io.ascii.read(f"{_dirname}/../tables/BATSE_trigger_table.txt")
1✔
NEW
62
    except Exception as e:
×
NEW
63
        logger.error(f"Failed to read BATSE trigger table: {e}")
×
NEW
64
        raise
×
65

66
    batse_triggers = list(dat['col1'])
1✔
67
    object_labels = list(dat['col2'])
1✔
68

69
    label_locations = dict()
1✔
70
    for i, label in enumerate(object_labels):
1✔
71
        if label in label_locations:
1✔
72
            label_locations[label].append(i)
1✔
73
        else:
74
            label_locations[label] = [i]
1✔
75

76
    for label, location in label_locations.items():
1✔
77
        if len(location) != 1:
1✔
78
            for i, loc in enumerate(location):
1✔
79
                object_labels[loc] = object_labels[loc] + ALPHABET[i]
1✔
80

81
    try:
1✔
82
        index = object_labels.index(grb)
1✔
83
        trigger = int(batse_triggers[index])
1✔
84
        logger.debug(f"Found BATSE trigger {trigger} for {grb}")
1✔
85
        return trigger
1✔
86
    except ValueError:
1✔
87
        logger.error(f"GRB {grb} not found in BATSE trigger table")
1✔
88
        raise ValueError(f"GRB {grb} not found in BATSE trigger table")
1✔
89

90
def convert_ztf_difference_magnitude_to_apparent_magnitude(filters, diff_mag, diff_mag_err,
1✔
91
                                                           status, ref_mag, ref_mag_err):
92
    """
93
    Convert ztf difference magnitudes. This code is modified from https://lasair-ztf.lsst.ac.uk/lasair/static/mag.py
94

95
    :param filter: filters name
96
    :param diff_mag: difference magnitude
97
    :param diff_mag_err: difference magnitude error
98
    :param status: "t" or "f" depending on whether difference is positive or negative
99
    :param ref_mag: reference image magnitude
100
    :param ref_mag_err: reference image magnitude error
101
    :return: apparent magnitude, apparent magnitude error
102
    """
103
    zero_point_mag_dict = {"g":26.325, "r":26.275, "i":25.660}
×
104
    zero_points = np.array([zero_point_mag_dict[filters] for _ in range(len(filters))])
×
105

106
    magdiff = zero_points - ref_mag
×
107
    if magdiff > 12.0:
×
108
        magdiff = 12.0
×
109
    ref_flux = 10 ** (0.4 * (magdiff))
×
110
    ref_sigflux = (ref_mag_err / 1.0857) * ref_flux
×
111

112
    magdiff = zero_points - diff_mag
×
113
    if magdiff > 12.0:
×
114
        magdiff = 12.0
×
115
    difference_flux = 10 ** (0.4 * (magdiff))
×
116
    difference_sigflux = (diff_mag_err / 1.0857) * difference_flux
×
117

118
    # add or subract difference flux based on status flag
119
    if status == 't':
×
120
        dc_flux = ref_flux + difference_flux
×
121
    elif status == 'f':
×
122
        dc_flux = ref_flux - difference_flux
×
123
    else:
124
        raise ValueError("status must be 't' or 'f'")
×
125

126
    dc_sigflux = np.sqrt(difference_sigflux ** 2 + ref_sigflux ** 2)
×
127

128
    # apparent mag and its error from fluxes
129
    if dc_flux > 0.0:
×
130
        dc_mag = zero_points - 2.5 * np.log10(dc_flux)
×
131
        dc_sigmag = dc_sigflux / dc_flux * 1.0857
×
132
    else:
133
        dc_mag = zero_points
×
134
        dc_sigmag = diff_mag_err
×
135

136
    return {'dc_mag': dc_mag, 'dc_sigmag': dc_sigmag}
×
137

138
class TriggerNotFoundError(Exception):
1✔
139
    """ Exceptions raised when trigger is not found."""
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc