# AOC Calibration files and parameter values¶

There are many values and files specified in parms.txt. What follows is an itemization of these values, where they are set, how to get the best value, and how often you might need to change them. The keywords are listed in the order they are listed in the parms, though common functions are groups together.

Warning

It is important that you change the values in parms or the contents of the files pointed to by parms in the proper manner. In particular, if you manually change a value in the parms.txt file and then issue any other command that touches parms (such as a data dump or a set command) before issuing readConfig, the changes will be lost!

Warning

I need to do a better job documenting which files are only read in at AOC code startup, and which are read in at readconfig.

## How to easily access files and values¶

The easiest, most convenient, and most consistent way to read and write parameter files is through the IDL interface. When you are using an IDL session with all the globals see (see Section Working Setup), the signals will have the correct dimensions and you have lots of tools for easy display. Second of all, the AOC’s own file formats (e.g. centroid files) are not the same as in IDL, so using the IDL code ensures you will automatically save everything in the proper format.

Once you’ve started an IDL session, you can do the following things.

### Retrieve a parameter’s value or file¶

The value that corresponds to any keyword in parms.txt can be easily retrieved using retrieve_value.pro.

To return the value run

IDL> data = retrieve_value('KEYWORD')


The returned value will either be a number (for keywords which have numerical values) or the contents of the file pointed to by that keyword’s value string.

Sometimes you need to access the name of a file instead of returning the contents of that file. To get it instead, do

IDL> filename = retrieve_value('KEYWORD', /override)


### Save a value or file¶

To store a value or data to any keyword in parms.txt, use the program store_value.pro.

IDL> store_value, 'KEYWORD', data


If KEYWORD takes a number, data must be a number. Otherwise the function will return an error and not save anything.

If KEYWORD points to a file, data, regardless of size, will be written to disk and saved as a FITS file with that name. For a KEYWORD where the size is specified (which should be all of them), if data is the wrong size it will not be written and an error will be returned.

Note

Lisa: verify this!

Some specific parameters can only be set by the AOC itself through its commands. These are listed specifically in Section Parameters changed by the AOC. If you attempt to change one of these with store_value, it will not do so.

### Change the filename¶

In some cases you will want to change the string that is a filename. For example, TWT_FTR_FLTR has value ‘config/twtReconFilter’. You want to save a new type of filter, but not overwrite the existing default one. To do so you would change the value to a different file name using

IDL> store_value, 'KEYWORD', /changename, new_filename_string


Then when you store the value as above, it will write to the new file instead of overwriting the older one.

## Files not specifed in parms.txt¶

Filename
WFS_CAL.fits
twtLeakgains.fits
mergedLQGparms.fits
envLQGParmRanges.fits

## Parameters changed by the AOC¶

Keyword (listed in the same order as in parms.txt)
WFS_DARK_X
WFS_FLAT_X
REF_BASE
TWT_SYS_FLAT
WFR_SYS_FLAT
CENT_THRESH
TT_X_OFF
TT_Y_OFF

## Alphabetic listing of all files and keywords¶

### CAL_FTR_FLTR¶

Units none

Size 48 x 48 x 5.

The frames are as follows

1. real part of G_x filter
2. real part of G_y filter
3. imaginary part of G_x filter
4. imaginary part of G_y filter
5. real part (purely real) of sum of mag^2 of G_x and G_y (actually irrelevant here, but kept for consistency with TWT_FTR_FLTR.)

To set this, run

IDL> ult_make_cal_filter ;; see code for options


### CAM_FRAME_RATE¶

This number gives you the index for keywords such as WFS_DARK_X to know which file is being used to match the current frame rate.

Units an integer from 0 to 4

Size an integer

To set this, run

IDL> rtc_command_set_cam_rate, rate_hz


It may take several seconds for this to take effect and you will see a hang-up in dispraw while the frame rate is changing.

Warning

The command to set the frame rate takes a rate in Hz. The parms file stores a code from 0 to 4 that is mapped to a frame rate. As of 07-Jan-2013, this mapping is as follows: 0 = 250 Hz; 1 = 500 Hz, 2 = 1000 Hz; 3 = 1388 Hz; 4 = 1388 Hz.

### CENTROID_X_GAIN¶

At one point in 2011 the incorrectly focused spots on the WFS led to differential gains (due to spot size) for the x and y centroids. This was fixed optically.

Units none

Size an integer

To set this, run

IDL> store_value , 'CENTROID_X_GAIN', val ;; 0<= val <= 1


Note

This should always be 1.

### CENTROID_Y_GAIN¶

At one point in 2011 the incorrectly focused spots on the WFS led to differential gains (due to spot size) for the x and y centroids. This was fixed optically.

Units none

Size an integer

To set this, run

IDL> store_value , 'CENTROID_Y_GAIN', val ;; 0<= val <= 1


Note

This should always be 1.

### CENT_THRESH¶

In some instances a quadcell may lose light. Due to the non-linearity of the spatial filter, a highly mispositioned actuator may completely lose light. For very low light levels we want the loop to do something sensible. As such, if, after dark and flat processing, the total counts is any quadcell are fewer than this threshold, the resulting slopes are not calculated and are instead set to zero.

If the slopes are instead calculated on a very small number (or zero) counts, noise here may propagate to overall loop instability.

In regular operation this should be set low enough to allow operation on dim stars, but not so low that spurious slopes are allowed.

This interacts with INTEN_OVER_THRESH_FRAC

Units none

Size X x Y

To set this, run

IDL> rtc_command_set_cent_thresh, val ;; val >= 0


### CLEANUP_GAIN¶

At every time step one mode (specified by ) is projected and removed from the Twt integrator and the Wfr integrator. This gain is used in multiplication to control how much is actually subtracted. That is, if the gain is 1 the mode is completely zeroed (cleaned up).

If you want to turn cleanup off, set the gain to 0.

Units an integer between 0 and 1 inclusive

Size an integer

To set this, run

IDL> store_value , 'CLEANUP_GAIN', val ;; 0<= val <= 1


### CLEANUP_THRESH¶

At every time step one mode (specified by ) is projected and removed from the Twt integrator and the Wfr integrator. After the modal coefficient is calculated, it is compared to this threshold. If the coefficient is greater than the threshold, that mode is cleaned up. If lower, it is not cleaned up.

To effectively turn cleanup off, set this to a very large number (e.g. 10)

To make sure cleanup always happens, set to 0.

Units microns

Size an integer

To set this, run

IDL> store_value , 'CLEANUP_THRESH', val ;; val is microns


### DM_SLAVE_SWITCH¶

The actuators outside the active pupil are slaved to reduce phase errors at the edge of the pupil.

For the Wfr, these actuators exists, but are not direclty accessible in IDL’s 9 x 9 Wfr signals. For the Twt, these actuators are a precalculated set based on the active subapertures (and hence actuators) defined by WFS_CAL.fits.

Default operation is 3 for both. It some testing circumstances you may change this, bit that happens rarely.

Units none

Size an integer

To set this, run

IDL> store_value , 'DM_SLAVE_SWITCH', val ;; 1 = wfr only, 2 = twt only, 3 = both


### envLQGParmRanges.fits¶

This file, which is read in only at AOC code startup, contains a set of three ranges each for the three parameters (TT_SEEING, TT_WIND_POWER, TT_STAR_BRIGHTNESS) that are used to select the LQG filter.

Each quadruple of values for a parameter should be monotonically increasing. They define three ranges or bins into which the parameter can fall.

Units none

Size 4 x 3

To change this, run

IDL> writefits, gpi_rtc_configpath+'config/envLQGParmRanges.fits', new_parm_ranges


### INTEN_OVER_THRESH_FRAC¶

This operates in concert with CENT_THRESH At each time step, the number of valid subapertures that have failed to meet the threshold for adequate light is calculated, and then divided by the total number of valid subapertures. This fraction must be grater than this threshold for regular operation to occur. If fewer than the necessary fraction are illuminated, both Wfr and Twt are set to zero phase. This is maintained again until light is regained. Are the loops opened??

Units a floating point number from 0.0 to 1.0

Size a number

To set this, run

IDL> store_value , 'INTEN_OVER_THRESH_FRAC', val ;; 0.0 <= val <= 1.0


### LEAK_GAIN_DM¶

Units none

Size a floating point number

To set this, run

IDL> store_value , 'LEAK_GAIN_DM', val ;; 0 <= val < 1


### LEAK_GAIN_TT¶

Units none

Size X x Y

To set this, run

IDL> store_value , 'LEAK_GAIN_TT', val ;; 0 <= val < 1


Note

Though there is a single keyword for this, there are actually two separate integrators. During resgular integral-controller mode, the residual TT is split temporally, the each of the TT Stage and Wfr Surface is integrated separately.

Warning

If you want to use LQG via TT_LQG_SWITCH = 1, you must set this parameter to 1. This will exactly cancel the pure differentiator inside the LQG. (changed, 13-Feb-2013)

### LOCAL_WAFFLE_GAIN¶

Units none

Size a floating point number

To set this, run

IDL> store_value , 'LOCAL_WAFFLE_GAIN', val ;; 0 <= val <= 1


### mergedLQGparms.fits¶

This file, which is read in only at AOC code startup, contains the coefficients which describe 27 different LQG filter options. These coefficients represent both the model parameters (e.g. common-path vibration frequencies) and the Kalman gains (obtained by solving the Ricatti equation) that govern the steady state filter.

The theory behind this filter is described in this paper (downloadable PDF file). The only significant change from the theory presented in that paper is that we are using a simple first-order AR(1) model of the atmosphere. We had stability issues using higher order models.

We have written a simple interface to the complex underpinnings of the LQG filter in ult_make_lqg.

This interface allows you to set the following parameters in the model

1. temporal frequency (hz) and rms amount (mas) of up to three common-path vibrations
2. temporal frequency (hz) and rms amount (mas) of up to three non-common-path vibrations
3. noise level

There are 27 different cases that you can define. Do so in the sub-procedure in that file, glqgp_lookup_case.

Then run the code

IDL> resolve_routine, 'ult_make_lqg'
IDL> ult_make_lqg
IDL> ;; it will stop and ask if you want to save it
IDL> .cont ;; to save
IDL> rtc_issue_command, 'quit' ;; must restart aoc code to load in


Units none

Size 81 x 27

For selecting use of the LQG and specific filters, see keywords TT_LQG_SWITCH and TT_SEEING.

### MIN_INFUNC_GAIN¶

The response of the MEMS Twt is captured in a frequency-domain filter. The theory behind this filter is described in this paper (downloadable PDF file).

Low spatial frequencies on the MEMS are amplified, while high spatial frequencies are attenuated. For the same rms input Fourier mode on the Twt (in phase), the resulting actual phase on the mirror varies by a factor of ten (rms) from low to high spatial frequencies.

To produce the best single-step phase shaping, and to get best closed-loop bandwidth, we must use a precompensation filter. This filter is essentially the Fourier transform of a single influence function, appropriately sampled. This filter is applied with division to the phase in the Fourier domain.

This means that high spatial frequencies, which have a low value, result in division by a small number. This can greatly amplify noise. To limit this, we can set this parameter. For example, setting it to 0.1 means that we will only ever amplify by a factor of 10.

Note that this can also be done by mangling the influence function filter itself to limit is minimum value. See the discussion in the Section Twt influence function precompensation filter.

Units none

Size a floating point number

To set this, run

IDL> store_value , 'MIN_INFUNC_GAIN', val ;; 0 <= val <= 1


Units none

Size X x Y

Units none

Size X x Y

Units none

Size X x Y

### REF_BASE¶

The reference slopes are subtracted from the raw centroids at every time step. If the reference slopes are zero, the AOC cloesd loop drives all the spots to the cross hairs of each quad cell.

A key first step in image sharpening is having good references. These are usually obtained by pinholing the spatial filter, turning the light source way up, and using the wrapper command to have the AOC code save a new set.

Units mas

Size 96 x 48

To update this, run

IDL> ult_measure_refs


Warning

Just because a certain file is in REF_BASE, does not mean that the AOC is using those references. What references (maybe with offsets) that are used is controlled by commanding the AOC. To simplify the process of telling what references are in use, issue the command check_ref_mode.

### REF_OFFS¶

The offsets are a second set of references that can be used instead of or in addition to REF_BASE. These are used in speckle nulling.

Our interface assumes that you will generate the references to use as offsets manually and then save them. See below for code.

Units mas

Size 96 x 48

This is saved and then loaded in as follows

IDL> store_value , 'REF_OFFS', cent_data ;; cent_data is 96 x 48
IDL> fpath = retrieve_value ('REF_OFFS', /over) ;; get file name
IDL> rtc_issue_command , 'receiveRefCents '+fpath ;; tell AOC to load in new offsets
IDL> rtc_command_select_references , /meas, /offset ;; tell AOC to use offsets


Warning

Just because a certain file is in REF_OFFS, does not mean that the AOC is using those references. Whether or not the offset is used is controlled by commanding the AOC. To simplify the process of telling what references are in use, issue the command ult_check_ref_mode.

Units none

Size X x Y

### TT_GAIN_STAGE¶

During regular integral controller operation, this sets the gain on the TT controller that goes to the TT Stage.

Warning

Given the current AOC code and stability constraints, the TT loops perform to full potential is the surface_gain is twice the stage_gain. (Internally the Wfr surface commands are divided by two, making the actual control loop gain for TT on the Wfr surface be half of what the parameter is set to.

Units none

Size a floating point number

To set this, run

IDL> rtc_command_set_tt_gains , [stage_gain, surface_gain]


Warning

If you want to use LQG via TT_LQG_SWITCH = 1, you must set this parameter to 1.

### TT_GAIN_WFR_SURFACE¶

During regular integral controller operation, this sets the gain on the TT controller that goes to the Wfr surface.

Warning

Given the current AOC code and stability constraints, the TT loops perform to full potential is the surface_gain is twice the stage_gain. (Internally the Wfr surface commands are divided by two, making the actual control loop gain for TT on the Wfr surface be half of what the parameter is set to.

Units none

Size a floating point number

To set this, run

IDL> rtc_command_set_tt_gains , [stage_gain, surface_gain]


Warning

If you want to use LQG via TT_LQG_SWITCH = 1, you must set this parameter to 2.

### TT_LQG_SWITCH¶

Setting this to 1 tells the AOC code to use the LQG controller. It will select which one of the 27 possible controllers based on the values of three other keywords, TT_SEEING, TT_WIND_POWER, TT_STAR_BRIGHTNESS. See those for more discussion.

Units none

Size an integer (either 0 or 1)

To set this, run

IDL> store_value , 'TT_LQG_SWITCH', val ;; 0 = integral, 1 = LQG


Warning

To successfully switch over to the LQG, you not only have to set the flag, but you also have to adjust the controller gains. This is an artifact of how the AOC code is implemented.

The easiest way to switch over to LQG is to do the following. You have to give it a case # to run.

IDL> ult_set_tt_mode , lqg=casenum ;;; casenum is from 0 to 26


If you want to do this by hand (for some reason), do the following to switch modes. Note that this does not change the filter case. To switch over to LQG mode, run

IDL> store_value , 'TT_LQG_SWITCH', 1 ;; LQG
IDL> store_value , 'LEAK_GAIN_TT', 1 ;; stop the integrators
IDL> rtc_command_set_tt_gains , [1, 2] ;; get the gains right


To switch back to integral control mode, the easiest way is to do

IDL> ult_set_tt_mode ;; no args is back to defalut integral controller.


This does the following commands

IDL> store_value , 'TT_LQG_SWITCH', 0 ;; integral controller
IDL> store_value , 'LEAK_GAIN_TT', 0.9999 ;; default integrator
IDL> rtc_command_set_tt_gains , [1, 2]*0.2 ;; default gains


### TT_PHS_VLT¶

This calibration file contains the coefficients for the voltage-to-angle conversion of the TT Stage. There are two columns, one for each axis. The first two entries are $$a_0$$, the zero- and $$a_1$$, the first-order coefficients. These describe the forward relationship between voltage and angle.

That is, the angle $$\theta$$ the mirror makes in axis one (X) for a voltage $$v$$ is given as

$\theta = a_0 + a_1 v.$

The AOC uses this relationship in the inverse to determine the voltage to command the mirror with for a given desired angle.

The third and fourth entires in each column are, respectively, the minimum and maximum voltages that can be commanded. If the desired angle results in a voltage outside of this range, it is clipped to the ends of the range.

Units none

Size 2 x 4

IDL> ult_make_phs_vlt, /tt


### TT_SEEING¶

There are 27 possible LQG filters. When you define their specifications (see the discussion at mergedLQGparms.fits), you itemize up to 27 different filters. The code ult_make_lqg with the subprocedure glqgp_lookup_case, automatically uses the three parameters, each of which have three ranges, to specify each.

For each of the three parameters (TT_SEEING, TT_WIND_POWER, TT_STAR_BRIGHTNESS), the value is compared to the four values specified by envLQGParmRanges.fits and is placed in one of three bins.

Units none

Size a floating point number

To set this, run

IDL> store_value , 'TT_SEEING', val ;; this is complicated
IDL> ;; ... probably change other related settings, too


Note

I have no idea what happens in the AOC if you specify something above or below the range.

Though you can set all of these by hand, we have an automated procedure to let you chose a specific case (one of 27) and have it set everything for you. This is probably most useful in the testing regime. If you issue the command

IDL> ult_set_tt_mode , lqg=casenum ;;; casenum is from 0 to 26


It will not only switch to LQG mode correctly (see discussion above at TT_LQG_SWITCH), but also set these three parameters to select the case that you want.

### TT_SPLIT_SWITCH¶

Units none

Size X x Y

To set this, run

IDL> store_value , 'TT_SPLIT_SWITCH', val ;; 1 = stage only, 2 = surface only, 0 = both


### TT_STAR_BRIGHTNESS¶

There are 27 possible LQG filters. When you define their specifications (see the discussion at mergedLQGparms.fits), you itemize up to 27 different filters. The code ult_make_lqg with the subprocedure glqgp_lookup_case, automatically uses the three parameters, each of which have three ranges, to specify each.

For each of the three parameters (TT_SEEING, TT_WIND_POWER, TT_STAR_BRIGHTNESS), the value is compared to the four values specified by envLQGParmRanges.fits and is placed in one of three bins.

Units none

Size a floating point number

To set this, run

IDL> store_value, 'TT_STAR_BRIGHTNESS', val ;; this is complicated
IDL> ;; ... probably change other related settings, too


Note

I have no idea what happens in the AOC if you specify something above or below the range.

Though you can set all of these by hand, we have an automated procedure to let you chose a specific case (one of 27) and have it set everything for you. This is probably most useful in the testing regime. If you issue the command

IDL> ult_set_tt_mode, lqg=casenum ;;; casenum is from 0 to 26


It will not only switch to LQG mode correctly (see discussion above at TT_LQG_SWITCH, but also set these three parameters to select the case that you want.

### TT_WIND_POWER¶

There are 27 possible LQG filters. When you define their specifications (see the discussion at mergedLQGparms.fits), you itemize up to 27 different filters. The code ult_make_lqg with the subprocedure glqgp_lookup_case, automatically uses the three parameters, each of which have three ranges, to specify each.

For each of the three parameters (TT_SEEING, TT_WIND_POWER, TT_STAR_BRIGHTNESS), the value is compared to the four values specified by envLQGParmRanges.fits and is placed in one of three bins.

Units none

Size a floating point number

To set this, run

IDL> store_value , 'TT_WIND_POWER', val ;; this is complicated
IDL> ;; ... probably change other related settings, too


Note

I have no idea what happens in the AOC if you specify something above or below the range.

Though you can set all of these by hand, we have an automated procedure to let you chose a specific case (one of 27) and have it set everything for you. This is probably most useful in the testing regime. If you issue the command

IDL> ult_set_tt_mode, lqg=casenum ;;; casenum is from 0 to 26


It will not only switch to LQG mode correctly (see discussion above at TT_LQG_SWITCH, but also set these three parameters to select the case that you want.

### TT_X_OFF¶

Before the Spatial Filter moveable x-y assembly was installed, drifts in the system caused there to be differential pointing between the WFS pixels and the spatial filter. This lead to look instability as the spatial filter was not positioned correctly. These offsets enabled the AOC TT loop to run off-null and maintain spatial filter position.

Now that there is a moveable assembly with a thermal model, these commands are no longer used.

Units none

Size X x Y

To set this, run

IDL> rtc_command_set_tt_offsets, [x_off, y_off]


Note

This should always be 0.

### TT_Y_OFF¶

Before the Spatial Filter moveable x-y assembly was installed, drifts in the system caused there to be differential pointing between the WFS pixels and the spatial filter. This lead to look instability as the spatial filter was not positioned correctly. These offsets enabled the AOC TT loop to run off-null and maintain spatial filter position.

Now that there is a moveable assembly with a thermal model, these commands are no longer used.

Units none

Size X x Y

To set this, run

IDL> rtc_command_set_tt_offsets, [x_off, y_off]


Note

This should always be 0.

### TWT_CLEANUP¶

Invisible mode cleanup is necessary whenever an actuator is clipped on either mirror. Because we have several dead actuators on the Twt, clipping occurs every time step and we must cleanup Wfr modes which then appear (in small amounts) on the Twt.

The detailed theory of what these modes are is explained in Section Modal cleanup.

The mechanics of how much cleanup are set with parameters CLEANUP_GAIN and CLEANUP_THRESH.

Units none, but modes are all orthonormal (rms = 1)

Size 48 x 48 x 71

To update this, run

IDL> ult_make_cleanup_modes


Note

Since the cleanup modes depend on the MTA, but Twt and Wfr modes are generated at the same time.

### TWT_DM_SHAPE¶

Units microns

Size 48 x 48

This is set automatically when you run the command

IDL> rtc_command_set_tweeter, sig ;; many options


### TWT_FTR_FLTR¶

This is the reconstruction filter for Fourier Transform Reconstruction (FTR). See the Section Reconstruction filter for details.

Units none

Size 48 x 48 x 5

The frames are as follows

1. real part of G_x filter
2. real part of G_y filter
3. imaginary part of G_x filter
4. imaginary part of G_y filter
5. real part (purely real) of sum of mag^2 of G_x and G_y

To set this, run

IDL> ult_make_ftr_filter ;; see code for options


This filter describes frequency-domain response of the Twt to commands of different spatial frequencies. Getting the filter correct is fairly envolved. See the Section Twt influence function precompensation filter for all the details.

Units none

Size 48 x 48

IDL> need_to_name_this_code


Units none

Size X x Y

### twtLeakgains.fits¶

Due to non-linearities in the WFS, particularly with the spatial filter in place, slopes near dead actuators exhibit a small bias. This bias can build up on the integrator, leading to mis-positioned actuators and instability. By having a lower memory on those actuators, system stability is significantly improved. See the more detailed discussion in Section Twt phase integrator - per actuator leaks.

Units none

Size 48 x 48

To set this, run

IDL> ult_twt_leak_map ;; see code for options


### TWT_NEIGHBOR_LIMIT¶

This is a functionality implemented entirely inside the AOC. Details about its operation should be found in Dave Palmer’s documentation.

At some stage after the Twt commands are determined, a check is done to ensure that neighboring actuators are not commanded more than a specific value from each other. Such large phase excursions lead to drop-outs on the WFS and can make the system unstable.

I do not know how to easily verify that this is being applied in telemetry, or how often it is used, or how essential it is to system performance.

Units microns

Size a floating point number

To set this, run

IDL> store_value, 'TWT_NEIGHBOR_LIMIT', val ;; ?


### TWT_PHS_VLT¶

This calibration file contains the coefficients for the voltage-to-phase conversion of the Twt MEMS. (Note - there is still lingering confusion over is this file converts from voltage to surface height or phase (a factor of two), but the keyword name indicates phase.)

The first three entires are $$a_0$$, the zero-, $$a_1$$, the first- and $$a_2$$, the second-order coefficients for the quadratic function. These describe the forward relationship from voltage to phase.

That is, the actuator make a phase poke $$\phi$$ of a certain amount for a given voltage $$v$$ as

$\phi = a_0 + a_1 v + a_2 v^2$

The AOC uses this relationship in the inverse to determine the voltage to command the mirror with for a given desired phase.

The fourth and fifth entires in each column are, respectively, the minimum and maximum voltages that can be commanded. If the desired phase results in a voltage outside of this range, it is clipped to the ends of the range.

Warning

Each actuator has its own calibration. There are several (dead, misbehaving, etc.) that have been customized. See Sections Twt actuator types, Modal cleanup and Voltage-phase (or is the voltage-surface) calibrations for all mirrors for more information.

Units none

Size 48 x 48 x 5

IDL> ult_make_phs_vlt, /tweet


Units none

Size X x Y

### TWT_SYS_FLAT¶

Units none

Size X x Y

To update this, run

IDL> ult_save_dm_flats, /twt


### TWT_ZERO_LIST¶

This is auto-generated when we develop a new MTA for the Wfr-Twt split. See Section Wfr-Twt simultaneous control for a discussion of how this process works and how a new MTA is generated.

Units none

Size a vector, of the length of the total number of Fourier modes sent to the Wfr.

This will be updated when you make a new MTA.

IDL> ult_make_mta


### WFR_CLEANUP¶

Invisible mode cleanup is necessary whenever an actuator is clipped on either mirror. Because we have several dead actuators on the Wfr, clipping occurs every time step and we must cleanup Wfr modes which then appear (in small amounts) on the Wfr.

The detailed theory of what these modes are is explained in Section Modal cleanup.

The mechanics of how much cleanup are set with parameters CLEANUP_GAIN and CLEANUP_THRESH.

Units none

Size 9 x 9 x 69

To update this, run

IDL> ult_make_cleanup_modes ;; will update consistent with present MTA


Note

Since the cleanup modes depend on the MTA, but Twt and Wfr modes are generated at the same time.

### WFR_DM_SHAPE¶

Units microns

Size 9 x 9

This is set automatically when you run the command

IDL> rtc_command_set_woofer, sig ;; many options


### WFR_FTR_ACT_MAP¶

This is auto-generated when we develop a new MTA for the Wfr-Twt split. See Section Wfr-Twt simultaneous control for a discussion of how this process works and how a new MTA is generated.

Units none

Size 69-element vector (one for each actuator on the Wfr)

To update this, run

IDL> ult_make_mta


### WFR_FTR_CM¶

This is auto-generated when we develop a new MTA for the Wfr-Twt split. See Section Wfr-Twt simultaneous control for a discussion of how this process works and how a new MTA is generated.

Units none

Size # modes on Wfr x 69

To update this, run

IDL> ult_make_mta


### WFR_FTR_VECT¶

This is auto-generated when we develop a new MTA for the Wfr-Twt split. See Section Wfr-Twt simultaneous control for a discussion of how this process works and how a new MTA is generated.

Units none

Size a vector, of the length of half of the total number of Fourier modes sent to the Wfr.

To update this, run

IDL> ult_make_mta


Units none

Size X x Y

### WFR_PHS_VLT¶

This calibration file contains the coefficients for the voltage-to-phase conversion of the Wfr. (Note - there is still lingering confusion over is this file converts from voltage to surface height or phase (a factor of two), but the keyword name indicates phase.)

The first three entires are $$a_0$$, the zero-, $$a_1$$, the first- and $$a_2$$, the second-order coefficients for the quadratic function. These describe the forward relationship from voltage to phase.

Note

The Wfr has a linear voltage-phase relationship (i.e. $$a_2 = 0$$ always), but the parameter file is implemented like TWT_PHS_VLT to handle up to a quadratic.

That is, the actuator make a phase poke $$\phi$$ of a certain amount for a given voltage $$v$$ as

$\phi = a_0 + a_1 v$

The AOC uses this relationship in the inverse to determine the voltage to command the mirror with for a given desired phase.

The fourth and fifth entires in each column are, respectively, the minimum and maximum voltages that can be commanded. If the desired phase results in a voltage outside of this range, it is clipped to the ends of the range.

Units none

Size 9 x 9 x 5

IDL> ult_make_phs_vlt, /woof


Units none

Size X x Y

### WFR_SYS_FLAT¶

Units none

Size X x Y

To update this, run

IDL> ult_save_dm_flats, /wfr


### WFR_VEC_SIZE¶

This is auto-generated when we develop a new MTA for the Wfr-Twt split. See Section Wfr-Twt simultaneous control for a discussion of how this process works and how a new MTA is generated.

Units none

Size zn integer

To update this, run

IDL> ult_make_mta


### WFS_CAL.fits¶

This file defines the valid subapertures that are used. It is read in at startup. If you change it you have to restart the AOC code for it to take effect.

If a subaperture is valid, it is marked with a 1 in the 48 x 48 grid. Based on this, several other things follow, including commanded actuators and slaving.

It is important to get this to match both the illumination of the system (unlikely to change) and the dead actuators. See Section Misbehaving actuators: pupil selection, no special control for a detailed discussion of setting this correctly.

Units first frame must be 0 for invalid subapertures and 1 for valid.

Size 48 x 48 x 3

Use code

IDL> ult_make_subapmask


To regenerate this given the current dead actuator mapping.

### WFS_BACK_X¶

Units none

Size X x Y

Warning

I’m not sure what these are for, and have never changed them.

### WFS_DARK_X¶

Each frame rate (see CAM_FRAME_RATE) has a matched dark file. At present there are five of these: _0, _1, _2, _3 and _4.

Warning

The dark files need to be updated quite regularly! This is very easy to do. Simply block the light source and run the command.

Units none

Size 96 x 96

To take a fresh dark, turn off the light source and run

IDL> ult_measure_darks


See WFS Darks for more details.

### WFS_FLAT_X¶

Units none

Size X x Y

Warning

We do not have code that does this automatically. It’s only been done once (by hand). That was when the WFS head was off and the lenslets out.