diff --git a/lisainstrument/containers.py b/lisainstrument/containers.py index bd08ee24481252c82d8f812e5c4c5f897b184670..434a14ee5abc42a5eda194039ba0a68e4b3caada 100644 --- a/lisainstrument/containers.py +++ b/lisainstrument/containers.py @@ -93,6 +93,13 @@ class ForEachObject(abc.ABC): """Return dictionary items.""" return self.dict.items() + def __eq__(self, other): + if isinstance(other, self.__class__): + return self.dict == other.dict + if isinstance(other, dict): + return self.dict == other + return numpy.all([self[index] == other for index in self.indices()]) + def __repr__(self): return repr(self.dict) diff --git a/lisainstrument/instrument.py b/lisainstrument/instrument.py index d41cb06856cad2c6c7e2478cf83ae24deacf1975..29174445bad4738912de829cc998f1f8870353ad 100644 --- a/lisainstrument/instrument.py +++ b/lisainstrument/instrument.py @@ -762,17 +762,19 @@ class Instrument: ) ## Clock noise - # TODO: better optimize when clock_freqlindrifts and clock_freqquaddrifts == 0 logging.info("Generating clock noise time series") - t = self.physics_t - self.clock_noise_offsets = ForEachSC(lambda sc: - self.clock_freqoffsets[sc] + self.clock_freqlindrifts[sc] * t + self.clock_freqquaddrifts[sc] * t**2 - ) - for sc in self.SCS: - if self.physics_size and numpy.all(self.clock_noise_offsets[sc] == self.clock_noise_offsets[sc][0]): - self.clock_noise_offsets[sc] = self.clock_noise_offsets[sc][0] + if self.clock_freqlindrifts == self.clock_freqquaddrifts == 0: + # Optimize to use a scalar if we only have a constant frequency offset + self.clock_noise_offsets = ForEachSC(lambda sc: + self.clock_freqoffsets[sc] + ) + else: + t = self.physics_t + self.clock_noise_offsets = ForEachSC(lambda sc: + self.clock_freqoffsets[sc] + self.clock_freqlindrifts[sc] * t + self.clock_freqquaddrifts[sc] * t**2 + ) logging.info("Generating clock noise fluctuations time series")