#ifndef __IMAGING_H__
#define __IMAGING_H__
#ifndef __UTILITIES_H__
#include "utilities.h"
#endif
#ifndef __SOURCE_H__
#include "source.h"
#endif
#define NRANK 2
struct imaging {
int N_PX_PUPIL, N_DFT, N_SIDE_LENSLET, N_LENSLET,
N_SOURCE, N_PX_IMAGE, N_PX_CAMERA, N_FRAME,
BIN_IMAGE, LOCAL_RAND_SEED;
cufftHandle plan;
float N_PHOTON_PER_SECOND_PER_FRAME, N_PHOTON_PER_FRAME;
float2 *d__wave_PUPIL;
float *d__frame, zenith, azimuth, theta_x, theta_y,
*d__zenith, *d__azimuth, *d__theta_x, *d__theta_y,
pixel_scale, photoelectron_gain;
char absolute_pointing;
curandState *devStates;
void setup(int __N_PX_PUPIL, int __N_SIDE_LENSLET,
int DFT_osf, float IMAGE_osf, float CAMERA_osf);
void setup(int __N_PX_PUPIL, int __N_SIDE_LENSLET,
int DFT_osf, float IMAGE_osf, float CAMERA_osf, int __N_SOURCE);
void setup(int __N_PX_PUPIL, int __N_SIDE_LENSLET,
int DFT_osf, int N_PX_IMAGE_, float CAMERA_osf, int __N_SOURCE);
void setup(int __N_PX_PUPIL, int __N_SIDE_LENSLET,
int DFT_osf, int N_PX_IMAGE_, int BIN_IMAGE, int __N_SOURCE);
void setupSegmentPistonSensor(int __N_PX_PUPIL, int __N_SIDE_LENSLET,
int _N_DFT_, int N_PX_IMAGE_, int _BIN_IMAGE_,
int __N_SOURCE);
void cleanup(void);
void cleanupSegmentPistonSensor(void);
void set_pointing_direction(float *zen, float *azim);
void reset(void);
void reset_rng(int SEED);
void propagate(source *src);
void propagate_cpx(source *src);
void propagateNoOverlap(source *src);
void propagateNoOverlapBare(source *src);
void propagateNoOverlapSPS(source *src, float d, float wavenumber);
void propagateTT7(source *src);
void propagateTT7(source *src, int *d__piston_mask);
void propagateThroughFieldStop(source *src, float field_stop_diam);
void propagateThroughPyramid(source *src, float alpha);
void propagateThroughModulatedPyramid(source *src,
float modulation,
int modulation_sampling,
float alpha);
void readout(float exposureTime, float readOutNoiseRms);
void noiseless_readout(float exposureTime);
void readout(float exposureTime, float readOutNoiseRms,
float nBackgroundPhoton, float noiseFactor);
float strehl_ratio(imaging *ref);
void info(void);
void frame2file(const char *filename);
void show_frame(char *filename);
void show_frame(char *filename, imaging *ref);
};
#endif