From 4b4bd5e24e94ee1842543f14c9890c7051469463 Mon Sep 17 00:00:00 2001
From: Moritz <email@moritz-huebner.de>
Date: Thu, 2 May 2019 20:02:26 +1000
Subject: [PATCH] Cleared up some properties

---
 bilby/gw/detector/strain_data.py | 78 +++++++-------------------------
 1 file changed, 17 insertions(+), 61 deletions(-)

diff --git a/bilby/gw/detector/strain_data.py b/bilby/gw/detector/strain_data.py
index e68083d84..47d7c280a 100644
--- a/bilby/gw/detector/strain_data.py
+++ b/bilby/gw/detector/strain_data.py
@@ -5,6 +5,7 @@ from bilby.core import utils
 from bilby.core.series import CoupledTimeAndFrequencySeries
 from bilby.core.utils import logger
 from bilby.gw import utils as gwutils
+from bilby.gw.detector.utils import SubclassPropertyAccessor
 
 try:
     import gwpy
@@ -23,6 +24,12 @@ except ImportError:
 class InterferometerStrainData(object):
     """ Strain data for an interferometer """
 
+    duration = SubclassPropertyAccessor('duration', '_times_and_frequencies')
+    sampling_frequency = SubclassPropertyAccessor('sampling_frequency', '_times_and_frequencies')
+    start_time = SubclassPropertyAccessor('start_time', '_times_and_frequencies')
+    frequency_array = SubclassPropertyAccessor('frequency_array', '_times_and_frequencies')
+    time_array = SubclassPropertyAccessor('time_array', '_times_and_frequencies')
+
     def __init__(self, minimum_frequency=0, maximum_frequency=np.inf,
                  roll_off=0.2):
         """ Initiate an InterferometerStrainData object
@@ -49,6 +56,7 @@ class InterferometerStrainData(object):
         self._times_and_frequencies = CoupledTimeAndFrequencySeries()
         # self._set_time_and_frequency_array_parameters(None, None, None)
 
+        self._frequency_mask = None
         self._frequency_domain_strain = None
         self._frequency_array = None
         self._time_domain_strain = None
@@ -93,25 +101,17 @@ class InterferometerStrainData(object):
         else:
             return True
 
-    @property
-    def minimum_frequency(self):
-        return self.__minimum_frequency
-
-    @minimum_frequency.setter
-    def minimum_frequency(self, minimum_frequency):
-        self.__minimum_frequency = minimum_frequency
-
     @property
     def maximum_frequency(self):
         """ Force the maximum frequency be less than the Nyquist frequency """
         if self.sampling_frequency is not None:
-            if 2 * self.__maximum_frequency > self.sampling_frequency:
-                self.__maximum_frequency = self.sampling_frequency / 2.
-        return self.__maximum_frequency
+            if 2 * self._maximum_frequency > self.sampling_frequency:
+                self._maximum_frequency = self.sampling_frequency / 2.
+        return self._maximum_frequency
 
     @maximum_frequency.setter
     def maximum_frequency(self, maximum_frequency):
-        self.__maximum_frequency = maximum_frequency
+        self._maximum_frequency = maximum_frequency
 
     @property
     def frequency_mask(self):
@@ -121,14 +121,12 @@ class InterferometerStrainData(object):
         -------
         array_like: An array of boolean values
         """
-        try:
-            return self._frequency_mask
-        except AttributeError:
-            frequency_array = self._times_and_frequencies.frequency_array
-            mask = ((frequency_array >= self.minimum_frequency) &
-                    (frequency_array <= self.maximum_frequency))
-            self._frequency_mask = mask
+        if self._frequency_mask is not None:
             return self._frequency_mask
+        frequency_array = self._times_and_frequencies.frequency_array
+        self._frequency_mask = ((frequency_array >= self.minimum_frequency) &
+                                (frequency_array <= self.maximum_frequency))
+        return self._frequency_mask
 
     @property
     def alpha(self):
@@ -644,45 +642,3 @@ class InterferometerStrainData(object):
         self._times_and_frequencies = CoupledTimeAndFrequencySeries(duration=duration,
                                                                     sampling_frequency=sampling_frequency,
                                                                     start_time=start_time)
-
-    @property
-    def sampling_frequency(self):
-        return self._times_and_frequencies.sampling_frequency
-
-    @sampling_frequency.setter
-    def sampling_frequency(self, sampling_frequency):
-        self._times_and_frequencies.sampling_frequency = sampling_frequency
-
-    @property
-    def duration(self):
-        return self._times_and_frequencies.duration
-
-    @duration.setter
-    def duration(self, duration):
-        self._times_and_frequencies.duration = duration
-
-    @property
-    def start_time(self):
-        return self._times_and_frequencies.start_time
-
-    @start_time.setter
-    def start_time(self, start_time):
-        self._times_and_frequencies.start_time = start_time
-
-    @property
-    def frequency_array(self):
-        """ Frequencies of the data in Hz """
-        return self._times_and_frequencies.frequency_array
-
-    @frequency_array.setter
-    def frequency_array(self, frequency_array):
-        self._times_and_frequencies.frequency_array = frequency_array
-
-    @property
-    def time_array(self):
-        """ Time of the data in seconds """
-        return self._times_and_frequencies.time_array
-
-    @time_array.setter
-    def time_array(self, time_array):
-        self._times_and_frequencies.time_array = time_array
-- 
GitLab