#ifndef __SEGMENTPISTONSENSOR_H__
#define __SEGMENTPISTONSENSOR_H__
#ifndef __SOURCE_H__
#include "source.h"
#endif
#ifndef __IMAGING_H__
#include "imaging.h"
#endif
#ifndef __RAYTRACING_H__
#include "rayTracing.h"
#endif
#ifndef __GMTMIRRORS_H__
#include "gmtMirrors.h"
#endif
struct segmentPistonSensor {
float ri, ro;
float lenslet_height;
float lenslet_size;
complex_amplitude lenslet;
mask lenslet_mask;
source lenslet_src;
float dispersion;
int N_LAMBDA;
int N_GS;
float pixel_scale;
float field_of_view;
imaging camera;
imaging *camera_array;
float nyquist_factor;
int BIN_IMAGE;
int N_PX_LENSLET, N_PX_LENSLET2;
int N_PX, N_PX2;
int N_PX_IMAGE;
int N_LENSLET, N_LENSLET2;
imaging FFT;
source fft_src;
float *fft_phase;
mask fft_mask;
int D_px, D_px2;
float m2px, R, lambda0, spectral_bandwidth;
void setup(gmt_m1 *M1, source *src,
float dispersion,
float field_of_view,
float _nyquist_factor_);
void setup(gmt_m1 *M1, source *src,
float dispersion,
float field_of_view,
float _nyquist_factor_,
int _BIN_IMAGE_);
void setup(gmt_m1 *M1, source *src,
float _lenslet_size_,
float dispersion,
float field_of_view,
float _nyquist_factor_);
void setup(gmt_m1 *M1, source *src,
float _lenslet_size_,
float dispersion,
float field_of_view,
float _nyquist_factor_,
int _BIN_IMAGE_);
void setup_alt(gmt_m1 *M1, source *src,
float dispersion,
float field_of_view,
float _nyquist_factor_,
int _BIN_IMAGE_);
void cleanup(void);
void cleanup_alt(void);
void propagate(source *src);
void propagate(source *src, float middle_mask_width);
void propagate_alt(source *src);
void readout(float exposureTime, float readoutNoiseRms,
float nBackgroundPhoton);
void fft(void);
void info(void);
};
#endif