...
Accessing data from UAL requires some modification to your code. In this part of tutorial, we will take a closer look on how to access CPO via IDS via UAL.
Warning |
---|
Warning Stop here for a moment. Make sure you have followed the configuration setup before proceeding any further! Configuration related tutorial is here -> Click me! <- |
...
- know how to access UAL using Python
- know how to retrieve CPO IDS from UAL
- know how to access CPO IDS data
Exercise no. 3 (approx. 15 min)
...
2. Go to example directory
cd $TUTORIAL_DIR/cpoids_basics/python/
3. Execute sample code
Code Block |
---|
|
shell> python ./put_cpoids_array.py
shell> python ./put_cpoids_slices.py |
4. Open example file
Handling CPOsIDSs: put() vs. putSlice() |
---|
Code Block |
---|
language | py |
---|
title | $TUTORIAL_DIR/cpo_basics/python/put_cpo_array.py |
---|
linenumbers | true |
---|
| import sys
from pylab import *
import ual
cpoids = ual.itm(13,3)
cpoids.create()
if not cpoids.isConnected():
print 'error during itmdb entry creation'
sys.exit(1)
cpoids.equilibriumArray.resize(10)
equi = cpoids.equilibriumArray
#First fill fields which are not time-dependent.
equi.array[0].datainfo.dataprovider = 'MKO'
equi.array[0].datainfo.putdate = '20/09/2016'
equi.array[0].codeparam.parameters = 'param'
# ---- a loop ----
for i in range(0, 10):
#Fill time-dependent fields
equi.array[i].eqgeometry.boundary.resize(1)
equi.array[i].eqgeometry.boundary[0].r = sin(arange(0,2*pi,2*pi/100)) + (1/float(100-i))
equi.array[i].eqgeometry.boundary[0].z = cos(arange(0,2*pi,2*pi/100)) + (1/float(100-i))
#Do not forget time!!
equi.array[i].time = i
# ---- a loop ----
#Save data in the database
equi.put() # <= Called outside the loop
#close the pulse file
cpoids.close() |
| Code Block |
---|
language | py |
---|
title | $TUTORIAL_DIR/cpo_basics/python/put_cpo_slices.py |
---|
linenumbers | true |
---|
| import sys
from pylab import *
import ual
cpoids = ual.itm(14,4)
cpoids.create()
if not cpoids.isConnected():
print 'error during itmdb entry creation'
sys.exit(1)
equi = cpoids.equilibrium
#First fill fields which are not time-dependent.
equi.datainfo.dataprovider = 'MKO'
equi.datainfo.putdate = '20/09/2016'
equi.codeparam.parameters = 'param'
#Save time independent fields
equi.putNonTimed()
# ---- a loop ----
for i in range(0, 10):
#Fill time-dependent fields
equi.eqgeometry.boundary.resize(1)
equi.eqgeometry.boundary[0].r = sin(arange(0,2*pi,2*pi/100)) + (1/float(100-i))
equi.eqgeometry.boundary[0].z = cos(arange(0,2*pi,2*pi/100)) + (1/float(100-i))
#Do not forget time!!
equi.time = i
#Append this slice in the database
equi.putSlice() # <= Called inside the loop
# ---- a loop ----
#close the pulse file
cpoids.close() |
|
![](http://scilla.man.poznan.pl:8080/confluence/images/icons/emoticons/information.gif) | VI related notice I will use VI in every place where text files are modified. If you have any other text file editor of your choice - fell free to use it instead. |
vi $TUTORIAL_DIR/cpoids_basics/python/put_cpoids.py
What you can see here is a simple code that stores particular CPO IDS into MDSPlus database using UAL.
...
In this exercise you will read CPO IDS and print some data stored inside.
...
2. Change directory to a demo location for this exercise
cd $TUTORIAL_DIR/cpoids_basics/fortran
Handling CPOsIDSs: get() vs. getSlice() |
---|
Code Block |
---|
title | $TUTORIAL_DIR/cpo_basics/fortran/get_cpo_array.f90 |
---|
linenumbers | true |
---|
| program diagnostic
use euitm_schemas
use euitm_routines
implicit none
integer :: idx, i, arraySize
type (type_equilibrium), pointer :: eqArray(:) ! <= Array !!!
call euitm_open('euitm', 14, 4, idx)
call euitm_get(idx, 'equilibrium', eqArray)
arraySize = size(eqArray)
write (*,*) "Number of slices: ", arraySize
do i=1, arraySize
write (*,*) "Time: ", eqArray(i)%time
write (*,*) "Value of r: ", eqArray(i)%eqgeometry%boundary(1)%r(1)
write (*,*) "Value of z: ", eqArray(i)%eqgeometry%boundary(1)%z(1)
enddo
call euitm_close(idx)
end program |
| Code Block |
---|
title | $TUTORIAL_DIR/cpo_basics/fortran/get_cpo_slices.f90 |
---|
linenumbers | true |
---|
| program diagnostic
use euitm_schemas
use euitm_routines
implicit none
integer :: idx, i, arraySize
type (type_equilibrium) :: equilibrium
real(EUITM_R8), pointer :: timeVector(:)
real(EUITM_R8) :: time
call euitm_open('euitm', 14, 4, idx)
call euitm_get_times(idx, 'equilibrium',timeVector)
arraySize = size(timeVector)
write (*,*) "Number of slices: ", arraySize
write (*,*) "Time vector: ", timeVector
do i = 1, arraySize
time = timeVector(i)
call euitm_get_slice(idx, 'equilibrium', equilibrium, time, 1)
write (*,*) "Time [", time, "]: ", equilibrium%time
write (*,*) "Value of r: ", equilibrium%eqgeometry%boundary(1)%r(1)
write (*,*) "Value of z: ", equilibrium%eqgeometry%boundary(1)%z(1)
enddo
call euitm_close(idx)
end program |
|
...
5. Run the code
Code Block |
---|
shell> ./get_cpoids_array.exe
shell> ./get_cpoids_slices.exe |
6. You should see values that we have stored using Python based code.
...