COMPASS  5.0.0
End-to-end AO simulation tool using GPU acceleration
test_rtc_standalone.py
1 """script to test rtc_standalone feature
2 
3 Usage:
4  test_rtc_standalone <parameters_filename> [options]
5 
6 with 'parameters_filename' the path to the parameters file
7 
8 Options:
9  -h --help Show this help message and exit
10  -d, --devices devices Specify the devices
11 """
12 
13 from docopt import docopt
14 from tqdm import tqdm
15 
16 from carmaWrap import threadSync
17 import numpy as np
18 import shesha.sim
19 import shesha.init
20 import time
21 
22 arguments = docopt(__doc__)
23 param_file = arguments["<parameters_filename>"]
24 
25 # Get parameters from file
26 sim = shesha_sim.Simulator(param_file)
27 
28 if arguments["--devices"]:
29  devices = []
30  for k in range(len(arguments["--devices"])):
31  devices.append(int(arguments["--devices"][k]))
32  sim.config.p_loop.set_devices(devices)
33 
34 sim.init_sim()
35 nactu = sim.config.p_controller0.nactu
36 nvalid = sim.config.p_controller0.nvalid
37 rtc_standalone = shesha_init.rtc_standalone(
38  sim.c, len(sim.config.p_wfss), nvalid, nactu, sim.config.p_centroider0.type,
39  sim.config.p_controller0.delay, sim.config.p_wfs0.npix // 2 - 0.5,
40  sim.config.p_wfs0.pixsize)
41 rtc_standalone.set_cmat(0, sim.rtc.get_cmat(0))
42 rtc_standalone.set_decayFactor(0, np.ones(nactu, dtype=np.float32))
43 rtc_standalone.set_matE(0, np.identity(nactu, dtype=np.float32))
44 rtc_standalone.set_modal_gains(
45  0,
46  np.ones(nactu, dtype=np.float32) * sim.config.p_controller0.gain)
47 
48 s_ref = np.zeros((sim.config.p_loop.niter, 2 * nvalid.sum()), dtype=np.float32)
49 s = s_ref.copy()
50 c = np.zeros((sim.config.p_loop.niter, nactu), dtype=np.float32)
51 c_ref = c.copy()
52 img = sim.wfs.get_binimg(0)
53 img = np.zeros((sim.config.p_loop.niter, img.shape[0], img.shape[1]), dtype=np.float32)
54 
55 for k in tqdm(range(sim.config.p_loop.niter)):
56  sim.next()
57  img[k, :, :] = sim.wfs.get_binimg(0)
58  s_ref[k, :] = sim.rtc.get_centroids(0)
59  c_ref[k, :] = sim.rtc.get_com(0)
60 
61 rtc_standalone.load_rtc_validpos(0, sim.config.p_wfs0._validsubsx,
62  sim.config.p_wfs0._validsubsy)
63 rtc_standalone.set_open_loop(0, 1)
64 rtc_standalone.set_open_loop(0, 0)
65 
66 rtc_time = 0
67 for k in tqdm(range(sim.config.p_loop.niter)):
68  rtc_standalone.load_rtc_img(0, img[k, :, :].copy())
69  a = time.time()
70  rtc_standalone.fill_rtc_bincube(0, sim.config.p_wfs0.npix)
71  rtc_standalone.do_centroids(0)
72  rtc_standalone.do_control(0)
73  rtc_standalone.save_com(0)
74  threadSync()
75  rtc_time += time.time() - a
76  s[k, :] = rtc_standalone.get_centroids(0)
77  c[k, :] = rtc_standalone.get_com(0)
78 
79 print("RTC speed : ", 1 / (rtc_time / sim.config.p_loop.niter), " fps")
shesha.init
Python package for COMPASS simulation initialization.
Definition: shesha/shesha/init/__init__.py:1