diff --git a/imagine/sample.py b/imagine/sample.py index a4d1cb3fc5b945c3a4575566369f79dee680a286..501727f3fff298f6a5f5bcba5f42796fde76c1de 100644 --- a/imagine/sample.py +++ b/imagine/sample.py @@ -2,6 +2,8 @@ import simplejson as json +import numpy as np + from keepers import Loggable,\ Versionable @@ -10,10 +12,13 @@ from imagine.magnetic_fields import MagneticField class Sample(Loggable, Versionable, object): - def __init__(self): - self._variables = None - self._magnetic_field = None - self._observables = None + def __init__(self, variables=None, magnetic_field=None, observables=None, + likelihood=None, total_likelihood=None): + self.variables = variables + self.magnetic_field = magnetic_field + self.observables = observables + self.likelihood = likelihood + self.total_likelihood = total_likelihood @property def variables(self): @@ -50,10 +55,36 @@ class Sample(Loggable, Versionable, object): parsed_observables[key] = value self._observables = parsed_observables + @property + def likelihood(self): + return self._likelihood + + @likelihood.setter + def likelihood(self, likelihood): + if np.isscalar(likelihood): + likelihood = (likelihood, ) + else: + likelihood = tuple(likelihood) + self._likelihood = likelihood + + @property + def total_likelihood(self): + return self._total_likelihood + + @total_likelihood.setter + def total_likelihood(self, total_likelihood): + self._total_likelihood = np.float(total_likelihood) + def _to_hdf5(self, hdf5_group): if self._variables is not None: hdf5_group.attrs['variables'] = json.dumps(self._variables) + if self._likelihood is not None: + hdf5_group['likelihood'] = self._likelihood + + if self._total_likelihood is not None: + hdf5_group.attrs['total_likelihood'] = self._total_likelihood + return_dict = {} if self._magnetic_field is not None: return_dict['magnetic_field'] = self._magnetic_field @@ -74,6 +105,16 @@ class Sample(Loggable, Versionable, object): except(KeyError): pass + try: + new_sample._likelihood = tuple(hdf5_group['likelihood']) + except(KeyError): + pass + + try: + new_sample._total_likelihood = hdf5_group.attrs['total_likelihood'] + except(KeyError): + pass + try: magnetic_field = repository.get('magnetic_field', hdf5_group) new_sample._magnetic_field = magnetic_field