COMPASS  5.0.0
End-to-end AO simulation tool using GPU acceleration
open_loop.py
1 # import cProfile
2 # import pstats as ps
3 
4 import sys
5 import os
6 # import numpy as np
7 import carmaWrap as ch
8 import shesha as ao
9 import time
10 import hdf5_util as h5u
11 import numpy as np
12 
13 print("TEST SHESHA\n closed loop: call loop(int niter)")
14 
15 if (len(sys.argv) != 2):
16  error = 'command line should be:"python -i test.py parameters_filename"\n with "parameters_filename" the path to the parameters file'
17  raise Exception(error)
18 
19 # get parameters from file
20 param_file = sys.argv[1]
21 if (param_file.split('.')[-1] == "py"):
22  filename = param_file.split('/')[-1]
23  param_path = param_file.split(filename)[0]
24  sys.path.insert(0, param_path)
25  exec("import %s as config" % filename.split(".py")[0])
26  sys.path.remove(param_path)
27 elif (param_file.split('.')[-1] == "h5"):
28  sys.path.insert(0, os.environ["SHESHA_ROOT"] + "/data/par/par4bench/")
29  import scao_sh_16x16_8pix as config
30  sys.path.remove(os.environ["SHESHA_ROOT"] + "/data/par/par4bench/")
31  h5u.configFromH5(param_file, config)
32 else:
33  raise ValueError("Parameter file extension must be .py or .h5")
34 
35 print("param_file is", param_file)
36 
37 if (hasattr(config, "simul_name")):
38  if (config.simul_name is None):
39  simul_name = ""
40  else:
41  simul_name = config.simul_name
42  print("simul name is", simul_name)
43 else:
44  simul_name = ""
45 
46 clean = 1
47 matricesToLoad = {}
48 
49 config.p_geom.set_pupdiam(500)
50 
51 # initialisation:
52 
53 # context
54 # c = ch.carmaWrap_context(0)
55 # c = ch.carmaWrap_context(devices=np.array([0,1], dtype=np.int32))
56 # c.set_active_device(0) #useful only if you use ch.carmaWrap_context()
57 c = ch.carmaWrap_context(devices=config.p_loop.devices)
58 
59 # wfs
60 print("->wfs")
61 wfs, tel = ao.wfs_init(config.p_wfss, config.p_atmos, config.p_tel, config.p_geom, None,
62  config.p_loop, config.p_dms)
63 
64 # atmos
65 print("->atmos")
66 atm = ao.atmos_init(c, config.p_atmos, config.p_tel, config.p_geom, config.p_loop,
67  config.p_wfss, wfs, None, clean=clean, load=matricesToLoad)
68 
69 # dm
70 print("->dm")
71 dms = ao.dm_init(config.p_dms, config.p_wfss, wfs, config.p_geom, config.p_tel)
72 ao.correct_dm(config.p_dms, dms, config.p_controller0, config.p_geom,
73  np.ones((config.p_wfs0._nvalid, config.p_dm0._ntotact), dtype=np.float32),
74  b'', {}, 1)
75 
76 if not clean:
77  h5u.validDataBase(os.environ["SHESHA_ROOT"] + "/data/", matricesToLoad)
78 
79 print("====================")
80 print("init done")
81 print("====================")
82 print("objects initialzed on GPU:")
83 print("--------------------------------------------------------")
84 print(atm)
85 print(wfs)
86 print(dms)
87 
88 mimg = 0. # initializing average image
89 
90 
91 def loop(n):
92  print("----------------------------------------------------")
93  print("iter# | S.E. SR | L.E. SR | Est. Rem. | framerate")
94  print("----------------------------------------------------")
95  t0 = time.time()
96  for i in range(n):
97  atm.move_atmos()
98 
99  for w in range(len(config.p_wfss)):
100  wfs.sensors_trace(w, b"all", tel, atm, dms)
101 
102  t1 = time.time()
103  print(" loop execution time:", t1 - t0, " (", n, "iterations), ", (t1 - t0) / n,
104  "(mean) ", n / (t1 - t0), "Hz")
105 
106 
107 # loop(config.p_loop.niter)
open_loop.loop
def loop(n)
Definition: open_loop.py:91