This Jupyter notebook can be downloaded from WorkingWithFlags.ipynb, or viewed as a python script at WorkingWithFlags.py.

Working With TOA Flags

PINT provides methods for working conveniently with TOA flags. You can add, delete, and modify flags, and use them to select TOAs.

[1]:
from pint.toa import get_TOAs
import pint.config
import pint.logging
[2]:
pint.logging.setup("WARNING")
[2]:
1

Get a test dataset. This file has no flags to start with.

[3]:
t = get_TOAs(pint.config.examplefile("NGC6440E.tim"), ephem="DE440")
print(t)
62 TOAs starting at MJD 53478.28587141954

The TOAs are stored internally as an astropy.Table:

[4]:
print(t.table)
index        mjd        ...                obs_sun_pos
                        ...                     km
----- ----------------- ... ------------------------------------------
    0 53478.28587141954 ...    132300218.97645566 .. 28301415.22776123
    1 53483.27670518884 ...     125950526.51351064 .. 32709720.8270093
    2 53489.46838978825 ...    116811489.04125574 .. 37847344.03461099
    3 53679.87564592083 ...   -107617035.1860528 .. -40589908.33710148
    4 53679.87564536537 ...  -107617036.17634691 .. -40589907.92654537
    5  53679.8756449276 ...  -107617036.95679888 .. -40589907.60298561
    6 53679.87564457819 ...  -107617037.57973605 .. -40589907.34472832
    7 53679.87564513386 ... -107617036.58907865 .. -40589907.755435064
    8 53681.70075099914 ...  -104248039.58874722 .. -41917934.12755567
    9 53681.95454490266 ...  -103778953.65473533 .. -42099237.91000268
  ...               ... ...                                        ...
   52 54187.33158349338 ...     148137668.7933031 .. 7406553.704567532
   53 54187.58732417023 ...    148057390.61638692 .. 7667155.671811677
   54 54099.70978574142 ...  22419253.343037248 .. -57831703.002449505
   55 54099.70978542604 ...      22419252.5377699 .. -57831703.0529715
   56 54099.70978514842 ...   22419251.828904394 .. -57831703.09744529
   57 54099.70978490359 ...   22419251.203770243 .. -57831703.13666582
   58  54099.7097846853 ...     22419250.64639034 .. -57831703.1716355
   59 54099.70978449185 ...   22419250.152454622 .. -57831703.20262473
   60 54099.70978431551 ...  22419249.702196058 .. -57831703.230873674
   61 54099.70978415968 ...   22419249.304290682 .. -57831703.25583802
Length = 62 rows

You can look at the flags directly (note that the leading - from a file has been stripped for internal storage). The initial file did not have flags, so these (format, ddm, and clkcorr) were added by PINT when reading:

[5]:
print(t["flags"])
                                  flags
--------------------------------------------------------------------------
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7592772625547294e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.761880402762111e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.766274548262721e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196932481803e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196927815868e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.671919692413864e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196921203566e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196925871212e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.674097374856601e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.674122500587136e-05'}
                                                                       ...
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.733335634508195e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7337239555170205e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.733771843519471e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845569813715e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845570539083e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845571177607e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845571740715e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845572242792e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845572687715e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845573093294e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.721584557345172e-05'}
Length = 62 rows

Which is just looking at the 'flags' column in the TOA table:

[6]:
print(t.table["flags"])
                                  flags
--------------------------------------------------------------------------
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7592772625547294e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.761880402762111e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.766274548262721e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196932481803e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196927815868e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.671919692413864e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196921203566e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196925871212e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.674097374856601e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.674122500587136e-05'}
                                                                       ...
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.733335634508195e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7337239555170205e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.733771843519471e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845569813715e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845570539083e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845571177607e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845571740715e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845572242792e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845572687715e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845573093294e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.721584557345172e-05'}
Length = 62 rows

To extract the values of a flag, you can just treat it like an array slice

[7]:
print(t["ddm"])
['0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0'
 '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0'
 '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0'
 '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0'
 '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0' '0.0'
 '0.0' '0.0']

However, flags are stored as strings, so you might use a function that also allows type conversions:

[8]:
ddm, _ = t.get_flag_value("ddm", as_type=float)
print(ddm)
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

It’s also easy to add flags. In this case we will just add to the first 10 TOAs:

[9]:
t[:10, "fish"] = "carp"
print(t["flags"])
                                          flags
------------------------------------------------------------------------------------------
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7592772625547294e-05', 'fish': 'carp'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.761880402762111e-05', 'fish': 'carp'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.766274548262721e-05', 'fish': 'carp'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196932481803e-05', 'fish': 'carp'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196927815868e-05', 'fish': 'carp'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.671919692413864e-05', 'fish': 'carp'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196921203566e-05', 'fish': 'carp'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196925871212e-05', 'fish': 'carp'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.674097374856601e-05', 'fish': 'carp'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.674122500587136e-05', 'fish': 'carp'}
                                                                                       ...
                 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.733335634508195e-05'}
                {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7337239555170205e-05'}
                 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.733771843519471e-05'}
                {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845569813715e-05'}
                {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845570539083e-05'}
                {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845571177607e-05'}
                {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845571740715e-05'}
                {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845572242792e-05'}
                {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845572687715e-05'}
                {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845573093294e-05'}
                 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.721584557345172e-05'}
Length = 62 rows

If we now try to get those values:

[10]:
print(t["fish"])
['carp' 'carp' 'carp' 'carp' 'carp' 'carp' 'carp' 'carp' 'carp' 'carp' ''
 '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
 '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
 '' '' '']

it will return the flag value or an empty string when it is not set. On the other hand:

[11]:
fish, idx = t.get_flag_value("fish")
print(fish)
print(idx)
['carp', 'carp', 'carp', 'carp', 'carp', 'carp', 'carp', 'carp', 'carp', 'carp', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Will also return an array of indices when the flag is set. Now let’s set some other fish:

[12]:
t[10:15, "fish"] = "bass"

and we can select only the TOAs that meet some criteria:

[13]:
basstoas = t[t["fish"] == "bass"]
print(len(basstoas))
5

Which can be combined with other selection criteria:

[14]:
print(t[(t["fish"] == "carp") & (t["mjd_float"] > 53679)])
7 TOAs starting at MJD 53679.87564457819

You can set the value of a flag to an empty string, which will delete it:

[15]:
t["fish"] = ""
print(t["flags"])
                                  flags
--------------------------------------------------------------------------
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7592772625547294e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.761880402762111e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.766274548262721e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196932481803e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196927815868e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.671919692413864e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196921203566e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.6719196925871212e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.674097374856601e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.674122500587136e-05'}
                                                                       ...
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.733335634508195e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7337239555170205e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.733771843519471e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845569813715e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845570539083e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845571177607e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845571740715e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845572242792e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845572687715e-05'}
{'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.7215845573093294e-05'}
 {'format': 'Princeton', 'ddm': '0.0', 'clkcorr': '2.721584557345172e-05'}
Length = 62 rows
[ ]: