#ifndef __SHACKHARTMANN__
#define __SHACKHARTMANN__
#ifndef __UTILITIES_H__
#include "utilities.h"
#endif
#ifndef __SOURCE_H__
#include "source.h"
#endif
#ifndef __IMAGING_H__
#include "imaging.h"
#endif
#ifndef __CENTROIDING_H__
#include "centroiding.h"
#endif
struct shackHartmann {
int N_WFS;
int N_SIDE_LENSLET, N_LENSLET;
int N_ACTUATOR;
int N_SLOPE;
float *d__c0, *d__cx0, *d__cy0;
mask valid_lenslet;
mask valid_actuator;
imaging camera;
centroiding data_proc;
int DFT_osf;
float lenslet_pitch;
float pixel_scale;
float intensity_threshold;
float slopes_gain;
void setup(int N_SIDE_LENSLET, int N_PX_LENSLET, float d,
int DFT_osf_, int N_PX_IMAGE, int BIN_IMAGE, int N_GS);
void cleanup(void);
void identify_valid_lenslet(source *src, float threshold);
void set_reference_slopes(source *src);
void calibrate(source *src, float threshold);
void propagate(source *gs);
void propagate(source *gs, int *maks);
void process(void);
void analyze(source *gs);
void get_valid_reference_slopes(float *d__valid_slopes);
void get_valid_slopes(float *d__valid_slopes);
void masked_slopes(float *d__valid_slopes, mask *lenslet_mask);
void get_valid_slopes_norm(float *d__valid_slopes_norm);
float* get_frame_dev_ptr(void);
void update_lenslet(float *filter);
};
struct geometricShackHartmann {
int N_WFS;
int N_SIDE_LENSLET, N_LENSLET;
int N_ACTUATOR;
int N_SLOPE;
float *d__c0, *d__cx0, *d__cy0;
mask valid_lenslet;
mask valid_actuator;
imaging camera;
centroiding data_proc;
int DFT_osf;
float lenslet_pitch;
float pixel_scale;
float intensity_threshold;
float slopes_gain;
float *_d__c_, *_d__cx_, *_d__cy_;
int N_FRAME;
cublasHandle_t handle;
void setup(int N_SIDE_LENSLET, float d, int N_GS);
void cleanup(void);
void identify_valid_lenslet(source *src, float threshold);
void set_reference_slopes(source *src);
void calibrate(source *src, float threshold);
void propagate(source *gs);
void propagate(source *gs, int *maks);
void process(void);
void analyze(source *gs);
void get_valid_reference_slopes(float *d__valid_slopes);
void get_valid_slopes(float *d__valid_slopes);
void masked_slopes(float *d__valid_slopes, mask *lenslet_mask);
void get_valid_slopes_norm(float *d__valid_slopes_norm);
void folded_slopes(float *d__valid_slopes, mask *lenslet_mask);
void reset(void);
};
struct tt7 {
int N_WFS;
int N_SIDE_LENSLET, N_LENSLET;
int N_ACTUATOR;
int N_SLOPE;
float *d__c0, *d__cx0, *d__cy0;
mask valid_lenslet;
mask valid_actuator;
imaging camera;
centroiding data_proc;
int DFT_osf;
float lenslet_pitch;
float pixel_scale;
float intensity_threshold;
float slopes_gain;
void setup(int N_SIDE_LENSLET, int N_PX_LENSLET, float d,
int DFT_osf_, int N_PX_IMAGE, int BIN_IMAGE, int N_GS);
void cleanup(void);
void identify_valid_lenslet(source *src, float threshold);
void set_reference_slopes(source *src);
void calibrate(source *src, float threshold);
void propagate(source *gs);
void propagate(source *gs, int *maks);
void process(void);
void analyze(source *gs);
void get_valid_reference_slopes(float *d__valid_slopes);
void get_valid_slopes(float *d__valid_slopes);
void masked_slopes(float *d__valid_slopes, mask *lenslet_mask);
void get_valid_slopes_norm(float *d__valid_slopes_norm);
float* get_frame_dev_ptr(void);
void update_lenslet(float *filter);
};
#endif