![]() |
MAOS
Multithreaded Adaptive Optics Simulator
|
Macros | |
#define | AOS_LIB_TYPE |
#define | AOS_CMAT(A) c##A |
#define | AOS_DMAT(A) d##A |
Typedefs | |
typedef comp(* | cminsearch_fun) (const comp *x, void *info) |
Functions | |
cmat * | cnew (long nx, long ny) |
cmat * | cnew_file (long nx, long ny, const char *keywords, const char *format,...) |
cmat * | cnew_do (long nx, long ny, comp *p, mem_t *mem) |
cmat * | cmat_cast (const_anyarray A) |
int | cinit (cmat **A, long nx, long ny) |
void | cfree_content (cmat *A) |
void | cfree_do (cmat *A) |
cmat * | cref (const cmat *in) |
cmat * | cref_reshape (const cmat *in, long nx, long ny) |
cmat * | crefcols (const cmat *in, long icol, long ncol) |
void | ccols (cmat *out, const cmat *in, long icol, long ncol) |
int | cresize (cmat *A, long nx, long ny) |
cmat * | csub (const cmat *in, long sx, long nx, long sy, long ny) |
cmat * | ccat (const cmat *in1, const cmat *in2, int dim) |
cmat * | cdup (const cmat *in) |
void | czero (cmat *A) |
int | czerocol (cmat *A, int icol) |
uint32_t | chash (const cmat *A, uint32_t key) |
void | ccp (cmat **out0, const cmat *in) |
cmat * | ctrans (const cmat *A) |
void | cset (cmat *A, const comp val) |
void | cshow (const cmat *A, const char *format,...) |
void | cshow_diag (const cmat *A, const char *format,...) |
void | cvecperm (cmat *out, const cmat *in, const long *perm) |
void | cvecpermi (cmat *out, const cmat *in, const long *perm) |
int | cflip (cmat *A, int axis) |
comp | cvecsum (const comp *__restrict p, long np) |
comp | csum (const cmat *A) |
void | cnormalize_sum (cmat *A, comp sum) |
normalize the sum of A to sum. | |
void | cnormalize_sumabs (cmat *A, real sum) |
normalize the sum of abs(A) to sum. | |
comp | cmean (const cmat *A) |
comp | ctrace (const cmat *A) |
void | csort (cmat *A, int ascend) |
void | cvecmaxmin (const comp *__restrict p, long N, real *max, real *min) |
comp | cvecdot (const comp *__restrict p1, const comp *__restrict p2, const real *__restrict p3, long n) |
void | cvecnormalize_sum (comp *__restrict p, long nloc, comp norm) |
void | cvecnormalize_sumabs (comp *__restrict p, long nloc, comp norm) |
real | cvecmaxabs (const comp *__restrict p, long n) |
void | cmaxmin (const cmat *A, real *max, real *min) |
real | cmax (const cmat *A) |
real | cmaxabs (const cmat *A) |
real | cmin (const cmat *A) |
real | csumabs (const cmat *in) |
real | csumsq (const cmat *in) |
real | csumdiffsq (const cmat *A, const cmat *B) |
cmat * | cunique (const cmat *input, int ascend) |
void | cfftshift (cmat *A) |
int | ccpcorner2center (cmat *A, const cmat *B) |
int | cshift (cmat **B0, const cmat *A, int sx, int sy) |
ccell * | ccell_cast (const cell *A) |
ccell * | ccellnew2 (const ccell *A) |
ccell * | ccellnew3 (long nx, long ny, long *nnx, long *nny) |
ccell * | ccellnew_same (long nx, long ny, long mx, long my) |
ccell * | ccellnew_file (long nx, long ny, long *nnx, long *nny, const char *keywords, const char *format,...) |
ccell * | ccellnewsame_file (long nx, long ny, long mx, long my, const char *keywords, const char *format,...) |
void | ccellzero (ccell *dc) |
void | ccellset (ccell *dc, comp alpha) |
ccell * | ccelltrans (const ccell *A) |
ccell * | ccellref (const ccell *in) |
ccell * | ccelldup (const ccell *in) |
void | ccellcp (ccell **out0, const ccell *in) |
ccell * | ccellreduce (const ccell *A, int dim) |
ccell * | ccellcat (const ccell *A, const ccell *B, int dim) |
void | ccellcat2 (ccell **A, const ccell *B, int dim) |
ccell * | ccellcat_each (const ccell *A, const ccell *B, int dim) |
ccell * | c2cellref (const cmat *A, long *dims, long ndim) |
void | c2cell (ccell **B, const cmat *A, const ccell *ref) |
cmat * | ccell_col (ccell *input, long icol) |
comp | ccellsum (const ccell *A) |
cmat * | ccellsum_each (const ccell *A) |
int | cisnan (const cmat *A) |
real | cnorm (const cmat *in) |
real | cstd (const cmat *in) |
void | crandu (cmat *A, const comp mean, rand_t *rstat) |
void | crandn (cmat *A, const comp sigma, rand_t *rstat) |
void | cscale (cmat *A, real w) |
comp | cdot (const cmat *A, const cmat *B) |
comp | cwdot (const comp *a, const cmat *w, const comp *b) |
void | ccwm (cmat *A, const cmat *B) |
void | ccwm2 (cmat *A, const cmat *B1, real wt1, const cmat *B2, real wt2) |
void | ccwm3 (cmat *__restrict A, const cmat *__restrict W, const cmat *__restrict B1, const real wt1, const cmat *__restrict B2, const real wt2) |
void | ccwmcol (cmat *__restrict A, const cmat *__restrict B) |
void | ccwmrow (cmat *__restrict A, const cmat *__restrict B) |
void | ccwdiv (cmat *B, const cmat *A, comp value) |
void | cmulvec (comp *__restrict y, const cmat *__restrict A, const comp *__restrict x, const comp alpha) |
void | cmm (cmat **C0, const comp beta, const cmat *A, const cmat *B, const char trans[2], const comp alpha) |
void | cmm3 (cmat **pout, comp beta, const cmat *A, const cmat *B, const cmat *C, const char trans[4], comp alpha) |
Compute 3 matrix multipliation: out=out*alpha+beta*op(A)*op(B)*op(C) | |
void | cinvspd_inplace (cmat *A) |
cmat * | cinvspd (const cmat *A) |
void | cinv_inplace (cmat *A) |
cmat * | cinv (const cmat *A) |
cmat * | cchol (const cmat *A) |
cmat * | cmcc (const cmat *A, const cmat *wt) |
cmat * | cimcc (const cmat *A, const cmat *wt) |
cmat * | ctmcc (const cmat *A, const cmat *wt) |
cmat * | cpinv2 (const cmat *A, const_anyarray W, real thres1, real thres2) |
cmat * | cpinv (const cmat *A, const_anyarray W) |
Wrap dpinv2 with default parameters. | |
comp | cdiff (const cmat *A, const cmat *B) |
int | ccircle (cmat *A, real cx, real cy, real dx, real dy, real r, comp val) |
int | crectangle (cmat *A, real cx, real cy, real rx, real ry, real theta, comp val) |
void | crotvec (cmat *A, const real theta) |
void | crotvect (cmat *A, const real theta) |
void | crotvecnn (cmat **B0, const cmat *A, real theta) |
void | cmulvec3 (comp *y, const cmat *A, const comp *x) |
void | ccorr (cmat **corr, const cmat *A, const cmat *B) |
void | cpara3 (real *grad, const cmat *corr) |
void | ccog (real *grad, const cmat *i0, real offsetx, real offsety, real thres, real bkgrnd, real flux) |
void | cshift2center (cmat *A, real offsetx, real offsety) |
int | cclip (cmat *A, real min, real max) |
void | cgramschmidt (cmat *Mod, real *amp) |
void | cmuldiag (cmat *A, const dmat *s) |
void | ccwpow (cmat *A, real power) |
void | ccwexp (cmat *A, real alpha) |
void | ccwpow_thres (cmat *A, real power, real thres) |
void | csvd (cmat **U, dmat **Sdiag, cmat **VT, const cmat *A) |
void | csvd_cache (cmat **U, dmat **Sdiag, cmat **VT, const cmat *A) |
void | csvd_pow2 (cmat *A, real power, real thres1, real thres2) |
void | csvd_pow (cmat *A, real power) |
Wrap svd_pow with default parameters. | |
void | cexpm (cmat **out, real alpha, const cmat *A, real beta) |
void | cpolyval (cmat *A, dmat *p) |
void | caddI (cmat *A, comp val) |
void | cadd (cmat **B0, comp bc, const cmat *A, const comp ac) |
void | cadd_relax (cmat **B0, comp bc, const cmat *A, const comp ac) |
void | caddcol (cmat *B, long icol, comp bc, const cmat *A, const comp ac) |
void | cadds (cmat *A, const comp ac) |
cmat * | clogspace (real emin, real emax, long n) |
cmat * | clinspace (real min, real dx, long n) |
cmat * | cinterp1 (const cmat *xin, const cmat *yin, const cmat *xnew, comp y0) |
cmat * | cinterp1_2 (const cmat *xyin, const cmat *xnew) |
cmat * | cinterp1linear (const cmat *xin, const cmat *yin, const cmat *xnew, comp y0) |
cmat * | cinterp1log (const cmat *xin, const cmat *yin, const cmat *xnew, comp y0) |
void | cblend (cmat *__restrict A, cmat *__restrict B, int overlap) |
void | chistfill (cmat **out, const cmat *A, real center, real spacing, int n) |
cmat * | cspline_prep (cmat *x, cmat *y) |
cmat * | cspline_eval (cmat *coeff, cmat *x, cmat *xnew) |
cmat * | cspline (cmat *x, cmat *y, cmat *xnew) |
void | ccwlog10 (cmat *A) |
void | ccwlog (cmat *A) |
void | cembed (cmat *__restrict A, const cmat *__restrict B, const real theta) |
void | cembedd (cmat *__restrict A, const dmat *__restrict B, const real theta) |
real | cfwhm (cmat *A) |
void | cgauss_fit (real *mr, real *ma, real *mb, real *theta, cmat *A, real thres) |
real | cgauss_width (cmat *A, real thres) |
real | cfwhm_gauss (cmat *A) |
cmat * | cenc (const cmat *A, const cmat *dvec, int type, int nthread) |
int | cminsearch (comp *x, int nmod, comp ftol, int nmax, cminsearch_fun fun, void *info) |
void | cbessik (comp x, comp xnu, comp *ri, comp *rk, comp *rip, comp *rkp) |
comp | ctrapz (const cmat *x, const cmat *y) |
real | ccellnorm (const ccell *in) |
void | ccellscale (anyarray A, real w) |
void | ccelldropempty (ccell **A0, int dim) |
comp | ccelldot (const ccell *A, const ccell *B) |
void | ccellcwm (ccell *B, const ccell *A) |
ccell * | ccellinvspd (ccell *A) |
ccell * | ccellinv (ccell *A) |
ccell * | ccellinvspd_each (ccell *A) |
ccell * | ccellpinv2 (const ccell *A, const_anyarray W, real thres1, real thres2) |
ccell * | ccellpinv (const ccell *A, const_anyarray W) |
Wrap cellpinv2 with default parameters. | |
void | ccellsvd_pow2 (ccell *A, real power, real thres1, real thres2) |
void | ccellsvd_pow (ccell *A, real power) |
wrap cellsvd_pow2. | |
void | ccellcwpow (ccell *A, real power) |
void | ccelldropzero (ccell *B, real thres) |
real | ccelldiff (const ccell *A, const ccell *B) |
int | ccellclip (ccell *Ac, real min, real max) |
ccell * | ccellsub (const ccell *in, long sx, long nx, long sy, long ny) |
ccell * | cbspline_prep (cmat *x, cmat *y, cmat *z) |
cmat * | cbspline_eval (ccell *coeff, cmat *x, cmat *y, cmat *xnew, cmat *ynew) |
void | cmaprot (anyarray A_, real theta) |
void | ccwmc (cmat *__restrict A, const cmat *__restrict B) |
void | ccwmd (cmat *__restrict A, const dmat *__restrict B) |
void | cembed_wvf (cmat *__restrict A, const real *opd, const real *amp, const int nopdx, const int nopdy, const real wvl, const real theta) |
void | cembedc_flag (cmat *__restrict A, const cmat *__restrict B, const real theta, CEMBED flag) |
void | ccpcorner (cmat *A, const cmat *__restrict B, CEMBED flag) |
void | cabstoreal (cmat *A) |
void | cabs2toreal (cmat *A, real scale) |
void | ccpd (cmat **__restrict A, const dmat *__restrict B) |
void | creal2d (dmat **__restrict A0, real alpha, const cmat *__restrict B, real beta) |
void | cimag2d (dmat **__restrict A0, real alpha, const cmat *__restrict B, real beta) |
void | cabs22d (dmat **__restrict A0, real alpha, const cmat *__restrict B, real beta) |
void | carg2d (dmat **__restrict A0, real alpha, const cmat *__restrict B, real beta) |
void | ctilt2 (cmat *otf, cmat *otfin, real sx, real sy, int peak_corner) |
void | ctilt (cmat *otf, real sx, real sy, int peak_corner) |
void | ccogreal (real *grad, const cmat *i0, real offsetx, real offsety, real thres, real bkgrnd) |
void | ccogabs (real *grad, const cmat *i0, real offsetx, real offsety, real thres, real bkgrnd) |
void | cwritedata (file_t *fp, const cmat *A, long ncol) |
cmat * | creaddata (file_t *fp, header_t *header) |
cmat * | cnew_mmap (long nx, long ny, const char *keywords, const char *format,...) |
ccell * | ccellnew_mmap (long nx, long ny, long *nnx, long *nny, const char *keywords, const char *format,...) |
ccell * | ccellnewsame_mmap (long nx, long ny, long mx, long my, const char *keywords, const char *format,...) |
cmat * | cread_mmap (const char *format,...) |
ccell * | ccellread_mmap (const char *format,...) |
csp * | cspnew (long nx, long ny, long nzmax) |
csp * | cspref (const csp *A) |
csp * | cspdup (const csp *A) |
csp * | cspnew2 (const csp *A) |
csp * | cspnewrandu (long nx, long ny, const comp mean, real fill, rand_t *rstat) |
void | cspsetnzmax (csp *sp, long nzmax) |
csp * | csp_cast (const cell *A) |
void | cspfree_do (csp *sp) |
void | cspdisp (const csp *sp) |
int | cspcheck (const csp *sp) |
void | cspscale (csp *A, const comp beta) |
void | cspscalex (csp *A, const cmat *xs) |
void | cspscaley (csp *A, const cmat *ys) |
cspcell * | cspcellref (const cspcell *in) |
cspcell * | cspcell_cast (const cell *A) |
void | cspcellscale (cspcell *A, const comp beta) |
csp * | cspnewdiag (long N, comp *vec, comp alpha) |
cmat * | cspdiag (const csp *A) |
void | cspmuldiag (csp *__restrict A, const comp *w, comp alpha) |
void | cspmv (cmat *y, const csp *A, const cmat *__restrict x, char trans, comp alpha) |
void | cspmulcreal (comp *__restrict y, const csp *A, const comp *__restrict x, real alpha) |
void | cspmm (cmat **yout, const csp *A, const cmat *x, const char trans[2], const comp alpha) |
void | cmulsp (cmat **yout, const cmat *x, const csp *A, const char trans[2], const comp alpha) |
comp | cspwdot (const cmat *y, const csp *A, const cmat *x) |
comp | cspcellwdot (const ccell *y, const cspcell *A, const ccell *x) |
void | ccellmm (panyarray C0, const_anyarray A, const_anyarray B, const char trans[2], const real alpha) |
ccell * | ccellmm2 (const ccell *A, const ccell *B, const char trans[2]) |
csp * | c2sp (cmat *A, real thres) |
void | cspfull (cmat **out0, const csp *A, const char trans, const comp alpha) |
void | cspcellfull (ccell **out0, const cspcell *A, const char trans, const comp alpha) |
csp * | cspadd2 (const csp *A, comp a, const csp *B, comp b) |
void | cspadd (csp **A0, comp alpha, const csp *B, comp beta) |
void | ccelladd (panyarray pA, real ac, const_anyarray B, real bc) |
csp * | cspaddI (const csp *A0, comp alpha) |
void | ccelladdI (anyarray A, comp alpha) |
csp * | csptrans (const csp *A) |
void | cspconj (csp *) |
csp * | cspmulsp (const csp *A, const csp *B, const char trans[2]) |
void | cspmulsp2 (csp **C0, const csp *A, const csp *B, const char trans[2], const comp scale) |
cspcell * | cspcelltrans (const cspcell *spc) |
csp * | cspcat (const csp *A, const csp *B, int type) |
csp * | cspcell2sp (const cspcell *A) |
cmat * | cspsum (const csp *A, int col) |
cmat * | cspsumabs (const csp *A, int col) |
real | csptrace (const csp *A, real power) |
Compute the sum of diagonal items (trace) with power. | |
void | cspclean (csp *A) |
void | cspdroptol (csp *A, real thres) |
void | cspcelldroptol (cspcell *A, real thres) |
lmat * | cspdropemptycol (csp *A) |
void | cspsort (csp *A) |
void | cspcellsort (cspcell *A) |
void | cspsym (csp **A) |
void | cspcellsym (cspcell **A) |
csp * | cspconvolvop (cmat *A) |
csp * | cspperm (csp *A, int reverse, long *pcol, long *prow) |
csp * | cspinvbdiag (const csp *A, long bs) |
ccell * | cspblockextract (const csp *A, long bs) |
cmat * | ccell2m (const_anyarray A) |
void | cspwritedata (file_t *fp, const csp *sp) |
csp * | cspreaddata (file_t *fp, header_t *header) |
void | cfft_free_plan (struct fft_t *fft) |
void | cfft2 (cmat *A, int dir) |
void | cfft2i (cmat *A, int dir) |
void | cfft2s (cmat *A, int dir) |
void | cfft2partial (cmat *A, int ncomp, int dir) |
cmat * | cffttreat (cmat *A) |
void | dfft_free_plan (struct fft_t *fft) |
void | dcell_fft2 (dcell *dc, int dir) |
void | dfft1plan_r2hc (dmat *out, int dir) |
void | dfft1 (dmat *A, int dir) |
Create a new CX(mat). Initialized to zero.
Create a new ZX(mat). Initialized to zero.
Calls CX(new) with a filename to be saved to.
Calls ZX(new) with a filename to be saved to.
cmat * cmat_cast | ( | const_anyarray | A | ) |
check and cast an object to matrix
check the size of matrix if exist. Otherwise create it. content is not zeroed if already exists.
creat a reference to an existing matrix. header is duplicated if exists.
create an new reference another with different shape.
creat a new matrix referencing columns in existing matrix. reference counted.
Override a stack matrix struct with pointers to columns of another matrix. Does not add reference count the original data.
Resize a matrix by adding or removing columns or rows. Data is kept whenever possible.
Create a new sub matrix of nx*ny starting from(sx,sy) and copy the data.
Concatenate two matrixes into 1 along "dim" (1 for x, 2 for y)
int czerocol | ( | cmat * | A, |
int | icol | ||
) |
Set column elements to zero.
Permute the vector so that out(:)=in(p);
Reverse permute the vector so that out(p)=in(:);
int cflip | ( | cmat * | A, |
int | axis | ||
) |
Flip the matrix along the set axis. 0 to flip both, 1 along x, 2 along y.
reorder B and embed/crop into center of A .
4 * * 3 * * * * * * * * 2 * * 1
to
1 2 3 4
cyclic shift A by nx and ny to B.
4 3 1 2 2 1 to 3 4
create an new cell similar to A in shape. When a cell is empty, it is created with an emtry matrix and cannot be overriden.
Create an new cell with matrix specified. Each block is stored continuously in memory.
Create an new cell with matrix specified. Each block is stored continuously in memory.
ccell * ccellnew_file | ( | long | nx, |
long | ny, | ||
long * | nnx, | ||
long * | nny, | ||
const char * | keywords, | ||
const char * | format, | ||
... | |||
) |
Calls cellnew3 with a filename to be saved to.
ccell * ccellnewsame_file | ( | long | nx, |
long | ny, | ||
long | mx, | ||
long | my, | ||
const char * | keywords, | ||
const char * | format, | ||
... | |||
) |
Calls cellnew_same with a filename to be saved to.
creat a cell reference an existing cell by referencing the elements.
duplicate a CX(cell) object. Not implemented for lmat or imat as CX(cellcp) is defined in spmm.c
duplicate a ZX(cell) object. Not implemented for lmat or imat as ZX(cellcp) is defined in spmm.c
Copy B to A.
Takes parameters of matrix, sparse matrix, or cell array of them.
reduce nx*ny cell matrix to 1*ny if dim=1 and nx*1 if dim=2 by merging the cells.
concatenate two cell matrices along dimenstion 'dim'.
concatenate two cell matrices along dimenstion 'dim'.
concatenate coresponding elements of each CX(cell). They must have the same shape.
concatenate coresponding elements of each ZX(cell). They must have the same shape.
convert a vector to cell using dimensions specified in dims. Reference the vector
make A a cell array using shape information from ref if *B is NULL.
Notice that empty cells may be replaced by zeros if it is within valid column or row.
input is nsa*ncol cell. each cell has npix=nx*ny elements. Extract icol of cell as npix*nsa array.
return sum of each cell in a CX(mat)
return sum of each cell in a ZX(mat)
Fill A with random uniform numbers between [0, 1]*max
Fill A with random normal distribution numbers with standard deviation of sigma.
compute weighted dot product a'*(w*b)
void ccwmcol | ( | cmat *__restrict | A, |
const cmat *__restrict | B | ||
) |
Compute component wise multiply A=A.*(B1*wt1+B2*wt2) component-wise multiply of three matrices. A=A.*W.*(B1*wt1+B2*wt2) Component-wise multiply each column of A with B A(:,i)=A(:,i).*B;
void ccwmrow | ( | cmat *__restrict | A, |
const cmat *__restrict | B | ||
) |
component-wise multiply of columns of A with combination of B1 and B2: A(:,i)=A(:,i)*(B1*wt1+B2*wt2); component wise multiply of 2d complex matrix A,W and 1d vector B. A(:,i)=A(:,i).*W(:,i).*B; Component wise multiply each row of A with B. A(i,:)=A(i,:)*B
component-wise multiply of rows of A with combination of B1 and B2: A(i,:)=A(i,:).*(B1*wt1+B2*wt2); Component wise division B=B./A. 0/0 is replace by 'value';
void cmulvec | ( | dcomplex *__restrict | y, |
const cmat *__restrict | A, | ||
const dcomplex *__restrict | x, | ||
const dcomplex | alpha | ||
) |
multiply a CX(mat) matrix with a vector and accumulate to y: y+=A*x*alpha
multiply a ZX(mat) matrix with a vector and accumulate to y: y+=A*x*alpha
void cmm | ( | cmat ** | C0, |
const dcomplex | beta, | ||
const cmat * | A, | ||
const cmat * | B, | ||
const char | trans[2], | ||
const dcomplex | alpha | ||
) |
compute matrix product using blas dgemm.; C=beta*C+ alpha *trans(A)*trans(B); if C exist.
inplace invert a small square SPD matrix using lapack dposv_, usually (A'*w*A). by solving Ax=I; copy x to A. dposv_ modifies A also. be careful
Compute the cholesky decomposition of a symmetric semi-definit dense matrix.
compute the pseudo inverse of matrix A with weigthing of full matrix W or sparse matrix weighting Wsp. For full matrix, wt can be either W or diag (W) for diagonal weighting. B=inv(A'*W*A+tikcr)*A'*W; thres is the threshold to truncate eigenvalues.
compute the relative difference betwee two vectors. sqrt(||A-B||/||A||) using norm2. for debugging purpose.
int ccircle | ( | cmat * | A, |
double | cx, | ||
double | cy, | ||
double | dx, | ||
double | dy, | ||
double | r, | ||
dcomplex | val | ||
) |
Generate a new gray pixel map based on bilinear influence functions used in mkw. It creates slightly larger map than an filled circle to account for the sampling effect. The Center and Radius cx,cy,r are in unit of meter, The sampling dx,dy specify spacing of the points in meter along x or y dimension. Each full point received value of 'val'
int crectangle | ( | cmat * | A, |
double | cx, | ||
double | cy, | ||
double | rx, | ||
double | ry, | ||
double | theta, | ||
dcomplex | val | ||
) |
Generate a new gray pixel map based on bilinear influence functions used in mkw. It creates slightly larger map than an filled rectangle to account for the sampling effect. The Center and half width cx,cy,rx,ry are in unit of meter, The sampling dx,dy specify spacing of the points in meter along x or y dimension. Each full point received value of 'val'
rotate the column vectors CCW, equivalent as rotate coordinate theta CW. A is nx2 while A(:,1) is x, A(:,2) is y.
rotate the row vectors CCW. same as rotate coordinate theta CW. A is 2xn A(:,1) is x, A(:,2) is y.
rotate a 2x2 covariance matrix A by theta CCW (coordinate rotate -theta CCW) or from ra to xy coordinate. R*A*R';
T matrix vector multiply optimized for just three values. y=A*x;
Compute the parabolic fit center using 3x3 points around the peak.
void ccog | ( | double * | grad, |
const cmat * | im, | ||
double | offsetx, | ||
double | offsety, | ||
double | thres, | ||
double | bkgrnd, | ||
double | flux | ||
) |
Compute thresholded center of gravity. The threshold is absolute value. bkgrnd is removed from i0 when computing cog. offset is the offset of the reference point (cog=0) from the physical center. all length are given in terms of pixel.
Shift the image in A to center on physical center+[offsetx,offsety] using cog and fft.
Compute SVD of a general matrix A. A=U*diag(S)*V'; diag(S) is returned.
computes pow(A,power) in place using svd. positive thres: Drop eigenvalues that are smaller than thres * max eigen value negative thres: Drop eigenvalues that are smaller than thres * previous eigen value (sorted descendantly).
A | [in/out] The matrix | |
[in] | power | power of eigen values. usually -1 for inverse |
[in] | thres1 | SVD inverse absolute threshold |
[in] | thres2 | SVD inverse relative threshold |
computes out=out*alpha+exp(A*beta) using scaling and squaring method. Larger scaling is more accurate but slower. Tested against matlab expm
First, scaling the matrix by 2^-n times so it is smaller than 1/threshold. Then compute exp(A*beta*2^-n) using Tylor expansion. Then compute the final answer by taking exponential of 2^n.
compute B=bc*B+ac*A behavior changed on 2009-11-02. if A is NULL, don't do anything.
compute B=bc*B+ac*A. Use smallest dimension of both. behavior changed on 2009-11-02. if A is NULL, don't do anything.
Compute B[:,icol]=bc*B[:,icol]+ac*A where A is vector.
void cembed | ( | cmat *__restrict | out, |
const cmat *__restrict | in, | ||
const double | theta | ||
) |
Embed a ninx*niny matrix in into A with optional rotation by theta CCW (output points are rotated by theta -CCW) around the fft center. Used to rotate the PSF from x-y to radial-azimuthal coordinate in radial format CCD. A may be bigger or smaller than B.
void cembedd | ( | cmat *__restrict | out, |
const dmat *__restrict | in, | ||
const double | theta | ||
) |
embed a ninx*niny matrix in into A with optional rotation by -theta CCW (coordinate rotate theta CCW) around the fft center. Used to rotate the PSF from x-y to radial-azimuthal coordinate in radial format CCD. A may be bigger or smaller than B.
real cfwhm | ( | cmat * | A | ) |
Calculate number of pixels having values larger than or equal to half of maximum and convert to diameter.
For more accurate calculation of Gaussian beams, use the sqrt(2*log(2))*CX(gauss_width).
Calculate number of pixels having values larger than or equal to half of maximum and convert to diameter.
For more accurate calculation of Gaussian beams, use the sqrt(2*log(2))*ZX(gauss_width).
Calculate D4s width of Gaussian 2D function
mr | Equivalent radius of the same area |
ma | major axis |
mb | minor axi |
angle | angle |
A | The irradiance (intensity) |
thres | The threshold relative to peak. |
real cgauss_width | ( | cmat * | A, |
double | thres | ||
) |
A convenient wrapper
real cfwhm_gauss | ( | cmat * | A | ) |
Use gauss fit to compute fwhm
int cminsearch | ( | dcomplex * | x, |
int | nmod, | ||
dcomplex | ftol, | ||
int | nmax, | ||
cminsearch_fun | fun, | ||
void * | info | ||
) |
Search minimum along multiple dimenstions. scale contains the scale of each dimension. x contains initial warm restart values.
void cbessik | ( | dcomplex | x, |
dcomplex | xnu, | ||
dcomplex * | ri, | ||
dcomplex * | rk, | ||
dcomplex * | rip, | ||
dcomplex * | rkp | ||
) |
Returns the modified Bessel functions ri = Iν , rk = Kν and their derivatives rip = Iν , rkp = Kν, for positive x and for xnu = ν ≥ 0.
void ccellscale | ( | anyarray | A_, |
double | w | ||
) |
scale each element of A.
invert each component of the dcell. Each cell is treated as an individual matrix.
compute the pseudo inverse of block matrix A. A is n*p cell, wt n*n cell or sparse cell. \(B=inv(A'*W*A)*A'*W\)
[in] | A | The matrix to pseudo invert |
[in] | W_ | The weighting matrix. dense or sparse |
[in] | thres1 | SVD absolute inverse threshold |
[in] | thres2 | SVD relative inverse threshold |
compute the power of a block matrix using svd method. First convert it do CX(mat), do the power, and convert back to block matrix.
compute the power of a block matrix using svd method. First convert it do ZX(mat), do the power, and convert back to block matrix.
int ccellclip | ( | ccell * | Ac, |
double | min, | ||
double | max | ||
) |
clip a CX(cell) array to max at 'max', min at 'min'
clip a ZX(cell) array to max at 'max', min at 'min'
Create a new sub cell matrix of nx*ny starting from(sx,sy)
2D cubic spline interpolation preparation. x is the x coordinate vector of the 2-d grid. y is the y coordinate vector of the 2-d grid. z is defined on the 2-d grid. It is upto the user to make sure that the coordinate is increasingly ordered and evenly spaced .
The boundaries are handled in the same way is CX(spline). i.e. replace
\[f^\prime(0)=(f(1)-f(-1))/2\]
by
\[f^\prime(0)=(f(1)-f(0))\]
Otehr type of boundaries are handled in the same way.
2D cubic spline interpolation preparation. x is the x coordinate vector of the 2-d grid. y is the y coordinate vector of the 2-d grid. z is defined on the 2-d grid. It is upto the user to make sure that the coordinate is increasingly ordered and evenly spaced .
The boundaries are handled in the same way is ZX(spline). i.e. replace
\[f^\prime(0)=(f(1)-f(-1))/2\]
by
\[f^\prime(0)=(f(1)-f(0))\]
Otehr type of boundaries are handled in the same way.
Evaluate 2D cubic spline at location defined 2-d arrays by xnew, ynew
void cmaprot | ( | anyarray | A_, |
real | theta | ||
) |
Rotate a or multiple 2d array ccw by angle
Routines for input/output to bin/fits file. Function to write dense matrix data into a file pointer. Generally used by library developer
Function to read dense matrix into memory from file pointer. Generally used by library developer.
Create a new CX(mat) matrix object, mmapped from file. The file is truncated if already exists in rw mode.
Create a new ZX(mat) matrix object, mmapped from file. The file is truncated if already exists in rw mode.
ccell * ccellnew_mmap | ( | long | nx, |
long | ny, | ||
long * | nnx, | ||
long * | nny, | ||
const char * | keywords, | ||
const char * | format, | ||
... | |||
) |
Create a new dense matrix cell object, mmapped from file. The file is truncated if already exists.
ccell * ccellnewsame_mmap | ( | long | nx, |
long | ny, | ||
long | mx, | ||
long | my, | ||
const char * | keywords, | ||
const char * | format, | ||
... | |||
) |
Create a new dense matrix cell object, with identical blocks, mmapped from file. be aware that the data is not 8-byte aligned. The file is truncated if already exists.
Map the file to memory in read only, shared mode.
Create a nx*ny sparse matrix with memory for nmax max elements allocated.
Create a new sparse matrix and fill in uniform random numbers with filling factor of 'fill'
Check a sparse array for wrong orders. Return 1 if is lower triangle, 2 if upper triangle, and 3 if diagonal.
cast a cell object to CX(spcell) after checking
cast a cell object to ZX(spcell) after checking
inplace scale a CX(dspcell) object
inplace scale a ZX(dspcell) object
Create a new sparse matrix with diagonal elements set to vec*alpha
void cspmuldiag | ( | csp *__restrict | A, |
const dcomplex * | w, | ||
dcomplex | alpha | ||
) |
Multiply a sparse matrix inplace with a diagonal weighting matrix whose diagonal values are stored in w. W_ii=w_i; W_ij=0 if i!=j A=A*W*alpha; W is a diagonal sparse matrix. diag(W) is w multiply w[i] to all numbers in column[i]
sparse matrix multiply with a vector: y=y+op(A)*x*alpha op(A)=A if trans=='n' op(A)=A' if trans=='t' op(A)=conj(A') if trans=='c'
void cspmulcreal | ( | dcomplex *__restrict | y, |
const csp * | A, | ||
const dcomplex *__restrict | x, | ||
double | alpha | ||
) |
Multiply a sparse matrix with the real part of a complex vector: y=y+A*creal(x)*alpha
void cspmm | ( | cmat ** | yout, |
const csp * | A, | ||
const cmat * | x, | ||
const char | trans[2], | ||
const dcomplex | alpha | ||
) |
sparse matrix multiply with dense matrix
void cmulsp | ( | cmat ** | yout, |
const cmat * | x, | ||
const csp * | A, | ||
const char | trans[2], | ||
const dcomplex | alpha | ||
) |
dense matrix multiply with sparse matrix, implemented by transpose all: y=x*A-->y'=A'*x'; conjugation is handled carefully.
Multiply two vectors with weighting by sparse matrix. return y'*(A*x)
Multiply two cell arrays with weighting by sparse matrix
void ccellmm | ( | panyarray | C0_, |
const_anyarray | A_, | ||
const_anyarray | B_, | ||
const char | trans[2], | ||
const double | alpha | ||
) |
Compute A*B and add to C0.
C0=C0+op(A)*op(B)*alpha; op(A)=A if trans[0]=='n' op(A)=A' if trans[0]=='t' op(A)=conj(A') if trans[0]=='c'
op(B)=B if trans[1]=='n' op(B)=B' if trans[1]=='t' op(B)=conj(B') if trans[1]=='c'
A may be dense or sparse matrix.
2009-11-09: There was initially a beta parameter It was implemented wrongly for beta!=1 because for every call to dmm, the already accumulated ones are scaled. removed beta.
a different interface for multiplying cells.
Convert sparse matrix into dense matrix and add to output: out0=out0+full(A)*alpha
Expand sparse matrix cell to dense matrix cell.
Added two sparse matrices: return A*a+B*b
Add a sparse matrix to another: A0=A0+B
void ccelladd | ( | panyarray | pA_, |
double | ac, | ||
const_anyarray | B_, | ||
double | bc | ||
) |
Calculate A_=A_*ac+B_*bc;
Takes parameters of matrix, sparse matrix, or cell array of them.
Add alpha times identity to a sparse matrix. If CX(sp) is not symmetric, only add diagonal to first nm*nm block for nm=min(nx,ny) Assume the the sparse array is sported correctly.
Add alpha times identity to a sparse matrix. If ZX(sp) is not symmetric, only add diagonal to first nm*nm block for nm=min(nx,ny) Assume the the sparse array is sported correctly.
void ccelladdI | ( | anyarray | A_, |
dcomplex | alpha | ||
) |
Add alpha to diagnonal elements of A_. A_ can be matrix or sparse matrix.
Multiply two sparse arrays and return the result op(A)*op(B)
void cspmulsp2 | ( | csp ** | C0, |
const csp * | A, | ||
const csp * | B, | ||
const char | trans[2], | ||
const dcomplex | scale | ||
) |
Multiply two sparse arrays and add to the third: C0=C0+op(A)*op(B)*scale
Concatenate two sparse array along dim dimension
Sum abs of elements of sparse array along dimension dim
Drop elements that are EPS times the largest value.
Make sure the elements are sorted correctly. Does not change the location of data. can be done without harm.
Create a sparse convolution operator C with C(i,j)=A(i-j); A must be very sparse with only a view non-zero value otherwise C will be too full.
Permute rows and columns of sparse matrix A;
Invert a SPD sparse matrix that is block diagonal with block sizes of bs.
Extrat the diagonal blocks of size bs into cell arrays.
cmat * ccell2m | ( | const_anyarray | A_ | ) |
Convert dense or sparse matrix cell to matrix.
Function to write sparse matrix data into file pointed using a file pointer. Generally used by library developer. We do not convert data during saving, but rather do the conversion during reading.
Function to read sparse matrix data from file pointer into memory. Used by library developer.
void cfft_free_plan | ( | fft_t * | fft | ) |
Free FFTW plans.
Apply 2d FFT partially over ncomp \(\times\)ncomp region use two 1d plans that takes 1d fft through its column and selectly for its rows to produce smaller psf.
Do FFT based on a 2 element cell array that contains real/imaginary parts respectively.