Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
import imas
import getpass
from imas import imasdef

#creates the Data Entry object 'data_entry' associated to the pulse file with shot=15000, run=1, belonging to database 'pcss_tutorial' of the current user, using the MDS+ backend
data_entry = imas.DBEntry(imasdef.MDSPLUS_BACKEND, 'data_access_tutorial, 15000, 1, user_name=getpass.getuser())

#creates the pulse file associated to the Data Entry object 'data_entry' previously created
data_entry.create()

#here, we can perform some read/write operations using the get/put() operations
#...

#closes the data_entry
data_entry.close()

Execution of the code above will create the pulse file at location ~/public/imasdb/data_access_tutorial/3/0:

...

Code Block
languagepy
import imas
import getpass
from imas import imasdef

#creates the Data Entry object 'data_entry' associated  to the pulse file with shot=15000, run=1, belonging to database 'data_access_tutorial' of the current user, using the MDS+ backend
data_entry = imas.DBEntry(imasdef.MDSPLUS_BACKEND, 'data_access_tutorial, 15000, 1, user_name=getpass.getuser())

#opens the pulse file associated to the Data Entry object 'data_entry' previously created
data_entry.open()

#here, we can perform some read/write operations using the get/put() operations
#...

#closes the data_entry
data_entry.close()

In the example above, the The pulse file is opened, however then closed. However no data have been yet fetched from the pulse file.

...

get/close

IMAS data are contained in IDSs which are data containers described by the IMAS Data Dictionary. IDSs represent An IDS represents either a Diagnostics (like the 'bolometer' IDS), or a System (like the 'camera_ir'), or a concept like the 'equilibrium' IDS representing the plasma equilibrium.

The code below reads an existing 'magnetics' IDS from a WEST pulse file:

Code Block
import imas
import getpass
import numpy as np
from imas import imasdef

#opens the Data Entry object 'data_entry' associated  to the pulse file with shot=54178, run=0, belonging to database 'west' of user 'g2lfleur', using the MDS+ backend
data_entry = imas.DBEntry(imasdef.MDSPLUS_BACKEND, 'west, 54178, 0, user_name=getpass.getuser())

#opens the pulse file associated to the Data Entry object 'data_entry' previously created
data_entry.open()

#reads the 'magnetics' IDS from the data_entry object previously opened
magnetics_ids = data_entry.get('magnetics', 0) #The second argument 0 is the so-called IDS occurrence.

#close the pulse file associated to the 'data_entry' object
data_entry.close()

#prints some IDS attributes
print('homogeneous_time = ', magnetics_ids.ids_properties.homogeneous_time)
print('Number of flux loops = ', len(magnetics_ids.flux_loop))
print('Data of first flux loop = ', magnetics_ids.flux_loop[0].flux.data)
print('Homogeneous time basis = ', magnetics_ids.time)


Running the code above gives the following output:

Code Block
 Number of flux loops =  17
Data of first flux loop =  [ 0.00065229  0.00163073  0.00489218 ... -0.01761185 -0.01663342
 -0.01500269]
Homogeneous time basis =  [ 1.83570397  1.86847198  1.90123999 ... 90.13289642 90.16566467
 90.19843292]


put/close

In order to write IDS data to the pulse file created previously, we will first use the put() operation which writes all static (non time dependent) AND dynamic data from an contained in a IDS. 

Let's add a 'magnetics' IDS to the pulse file previously created.

...

Code Block
import imas
import getpass
import numpy as np
from imas import imasdef

#creates the Data Entry object 'data_entry' associated  to the pulse file with shot=15000, run=1, belonging to database 'data_access_tutorial' of the current user, using the MDS+ backend
data_entry = imas.DBEntry(imasdef.MDSPLUS_BACKEND, 'data_access_tutorial, 15000, 1, user_name=getpass.getuser())

#opens the pulse file associated to the Data Entry object 'data_entry' previously created
data_entry.open() 

#creates the 'magnetics' IDS and initializes it
magnetics_ids = imas.magnetics() #creates a 'magnetics' IDS
magnetics_ids.ids_properties.homogeneous_time=1 #setting the homogeneous time (mandatory)
magnetics_ids.ids_properties.comment='IDS created for testing the IMAS Data Access layer' #setting the ids_properties.comment attribute
magnetics_ids.time=np.array([0]) #the time(vector) basis must be not empty if homogeneous_time==1 otherwise an error will occur at runtime

#writes the 'magnetics' IDS
data_entry.put(magnetics_ids, 0) #writing#writes magnetics data to the data_entry associated to the pulse file. The second argument 0 is the so-called IDS occurrence.

#closes the pulse file associated to the 'data_entry' object
data_entry.close() 	 

get/close


Let'read the Let's extend the above example by adding the WEST data of the 10 first flux loops to the newly created 'magnetics' IDS previously created in 1.1.3.

Code Block
import imas
import getpass
import numpy as np
from imas import imasdef

#opens#creates the Data Entry object 'data_entry' associated  to the pulse file with shot=15000, run=1, belonging to database 'data_access_tutorial' of the current user, using the MDS+ backend
data_entry = imas.DBEntry(imasdef.MDSPLUS_BACKEND, 'data_access_tutorial, 15000, 1, user_name=getpass.getuser())

#opens the pulse file associated to the Data Entry object 'data_entry' previously created
data_entry.open() 

#reads#creates the 'magnetics' IDS fromand theinitializes data_entry object previously opened
data_entry.get('magnetics', 0) #The second argument 0 is the so-called IDS occurrence.

#close the pulse file associated to the 'data_entry' object
data_entry.close()

#prints some IDS attributes
print('homogeneous_time = ', magnetics_ids.ids_properties.homogeneous_time)
print('comment = ', magnetics_ids.ids_properties.comment)

Running the code above gives the following output:

Code Block
$ python get.py
homogeneous_time =  1
comment =  IDS created for testing the IMAS Data Access layerit
magnetics_ids = imas.magnetics() #creates a 'magnetics' IDS
magnetics_ids.ids_properties.homogeneous_time=1 #setting the homogeneous time (mandatory)
magnetics_ids.ids_properties.comment='IDS created for testing the IMAS Data Access layer' #setting the ids_properties.comment attribute
magnetics_ids.time=np.array([0]) #the time(vector) basis must be not empty if homogeneous_time==1 otherwise an error will occur at runtime

#adding the WEST data of the 10 first flux loops
nb_flux_loops=10
west_data_entry = imas.DBEntry(imasdef.MDSPLUS_BACKEND, 'west', 54178, 0, 'g2lfleur')
west_magnetics_ids = west_data_entry.get('magnetics', 0) #reading occurrence 0
magnetics_ids.flux_loop.resize(nb_flux_loops)
for i in range(nb_flux_loops):
  magnetics_ids.flux_loop[i].flux.data = west_magnetics_ids.flux_loop[i].flux.data #copies data
west_data_entry.close() #closing the WEST pulse file

#writes the 'magnetics' IDS
data_entry.put(magnetics_ids, 0) #writes magnetics data to the data_entry associated to the pulse file. The second argument 0 is the so-called IDS occurrence.

#closes the pulse file associated to the 'data_entry' object
data_entry.close() 	 



 delete_data