COMPASS  5.4.4
End-to-end AO simulation tool using GPU acceleration
sutra_coronagraph.h
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------
2 // This file is part of COMPASS <https://anr-compass.github.io/compass/>
3 //
4 // Copyright (C) 2011-2023 COMPASS Team <https://github.com/ANR-COMPASS>
5 // All rights reserved.
6 
7 // -----------------------------------------------------------------------------
8 
16 
17 #ifndef _SUTRA_CORONAGRAPH_H_
18 #define _SUTRA_CORONAGRAPH_H_
19 
20 #include <carma_cublas.h>
21 #include <sutra_utils.h>
22 #include <sutra_source.h>
23 #include <tuple>
24 #include <vector>
25 
27  public:
28  int device;
29  std::string type;
30  long cntPsf;
31  long cntImg;
32  int imageDimx;
33  int imageDimy;
34  int pupDimx;
35  int pupDimy;
36  std::vector<float> wavelength;
42  std::vector<CarmaObj<float>*> amplitude;
43 
47 
49 
50  public:
51  virtual ~SutraCoronagraph()=default;
52  virtual int compute_image(bool accumulate) = 0;
53  virtual int compute_psf(bool accumulate) = 0;
54  int reset();
55  int compute_electric_field(int wavelengthIndex);
56  int set_amplitude(float* amplitude);
57 
58  protected:
60  int dimx, int dimy,float *wavelength, int nWavelength, int device);
63  CarmaObj<cuFloatComplex> *input, CarmaObj<cuFloatComplex> *output, float norm);
64 
65 };
66 
67 int compute_electric_field(cuFloatComplex *electric_field, float* phase_opd, float scale,
68  float* amplitude, float* mask, int dimx, int dimy, CarmaDevice *device);
69 int remove_complex_avg(cuFloatComplex *electric_field, cuFloatComplex sum, float* mask, int Nvalid,
70  int dimx, int dimy, CarmaDevice *device);
71 int accumulate_abs2(cuFloatComplex *img, float* abs2img, int N, CarmaDevice *device);
72 int apply_mask(cuFloatComplex *electric_field, float* mask, int N, CarmaDevice *device);
73 #endif //_SUTRA_CORONAGRAPH_H_
this file provides the cublas features to CarmaObj
this class provides the context in which CarmaObj are created
Definition: carma_context.h:79
this class provides the coronagraph features to COMPASS
int mft(CarmaObj< cuFloatComplex > *A, CarmaObj< cuFloatComplex > *B, CarmaObj< cuFloatComplex > *Ainput, CarmaObj< cuFloatComplex > *input, CarmaObj< cuFloatComplex > *output, float norm)
CarmaObj< float > * d_pupil
CarmaObj< float > * d_psf_le
virtual int compute_psf(bool accumulate)=0
SutraSource * d_source
CarmaObj< cuFloatComplex > * d_electric_field
CarmaObj< float > * d_image_se
CarmaObj< cuFloatComplex > * d_complex_image
std::vector< CarmaObj< float > * > amplitude
int set_amplitude(float *amplitude)
CarmaObj< float > * d_image_le
CarmaObj< float > * d_psf_se
CarmaContext * current_context
std::vector< float > wavelength
int compute_electric_field(int wavelengthIndex)
virtual int compute_image(bool accumulate)=0
virtual ~SutraCoronagraph()=default
SutraCoronagraph(CarmaContext *context, std::string type, SutraSource *d_source, int dimx, int dimy, float *wavelength, int nWavelength, int device)
this class provides the source features to COMPASS
Definition: sutra_source.h:37
int remove_complex_avg(cuFloatComplex *electric_field, cuFloatComplex sum, float *mask, int Nvalid, int dimx, int dimy, CarmaDevice *device)
int compute_electric_field(cuFloatComplex *electric_field, float *phase_opd, float scale, float *amplitude, float *mask, int dimx, int dimy, CarmaDevice *device)
int accumulate_abs2(cuFloatComplex *img, float *abs2img, int N, CarmaDevice *device)
int apply_mask(cuFloatComplex *electric_field, float *mask, int N, CarmaDevice *device)