coffee
Coronagraph Optimization For Fast Exoplanet Exploration
PIAACMCsimul.h
Go to the documentation of this file.
1 #ifndef _PIAACMCSIMUL_H
2 #define _PIAACMCSIMUL_H
3 
4 
5 
6 #define ApoFitCosFact 1.0
7 
8 
9 #include <stdint.h>
10 
11 
12 
13 
14 //
15 // *****************************************************************************************************
16 // -------------------------- structure holding global variables ---------------------------------------
17 // *****************************************************************************************************
18 
19 typedef struct {
20 
21  char piaacmcconfdir[300];
22  int optsystinit;
23 
24  int FORCE_CREATE_Cmodes;
25  int CREATE_Cmodes;
26  int FORCE_CREATE_Fmodes;
27  int CREATE_Fmodes;
28 
29  int FORCE_CREATE_fpmzmap;
30  int CREATE_fpmzmap;
31  int FORCE_CREATE_fpmzt;
32  int CREATE_fpmzt;
33 
34  int FORCE_CREATE_fpmza;
35  int CREATE_fpmza;
36 
37  int FORCE_MAKE_PIAA0shape;
38  int MAKE_PIAA0shape;
39  int FORCE_MAKE_PIAA1shape;
40  int MAKE_PIAA1shape;
41 
42  int focmMode; // if != -1, compute only impulse response to corresponding zone
43  int PIAACMC_FPMsectors;
44 
45  double FPMSCALEFACTOR;
46 
47  double LAMBDASTART;
48  double LAMBDAEND;
49 
50  float PIAACMC_MASKRADLD;
51 
52  // for minimization
53  double *fpmresp_array;
54  double *zonez_array;
55  double *zonez0_array;
56  double *zonez1_array;
57  double *zonezbest_array;
58  double *dphadz_array;
59  double *outtmp_array;
60  long LOOPCNT;
61 
62  long vsize;
63 
64  double CnormFactor; // for contrast normalization
65 
66  int computePSF_FAST_FPMresp;
67  int computePSF_ResolvedTarget; // source size = 1e-{0.1*computePSF_ResolvedTarget}
68  int computePSF_ResolvedTarget_mode; // 0: source is simulated as 3 points, 1: source is simulated as 6 points
69  int PIAACMC_FPM_FASTDERIVATIVES;
70 
71  double SCORINGTOTAL;
72  double MODampl;
73  int SCORINGMASKTYPE;
74  int PIAACMC_save;
75 // float PIAACMC_MASKregcoeff;
76  int PIAACMC_fpmtype; // 0 for idealized PIAACMC focal plane mask, 1 for physical focal plane mask
77 
78  long PIAACMC_FPMresp_mp;
79  long PIAACMC_FPMresp_thread;
80 
81  int WRITE_OK;
82 
83  double PIAACMCSIMUL_VAL;
84  double PIAACMCSIMUL_VAL0;
85  double PIAACMCSIMUL_VALREF;
86 
87 
88  // Linear Optimization
89  int LINOPT; // 1 if linear optimization should be started
90  long linopt_number_param; // number of optimization paramters
91  int linopt_paramtype[10000]; // _DATATYPE_FLOAT or _DATATYPE_DOUBLE
92  float *linopt_paramvalf[10000]; // array of pointers, float
93  double *linopt_paramval[10000]; // array of pointers, double
94  double linopt_paramrefval[10000];
95 
96  double linopt_paramdelta[10000];
97  double linopt_paramdeltaval[10000];
98  double linopt_parammaxstep[10000]; // maximum single iteration step
99  double linopt_parammin[10000]; // minimum value
100  double linopt_parammax[10000]; // maximum value
101 
102  int linopt_REGPIAASHAPES;
103  float linopt_piaa0C_regcoeff;
104  float linopt_piaa1C_regcoeff;
105  float linopt_piaa0C_regcoeff_alpha;
106  float linopt_piaa1C_regcoeff_alpha;
107 
108  float linopt_piaa0F_regcoeff;
109  float linopt_piaa1F_regcoeff;
110  float linopt_piaa0F_regcoeff_alpha;
111  float linopt_piaa1F_regcoeff_alpha;
112 
113  int linopt_REGFPMSAG;
114 
115  long linopt_NBiter;
116 
117 
118  char fnamedescr[800]; // File name descriptor for focal plane mask, inserted inside output file names
119  char fnamedescr_conf[800]; // File name descriptor for focal plane mask configuration, inserted inside output file names
120 
121 
123 
124 
125 
126 
127 
128 
129 
130 //
131 // *****************************************************************************************************
132 // -------------------------- structure defining a reflective PIAACMC system ---------------------------
133 // *****************************************************************************************************
134 
135 
136 
137 //
138 // this structure holds parameters to be optimized in the PIAACMC diffractive design
139 //
140 typedef struct {
141 
142  // ======= SEED RADIAL PIAACMC PARAMETERS ======
143 
144  double centObs0;
145  double centObs1;
146  double r0lim;
147  double r1lim;
148  long NBradpts;
151  // Wavelength
152  int nblambda;
153  double lambda; // central wavelength [m]
154  double lambdaB; // spectral bandwidth [%]
155  double lambdaarray[2000]; // [m] lambdaarray is also defined in OptSystProp structure
156 
157 
158  // ====== Overall OPTICAL Geometry ===============
159 
160  float beamrad; // [m]
161  long size;
162  float pixscale; // [m/pix]
163 
164  int PIAAmode; // 0: no PIAA, 1: PIAA
165 
166  float PIAA0pos; // conjugation (z) of first PIAA surface [m]
167  float PIAAsep;// separation between PIAA surfaces [m]
168  int prePIAA0mask; // 1 if mask before PIAA surface 0
169  float prePIAA0maskpos; // position of mask before PIAA surface 0 [m]
170  int postPIAA0mask; // 1 if mask after PIAA surface 0
171  float postPIAA0maskpos; // position of mask after PIAA surface 0 [m]
172  float PIAAcoeff; // fraction of apodization done by PIAA
173  int invPIAAmode; // 0: no inv PIAA, 1: inv PIAA after Lyot stops, 2: inv PIAA before Lyot stops
174  float LyotZmin;
175  float LyotZmax;
176  float pupoutmaskrad; // output pupil mask radius (scaled to pupil radius)
177 
178  // ========== WAVEFRONT CONTROL ==================
179  int nbDM; // number of deformable mirrors (10 max)
180  double DMpos[10]; // DM conjugation in collimated space
181  long ID_DM[10]; // DM image identifier
182 
183 
184  // ========= LYOT STOPS ============
185  long NBLyotStop;
186  long IDLyotStop[10];
187  double LyotStop_zpos[10];
188 
189  // ======= Optics shapes modes ============
190  char PIAAmaterial_name[10];
191  int PIAAmaterial_code;
192  long CmodesID; // Cosine radial mode
193  long Cmsize; // cosine modes size
194  long NBCmodes;
195  long piaaNBCmodesmax; // maximum number of radial cosine modes for PIAA optics
196 
197  long FmodesID; // Fourier 2D modes
198  long Fmsize;
199  long NBFmodes;
200  float piaaCPAmax; // maximum spatial frequency (CPA) for PIAA optics
201 
202  long piaa0CmodesID;
203  long piaa0FmodesID;
204  long piaa1CmodesID;
205  long piaa1FmodesID;
206 
207  // PSF flux calib
208  float peakPSF;
209 
210 
211  // ========= Focal Plane Mask ============
212 
213  double fpmaskradld; // mask radius [l/d] for the idealized PIAACMC starting point
214  long focmNBzone; // number of zones
215  double Fratio; // beam Fratio at focal plane
216  long zonezID; // focm zone material thickness, double precision image, named fpmzt / fpm_zonez.fits
217  double fpmaskamptransm; // mask amplitude transmission (normally 1.0)
218  long zoneaID; // focm zone amplitude transmission, double precision image, named fpmza / fpm_zonea.fits
219  double fpzfactor; // focal plane mask DFT zoom factor
220 
221  double fpmRad; // outer radius of physical focal plane mask [m]
222 
223  long NBrings; // number of rings
224  double fpmminsag; // [m]
225  double fpmmaxsag; // [m]
226  double fpmsagreg_coeff;
227  double fpmsagreg_alpha;
228  long NBringCentCone; // number of rings that the central cone occupies
229  double fpmCentConeRad; // [m]
230  double fpmCentConeZ; // peak sag of central cone [m]
231  double fpmOuterConeZ; // outer sag offset [m]
232  double fpmOuterConeRadld; // outer radius (end of outer cone) [lambda/D]
233  double fpmOuterConeRad; // [m]
234  long fpmarraysize;
235  char fpmmaterial_name[10];
236  int fpmmaterial_code;
237 
238  // Mask description
239  //
240  // CENTRAL CONE
241  // inner zone (optional) is a cone, covering the central NBringCentCone rings (set to zero for no central cone)
242  // The outer edge of the central cone is at sag = 0, and the central peak of the cone is at sag fpmCentConeZ
243  //
244  // SECTORS
245  // The next zone outwards consists of sectors arranged in rings. Each sector has its own sag
246  // The zones are between sag fpmminsag and fpmmaxsag
247  //
248  // OUTER CONE
249  // The outer cone starts at the outer edge of the sectors, where it has sag=0
250  // Its outer is at sag fpmOuterZ
251  // outside of the outer cone, the sag is constant at fpmOuterZ
252  //
253 
254 
256 
257 
258 
259 
260 
261 
262 /* =============================================================================================== */
263 /* =============================================================================================== */
267 /* =============================================================================================== */
269 /* =============================================================================================== */
270 
271 void __attribute__ ((constructor)) libinit_PIAACMCsimul();
272 
279 int_fast8_t init_PIAACMCsimul();
280 
281 
282 static void PIAACMCsimul_logFunctionCall(char *LogFileName, const char *FunctionName, long line, char *comments);
283 
284 
285 
290 void PIAACMCsimul_free( void );
291 
292 
296 void PIAACMCsimul_init( OPTPIAACMCDESIGN *design, long index, double TTxld, double TTyld );
297 
298 
302 int PIAACMCsimul_initpiaacmcconf(long piaacmctype, double fpmradld, double centobs0, double centobs1, int WFCmode, int load);
303 
304 
307 
311 int PIAACMCsimul_savepiaacmcconf(const char *dname);
312 
316 int PIAACMCsimul_loadpiaacmcconf(const char *dname);
317 
318 
320 
321 
322 
323 
324 /* =============================================================================================== */
325 /* =============================================================================================== */
329 /* =============================================================================================== */
331 /* =============================================================================================== */
332 
333 long PIAACMCsimul_mkFPM_zonemap(const char *IDname);
334 
335 long PIAACMCsimul_rings2sectors(const char *IDin_name, const char *sectfname, const char *IDout_name);
336 
337 long PIAACMCsimul_mkFocalPlaneMask(const char *IDzonemap_name, const char *ID_name, int mode, int saveMask);
338 
340 
341 
342 
343 /* =============================================================================================== */
344 /* =============================================================================================== */
348 /* =============================================================================================== */
350 /* =============================================================================================== */
351 
352 uint_fast8_t PIAACMCsimul_load2DRadialApodization(const char *IDapo_name, float beamradpix, const char *IDapofit_name);
353 
354 int PIAACMCsimul_init_geomPIAA_rad(const char *IDapofit_name);
355 
356 int PIAACMCsimul_mkPIAAMshapes_from_RadSag(const char *fname, const char *ID_PIAAM0_name, const char *ID_PIAAM1_name);
357 
358 int PIAACMCsimul_makePIAAshapes(OPTPIAACMCDESIGN *design, long index);
359 
361 
362 
363 
364 /* =============================================================================================== */
365 /* =============================================================================================== */
369 /* =============================================================================================== */
371 /* =============================================================================================== */
372 
373 long PIAACMCsimul_mkSimpleLyotStop(const char *ID_name, float rin, float rout);
374 
375 double PIAACMCsimul_optimizeLyotStop(const char *IDamp_name, const char *IDpha_name, const char *IDincoh_name, float zmin, float zmax, double throughput, long NBz, long NBmasks);
376 
377 long PIAACMCsimul_mkLyotMask(const char *IDincoh_name, const char *IDmc_name, const char *IDzone_name, double throughput, const char *IDout_name);
378 
379 long PIAACMCsimul_geomProp(const char *IDin_name, const char *IDsag_name, const char *IDout_name, const char *IDoutcnt_name, float drindex, float pscale, float zprop, float krad, float kstep, float rlim);
380 
382 
383 
384 /* =============================================================================================== */
385 /* =============================================================================================== */
389 /* =============================================================================================== */
391 /* =============================================================================================== */
392 
393 double PIAACMCsimul_achromFPMsol_eval(double *fpmresp_array, double *zonez_array, double *dphadz_array, double *outtmp_array, long vsize, long nbz, long nbl);
394 
395 double PIAACMCsimul_achromFPMsol_eval_zonezderivative(long zone, double *fpmresp_array, double *zonez_array, double *dphadz_array, double *outtmp_array, long vsize, long nbz, long nbl);
396 
397 long PIAACMC_FPMresp_rmzones(const char *FPMresp_in_name, const char *FPMresp_out_name, long NBzones);
398 
399 long PIAACMC_FPMresp_resample(const char *FPMresp_in_name, const char *FPMresp_out_name, long NBlambda, long PTstep);
400 
402 
403 
404 /* =============================================================================================== */
405 /* =============================================================================================== */
409 /* =============================================================================================== */
411 /* =============================================================================================== */
412 
413 
414 long PIAACMC_FPM_process(const char *FPMsag_name, const char *zonescoord_name, long NBexp, const char *outname);
415 
416 long PIAACMC_FPMresp_resample(const char *FPMresp_in_name, const char *FPMresp_out_name, long NBlambda, long PTstep);
417 
419 
420 
421 
422 /* =============================================================================================== */
423 /* =============================================================================================== */
427 /* =============================================================================================== */
429 /* =============================================================================================== */
430 
431 int PIAACMCsimul_exec(const char *confindex, long mode);
432 
433 double PIAACMCsimul_computePSF(float xld, float yld, long startelem, long endelem, int savepsf, int sourcesize, int extmode, int outsave);
434 
435 long PIAACMCsimul_CA2propCubeInt(const char *IDamp_name, const char *IDpha_name, float zmin, float zmax, long NBz, const char *IDout_name);
436 
437 int PIAACMCsimul_run(const char *confindex, long mode);
438 
439 
449 
452 
453 
455 
456 
457 
458 #endif
long PIAACMCsimul_mkSimpleLyotStop(const char *ID_name, float rin, float rout)
Definition: PIAACMCsimul_mkSimpleLyotStop.c:62
int PIAACMCsimul_loadpiaacmcconf(const char *dname)
Load configuration.
Definition: PIAACMCsimul_loadsavepiaacmcconf.c:50
int PIAACMCsimul_makePIAAshapes(OPTPIAACMCDESIGN *design, long index)
Definition: PIAACMCsimul_makePIAAshapes.c:47
long PIAACMC_FPMresp_rmzones(const char *FPMresp_in_name, const char *FPMresp_out_name, long NBzones)
Definition: PIAACMC_FPMresp_rmzones.c:35
int PIAACMCsimul_mkPIAAMshapes_from_RadSag(const char *fname, const char *ID_PIAAM0_name, const char *ID_PIAAM1_name)
Make PIAA OPD screens from radial sag profile.
Definition: PIAACMCsimul_mkPIAAMshapes_from_RadSag.c:67
long PIAACMCsimul_geomProp(const char *IDin_name, const char *IDsag_name, const char *IDout_name, const char *IDoutcnt_name, float drindex, float pscale, float zprop, float krad, float kstep, float rlim)
Lyot stops positions from zmin to zmax relative to current, working back (light goes from 0 to zmax) ...
Definition: PIAACMCsimul_geomProp.c:70
int PIAACMCsimul_initpiaacmcconf(long piaacmctype, double fpmradld, double centobs0, double centobs1, int WFCmode, int load)
initializes configuration
Definition: PIAACMCsimul_initpiaacmcconf.c:232
long PIAACMCsimul_rings2sectors(const char *IDin_name, const char *sectfname, const char *IDout_name)
Rings to sectors.
Definition: PIAACMCsimul_rings2sectors.c:40
double PIAACMCsimul_optimizeLyotStop(const char *IDamp_name, const char *IDpha_name, const char *IDincoh_name, float zmin, float zmax, double throughput, long NBz, long NBmasks)
Lyot stops positions from zmin to zmax relative to current, working back (light goes from 0 to zmax) ...
Definition: PIAACMCsimul_optimizeLyotStop.c:72
int PIAACMCsimul_exec_optimize_PIAA_shapes_fpmtransm()
Definition: PIAACMCsimul_exec_optimize_PIAA_shapes_fpmtransm.c:51
double PIAACMCsimul_exec_computePSF_no_fpm()
Definition: PIAACMCsimul_exec_computePSF_no_fpm.c:57
int PIAACMCsimul_run(const char *confindex, long mode)
Definition: PIAACMCsimul_run.c:54
uint_fast8_t PIAACMCsimul_load2DRadialApodization(const char *IDapo_name, float beamradpix, const char *IDapofit_name)
Definition: PIAACMCsimul_load2DRadialApodization.c:45
int PIAACMCsimul_measure_transm_curve()
Definition: PIAACMCsimul_measure_transm_curve.c:74
long PIAACMCsimul_mkFocalPlaneMask(const char *IDzonemap_name, const char *ID_name, int mode, int saveMask)
Make complex amplitude focal plane mask.
Definition: PIAACMCsimul_mkFocalPlaneMask.c:75
int PIAACMCsimul_exec_compute_image()
Compute PSF or image scene.
Definition: PIAACMCsimul_exec_compute_image.c:51
double PIAACMCsimul_achromFPMsol_eval_zonezderivative(long zone, double *fpmresp_array, double *zonez_array, double *dphadz_array, double *outtmp_array, long vsize, long nbz, long nbl)
Definition: PIAACMCsimul_achromFPMsol_eval_zonezderivative.c:30
int PIAACMCsimul_update_fnamedescr_conf()
Assemble focal plane mask configuration name.
Definition: PIAACMCsimul_loadsavepiaacmcconf.c:157
int PIAACMCsimul_exec_optimize_fpmtransmission()
Definition: PIAACMCsimul_exec_optimize_fpmtransmission.c:61
int_fast8_t init_PIAACMCsimul()
Module initialization.
Definition: PIAACMCsimul.c:226
void __attribute__((constructor)) libinit_PIAACMCsimul()
Definition: 00CORE.c:87
int PIAACMCsimul_savepiaacmcconf(const char *dname)
Save configuration.
Definition: PIAACMCsimul_loadsavepiaacmcconf.c:186
long PIAACMCsimul_mkFPM_zonemap(const char *IDname)
Definition: PIAACMCsimul_mkFPM_zonemap.c:65
long PIAACMCsimul_CA2propCubeInt(const char *IDamp_name, const char *IDpha_name, float zmin, float zmax, long NBz, const char *IDout_name)
Propagate complex amplitude image into intensity map cube.
Definition: PIAACMCsimul_CA2propCubeInt.c:39
double PIAACMCsimul_achromFPMsol_eval(double *fpmresp_array, double *zonez_array, double *dphadz_array, double *outtmp_array, long vsize, long nbz, long nbl)
int PIAACMCsimul_exec_multizone_fpm_calib()
Definition: PIAACMCsimul_exec_multizone_fpm_calib.c:56
int PIAACMCsimul_exec_optimize_lyot_stops_shapes_positions()
Definition: PIAACMCsimul_exec_optimize_lyot_stops_shapes_positions.c:143
Definition: PIAACMCsimul.h:19
int PIAACMCsimul_exec_optimize_PIAA_shapes()
Definition: PIAACMCsimul_exec_optimize_PIAA_shapes.c:47
long PIAACMCsimul_mkLyotMask(const char *IDincoh_name, const char *IDmc_name, const char *IDzone_name, double throughput, const char *IDout_name)
Definition: PIAACMCsimul_mkLyotMask.c:68
void PIAACMCsimul_init(OPTPIAACMCDESIGN *design, long index, double TTxld, double TTyld)
initializes the optsyst structure to simulate reflective PIAACMC system
Definition: PIAACMCsimul_init.c:61
long PIAACMC_FPMresp_resample(const char *FPMresp_in_name, const char *FPMresp_out_name, long NBlambda, long PTstep)
Definition: PIAACMC_FPMresp_resample.c:35
Definition: PIAACMCsimul.h:140
void PIAACMCsimul_free(void)
Free PIAACMC memory.
Definition: PIAACMCsimul_free.c:37
int PIAACMCsimul_exec_optimize_lyot_stop_position()
Definition: PIAACMCsimul_exec_optimize_lyot_stop_position.c:56
int PIAACMCsimul_exec(const char *confindex, long mode)
Main simulation routine.
Definition: PIAACMCsimul_exec.c:307
int PIAACMCsimul_update_fnamedescr()
Assemble focal plane mask name.
Definition: PIAACMCsimul_loadsavepiaacmcconf.c:169
long PIAACMC_FPM_process(const char *FPMsag_name, const char *zonescoord_name, long NBexp, const char *outname)
Definition: PIAACMC_FPM_process.c:34
char * line
Definition: CLIcore.c:181
int PIAACMCsimul_exec_optimize_fpm_zones()
Definition: PIAACMCsimul_exec_optimize_fpm_zones.c:66
int PIAACMCsimul_eval_poly_design()
Definition: PIAACMCsimul_eval_poly_design.c:43
double PIAACMCsimul_computePSF(float xld, float yld, long startelem, long endelem, int savepsf, int sourcesize, int extmode, int outsave)
Compute PSF.
Definition: PIAACMCsimul_computePSF.c:85
int PIAACMCsimul_init_geomPIAA_rad(const char *IDapofit_name)
Definition: PIAACMCsimul_init_geomPIAA_rad.c:43