예제 #1
0
    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()
예제 #2
0
 def _dict(self):
     return AutoDefaultODict()