def writeData(self, fp, image): """Save in YAML format.""" fp.seek(0) expdev = session.experiment instrdev = session.instrument o = AutoDefaultODict() instr = o['instrument'] instr['name'] = instrdev.instrument instr['facility'] = instrdev.facility instr['operator'] = ', '.join(instrdev.operators) instr['website'] = instrdev.website instr['references'] = [AutoDefaultODict({'doi': instrdev.doi})] o['format']['identifier'] = self.__class__.filetype for obj, unit in zip(self.objects, self.units): o['format']['units'][obj] = unit exp = o['experiment'] exp['number'] = expdev.propinfo.get('session', expdev.proposal) exp['proposal'] = expdev.proposal exp['title'] = expdev.title exp['authors'] = [] for user in expdev.propinfo.get('users', []): a = AutoDefaultODict() a['name'] = user['name'] a['affiliation'] = user.get('affiliation') a['roles'] = self._flowlist(['principal_investigator']) exp['authors'].append(a) for user in expdev.propinfo.get('localcontacts', []): a = AutoDefaultODict() a['name'] = user['name'] a['affiliation'] = user.get('affiliation') a['roles'] = self._flowlist(['local_contact']) exp['authors'].append(a) meas = o['measurement'] meas['number'] = self.dataset.number meas['unique_identifier'] = '%s/%s/%s' % ( expdev.proposal, self.dataset.counter, self.dataset.number) hist = meas['history'] hist['started'] = nice_datetime(self.dataset.started) hist['stopped'] = nice_datetime(currenttime()) sample = meas['sample']['description'] sample['name'] = expdev.sample.samplename env = meas['sample']['environment'] = [] stats = self.dataset.valuestats for (info, val) in zip(self.dataset.envvalueinfo, self.dataset.envvaluelist): entry = self._dict() entry['name'] = info.name entry['unit'] = info.unit entry['value'] = val if info.name in stats: entry['mean'] = stats[info.name][0] entry['stddev'] = stats[info.name][1] entry['min'] = stats[info.name][2] entry['max'] = stats[info.name][3] env.append(entry) self._write_instr_data(meas, image) quickyaml.Dumper(width=self.max_yaml_width, array_handling=self.yaml_array_handling).dump(o, fp) fp.flush()
def _dict(self): return AutoDefaultODict()