#ifndef __LMMSE_H__
#define __LMMSE_H__
#include "utilities.h"
#include "aaStats.h"
#include "BTBT.h"
#include "GBTBT.h"
#include "shackHartmann.h"
#include "iterativeSolvers.h"
struct bilinearInterpolation {
float *d__phase_est_i;
int nnz, NI;
float *csrValH;
int *csrColIndH, *csrRowPtrH;
float alpha, beta, elapsed_time;
cudaError_t cudaStat;
cusparseStatus_t status;
cusparseHandle_t handle;
cusparseMatDescr_t descr;
cudaEvent_t start, stop;
void setup(int NI, int NP);
void setup(int NI, int NP, mask *pupil,
float i0, float j0);
void cleanup(void);
};
struct LMMSE {
int *d__idx, PS_E_N_PX, N_guide_star, N_mmse_star, offset, N_SIDE_LENSLET_, NP, NS, osf;
float *d__ce, *d__phase_est, *d__phase_est_c, *d__phase_est_i, *d__x, *d__zp_x;
aaStats aa;
BTBT aaCov;
paStats pa;
GBTBT paCov;
iterativeSolvers iSolve;
stopwatch tid;
int nnz, NI;
float *csrValH;
int *csrColIndH, *csrRowPtrH;
float alpha, beta, elapsed_time;
cudaError_t cudaStat;
cusparseStatus_t status;
cusparseHandle_t handle;
cusparseMatDescr_t descr;
cudaEvent_t start, stop;
void setup(atmosphere *atm, source *guide_star, source *mmse_star,
float sampling, int N, char *solver_id);
void setup(atmosphere *atm, source *guide_star, source *mmse_star,
float sampling, int N,
mask *pupil, char *solver_id);
void setup(atmosphere *atm, source *guide_star, source *mmse_star,
float sampling, int N,
mask *pupil, char *solver_id,
int wavefront_osf);
void setup(atmosphere *atm, source *guide_star,
float sampling, int _N_SIDE_LENSLET_,
mask *pupil, char *solver_id, int wavefront_osf,
float z_radius);
void setup(atmosphere *atm, source *guide_star, source *mmse_star,
shackHartmann *wfs, char *solver_id);
void setup(atmosphere *atm, source *guide_star, source *mmse_star,
shackHartmann *wfs, char *solver_id,
int osf_, mask *pupil_);
void cleanup(void);
void estimation_old(float* d__c, int nMaxIteration, float *d__x0);
void estimation_old(float* d__c, int nMaxIteration);
void estimation(const centroiding *cog);
void estimation(shackHartmann *wfs);
void reset(void);
void set_phase_est_ptr(float *data_ptr);
void toFile(const char *filename);
};
#endif