1. Getting Data¶
1.1. Using the Device class¶
The recommended method of retrieving data with pyfusion is by creating
an instance of Device
class (to represent LHD, H-1, TJ-II,
etc) and using the attached getdata()
method:
>>> import pyfusion
>>> h1 = pyfusion.getDevice('H1')
>>> mirnov_data = h1.acq.getdata(58133, 'H1_mirnov_array_1_coil_1')
The getDevice()
method takes a single argument which corresponds to a Device entry in the pyfusion configuration:
[Device:H1]
dev_class = pyfusion.devices.H1.device.H1
acq_name = MDS_h1
getDevice()
then returns an instance the specified subclass of Device
(here, pyfusion.devices.H1.device.H1
is a subclass of Device
) initiated with the same argument, i.e. the following are synonyms:
>>> h1 = pyfusion.getDevice('H1')
and:
>>> from pyfusion.devices.H1.device import H1
>>> h1 = H1('H1')
1.1.1. Pre-loading of data acquisition system during Device instantiation.¶
Data acquisition in pyfusion is handled by two components, an Acquisition
class and a DataFetcher
class. The Acquisition class sets up a connection with a data acquisition system; a DataFetcher class uses this connection to fetch a requested data. When a new instance of a Device (sub)class is created, pyfusion will look to the configuration file to see if any data acquisition system is specified. In the example above, the H1
configuration contains:
acq_name = MDS_h1
which tells pyfusion to look for the data acquisition configuration:
[Acquisition:MDS_h1]
acq_class = pyfusion.acquisition.MDSPlus.acq.MDSPlusAcquisition
server = h1data.anu.edu.au
and attach a new instance of the specified acq_class
to the device:
>>> import pyfusion
>>> h1 = pyfusion.getDevice('H1')
>>> print h1.acquisition
<pyfusion.acquisition.MDSPlus.acq.MDSPlusAcquisition object at 0x96d460c>
>>> h1.acq == h1.acquisition
True
Where h1.acq
is simply a shortcut to h1.acquisition
. The connection to the data acquisition system is created when the Acquisition
class is instantiated, in this example: mdsconnect()
is called when h1.acquisition
is created.
1.2. Data acquisition via getdata¶
In our original example:
>>> mirnov_data = h1.acq.getdata(58133, 'H1_mirnov_array_1_coil_1')
the getdata()
method is essentially a wrapper around the DataFetcher class which uses the configuration setting to determine which subclass of DataFetcher should be used for the specified diagnostic. Here, h1.acq.getdata(58133, 'H1_mirnov_array_1_coil_1')
looks up the configuration section [Diagnostic:H1_mirnov_array_1_coil_1]
:
[Diagnostic:H1_mirnov_array_1_coil_1]
data_fetcher = pyfusion.acquisition.H1.fetch.H1DataFetcher
mds_path = \h1data::top.operations.mirnov:a14_14:input_1
coords_cylindrical = 1.114, 0.7732, 0.355
coord_transform = H1_mirnov
An instance of the class specified by data_fetcher
(a subclass of DataFetcher
) is created with the parameters specified in the configuration. DataFetcher
classes have a fetch()
method, which returns the data as a pyfusion Data
object; getdata()
calls this fetch()
method and returns the data object.