Skip to main content

Nexus Data writer implemented as a Tango Server

Project description

Authors: Jan Kotanski, Eugen Wintersberger, Halil Pasic

Introduction

NXSDataWriter is a Tango server which allows to store NeXuS Data in H5 files.

The server provides storing data from other Tango devices, various databases as well as passed by a user client via JSON strings.

Tango Server API: https://nexdatas.github.io/writer/doc_html

Installation

Install the dependencies:

pni-libraries, PyTango, numpy

From sources

Download the latest NexDaTaS version from

Extract sources and run

$ python setup.py install

Debian packages

Debian Jessie (and Wheezy) packages can be found in the HDRI repository.

To install the debian packages, add the PGP repository key

$ sudo su
$ wget -q -O - http://repos.pni-hdri.de/debian_repo.pub.gpg | apt-key add -

and then download the corresponding source list

$ cd /etc/apt/sources.list.d
$ wget http://repos.pni-hdri.de/jessie-pni-hdri.list

Finally,

$ apt-get update
$ apt-get install python-nxswriter

To instal other NexDaTaS packages

$ apt-get install python-nxstools nxsconfigserver-db python-nxsconfigserver nxsconfigtool

and

$ apt-get install python-nxsrecselector nxselector python-sardana-nxsrecorder

for Component Selector and Sardana related packages.

From pip

To install it from pip you can

$ python3 -m venv myvenv
$ . myvenv/bin/activate

$ pip install nxswriter

Moreover it is also good to install

$ pip install pytango
$ pip install pymysqldb
$ pip install psycopg2-binary
$ pip install cx-oracle

Setting NeXus Writer Server

To set up NeXus Writer Server run

$ nxsetup -x NXSDataWriter

The nxsetup command comes from the python-nxstools package.

Client code

In order to use Nexus Data Server one has to write a client code. Some simple client codes are in the nexdatas repository. In this section we add some comments related to the client code.

# To use the Tango Server we must import the PyTango module and
# create DeviceProxy for the server.

import PyTango

device = "p09/tdw/r228"
dpx = PyTango.DeviceProxy(device)
dpx.set_timeout_millis(10000)

dpx.Init()

# Here device corresponds to a name of our Nexus Data Server.
# The Init() method resets the state of the server.

dpx.FileName = "test.h5"
dpx.OpenFile()

# We set the name of the output HDF5 file and open it.

# Now we are ready to pass the XML settings describing a structure of
# the output file as well as defining a way of data storing.
# Examples of the XMLSettings can be found in the XMLExamples directory.

xml = open("test.xml", 'r').read()
dpx.XMLSettings = xml

dpx.JSONRecord = '{"data": {"parameterA":0.2},
                      "decoders":{"DESY2D":"desydecoders.desy2Ddec.desy2d"},
                      "datasources":{
                           "MCLIENT":"sources.DataSources.LocalClientSource"}
}'

dpx.OpenEntry()

# We read our XML settings settings from a file and pass them to the server via
# the XMLSettings attribute. Then we open an entry group related to the XML
# configuration. Optionally, we can also set JSONRecord, i.e. an attribute
# which contains a global JSON string with data needed to store during opening
# the entry and also other stages of recording. If external decoder for
# DevEncoded data is need one can registred it passing its packages and
# class names in JSONRecord,
# e.g. "desy2d" class of "DESY2D" label in "desydecoders.desy2Ddec" package.
# Similarly making use of "datasources" records of the JSON string one can
# registred additional datasources. The OpenEntry method stores data defined
# in the XML string with strategy=INIT.
# The JSONRecord attribute can be changed during recording our data.

# After finalization of the configuration process we can start recording
# the main experiment data in a STEP mode.

dpx.Record('{"data": {"p09/counter/exp.01":0.1, "p09/counter/exp.02":1.1}}')

# Every time we call the Record method all nexus fields defined with
# strategy=STEP are extended by one record unit and the assigned to them data
# is stored. As the method argument we pass a local JSON string with the client
# data. To record the client data one can also use the global JSONRecord string.
# Contrary to the global JSON string the local one is only
# valid during one record step.

dpx.Record('{"data": {"emittance_x": 0.1},  "triggers":["trigger1", "trigger2"]  }')

# If you denote in your XML configuration string some fields by additional
# trigger attributes you may ask the server to store your data only in specific
# record steps. This can be helpful if you want to store your data in
# asynchronous mode. To this end you define in the local JSON string a list of
# triggers which are used in the current record step.

dpx.JSONRecord = '{"data": {"parameterB":0.3}}'
dpx.CloseEntry()

# After scanning experiment data in 'STEP' mode we close the entry.
# To this end we call the CloseEntry method which also stores data defined
# with strategy=FINAL. Since our HDF5 file can contain many entries we can again
# open the entry and repeat our record procedure. If we define more than one entry
# in one XML setting string the defined entries are recorded parallel
# with the same steps.

# Finally, we can close our output file by

dpx.CloseFile()

Additionally, one can use asynchronous versions of OpenEntry, Record, CloseEntry, i.e. OpenEntryAsynch, RecordAsynch, CloseEntryAsynch. In this case data is stored in a background thread and during this writing Tango Data Server has a state RUNNING.

In order to build the XML configurations in the easy way the authors of the server provide for this purpose a specialized GUI tool, Component Designer. The attached to the server XML examples was created by XMLFile class defined in XMLCreator/simpleXML.py.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nxswriter-2.25.3.tar.gz (79.6 kB view details)

Uploaded Source

Built Distribution

nxswriter-2.25.3-py3-none-any.whl (74.0 kB view details)

Uploaded Python 3

File details

Details for the file nxswriter-2.25.3.tar.gz.

File metadata

  • Download URL: nxswriter-2.25.3.tar.gz
  • Upload date:
  • Size: 79.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/33.1.1 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.5.3

File hashes

Hashes for nxswriter-2.25.3.tar.gz
Algorithm Hash digest
SHA256 1682703e50220f927a22188ae7288969342add2555a85bbe9cd30c9d2b456314
MD5 e24325bf59244aa69b3fe9b937e5ef11
BLAKE2b-256 689b94d1e560005fa4910d7e5404d4697da40fa207eda04953509aa592619299

See more details on using hashes here.

File details

Details for the file nxswriter-2.25.3-py3-none-any.whl.

File metadata

  • Download URL: nxswriter-2.25.3-py3-none-any.whl
  • Upload date:
  • Size: 74.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/33.1.1 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.5.3

File hashes

Hashes for nxswriter-2.25.3-py3-none-any.whl
Algorithm Hash digest
SHA256 36bb5bc1f203b7a5a7a106d99b6354d107e77880f0b0a73eba7fbe002a4e26fd
MD5 f0b105a75524744d1e56bf7f6684e858
BLAKE2b-256 622625223e5ecb3ce3ec6abf799c8801248938a1c20895c7d0e15e38ef0ae339

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page