Exemple #1
0
    def test_Datasets(self, session):
        template = {
            'entry:NXentry': {
                'name': DeviceDataset('Exp', 'title'),
                'def': ConstDataset('NXmonopd', 'string'),
                'sry': DeviceDataset('sry',
                                     units=NXAttribute('deg', 'string')),
            },
        }
        session.experiment.update(title='GurkenTitle')
        maw(session.getDevice('sry'), 23.7)
        session.experiment.setDetectors(['det', ])
        setTemplate(template)
        self.setScanCounter(session, 46)
        count(t=.1)

        fin = h5py.File(path.join(session.experiment.datapath,
                                  'test%sn000047.hdf' % year), 'r')
        ds = fin['entry/name']
        assert (ds[0] == b'GurkenTitle')

        ds = fin['entry/def']
        assert (ds[0] == b'NXmonopd')

        ds = fin['entry/sry']
        assert (ds[0] == 23.7)
        assert (ds.attrs['units'] == b'deg')
        fin.close()
Exemple #2
0
    def test_Scan(self, session):
        template = {
            'entry:NXentry': {
                'time': DetectorDataset('timer', 'float32'),
                'mon': DetectorDataset('mon1', 'uint32'),
                'counts': ImageDataset(0, 0,
                                       signal=NXAttribute(1, 'int32')),
                'sry': DeviceDataset('sry'),
            },
            'data:NXdata': {'None': NXScanLink(), }
        }

        setTemplate(template)
        self.setScanCounter(session, 48)
        session.experiment.setDetectors(['det', ])
        sry = session.getDevice('sry')
        scan(sry, 0, 1, 5, t=0.001)

        fin = h5py.File(path.join(session.experiment.datapath,
                                  'test%sn000049.hdf' % year), 'r')

        ds = fin['entry/sry']
        assert (len(ds) == 5)

        ds = fin['entry/time']
        assert (len(ds) == 5)
        ds = fin['entry/mon']
        assert (len(ds) == 5)

        ds = fin['entry/counts']
        assert (len(ds) == 5)

        ds = fin['data/sry']
        assert (len(ds) == 5)
        assert (ds[0] == 0)
        assert (ds[1] == 1)
        assert (ds[2] == 2)
        assert (ds[3] == 3)
        assert (ds.attrs['target'] == b'/entry/sry')

        fin.close()
Exemple #3
0
 def makeTable(self, table_name):
     table = session.getDevice(table_name)
     det = self.containsDetector(table)
     if det:
         self._detector = det
         table.removeSetup(det)
     devices = table.getTableDevices()
     content = dict()
     for d in devices:
         try:
             dev = session.getDevice(d)
             content[dev.name] = DeviceDataset(dev.name,
                                               dtype='float32',
                                               units=NXAttribute(
                                                   dev.unit, 'string'))
         except Exception as e:
             session.log.info('Failed to write device %s, Exception: %s', d,
                              e)
     equipment = ','.join(table.setups)
     content['equipment'] = ConstDataset(equipment, 'string')
     if det:
         table.addSetup(det)
         content['detector'] = ConstDataset(det, 'string')
     return content
Exemple #4
0
    def test_Link(self, session):
        template = {
            'entry:NXentry': {'sry': DeviceDataset('sry'), },
            'data:NXdata': {'srlink': NXLink('/entry/sry'), }
        }

        maw(session.getDevice('sry'), 77.7)
        session.experiment.setDetectors(['det', ])

        setTemplate(template)
        self.setScanCounter(session, 50)
        count(t=.1)

        fin = h5py.File(path.join(session.experiment.datapath,
                                  'test%sn000051.hdf' % year), 'r')
        ds = fin['entry/sry']
        assert (ds[0] == 77.7)

        ds = fin['data/srlink']
        assert (ds[0] == 77.7)

        assert (ds.attrs['target'] == b'/entry/sry')

        fin.close()
Exemple #5
0
class BOATemplateProvider(NexusTemplateProvider):
    """
      NeXus template generation for BOA at SINQ
    """
    _boa_default = {
        "NeXus_Version": "4.3.0",
        "instrument": "BOA",
        "owner": DeviceAttribute('BOA', 'responsible'),
        "entry:NXentry": {
            "title": DeviceDataset('Exp', 'title'),
            "proposal_title": DeviceDataset('Exp', 'title'),
            "proposal_id": DeviceDataset('Exp', 'proposal'),
            "start_time": NXTime(),
            "end_time": NXTime(),
            "user:NXuser": {
                "name": DeviceDataset('Exp', 'users'),
                "email": DeviceDataset('Exp', 'localcontact')
            },
            "sample:NXsample": {
                "sample_name": DeviceDataset('Sample', 'samplename'),
                "hugo": NexusSampleEnv(),
            },
            "control:NXmonitor": {
                "mode":
                DetectorDataset('mode', "string"),
                "Monitor":
                DetectorDataset('monitorval',
                                'float32',
                                units=NXAttribute('counts', 'string')),
                "preset":
                DetectorDataset('preset', 'float32'),
                "time":
                DetectorDataset('elapsedtime',
                                'float32',
                                units=NXAttribute('seconds', 'string')),
            },
            "proton_beam:NXmonitor": {
                "data":
                DetectorDataset('protoncurr',
                                'int32',
                                units=NXAttribute('counts', 'string'))
            },
            "white_beam:NXmonitor": {
                "data":
                DetectorDataset('monitorval',
                                'int32',
                                units=NXAttribute('counts', 'string'))
            },
        },
    }
    _tables = ['Table2', 'Table3', 'Table4', 'Table5', 'Table6']
    _detectors = ['embl', 'andor', 'single_el737']
    _detector = None

    def containsDetector(self, table):
        for det in self._detectors:
            if det in table.setups:
                return det
        return None

    def makeTable(self, table_name):
        table = session.getDevice(table_name)
        det = self.containsDetector(table)
        if det:
            self._detector = det
            table.removeSetup(det)
        devices = table.getTableDevices()
        content = dict()
        for d in devices:
            try:
                dev = session.getDevice(d)
                content[dev.name] = DeviceDataset(dev.name,
                                                  dtype='float32',
                                                  units=NXAttribute(
                                                      dev.unit, 'string'))
            except Exception as e:
                session.log.info('Failed to write device %s, Exception: %s', d,
                                 e)
        equipment = ','.join(table.setups)
        content['equipment'] = ConstDataset(equipment, 'string')
        if det:
            table.addSetup(det)
            content['detector'] = ConstDataset(det, 'string')
        return content

    def makeDetector(self):
        name = self._detector
        if 'single' in name:
            name = 'single'
        content = dict()
        if name == 'single':
            content['data'] = DetectorDataset('countval',
                                              'int32',
                                              units=NXAttribute(
                                                  'counts', 'string'))
        elif name == 'andor':
            content['data'] = ImageDataset(0,
                                           0,
                                           signal=NXAttribute(1, 'int32'))
        elif name == 'embl':
            content['data'] = ImageDataset(0,
                                           0,
                                           signal=NXAttribute(1, 'int32'))
        return name, content

    def makeData(self, name):
        content = dict()
        content['data'] = NXLink('/entry/%s/data' % (name))
        content['None'] = NXScanLink()
        return content

    def getTemplate(self):
        boa_template = copy.deepcopy(self._boa_default)
        entry = boa_template['entry:NXentry']
        for tbl in self._tables:
            tblcontent = self.makeTable(tbl)
            entry[tbl.lower() + ':NXcollection'] = tblcontent
        if self._detector:
            name, content = self.makeDetector()
            entry[name + ':NXdetector'] = content
            entry['data:Nxdata'] = self.makeData(name)
        else:
            session.log.info('No detector FOUND! May be: check setup???')
        return boa_template
Exemple #6
0
from nicos.nexus.elements import ConstDataset, DetectorDataset, \
    DeviceAttribute, DeviceDataset, ImageDataset, NexusSampleEnv, \
    NXAttribute, NXLink, NXScanLink, NXTime
from nicos.nexus.nexussink import NexusTemplateProvider

from nicos_sinq.nexus.specialelements import TwoThetaArray

# Default template for HRPT including most of the devices
hrpt_default = {
    "NeXus_Version": "4.3.0",
    "instrument": "HRPT",
    "owner": DeviceAttribute('HRPT', 'responsible'),
    "entry1:NXentry": {
        "title": DeviceDataset('Exp', 'title'),
        "proposal_title": DeviceDataset('Exp', 'title'),
        "proposal_id": DeviceDataset('Exp', 'proposal'),
        "start_time": NXTime(),
        "definition": ConstDataset('NXmonopd', 'string'),
        "end_time": NXTime(),
        "user:NXuser": {
            "name": DeviceDataset('Exp', 'users'),
            "email": DeviceDataset('Exp', 'localcontact')
        },
        "proposal_user:NXuser": {
            "name": DeviceDataset('Exp', 'users'),
        },
        "sample:NXsample": {
            "sample_name":
            DeviceDataset('Sample', 'samplename'),
            "name":
            NXLink('/entry1/sample/sample_name'),
Exemple #7
0
    NXAttribute, NXLink, NXScanLink, NXTime
from nicos.nexus.nexussink import NexusTemplateProvider

from nicos_sinq.nexus.specialelements import FixedArray

sans_detector = {
    "count_mode":
    DetectorDataset("mode", "string"),
    "counting_time":
    DetectorDataset("elapsedtime",
                    "float32",
                    units=NXAttribute("seconds", "string")),
    "preset":
    DetectorDataset("preset", "float32"),
    "x_position":
    DeviceDataset("detx"),
    "x_null":
    DeviceDataset("detx", "offset"),
    "y_position":
    DeviceDataset("dety"),
    "y_null":
    DeviceDataset("dety", "offset"),
    "chi_position":
    DeviceDataset("detphi"),
    "detector_x":
    FixedArray(-64, 1, 128),
    "detector_y":
    FixedArray(-64, 1, 128),
    "counts":
    ImageDataset(0, 0, signal=NXAttribute(1, "int32")),
    "data":
Exemple #8
0
 def getTemplate(self):
     return {
         'NeXus_Version': '4.3.0',
         'instrument': 'TOFTOF',
         'owner': DeviceAttribute('TOFTOF', 'responsible'),
         'Scan:NXentry': {
             'wavelength': DeviceDataset('chWL', dtype='float32'),
             'title': DeviceDataset('det', 'usercomment'),
             'proposal': DeviceDataset('Exp', 'title'),
             'proposal_number': DeviceDataset('Exp', 'proposal'),
             'experiment_identifier': ExperimentTitle(),
             'entry_identifier': EntryIdentifier(),
             'start_time': StartTime(),
             'end_time': EndTime(),
             'duration': Duration(),
             'FileName': FileName(),
             'instrument:NXinstrument': {
                 'name': ConstDataset('TOFTOF', 'string'),
                 'platform': ConstDataset('Linux', 'string'),
                 'chopper:NXchopper': {
                     'crc': DeviceDataset('chCRC', dtype='int32'),
                     'delay': DeviceDataset('chdelay', dtype='int32'),
                     'num_of_channels': DeviceDataset(
                         'det', 'timechannels', dtype='int32'),
                     'num_of_detectors': DeviceDataset('det', 'numinputs',
                                                       dtype='int32'),
                     'ratio': DeviceDataset('chRatio', dtype='int32'),
                     'rotation_speed': DeviceDataset('ch', dtype='float32'),
                     'slit_type': DeviceDataset('chST', dtype='int32'),
                     'tof_ch5_90deg_offset': DeviceDataset(
                         'ch', 'ch5_90deg_offset', dtype='int32'),
                     'tof_num_inputs': DeviceDataset('det', 'numinputs',
                                                     dtype='int32'),
                     'tof_time_preselection': DeviceDataset(
                         'det', 'preset', dtype='int32', units=seconds),
                 },
                 'detector:NXdetector': {
                     'box_chan': DetInfo(15),
                     'box_nr': DetInfo(14),
                     'det_plate': DetInfo(2),
                     'det_pos': DetInfo(3),
                     'det_rack': DetInfo(1),
                     'det_rpos': DetInfo(4),
                     'detector_number': DetInfo(0),
                     'ele_card': DetInfo(10),
                     'ele_chan': DetInfo(11),
                     'ele_total': DetInfo(12),
                     'pixel_mask': DetInfo(13),
                     'polar_angle': DetInfo(5),
                 },
                 'chopper_vac0': DeviceDataset('vac0', dtype='float32'),
                 'chopper_vac1': DeviceDataset('vac1', dtype='float32'),
                 'chopper_vac2': DeviceDataset('vac2', dtype='float32'),
                 'chopper_vac3': DeviceDataset('vac3', dtype='float32'),
                 'goniometer_phicxcy': GonioDataset(),
                 'goniometer_xyz': TableDataset(),
                 'hv_power_supplies': HVDataset(),
                 'lv_power_supplies': LVDataset(),
             },
             'mode': Mode(),
             'status': Status(),
             'to_go': ToGo(),
             # 'slit_hg': DeviceDataset('slit.centerx'),
             # 'slit_ho': DeviceDataset('slit.centery'),
             # 'slit_vg': DeviceDataset('slit.width'),
             # 'slit_vo': DeviceDataset('slit.height'),
             'user1:NXuser': {
                 'name': DeviceDataset('Exp', 'localcontact'),
                 'role': ConstDataset('local_contact', 'string'),
             },
             'user2:NXuser': {
                 'name': DeviceDataset('Exp', 'users'),
                 'role': ConstDataset('experiment_team', 'string'),
             },
             'sample:NXsample': {
                 'description': DeviceDataset('Sample', 'samplename'),
                 'total_counts': SampleCounts(),
                 'total_count_rate': SampleCountRate(),
             },
             'monitor:NXmonitor': {
                 'tof_monitor_input': DeviceDataset('det',
                                                    'monitorchannel'),
                 'tof_time_interval': DeviceDataset('ch', 'frametime'),
                 'data': MonitorData(),
                 'elastic_peak': ElasticPeakGuess(),
                 'integral': MonitorValue(),
                 'monitor_count_rate': MonitorRate(),
                 'time_of_flight': MonitorTof(),
             },
             'data:NXdata': {
                 'channel_number': ChannelList(),
                 'data': TOFTOFImageDataset(
                     0, 0, signal=signal, units='counts',
                     axes='2theta:channel_number'),
                 'polar_angle': DetInfo(5),
             },
         },
     }