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()
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()
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 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()
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
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'),
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":
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), }, }, }