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
... ... ... ...
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.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.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.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.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
[ ]: