functions in yao.i -
|
aoinit
|
func aoinit(disp=,forcemat=)
Second function of the ao serie.
Initialize everything in preparation for the loop (aoloop).
Follows a call to aoread,parfile.
Keywords:
disp: set to display stuff
forcemat: set to force measuring new iMat and computing new cMat.
keepdmconfig: when forcemat=1, the default behavior is to agregate the
previously determined active and extrapolated actuators and do the
new interacton matrix with all of them. The selection of valid/extrapolated
is then reset (and re-executed when the interaction matrix is done).
Setting keepdmconfig=1 impose that the valid/extrapolated setting remains
as it was.
This routine uses:
- the ao structures (atm, wfs, ...)
This routine calls:
- a bunch of initialization routines
This routine sets:
- a bunch of things.
| |
| SEE ALSO: | aoread, aoloop | |
|
aoread
|
func aoread(parfile)
Define the relevant structure/variable, and reads out the
AO simulation parameter file (e.g. "sh6.par"),
Does a check of the WFS pixel/subaperture sizes.
This is the first function to call in the ao serie (normally,
aoinit and aoloop follow).
This routine was kept separate from aoinit to keep the possibility
to change variables inbetween the aoread and the aoinit calls.
example:
> aoread,"sh6.par"
> loop.niter = 1000
> aoinit
This routine uses:
- the parameter file (e.g. "sh6.par")
This routine calls:
- wfsCheckPixelSize
This routine sets:
- the atm,sim,wfs,dm,mat,tel,target,gs,loop structure contents
- parprefix
| |
| SEE ALSO: | aoinit, aoloop | |
|
atm_struct
|
atm_struct
struct atm_struct
{
float dr0at05mic; // Dr0 at sensing wavelength, at zenith. Required [none].
pointer screen; // string vectorptr. Screen file names. Required [none].
pointer layerfrac; // float vectorptr. Layer fraction. Sum to one is insured
// in aoinit. Required [none]
pointer layerspeed; // float vectorptr. Layer speed. Required [none]
pointer layeralt; // float vectorptr. Layer altitude (m). Specified at Zenith.
// Required [none]
pointer winddir; // Wind dir (use 0 for now)
// Internal variables
pointer _layeralt; // float vectorptr. Actual layer altitude (m), from atm.alt & zen.angle
};
| |
|
buildComMat
|
buildComMat(all=,nomodalgain=,disp=)
Build the command matrix from V,UT, the eigenvalues and the modal gains
F.Rigaut, June 17,2002
Input keywords:
all: if not set, one (1) mode is forced to be discarded (useful if regular
AO system using a DM with a piston component and condition number too
large). Normally, set all=1.
nomodalgain: if set, the modal gain are not taken into account.
disp: set to display stuff.
This routine uses:
- dm._def, _nact, _n1, _n2 (extern)
- ipupil (extern)
- mat.condition (extern)
- modalgain (extern)
- eigenvalues (extern)
- modToAct (extern)
- mesToMod (extern)
This routine calls:
- Nothing
This routine sets:
- NModesControlled (extern)
This routine returns:
- cMat
| |
| SEE ALSO: | doInter, prepSVD | |
|
compDmShape
|
func compDmShape(nm,command)
compute the DM shape from the command vector
branch over _dmsum or _dmsumelt according to case.
| |
| SEE ALSO: | ||
|
correctUpLinkTT
|
func correctUpLinkTT(phase)
| |
| SEE ALSO: | ||
|
CurvWfs
|
CurvWfs(pupil,phase,ns,disp=)
This function computes the signal from a Curvature WFS for a
given phase and pupil input and WFS config.
| |
|
dm_struct
|
dm_struct
struct dm_struct
{
string type; // "bimorph", "stackarray" "tiptilt", "zernike", "aniso". Required [none]
long subsystem; // Subsystem this DM belongs to. Optional [1]
string iffile; // Influence function file name. Leave it alone.
float alt; // Conjugation altitude in meter. Specified @ zenith! Optional [0]
float hyst; // DM actuator hysteresis (0. to 1.). Optional [0]
float push4imat; // Voltage to apply for imat calibration. Optional [20].
// Note: the default is not OK for many configs. Change at will.
float thresholdresp; // Normalized response threshold for an act. to be valid. Optional [0.3]
float unitpervolt; // Influence function sensitivity in unit/volt. Optional [0.01]
// Stackarray: mic/volt, Tip-tilt: arcsec/volt.
float maxvolt; // Saturation voltage (- and +) in volt. Optional [none if not set]
float gain; // loop gain for this DM (total = this x loop.gain). Optional [1]
float misreg(2); // dm misregistration (pixels). optional [0,0]
// Bimorph-only keywords:
pointer nelperring; // long vectorptr. # of elec. per ring, e.g &([6,12,18]). Required [none]
pointer angleoffset; // float vectorptr. offset angle for first electrode in ring.
pointer rint; // float vectorptr. if set, specify the inner radius for each ring
pointer rout; // float vectorptr. if set, specify the outer radius for each ring
float supportRadius; // radius of support points, normalized in pupil radius
float supportOffset; // angle offset of first support points, in degree (default=90)
// Stackarray-only keywords:
long nxact; // # of act. in pupil diameter. Required [none]
long pitch; // Actuator pitch IN PIXEL. Required [none]
float pitchMargin; // margin to include more corner actuators when creating inf.functions
// optional [1.44]
float coupling; // coupling coef in influence function. optional [0.2].
// valid values from 0.04 to 0.30.
string ecmatfile; // valid to extrap. actuator matrix (extrap_com). Optional.
long noextrap; // set to 1 if no extrapolated actuators whatsoever are to be used [0]
long elt; // set to 1 if fast dmsum to be used
// Zernike-only keywords:
long nzer; // Number of modes, including piston. Required [none]
// Internal keywords:
float _alt; // Actual conjugation altitude in meter, from dm.alt and zen.
long _nact; // Internal. Tot # of actuators.
pointer _def; // Internal: Pointer to IF data
pointer _x; // Internal: x position of actuator in pixels
pointer _y; // Internal: x position of actuator in pixels
pointer _i1; //
pointer _j1; //
pointer _ei1; //
pointer _ej1; //
string _eiffile; // Influence function file name for extrap. actuators
pointer _edef; // Internal: Pointer to IF data for extrap. actuators
pointer _ex; // Internal: x position of extrap. actuator in pixels
pointer _ey; // Internal: x position of extrap. actuator in pixels
long _enact; // Internal. Tot # of extrap. actuators.
long _n1; // Internal: position of leftmost pixel in ao._size^2 array
long _n2; // Internal: position of leftmost pixel in ao._size^2 array
pointer _vold; // internal: hysteresis
pointer _posold; // internal: hysteresis
pointer _chpos; // internal: hysteresis
pointer _chv; // internal: hysteresis
pointer _dir; // internal: hysteresis
pointer _delta; // internal: hysteresis
pointer _command; // pointer to command vector
pointer _extrapcmat; // extrapolation matrix: extrap_com = extrapmat(,+)*valid_com(+)
int _eltdefsize; // size of def in case elt=1
};
| |
|
do_prompt
|
do_prompt | |
| SEE | disptoggle | |
|
doInter
|
doInter(disp=)
Measure the interaction matrix.
Each actuator are set and a measurement vector is taken.
The reference (for phase=0) is subtracted.
Keyword disp: set to display stuff as it goes.
This routine uses:
- dm._nact, _n1, _n2, _def (extern)
- mircube (extern)
This routine calls:
- multWfsIntMat
This routine sets:
- iMat (extern)
| |
| SEE ALSO: | prepSVD, buildComMat | |
|
getPhase2dFromDms
|
func getPhase2dFromDms(mircube, mir_sh)
adapted from the IDL function of the same name in tomoclose.pro
mircube(extern) = cube or image of phase screen (mirrors)
first plan = first mirror shape
second plan = second mirror shape
etc...
should be of size _n*_n
mir_sh = 2d vector of shift in number of pixels per screen
*_sh([x,y],screen#)
| |
| SEE ALSO: | ||
|
getPhase2dFromOptics
|
func getPhase2dFromOptics(nn,type)
adapted from the IDL function of the same name in tomoclose.pro
nn = wfs or GS #
type = "wfs" or "target"
| |
| SEE ALSO: | ||
|
getTurbPhaseInit
|
getTurbPhaseInit(void)
Belongs to the yao package suite.
Initializes everything for getTurbPhase (see below), which
returns the interpolated, integrated phase to the loop function
for iteration number "iter". Returns the "ok" parameter which is
set to 0 if this step is not to be used to compute statistics.
AUTHOR: F.Rigaut, June 11, 2002.
| |
| SEE ALSO: | aoinit, aoloop, getTurbPhase | |
|
gs_struct
|
gs_struct
struct gs_struct
{
float zeropoint; // Photometric zero point (#photons@pupil/s/full_aper, mag0 star).
// Required [none]
float zenithangle; // zenith angle. Optional [0.]. The zenith angle is used to compute:
// - r0 off-zenith
// - atmopheric turbulence layer altitude
// - LGS altitude and thickness of Na Layer
// - LGS brighness
// note that dm altitude is unchanged.
float lgsreturnperwatt;// Sodium LGS return in photons/cm2/s at entrance pupil.
// Specified at zenith. Modified by gs.zenithangle. Optional [22.]
// basically, you have to fold in this the sodium density
// and your model of return.
};
| |
|
loop_struct
|
loop_struct
struct loop_struct
{
float gain; // Loop gain. Optional, but important! [0]
long framedelay; // # of frame delay ON TOP OF normal 1 frame delay. Optional [0]
long niter; // # of total iteration. Required [none]
float ittime; // Iteration time in seconds. Required [none]
long startskip; // # iter to skip before collecting statistics. Optional [10]
long skipevery; // skip by "skipby" every "skipevery" iterations. Optional [0=none]
long skipby; // see above. this is to get better statistical
long stats_every; // compute stats every so many iteration (default 4)
// coverage. Optional [10000]
long jumps2swapscreen;//number of jumps (i.e. niter/skipevery) after which screens
//will be swapped (rotation, 2->1, 3->2... 1->last
string modalgainfile; // Name of file with mode gains. Optional.
// float dithering; // TT dithering for centroid gain (volts).
};
| |
|
mat_struct
|
mat_struct
struct mat_struct
{
pointer condition; // float vecorptr. Condition numbers for SVD, per subsystem. Required [none]
string file; // iMat and cMat filename. Leave it alone.
};
| |
|
opt_struct
|
opt_struct
struct opt_struct
{
string phasemaps; // filename of phasemap. Z scale should be in microns
float alt; // float. equivalent altitude in m.
float misreg(2); // float vector. misreg. (similar to DM, see below)
float _cent; // center of the phase maps arrays (similar to sim._cent)
};
| |
|
prepSVD
|
func prepSVD(imat,disp=)
Does the SVD decomposition and fill out modToAct
and mesToMod matrices for further use by buildComMat()
Keyword disp: set if display is required.
This routine uses:
- imat (input)
This routine calls:
- SVdec
This routine sets:
- eigenvalues (extern)
- modToAct (extern)
- mesToMod (extern)
| |
| SEE ALSO: | doInter, buildComMat | |
|
sim_struct
|
sim_struct
struct sim_struct
{
string name; // A name for this simulation run. Optional [none]
long pupildiam; // Pupil diameter in pixels. Required [none]
long debug; // set the debug level (0:no debug, 1:some, 2: most). Optional [0]
long verbose; // set the verbose level (0:none, 1: some, 2: most). Optional [0]
// Internal keywords:
long _size; // Internal. Size of the arrays [pixels]
float _cent; // Internal. Pupil is centered on (_cent,_cent)
};
| |
|
splitDMCommandVector
|
func splitDMCommandVector(v)
splits the single vector (out of cMat matrix multiply in aoloop)
into as many individual command vector as there are DMs.
Return a pointer vector to the individual command vectors.
| |
| SEE ALSO: | splitWfsVector | |
|
splitWfsVector
|
func splitWfsVector(v)
splits the single vector (out of multWfs or multWfsIntMat)
into as many individual wfs vector as there are sensors.
Return a pointer vector to the individual wfs vectors.
| |
| SEE ALSO: | ||
|
swapScreens
|
func swapScreens
Swap the phase screens. This is to get better statistics
out of fewer phase screens and iterations.
The 2nd phase screen becomes the 1rst one, 3->2, etc...
This routine uses the phase screens and normalization
factor stored in extern by getTurbPhaseInit
| |
| SEE ALSO: | ||
|
target_struct
|
target_struct
struct target_struct
{
pointer lambda; // float vectorptr. Image wavelengths in micron. Required [none]
pointer xposition; // float vectorptr. X positions in arcsec. Required [none]
pointer yposition; // float vectorptr. Y positions in arcsec. Required [none]
pointer dispzoom; // float vectorptr. Display zoom (typically around 1.). Optional [1.]
// Internal keywords
long _ntarget; // Internal: # of target
long _nlambda; // Internal: # of lambda
};
| |
|
tel_struct
|
tel_struct
struct tel_struct
{
float diam; // Telescope diameter in meters. Required [none]
float cobs; // Central obstruction / telescope diameter ratio. Optional [0]
};
| |
|
wfs_struct
|
wfs_struct
struct wfs_struct
{
string type; // WFS type: "curvature", "hartmann" or "pyramid". Required [none]
long subsystem; // Subsystem this WFS belongs to. Optional [1]
float lambda; // WFS wavelength in microns. Required [none]
long noise; // Enable noise (photon noise/read out noise). Optional [0=no].
float ron; // Read out noise in electrons. Optional [0]
float darkcurrent; // dark current in e-/sec/pixel or APD. Optional [0]
float gspos(2); // This WFS guide star position (x
| |
|
whereat
|
whereat | |
| SEE | disptoggle | |