DM_iterate.py
1 ## @package python.demo.DM_iterate
2 #
3 # example script showing how to load an OPALS datamanager
4 # and iterate through all points
5 # (script works in python 2 and 3)
6 #
7 
8 from __future__ import print_function # print function syntax as in python 3
9 import sys
10 
11 from opals import pyDM
12 
13 def DM_iterate(filename, maxOutput=1000):
14  # pyDM.Datamanager.load parameter: filename(string), readOnly(bool) threadSafety(bool)
15  dm = pyDM.Datamanager.load(filename, True, False)
16  if not dm:
17  print("Unable to open ODM '" + filename + "'")
18  sys.exit(1)
19 
20  limit = dm.getLimit()
21 
22  # output some pyDM statistics
23  print("ODM contains", dm.sizePoint(), "points")
24  print("2D-limit (%.3f," % limit.xmin, "%.3f) -" % limit.ymin, "(%.3f," % limit.xmax, "%.3f)" % limit.ymax)
25 
26  # create an attribute layout for iteration (optional)
27  lf = pyDM.AddInfoLayoutFactory()
28  lf.addColumn(pyDM.ColumnSemantic.Amplitude)
29  lf.addColumn(pyDM.ColumnSemantic.EchoNumber)
30  layout = lf.getLayout()
31 
32  maxOutput = 1000
33  print("Output the first", maxOutput, "points of '"+filename+"'")
34 
35  # list the first <maxOutput> points of the pyDM
36  i = 0
37  for pt in dm.points(layout):
38  i = i + 1
39  print("Point", "%5d" % i, "%.3f" % pt.x, "%.3f" % pt.y, "%.3f" % pt.z, "amp=%4.0f" % pt.info().get(0),
40  "en=%d" % pt.info().get(1))
41  if i >= maxOutput:
42  break
43 
44  print(i, "points listed")
45 
46 if len(sys.argv) == 1:
47  print("ODM parameter missing")
48  sys.exit(-1)
49 
50 DM_iterate(sys.argv[1])