ceo 0.1.0

CUDA Engined Optics
Documentation
#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 // __SEGMENTPISTONSENSOR_H__