diff --git a/bilby/gw/detector/interferometer.py b/bilby/gw/detector/interferometer.py index 9fd8102d756e00425d6cc840091011bae8c7f421..a0aee9f6edc41f9a92a687b10c9049e4fcf0b946 100644 --- a/bilby/gw/detector/interferometer.py +++ b/bilby/gw/detector/interferometer.py @@ -18,17 +18,35 @@ except ImportError: " not be able to use some of the prebuilt functions.") -class _GenericProperty(object): +class _GenericInterferometerProperty(object): + """ + Generic descriptor class that allows handy access of properties without long + boilerplate code. The properties of Interferometer are defined as instances + of this class. + + This avoids lengthy code like + ``` + @property + def length(self): + return self.geometry.length + + @length_setter + def length(self, length) + self.geometry.length = length + + in the Interferometer class + ``` + """ - def __init__(self, property_name, instance_name): + def __init__(self, property_name, container_instance_name): self.property_name = property_name - self.instance_name = instance_name + self.container_instance_name = container_instance_name def __get__(self, instance, owner): - return getattr(getattr(instance, self.instance_name), self.property_name) + return getattr(getattr(instance, self.container_instance_name), self.property_name) def __set__(self, instance, value): - setattr(getattr(instance, self.instance_name), self.property_name, value) + setattr(getattr(instance, self.container_instance_name), self.property_name, value) class InterferometerGeometry(object): @@ -298,26 +316,26 @@ class InterferometerGeometry(object): class Interferometer(object): """Class for the Interferometer """ - length = _GenericProperty('length', 'geometry') - latitude = _GenericProperty('latitude', 'geometry') - latitude_radians = _GenericProperty('latitude_radians', 'geometry') - longitude = _GenericProperty('longitude', 'geometry') - longitude_radians = _GenericProperty('longitude_radians', 'geometry') - elevation = _GenericProperty('elevation', 'geometry') - x = _GenericProperty('x', 'geometry') - y = _GenericProperty('y', 'geometry') - xarm_azimuth = _GenericProperty('xarm_azimuth', 'geometry') - yarm_azimuth = _GenericProperty('yarm_azimuth', 'geometry') - xarm_tilt = _GenericProperty('xarm_tilt', 'geometry') - yarm_tilt = _GenericProperty('yarm_tilt', 'geometry') - vertex = _GenericProperty('vertex', 'geometry') - detector_tensor = _GenericProperty('detector_tensor', 'geometry') - - frequency_array = _GenericProperty('frequency_array', 'strain_data') - time_array = _GenericProperty('time_array', 'strain_data') - frequency_mask = _GenericProperty('frequency_mask', 'strain_data') - frequency_domain_strain = _GenericProperty('frequency_domain_strain', 'strain_data') - time_domain_strain = _GenericProperty('time_domain_strain', 'strain_data') + length = _GenericInterferometerProperty('length', 'geometry') + latitude = _GenericInterferometerProperty('latitude', 'geometry') + latitude_radians = _GenericInterferometerProperty('latitude_radians', 'geometry') + longitude = _GenericInterferometerProperty('longitude', 'geometry') + longitude_radians = _GenericInterferometerProperty('longitude_radians', 'geometry') + elevation = _GenericInterferometerProperty('elevation', 'geometry') + x = _GenericInterferometerProperty('x', 'geometry') + y = _GenericInterferometerProperty('y', 'geometry') + xarm_azimuth = _GenericInterferometerProperty('xarm_azimuth', 'geometry') + yarm_azimuth = _GenericInterferometerProperty('yarm_azimuth', 'geometry') + xarm_tilt = _GenericInterferometerProperty('xarm_tilt', 'geometry') + yarm_tilt = _GenericInterferometerProperty('yarm_tilt', 'geometry') + vertex = _GenericInterferometerProperty('vertex', 'geometry') + detector_tensor = _GenericInterferometerProperty('detector_tensor', 'geometry') + + frequency_array = _GenericInterferometerProperty('frequency_array', 'strain_data') + time_array = _GenericInterferometerProperty('time_array', 'strain_data') + frequency_mask = _GenericInterferometerProperty('frequency_mask', 'strain_data') + frequency_domain_strain = _GenericInterferometerProperty('frequency_domain_strain', 'strain_data') + time_domain_strain = _GenericInterferometerProperty('time_domain_strain', 'strain_data') def __init__(self, name, power_spectral_density, minimum_frequency, maximum_frequency, length, latitude, longitude, elevation, xarm_azimuth, yarm_azimuth, xarm_tilt=0., yarm_tilt=0., calibration_model=Recalibrate()):