📄 xxx.pro
字号:
;** Marcel Carbillet (OAA) [marcel@arcetri.astro.it]:;** -some modifications/corrections for version 1.0.;** : november 1999,;** Marcel Carbillet (OAA) [marcel@arcetri.astro.it]:;** -enhanced and adapted to version 2.0 (CAOS).;** -help lines completely modified.;** : june 2001,;** Marcel Carbillet (OAA) [marcel@arcetri.astro.it]:;** -enhanced for version 3.0 of CAOS (package-oriented).;** : january 2003,;** Marcel Carbillet (OAA) [marcel@arcetri.astro.it]:;** -simplified templates for the version 4.0 of the;** whole CAOS system (no more use of the COMMON variable;** "calibration" and no more use of the possible;** initialisation file and, obviously, of the calibration;** file as well).;** : january 2006,;** Marcel Carbillet (LUAN) [marcel.carbillet@unice.fr]:;** -xxx_par --> par (!).;**;** MODULE'S TEMPLATES MODIFICATION HISTORY:;** module written : Armando Riccardi (OAA) [riccardi@arcetri.astro.it].;** modifications : for version 1.0,;** Armando Riccardi (OAA) [riccardi@arcetri.astro.it],;** Marcel Carbillet (OAA) [marcel@arcetri.astro.it]:;** -enhanced and adapted to version 1.0.;** : for version 2.0,;** Marcel Carbillet (OAA) [marcel@arcetri.astro.it]:;** -enhanced and adapted to version 2.0 (CAOS).;** : for version 3.0,;** Marcel Carbillet (OAA) [marcel@arcetri.astro.it]:;** -enhanced for version 3.0 of CAOS (package-oriented).;** : for version 4.0 of the whole 'system CAOS',;** Marcel Carbillet (OAA) [marcel@arcetri.astro.it]:;** -no more use of the COMMON variable "calibration" and;** the tag "calib" (structure "info").;** -no more use of the initialisation file and, obviously,;** the calibration file.;** : for version 5.0 of the Soft.Pack.CAOS,;** version 3.0 of the Soft.Pack.AIRY,;** version 1.0 of the Soft.Pack.MAOS,;** Marcel Carbillet (LUAN) [marcel.carbillet@unice.fr]:;** -no more crash provoked when controlling the Soft.Pack.;** version for existing parameter files - just a warning.;** (seems to be nothing but this is a definitive improvement;** for users freedom ;-) !!);**;-;;**;** here begins the main module's code;**;function xxx, inp_yyy_t, $ ; 1st input structure ;** DELETE if no input inp_zzz_t, $ ; 2nd input structure ;** DELETE if no 2nd input out_aaa_t, $ ; 1st output structure ;** DELETE if no output out_bbb_t, $ ; 2nd output structure ;** DELETE if no 2nd output par, $ ; XXX parameters structure ;** ;** the INIT structure contains the quantities to ;** compute just once in a simulation made of several ;** iterations. ;** INIT=init, $ ; XXX initialization structure ;** ;** DELETE the following line if no time ;** integration/delay management is required for ;** the module XXX. ;** TIME=time ; time managing structure; CAOS global common blockcommon caos_block, tot_iter, this_iter; error code initialisationerror = !caos_error.ok; module's actionsif (this_iter eq 0) then begin ; initialisation section error = xxx_init(inp_yyy_t, $ ;** DELETE argument if no input inp_zzz_t, $ ;** DELETE if no 2nd input out_aaa_t, $ ;** DELETE if no output out_bbb_t, $ ;** DELETE if no 2nd output par, $ INIT=init )endif else begin ; run section ;** ;** DELETE this section (untill "END OF THE RUN SECTION") if no time ;** integration and/or delay is managed by the module, and substitute ;** it with: ;** error = xxx_prog(inp_yyy_t, $ ;** DELETE argument if no input ;** inp_zzz_t, $ ;** DELETE if no 2nd input ;** out_aaa_t, $ ;** DELETE if no output ;** out_bbb_t, $ ;** DELETE if no 2nd output ;** par, $ ;** INIT=init ) ;** if (par.time_integ eq 1) and (par.time_delay eq 0) then begin ; neither integration nor delay over several iterations. error = xxx_prog(inp_yyy_t, $ ;** DELETE argument if no input inp_zzz_t, $ ;** DELETE if no 2nd input out_aaa_t, $ ;** DELETE if no output out_bbb_t, $ ;** DELETE if no 2nd output par, $ INIT=init ) return, error endif if ((size(time))[0] eq 0) then begin ; time integration and/or delay over several iterations. ; the structure time is undefined or a scalar: start a new integration ; (or/and delay) loop. ; computes the new output data to integrate. error = xxx_prog(inp_yyy_t, $ ;** DELETE argument if no input inp_zzz_t, $ ;** DELETE if no 2nd input out_aaa_t, $ ;** DELETE if no output out_bbb_t, $ ;** DELETE if no 2nd output par, $ INIT=init ) ; check data status if (out_aaa_t.data_status ne !caos_data.valid) or $ (out_bbb_t.data_status ne !caos_data.valid) then $ message, 'invalid output data status to integrate and/or to delay.' ; structure time time = $ { $ total_loops: par.time_integ $ +par.time_delay, $ ; total nb of loops iter : 0, $ ; iteration nb initialisation output : out_aaa_t, $ ; output to be integrated output1 : out_bbb_t $ ; second output (if present) } ;** DELETE output1 tag if xxx has ;** no 2nd output endif time.iter = time.iter + 1 ; iteration number update if ( (time.iter gt 1) and (time.iter le par.time_integ) ) then begin ; time integration error = xxx_prog(inp_yyy_t, $ ;** DELETE argumentif no input inp_zzz_t, $ ;** DELETE if no 2nd input out_aaa_t, $ ;** DELETE if no output out_bbb_t, $ ;** DELETE if no 2nd output par, $ INIT=init ) ; check data status if (out_aaa_t.data_status ne !caos_data.valid) or $ (out_bbb_t.data_status ne !caos_data.valid) then $ message, 'invalid output data status to integrate and/or to delay.' ;** ;** the following two TAGS integrated are only examples... ;** please note that if two outputs need to be integrated, they ;** cannot be integrated following two different integration times. ;** ; integrate the TAG "image" of the output "out_aaa_t" time.output.image = time.output.image + out_aaa_t.image ; integrate the TAG "psf" of the output "out_bbb_t" time.output1.psf = time.output1.psf + out_bbb_t.psf endif ; else do nothing if (time.iter eq time.total_loops) then begin ; update the output when the integration is performed out_aaa_t = time.output ;** ;** DELETE next line if xxx has no 2nd output ;** ; update the 2nd output when the integration is performed out_bbb_t = time.output1 ; re-initialise time structure time = 0 endif else begin ; return wait-for-the-next output(s) out_aaa_t.data_status = !caos_data.wait ;** ;** DELETE next line if xxx has no 2nd output ;** out_bbb_t.data_status = !caos_data.wait endelse;**;** END OF THE RUN SECTION;**endelse; back to calling program.return, errorend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -