How to use the custom DM feature?

Custom DM What is it ? The custom DM option allows the user to provide COMPASS with some specific influence functions and positions of actuators. COMPASS will read the influence functions and resample them to its own geometry and sampling using splines. The custom DM can be used to feature well-known, famous DMs such as the M4 of the ELT, the Boston 32x32 MEMS, or the ALPAO 64x64 magnetic DM for instance. The “custom DM” feature of COMPASS allows you to adjust finely the magnification of the DM with respect to the pupil size, as the simulation of a real experiment would require. Custom DM fits file The custom DM fits file shall contain 3 extensions with data: Extension n°1 (EXTNAME = 'I1_J1') : is the list of all the indexing values (ix, iy) where the first pixel of each minimap is placed in the original large frame. [Read More]

How to use the Linear Generic Controller

Intro to generic_linear The generic_linear controller is designed to be suitable for any practical linear control law, from the simple leaky integrator, to POLC with arbitrary order IIR filters, to LQG. The entire pipeline in it’s fullest generality is outlined below (python syntax for readability - though the actual implementation is in cublas accelerated c++). Most General Pipeline: centroids are computed in the centroider object, and the output of the controller is the com vector, to be sent to the DMs. # compute appropriate slope vector including delay: if POLC: s_now = comp_polc(centroids) else: s_now = centroids # update circular buffer of slopes: for i in range(nslope_buffer-1): s[i+1] = s[i] s[0] = s_now # clear temporary variable: x_now *= 0.0 # do recursions of x with matA: for i in range(nstate_buffer): x_now += matA[i] @ x[i] # do innovations of s with matL: for i in range(nslope_buffer): x_now += matL[i] @ s[i] # update circular buffer of states: for i in range(nstate_buffer-1): x[i+1] = x[i] x[0] = x_now # modal projection: if MODAL: u_now = matK @ x_now else: u_now = x_now # update circular buffer of iir inputs: for i in range(n_iir_in-1): u_in[i+1] = u_in[i] u_in[0] = u_now # perform iir recursions: if n_iir_in > 0: u_now *= 0. [Read More]