COMPASS  5.0.0
End-to-end AO simulation tool using GPU acceleration
sutra_wfs.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-2019 COMPASS Team <https://github.com/ANR-COMPASS>
5 // All rights reserved.
6 // Distributed under GNU - LGPL
7 //
8 // COMPASS is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
9 // General Public License as published by the Free Software Foundation, either version 3 of the License,
10 // or any later version.
11 //
12 // COMPASS: End-to-end AO simulation tool using GPU acceleration
13 // The COMPASS platform was designed to meet the need of high-performance for the simulation of AO systems.
14 //
15 // The final product includes a software package for simulating all the critical subcomponents of AO,
16 // particularly in the context of the ELT and a real-time core based on several control approaches,
17 // with performances consistent with its integration into an instrument. Taking advantage of the specific
18 // hardware architecture of the GPU, the COMPASS tool allows to achieve adequate execution speeds to
19 // conduct large simulation campaigns called to the ELT.
20 //
21 // The COMPASS platform can be used to carry a wide variety of simulations to both testspecific components
22 // of AO of the E-ELT (such as wavefront analysis device with a pyramid or elongated Laser star), and
23 // various systems configurations such as multi-conjugate AO.
24 //
25 // COMPASS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
26 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
27 // See the GNU Lesser General Public License for more details.
28 //
29 // You should have received a copy of the GNU Lesser General Public License along with COMPASS.
30 // If not, see <https://www.gnu.org/licenses/lgpl-3.0.txt>.
31 // -----------------------------------------------------------------------------
32 
41 
42 #ifndef _SUTRA_WFS_H_
43 #define _SUTRA_WFS_H_
44 
45 #include <carma_utils.h>
46 #include <sutra_lgs.h>
47 #include <sutra_phase.h>
48 #include <sutra_target.h>
49 #include <sutra_telemetry.h>
50 #include <sutra_telescope.h>
51 #include <sutra_utils.h>
52 
53 #include <map>
54 #include <vector>
55 //#include <sutra_slopes.h>
56 
57 using std::map;
58 using std::string;
59 
60 class SutraWfs {
61  public:
62  int device;
63  string type;
64  long nxsub;
65  long nvalid;
66  long npix;
67  long nrebin;
68  long nfft;
69  long ntot;
70  long npup;
71  long nphase;
72  long nmaxhr;
73  long nffthr;
74  float subapd;
75  float nphot;
76  float nphot4imat;
77  float noise;
78  bool lgs;
79  bool kernconv;
80  bool roket;
82 
83  bool fakecam;
86 
87  cufftHandle *campli_plan;
88  cufftHandle *fttotim_plan;
93 
106 
108 
110 
112  std::vector<CarmaObj<float> *> d_pupil_ngpu;
113 
115  int nstreams;
116 
120 
122 
124  int offset;
126  int rank;
129 
130  public:
131  virtual ~SutraWfs(){};
132 
133  int wfs_initgs(CarmaObj<float> *d_lgskern,
134  CarmaObj<cuFloatComplex> *d_ftlgskern,
135  map<vector<int>, cufftHandle *> ftlgskern_plans, float xpos,
136  float ypos, float lambda, float mag, float zerop, long size,
137  float noise, long seed, float G, float thetaML, float dx,
138  float dy);
139  int set_pupil(float *pupil);
140  int set_binimg(float *binimg, int nElem);
141  int set_dark(float *dark, int nElem);
142  int set_flat(float *flat, int nElem);
143  int set_fakecam(bool fakecam);
146 
147  int load_kernels(float *lgskern);
148  int sensor_trace(SutraAtmos *yatmos);
149  int sensor_trace(SutraDms *ydm, int rst);
150  int sensor_trace(SutraAtmos *atmos, SutraDms *ydms);
151  int sensor_trace(int rst);
152  int slopes_geom(float *slopes, int type = 0);
153  int slopes_geom(int type = 0);
154 
155  virtual int fill_binimage(int async) = 0;
156  virtual int comp_image(bool noise = true) = 0;
157 
158  virtual int define_mpi_rank(int rank, int size) = 0;
159  virtual int allocate_buffers(
160  map<vector<int>, cufftHandle *> campli_plans,
161  map<vector<int>, cufftHandle *> fttotim_plans) = 0;
162  int set_noise(float noise, long seed);
163 
164  protected:
165  virtual int comp_generic() = 0;
170  long nvalid, long npix, long nphase, long nrebin, long nfft,
171  long ntot, long npup, float pdiam, float nphotons, float nphot4imat,
172  int lgs, bool fakecam, int max_flux_per_pix, int max_pix_value,
173  bool is_low_order, bool roket, int device);
174 };
175 
176 // General utilities
177 int fillcamplipup(cuFloatComplex *amplipup, float *phase, float *offset,
178  float *mask, float scale, int *istart, int *jstart,
179  int *ivalid, int *jvalid, int nphase, int npup, int Nfft,
180  int Ntot, CarmaDevice *device, int offset_phase);
181 int indexfill(cuFloatComplex *d_odata, cuFloatComplex *d_idata, int *indx,
182  int nx, int Nx, int N, CarmaDevice *device);
183 int fillbincube(float *bcube, cuFloatComplex *hrimage, int *indxpix, int Nfft,
184  int Npix, int Nrebin, int Nsub, CarmaDevice *device);
185 int fillbincube_async(CarmaStreams *streams, float *bcube,
186  cuFloatComplex *hrimage, int *indxpix, int Nfft, int Npix,
187  int Nrebin, int Nsub, CarmaDevice *device);
188 int fillbinimg(float *bimage, float *bcube, int npix, int nsub, int Nsub,
189  int *ivalid, int *jvalid, bool add, CarmaDevice *device);
191  CarmaObj<float> *bcube, int npix, int nsub, int Nsub,
192  int *ivalid, int *jvalid, bool add, CarmaDevice *device);
193 int fillbinimg_async(CarmaHostObj<float> *image_telemetry, float *bimage,
194  float *bcube, int npix, int nsub, int Nsub, int *ivalid,
195  int *jvalid, int nim, bool add, CarmaDevice *device);
196 int convolve_cube(cuFloatComplex *d_odata, cuFloatComplex *d_idata, int N,
197  int n, CarmaDevice *device);
198 template <class T>
199 int digitalize(T *camimg, float *binimg, float *dark, float *flat,
200  int max_flux_per_pix, int max_pix_value, int N, CarmaDevice *device);
201 // CUDA templates
202 // this is for cog
203 template <class T>
204 void subap_reduce(int size, int threads, int blocks, T *d_idata, T *d_odata,
205  CarmaDevice *device);
206 
207 template <class T>
208 void subap_reduce_async(int threads, int blocks, CarmaStreams *streams,
209  T *d_idata, T *d_odata);
210 // this is for tcog
211 template <class T>
212 void subap_reduce(int size, int threads, int blocks, T *d_idata, T *d_odata,
213  T thresh, CarmaDevice *device);
214 // this is for tcog_new
215 template <class T>
216 void subap_reduce_new(int size, int threads, int blocks, T *d_idata, T *d_odata,
217  T thresh, CarmaDevice *device);
218 // this is for wcog
219 template <class T>
220 void subap_reduce(int size, int threads, int blocks, T *d_idata, T *d_odata,
221  T *weights, CarmaDevice *device);
222 
223 template <class T>
224 void phase_reduce(int threads, int blocks, T *d_idata, T *d_odata, int *indx,
225  T alpha);
226 
227 template <class T>
228 void phase_derive(int size, int threads, int blocks, int n, T *d_idata,
229  T *d_odata, int *indx, T *mask, T alpha, float *fluxPerSub);
230 
231 template <class Tout, class Tin>
232 void pyr_getpup(Tout *d_odata, Tin *d_idata, Tout *d_offsets, Tin *d_pup,
233  int np, float lambda, CarmaDevice *device);
234 
235 template <class Tout, class Tin>
236 void pyr_getpup(Tout *d_odata, Tin *d_idata, Tin *d_pup, int np, int N,
237  float lambda, float cx, float cy, CarmaDevice *device);
238 
239 template <class T>
240 void pyr_rollmod(T *d_odata, T *d_idata, T *d_mask, float cx, float cy, int np,
241  int ns, CarmaDevice *device);
242 
243 template <class T>
244 void pyr_fillbin(T *d_odata, T *d_idata, int nrebin, int np, int ns, int nim,
245  CarmaDevice *device);
246 
247 template <class T>
248 int pyr_fillbinimg(T *bimage, const T *bcube, const int nxsub, const bool add,
249  CarmaDevice *device);
250 
251 template <class T>
252 int pyr_fillbinimg(T *oimage, const T *image, const int n, const int N,
253  const int rebin, const bool add, CarmaDevice *device);
254 
255 template <class Tin, class Tout>
256 void pyr_abs2(Tout *d_odata, Tin *d_idata, Tout fact, int ns, int nim,
257  CarmaDevice *device);
258 
259 template <class Tout, class Tin>
260 void pyr_submask(Tout *d_odata, Tin *d_mask, int n, CarmaDevice *device);
261 
262 template <class T>
263 void pyr_submaskpyr(T *d_odata, T *d_mask, int n, CarmaDevice *device);
264 
265 template <class T>
266 void pyr_submaskpyr(T *d_odata, float *d_mask, int n, CarmaDevice *device);
267 
268 template <class Tout, class Tin>
269 void pyr_abs(Tout *d_odata, Tin *d_idata, int ns, int nim,
270  CarmaDevice *device);
271 
272 template <class Tout, class Tin>
273 void pyr_submask3d(Tout *d_odata, Tin *d_mask, int n, int nim,
274  CarmaDevice *device);
275 
276 template <class T>
277 void pyr_intensities(T *d_odata, T *d_idata, int *subindx, int *subindy, int ns,
278  int nvalid, int nim, CarmaDevice *device);
279 
280 template <class T>
281 void pyr_intensities(T *d_odata, T *d_idata, int *subindx, int *subindy, int ns,
282  int nvalid, CarmaDevice *device);
283 
284 template <class T>
285 void pyr_fact(T *d_data, T fact, int n, int nim, CarmaDevice *device);
286 
287 void pyr_fact(cuFloatComplex *d_data, float fact, int n, int nim,
288  CarmaDevice *device);
289 void pyr_fact(float *d_data, float fact1, float *fact2, int n, int nim,
290  CarmaDevice *device);
291 
292 template <class Tin, class Tout>
293 void roof_abs2(Tout *d_odata, Tin *d_idata, Tout fact, int ns, int nim,
294  CarmaDevice *device);
295 
296 template <class T>
297 void roof_intensities(T *d_odata, T *d_idata, int *subindx, int *subindy,
298  int ns, int nvalid, int nim, CarmaDevice *device);
299 
300 template <class T>
301 void roof_rollmod(T *d_odata, T *d_idata, T *d_mask, float cx, float cy, int np,
302  int ns, CarmaDevice *device);
303 
304 template <class T>
305 void roof_fillbin(T *d_odata, T *d_idata, int nrebin, int np, int ns, int nim,
306  CarmaDevice *device);
307 
308 void copy_imgin_binimg(float *binimg, int *validsubsx, int *validsubsy, int Nb,
309  float *img, int *validx, int *validy, int Nim, int Npix,
310  CarmaDevice *device);
311 
312 #endif // _SUTRA_WFS_H_
SutraWfs::d_ftkernel
CarmaObj< cuFloatComplex > * d_ftkernel
Definition: sutra_wfs.h:89
SutraWfs::image_telemetry
CarmaHostObj< float > * image_telemetry
Definition: sutra_wfs.h:109
phase_reduce
void phase_reduce(int threads, int blocks, T *d_idata, T *d_odata, int *indx, T alpha)
copy_imgin_binimg
void copy_imgin_binimg(float *binimg, int *validsubsx, int *validsubsy, int Nb, float *img, int *validx, int *validy, int Nim, int Npix, CarmaDevice *device)
SutraWfs::d_validsubsx
CarmaObj< int > * d_validsubsx
Definition: sutra_wfs.h:118
indexfill
int indexfill(cuFloatComplex *d_odata, cuFloatComplex *d_idata, int *indx, int nx, int Nx, int N, CarmaDevice *device)
SutraWfs::slopes_geom
int slopes_geom(int type=0)
SutraWfs::sensor_trace
int sensor_trace(SutraDms *ydm, int rst)
SutraWfs::nphot
float nphot
Definition: sutra_wfs.h:75
fillbincube_async
int fillbincube_async(CarmaStreams *streams, float *bcube, cuFloatComplex *hrimage, int *indxpix, int Nfft, int Npix, int Nrebin, int Nsub, CarmaDevice *device)
SutraWfs::load_kernels
int load_kernels(float *lgskern)
SutraWfs::max_flux_per_pix
int max_flux_per_pix
Definition: sutra_wfs.h:84
roof_fillbin
void roof_fillbin(T *d_odata, T *d_idata, int nrebin, int np, int ns, int nim, CarmaDevice *device)
SutraWfs::d_fttotim
CarmaObj< cuFloatComplex > * d_fttotim
Definition: sutra_wfs.h:92
CarmaDevice
Definition: carma_context.h:57
pyr_submaskpyr
void pyr_submaskpyr(T *d_odata, T *d_mask, int n, CarmaDevice *device)
SutraWfs::set_max_flux_per_pix
int set_max_flux_per_pix(int max_flux_per_pix)
SutraWfs::max_pix_value
int max_pix_value
Definition: sutra_wfs.h:85
digitalize
int digitalize(T *camimg, float *binimg, float *dark, float *flat, int max_flux_per_pix, int max_pix_value, int N, CarmaDevice *device)
sutra_target.h
SutraWfs::d_intensities
CarmaObj< float > * d_intensities
Definition: sutra_wfs.h:98
SutraWfs::streams
CarmaStreams * streams
Definition: sutra_wfs.h:114
SutraWfs::fakecam
bool fakecam
Definition: sutra_wfs.h:83
roof_abs2
void roof_abs2(Tout *d_odata, Tin *d_idata, Tout fact, int ns, int nim, CarmaDevice *device)
SutraWfs::define_mpi_rank
virtual int define_mpi_rank(int rank, int size)=0
SutraDms
Definition: sutra_dm.h:164
carma_utils.h
this file provides tools to CarmaObj
subap_reduce_async
void subap_reduce_async(int threads, int blocks, CarmaStreams *streams, T *d_idata, T *d_odata)
pyr_getpup
void pyr_getpup(Tout *d_odata, Tin *d_idata, Tout *d_offsets, Tin *d_pup, int np, float lambda, CarmaDevice *device)
SutraWfs::nphase
long nphase
Definition: sutra_wfs.h:71
SutraWfs::d_offsets
CarmaObj< float > * d_offsets
Definition: sutra_wfs.h:99
SutraWfs::roket
bool roket
Definition: sutra_wfs.h:80
SutraWfs::nmaxhr
long nmaxhr
Definition: sutra_wfs.h:72
sutra_telescope.h
SutraWfs::nxsub
long nxsub
Definition: sutra_wfs.h:64
SutraWfs::sensor_trace
int sensor_trace(int rst)
SutraWfs::displ_bincube
int * displ_bincube
Definition: sutra_wfs.h:127
pyr_intensities
void pyr_intensities(T *d_odata, T *d_idata, int *subindx, int *subindy, int ns, int nvalid, int nim, CarmaDevice *device)
SutraWfs::d_validsubsy
CarmaObj< int > * d_validsubsy
Definition: sutra_wfs.h:119
subap_reduce
void subap_reduce(int size, int threads, int blocks, T *d_idata, T *d_odata, CarmaDevice *device)
SutraWfs::slopes_geom
int slopes_geom(float *slopes, int type=0)
SutraWfs::set_pupil
int set_pupil(float *pupil)
SutraWfs::comp_image
virtual int comp_image(bool noise=true)=0
pyr_submask3d
void pyr_submask3d(Tout *d_odata, Tin *d_mask, int n, int nim, CarmaDevice *device)
SutraWfs
this class provides the wfs features to COMPASS
Definition: sutra_wfs.h:60
SutraWfs::d_slopes
CarmaObj< float > * d_slopes
Definition: sutra_wfs.h:107
SutraWfs::comp_generic
virtual int comp_generic()=0
SutraWfs::d_hrmap
CarmaObj< int > * d_hrmap
Definition: sutra_wfs.h:102
SutraWfs::offset
int offset
MPI stuff.
Definition: sutra_wfs.h:124
SutraWfs::set_dark
int set_dark(float *dark, int nElem)
SutraAtmos
this class provides the atmos features to COMPASS
Definition: sutra_atmos.h:50
SutraWfs::set_binimg
int set_binimg(float *binimg, int nElem)
pyr_fact
void pyr_fact(T *d_data, T fact, int n, int nim, CarmaDevice *device)
SutraWfs::fttotim_plan
cufftHandle * fttotim_plan
Definition: sutra_wfs.h:88
pyr_fillbinimg
int pyr_fillbinimg(T *bimage, const T *bcube, const int nxsub, const bool add, CarmaDevice *device)
roof_intensities
void roof_intensities(T *d_odata, T *d_idata, int *subindx, int *subindy, int ns, int nvalid, int nim, CarmaDevice *device)
SutraWfs::nffthr
long nffthr
Definition: sutra_wfs.h:73
sutra_lgs.h
fillbinimg_async
int fillbinimg_async(CarmaStreams *streams, CarmaObj< float > *bimage, CarmaObj< float > *bcube, int npix, int nsub, int Nsub, int *ivalid, int *jvalid, bool add, CarmaDevice *device)
SutraWfs::d_binimg_notnoisy
CarmaObj< float > * d_binimg_notnoisy
Definition: sutra_wfs.h:97
SutraWfs::npix
long npix
Definition: sutra_wfs.h:66
CarmaStreams
this class provides the stream features to CarmaObj
Definition: carma_streams.h:49
SutraWfs::nfft
long nfft
Definition: sutra_wfs.h:68
SutraWfs::~SutraWfs
virtual ~SutraWfs()
Definition: sutra_wfs.h:131
SutraTelescope
this class provides the telescope features to COMPASS
Definition: sutra_telescope.h:53
SutraWfs::allocate_buffers
virtual int allocate_buffers(map< vector< int >, cufftHandle * > campli_plans, map< vector< int >, cufftHandle * > fttotim_plans)=0
SutraWfs::d_gs
SutraSource * d_gs
Definition: sutra_wfs.h:111
SutraWfs::count_bincube
int * count_bincube
Definition: sutra_wfs.h:128
SutraWfs::d_dark
CarmaObj< float > * d_dark
Definition: sutra_wfs.h:104
CarmaObj< cuFloatComplex >
pyr_submask
void pyr_submask(Tout *d_odata, Tin *d_mask, int n, CarmaDevice *device)
CarmaContext
this class provides the context in which CarmaObj are created
Definition: carma_context.h:104
pyr_abs
void pyr_abs(Tout *d_odata, Tin *d_idata, int ns, int nim, CarmaDevice *device)
convolve_cube
int convolve_cube(cuFloatComplex *d_odata, cuFloatComplex *d_idata, int N, int n, CarmaDevice *device)
SutraWfs::d_phasemap
CarmaObj< int > * d_phasemap
Definition: sutra_wfs.h:117
fillcamplipup
int fillcamplipup(cuFloatComplex *amplipup, float *phase, float *offset, float *mask, float scale, int *istart, int *jstart, int *ivalid, int *jvalid, int nphase, int npup, int Nfft, int Ntot, CarmaDevice *device, int offset_phase)
SutraWfs::subapd
float subapd
Definition: sutra_wfs.h:74
SutraWfs::noise
float noise
Definition: sutra_wfs.h:77
sutra_telemetry.h
SutraWfs::set_flat
int set_flat(float *flat, int nElem)
sutra_utils.h
SutraWfs::ntot
long ntot
Definition: sutra_wfs.h:69
SutraWfs::npup
long npup
Definition: sutra_wfs.h:70
SutraWfs::rank
int rank
Definition: sutra_wfs.h:126
SutraWfs::SutraWfs
SutraWfs(CarmaContext *context, SutraTelescope *d_tel, CarmaObj< cuFloatComplex > *d_camplipup, CarmaObj< cuFloatComplex > *d_camplifoc, CarmaObj< cuFloatComplex > *d_fttotim, string type, long nxsub, long nvalid, long npix, long nphase, long nrebin, long nfft, long ntot, long npup, float pdiam, float nphotons, float nphot4imat, int lgs, bool fakecam, int max_flux_per_pix, int max_pix_value, bool is_low_order, bool roket, int device)
SutraWfs::device
int device
Definition: sutra_wfs.h:62
SutraWfs::nstreams
int nstreams
Definition: sutra_wfs.h:115
SutraWfs::d_fluxPerSub
CarmaObj< float > * d_fluxPerSub
Definition: sutra_wfs.h:100
CarmaHostObj< float >
SutraWfs::nvalid
long nvalid
Definition: sutra_wfs.h:65
SutraWfs::sensor_trace
int sensor_trace(SutraAtmos *atmos, SutraDms *ydms)
SutraWfs::set_max_pix_value
int set_max_pix_value(int max_pix_value)
pyr_fillbin
void pyr_fillbin(T *d_odata, T *d_idata, int nrebin, int np, int ns, int nim, CarmaDevice *device)
SutraWfs::d_camplifoc
CarmaObj< cuFloatComplex > * d_camplifoc
Definition: sutra_wfs.h:91
SutraWfs::set_fakecam
int set_fakecam(bool fakecam)
SutraWfs::d_binimg
CarmaObj< float > * d_binimg
Definition: sutra_wfs.h:96
roof_rollmod
void roof_rollmod(T *d_odata, T *d_idata, T *d_mask, float cx, float cy, int np, int ns, CarmaDevice *device)
pyr_abs2
void pyr_abs2(Tout *d_odata, Tin *d_idata, Tout fact, int ns, int nim, CarmaDevice *device)
SutraWfs::campli_plan
cufftHandle * campli_plan
Definition: sutra_wfs.h:87
SutraWfs::is_low_order
bool is_low_order
Definition: sutra_wfs.h:81
phase_derive
void phase_derive(int size, int threads, int blocks, int n, T *d_idata, T *d_odata, int *indx, T *mask, T alpha, float *fluxPerSub)
SutraWfs::d_flat
CarmaObj< float > * d_flat
Definition: sutra_wfs.h:105
SutraWfs::fill_binimage
virtual int fill_binimage(int async)=0
SutraWfs::d_sincar
CarmaObj< float > * d_sincar
Definition: sutra_wfs.h:101
SutraWfs::d_bincube
CarmaObj< float > * d_bincube
Definition: sutra_wfs.h:95
SutraWfs::lgs
bool lgs
Definition: sutra_wfs.h:78
SutraWfs::d_camplipup
CarmaObj< cuFloatComplex > * d_camplipup
Definition: sutra_wfs.h:90
fillbinimg
int fillbinimg(float *bimage, float *bcube, int npix, int nsub, int Nsub, int *ivalid, int *jvalid, bool add, CarmaDevice *device)
SutraSource
this class provides the source features to COMPASS
Definition: sutra_source.h:62
SutraWfs::d_pupil_ngpu
std::vector< CarmaObj< float > * > d_pupil_ngpu
Definition: sutra_wfs.h:112
SutraWfs::kernconv
bool kernconv
Definition: sutra_wfs.h:79
SutraWfs::d_pupil
CarmaObj< float > * d_pupil
Definition: sutra_wfs.h:94
SutraWfs::nrebin
long nrebin
Definition: sutra_wfs.h:67
SutraWfs::nvalid_tot
int nvalid_tot
Definition: sutra_wfs.h:125
SutraWfs::set_noise
int set_noise(float noise, long seed)
fillbincube
int fillbincube(float *bcube, cuFloatComplex *hrimage, int *indxpix, int Nfft, int Npix, int Nrebin, int Nsub, CarmaDevice *device)
subap_reduce_new
void subap_reduce_new(int size, int threads, int blocks, T *d_idata, T *d_odata, T thresh, CarmaDevice *device)
SutraWfs::nphot4imat
float nphot4imat
Definition: sutra_wfs.h:76
SutraWfs::wfs_initgs
int wfs_initgs(CarmaObj< float > *d_lgskern, CarmaObj< cuFloatComplex > *d_ftlgskern, map< vector< int >, cufftHandle * > ftlgskern_plans, float xpos, float ypos, float lambda, float mag, float zerop, long size, float noise, long seed, float G, float thetaML, float dx, float dy)
SutraWfs::sensor_trace
int sensor_trace(SutraAtmos *yatmos)
sutra_phase.h
SutraWfs::current_context
CarmaContext * current_context
Definition: sutra_wfs.h:121
SutraWfs::type
string type
Definition: sutra_wfs.h:63
SutraWfs::d_camimg
CarmaObj< uint16_t > * d_camimg
Definition: sutra_wfs.h:103
pyr_rollmod
void pyr_rollmod(T *d_odata, T *d_idata, T *d_mask, float cx, float cy, int np, int ns, CarmaDevice *device)