MAOS
Multithreaded Adaptive Optics Simulator
recon.conf
#File recon.conf
#The parameters for generation reconstruction
recon.alg = 0 #0: MVR. 1: LSR
recon.glao = 0 #1: average gradient from wfs of same type (GLAO).
recon.split = 1 #0: integrated reconstruction. 1: ad hoc Split. 2: mvst (only if recon.alg==0)
recon.mvm = 0 #1: pre-assemble control matrix by solve identity matrix
recon.modal = 0 #-2: emulate zonal, -1: zernike modes, 0: zonal, 1: KL modes
recon.nmod = 0.96 #Maxium number of modes in modal controller. 0: all available modes. <1: as a fraction of dm[0].order^2*pi/4. >1: actual number.
recon.psol = -1 #1: Use pseudo open loop gradients. -1 : auto, on for MVR off for lsr
recon.poke = 1e-7 #How much WFE (meter) to apply to OPD for computing experimental interaction matrix. In noise free case, smaller one works fine.
recon.psd = 1 #1: compute PSDs of DM error signal averaged over aperture and field points for loop gain optimization. 0: disable
recon.psddtrat_hi=256 #how many time step to sample for DM PSD computation. (256 is not good for bad seeing)
recon.psddtrat_lo=ref:recon.psddtrat_hi #For low order PSD computation. 0:disable
recon.psdservo_gain=0.5 #Gain used to update servo gains
recon.psdnseg = 1 #how many overlapping partitions of the time history to compute PSD.
recon.petal = 0 #1: enable petaling mode control with OIWFS PSFs.
recon.petaldtrat= 50 #how many time steps to average for petaling mode control.
recon.petalstep = 10 # simulation step to enable petal mode control.
recon.petalnpsf = 16 #number of pixels (each dimension) used for petal reconstruction
recon.petaltt = 1 #whether include t/t modes in the reconstruction. 1: TT OIWFS only. 2: both TTF and TT (not good).
#The following ahst_* options are only used in ad hoc split control
tomo.ahst_wt = 4 #weighting method to remove ngs modes from lgs reconstruction output DM error signal. Negligible performance difference with NGS control, but option 1 behaves badly without NGS.
#1: use NGS gradient reconstruction weighting (bad if there is no NGS control output)
#2: use aperture evaluation weighting,
#3: identity weighting. (behaves well without NGS control output)
#4: Remove 2nd order terms from upper DMs and add to ground DM. (new and default as of 12/6/2024, handles more than 2 DM case well without fighting; as good as wt=3)
tomo.ahst_idealngs = 0 #apply ideal NGS mode correction. for skycoverage pre-simulation
tomo.ahst_focus = 1 #Only useful in LGS AO mode, in split tomography, when focus tracking (sim.mffocus)is turned on.
#0: the first plate scale mode creates focus error on science, but no focus error in LGS.
#1: the first plate scale mode results in no focus in science, but focus error in LGS. sim.mffocus takes care of it.
#2: Like 1, but feed this mode to LGS focus measurement. (Deprecated).
#The parameters for minimum variance tomography reconstruction, which is
#composed of a turbulence tomography step and a DM fitting step.
#Turbulence tomography reconstruction information.
tomo.assemble = 0 #1: Assemble tomography matrix. 0: don't assemble. 0 is fast for CG. automatically set to 1 in CBS mode
tomo.predict = 0 #prediction through modified ray tracing direction in tomo (testing)
tomo.tikcr = 1e-8 #tikhonov regularization. Necessary if tomo.alg=0.
tomo.svdthres = 1e-8 #threshold of SVD inversion.
tomo.piston_cr = 0 #single point piston constraint in tomography. degrads fdpcg. does not help cg or cbs.
tomo.alg = 1 #Tomography algorithm. 0: cholesky backsubstitution (CBS) on full #matrix
#1: Conjugate Gradient (CG). 2: SVD Inversion.
tomo.bgs = 0 #block Gauss Seidel method.
tomo.precond = 1 #Tomography CG preconditioning. 0: no precondition. 1: Fourier Domain Preconditioner.
tomo.maxit = 0 #max iterations in CG. 0 is default: 40 for CG, 4 for FDPCG (tomo.precond=1) x10 in non warm restart mode (3 as of 2016-06-20)
tomo.minwt = 0.01 #minimum layer weight allowed. if less than this will force to this. Too small value has numerical precision issue.
tomo.square = 0 #1: using square grid in tomography (xloc and ploc)
tomo.cone = 1 #1: using cone coordinate for tomography grid. keep at 1.
tomo.cxxalg = 0 #method to compute Cxx^-1. 0: bihormonic approx. 1: inverse psd. 2: fractal
tomo.cxxscale = 1 #scale the Cxx^-1 term (debugging).
tomo.guard = 1 #rings of padding in generating tomography pupil grid, not too small, not too large.
tomo.pos = 2 #over sampling ratio of ploc grid over actuator grid
tomo.nxbase = 0 #Each layer xloc grid size is tomo.os*tomo.nxbase if not zero. same for ploc.
tomo.iac = 0 #inter-actuator-coupling in cubic influence function (testing)
tomo.ninit = 5 #Initial size of the screen in fractal method. >=2
tomo.splitlrt = 0 #1: use LGS low rank terms in split tomography. to 0 on 2013/1/15.
#DM Fitting
fit.guard = 1 #rings of padding in generating DM fitting pupil grid, not too small, not too large.
fit.tikcr = 1e-7 #tikhonov regularization. 1.e-9 is not enough.
fit.svdthres = 2e-4 #threshold of SVD inversion
fit.actslave = 1 #1: enable lsr.actthres, 2: also enable fit.actthres2.
fit.actthres = 0.2 #When actuator coupling drops below this, start slaving its value. 0.05 is not very stable.
fit.actthres2 = 0.7 #When actuator coupling drops below this, start reducing jump around it.
fit.actextrap = 1 #Extrapolate weakly coupled actuators from active ones.
fit.lrt_piston= 1 #piston constraint
fit.lrt_tt = 1 #Limiting tip/tilt on upper DMs.
fit.assemble = 1 #1: assemble fit matrix. fast for fit.
fit.alg = -1 #Fitting algorithm. see tomo.alg. CBS works the best, but slow in GPU. -1 will change to 0 in MVM and 1 otherwise.
fit.bgs = 0 #block Gauss Seidel method.
fit.precond = 0 #CG preconditioning. see tomo.precond. None is implemented. keep at 0.
fit.maxit = 0 #max iterations in CG. 0 is default: 10. x10 in non warm restart mode
fit.square = 0 #use square grid on DM grid and ploc
fit.hs = [inf] #the height of the science object to optimize DM fitting with. normally infinity
fit.pos = ref:tomo.pos #over sampling ratio of floc grid over actuator grid.
fit.cachedm = 1 #cache DM command onto a grid matched with floc.
fit.cachex = 0 #cache x on xloc to non-cone coordinate. no speed up
#Parameters for least square reconstructor follows tomography parameter.
lsr.tikcr = 1e-2 #auto disabled for lsr.actslave=2 which regulates piston for each quadrant
lsr.svdthres = 1e-5
lsr.actslave = 1 #1: enable lsr.actthres, 2: also enable lsr.actthres2. (default: 1)
lsr.actthres = 0.7 #When actuator coupling coefficient drops below this, start slaving its value. (default: 0.65)
lsr.actthres2 = 0.8 #When actuator coupling drops below this, start reducing jump around it.
lsr.actextrap = -1 #extrapolate weakly coupled actuators from active ones. -1: auto, on for zonal, off for modal control
lsr.splitlrt = 0 #low rank terms also in LHS. keep at 0.
lsr.fnreg = #File name for regularization. has to be sparse cell array of ndm*ndm.
lsr.bgs = 0 #block Gauss Seidel method.
lsr.alg = 2 #LSR algorithm. see tomo.alg. SVD works the best.
lsr.maxit = 0 #max iterations in CG. 0 is default: 30. x10 in non warm restart mode.
#The misregistration model to be used in WFE reconstruction
recon.distortion_tel2wfs=[]
recon.distortion_dm2wfs=[]
recon.distortion_dm2sci=[]
#for truth WFS configuration
recon.twfs_rmin=3 #minimum zernike order (inclusive)
recon.twfs_rmax=20 #maximum zernike order (inclusive)
recon.twfs_radonly=0 #1: radial only, 0: all modes
#supersedes the following configuration
#dbg.twfsflag=0 #use TWFS to control 0: all modes>=spherical, 1: only radial modes>=spherical, 2: all modes>=focus, 3: only radial modes>= focus
#dbg.twfsrmax=9 #TWFS maximum zernike radial order.