From 42ffe15fe4aa1deafaa4ed71c6260718ab7a808f Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Bayle <j2b.bayle@gmail.com>
Date: Wed, 8 Dec 2021 08:08:59 -0800
Subject: [PATCH] Rename `neglect_tps` to `orbit_dataset`

---
 lisainstrument/instrument.py | 52 +++++++++++++++++++++---------------
 1 file changed, 31 insertions(+), 21 deletions(-)

diff --git a/lisainstrument/instrument.py b/lisainstrument/instrument.py
index 8147e49..ed01a96 100644
--- a/lisainstrument/instrument.py
+++ b/lisainstrument/instrument.py
@@ -66,7 +66,7 @@ class Instrument:
                  # Telemetry sampling
                  telemetry_downsampling=86400 * 4, telemetry_t0='orbits',
                  # Inter-spacecraft propagation
-                 orbits='static', neglect_tps=False,
+                 orbits='static', orbit_dataset='tps/ppr',
                  gws=None, interpolation=('lagrange', 31),
                  # Artifacts
                  glitches=None,
@@ -110,10 +110,10 @@ class Instrument:
             orbits: path to orbit file, dictionary of constant PPRs for static arms, 'static'
                 for a set of static PPRs corresponding to a fit of Keplerian orbits around t = 0,
                 or dictionary of PPR time series
-            neglect_tps: read orbit file's proper pseudo-ranges (PPRs) in TPS (spacecraft proper times)
-                if this is False, read orbit file's light travel times (LTTs) in TCB (coordinate time)
-                and ignore relativistic effects if this is True; this parameter is ignored if we don't
-                read orbits from an orbit file (see `orbits` parameter)
+            orbit_dataset: datasets to read from the orbit file, must be 'tps/ppr' or 'tcb/ltt';
+                if set to 'tps/ppr', read proper pseudo-ranges (PPRs) in TPSs (proper times),
+                if set to 'tcb/ltt', read light travel times (LTTs) in TCB (coordinate time);
+                ignored if no orbit files are used
             gws: path to gravitational-wave file, or dictionary of gravitational-wave responses
             interpolation: interpolation function or interpolation method and parameters;
                 use a tuple ('lagrange', order) with `order` the odd Lagrange interpolation order;
@@ -171,7 +171,12 @@ class Instrument:
             if isinstance(orbits, str) and orbits != 'static':
                 logger.debug("Reading initial time from orbit file '%s'", orbits)
                 with File(orbits, 'r') as orbitf:
-                    attr = 't0' if neglect_tps else 'tau0'
+                    if orbit_dataset == 'tcb/ltt':
+                        attr = 't0'
+                    elif orbit_dataset == 'tps/ppr':
+                        attr = 'tau0'
+                    else:
+                        raise ValueError(f"invalid orbit dataset '{orbit_dataset}'")
                     self.t0 = float(orbitf.attrs[attr])
             else:
                 self.t0 = 0.0
@@ -348,7 +353,7 @@ class Instrument:
             self.offsets_freqs = ForEachMOSA(offsets_freqs)
 
         # Orbits, gravitational waves, glitches
-        self.init_orbits(orbits, neglect_tps)
+        self.init_orbits(orbits, orbit_dataset)
         self.init_gws(gws)
         self.init_glitches(glitches)
 
@@ -468,12 +473,15 @@ class Instrument:
         else:
             raise ValueError(f"invalid locking configuration '{lock}'")
 
-    def init_orbits(self, orbits, neglect_tps):
-        """Initialize orbits."""
+    def init_orbits(self, orbits, orbit_dataset):
+        """Initialize orbits.
+
+        Args:
+            orbits: `orbits` parameter, c.f. `__init__()`
+            orbit_dataset: `orbit_dataset` parameter, c.f. `__init__()`
+        """
         if orbits == 'static':
             logger.info("Using default set of static proper pseudo-ranges")
-            if not neglect_tps:
-                logger.warning("Neglecting TPS despite configuration because static PPRs are used")
             self.orbit_file = None
             self.pprs = ForEachMOSA({
                 # Default PPRs based on first samples of Keplerian orbits (v1.0)
@@ -481,12 +489,12 @@ class Instrument:
                 '13': 8.3315, '32': 8.3044, '21': 8.3315,
             })
             self.d_pprs = ForEachMOSA(0)
-            self.neglect_tps = True
             self.tps_proper_time_deviations = ForEachSC(0)
+            self.orbit_dataset = None
         elif isinstance(orbits, str):
             logger.info("Using orbit file '%s'", orbits)
             self.orbit_file = orbits
-            self.neglect_tps = neglect_tps
+            self.orbit_dataset = orbit_dataset
             with File(self.orbit_file, 'r') as orbitf:
                 version = orbitf.attrs['version']
                 logger.debug("Using orbit file version %s", version)
@@ -495,36 +503,38 @@ class Instrument:
                 else:
                     raise ValueError(f"unsupported orbit file version '{version}'")
         else:
-            logger.info("Using user-provided proper pseudo-ranges and derivatives thereof")
-            if not self.neglect_tps:
-                logger.warning("Neglecting TPS despite configuration because user-provided PPRs are used")
+            logger.info("Using user-provided proper pseudo-ranges and derivatives")
             self.orbit_file = None
-            self.neglect_tps = True
             self.pprs = ForEachMOSA(orbits)
             self.d_pprs = self.pprs.transformed(lambda _, x:
                 0 if np.isscalar(x) else np.gradient(x, self.physics_dt)
             )
             self.tps_proper_time_deviations = ForEachSC(0)
+            self.orbit_dataset = None
 
     def init_orbits_file_1_0(self, orbitf):
         """Initialize orbits from an orbit file version ~= 1.0."""
 
         def pprs(mosa):
-            if self.neglect_tps:
+            if self.orbit_dataset == 'tcb/ltt':
                 times = orbitf['tcb']['t'][:]
                 values = orbitf[f'tcb/l_{mosa}']['tt']
-            else:
+            elif self.orbit_dataset == 'tps/ppr':
                 times = orbitf['tps']['tau'][:]
                 values = orbitf[f'tps/l_{mosa}']['ppr']
+            else:
+                raise ValueError(f"invalid orbit dataset '{self.orbit_dataset}'")
             return InterpolatedUnivariateSpline(times, values, k=5, ext='raise')
 
         def d_pprs(mosa):
-            if self.neglect_tps:
+            if self.orbit_dataset == 'tcb/ltt':
                 times = orbitf['tcb']['t'][:]
                 values = orbitf[f'tcb/l_{mosa}']['d_tt']
-            else:
+            elif self.orbit_dataset == 'tps/ppr':
                 times = orbitf['tps']['tau'][:]
                 values = orbitf[f'tps/l_{mosa}']['d_ppr']
+            else:
+                raise ValueError(f"invalid orbit dataset '{self.orbit_dataset}'")
             return InterpolatedUnivariateSpline(times, values, k=5, ext='raise')
 
         def tps_proper_time_deviations(sc):
-- 
GitLab