SINFONI Pipeline Reference Manual  2.5.2
sinfo_rec_utils.c
1 /* $Id: sinfo_rec_utils.c,v 1.15 2013-09-17 08:10:58 amodigli Exp $
2  *
3  * This file is part of the SINFONI Pipeline
4  * Copyright (C) 2002,2003 European Southern Observatory
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  */
20 /*
21  * $Author: amodigli $
22  * $Date: 2013-09-17 08:10:58 $
23  * $Revision: 1.15 $
24  * $Name: not supported by cvs2svn $
25  */
26 
27 /****************************************************************
28  * Object Data reduction *
29  ****************************************************************/
30 
31 #ifdef HAVE_CONFIG_H
32 #include <config.h> /* allows the program compilation */
33 #endif
34 
35 /*-----------------------------------------------------------------------------
36  Includes
37 -----------------------------------------------------------------------------*/
38 //Used only for sinfo_propertylist_has
39 #include "sinfo_dfs.h"
40 
41 #include <stdio.h>
42 #include <sinfo_rec_utils.h>
43 #include <sinfo_functions.h>
44 #include <sinfo_new_cubes_build.h>
45 #include <sinfo_error.h>
46 #include <sinfo_globals.h>
47 #include <sinfo_utils_wrappers.h>
48 /*-----------------------------------------------------------------------------
49  Functions prototypes
50  ----------------------------------------------------------------------------*/
52 /*---------------------------------------------------------------------------*/
56 /*---------------------------------------------------------------------------*/
57 static const char* sinfo_new_set_stk_procatg(const char* tag);
58 /*
59 static int
60 sinfo_get_obj_sky_frm_pair(cpl_frameset** obj_set,
61  const int i,
62  cpl_frame** obj_frm,
63  cpl_frame** sky_frm);
64  */
65 
66 /*-----------------------------------------------------------------------------
67  Static variables
68  ----------------------------------------------------------------------------*/
69 
70 /*-----------------------------------------------------------------------------
71  Functions code
72  ----------------------------------------------------------------------------*/
73 
74 int
75 sinfo_new_stack_frames(cpl_parameterlist* cfg,
76  cpl_frameset* set,
77  const char* procatg,
78  const int id,
79  fake* fk,
80  const char* plugin_id)
81 {
82  int ind=0;
83  sinfo_msg("------------------------------") ;
84  sinfo_msg("PREPARE STACKED SET %d",id) ;
85  sinfo_msg("------------------------------") ;
86  ck0(ind=sinfo_new_prepare_stacked_frames(plugin_id,cfg, set, NULL,procatg,
87  id,fk)," no: %d", ind) ;
88  sinfo_msg("------------------------------") ;
89  sinfo_msg("PREPARED STACKED SET %d",id) ;
90  sinfo_msg("------------------------------") ;
91  return 0;
92 
93  cleanup:
94  return -1;
95 
96 }
97 
98 cpl_frame*
99 sinfo_new_get_dummy_sky(cpl_frameset* obj_set)
100 {
101 
102  cpl_imagelist* obj_list=NULL;
103  cpl_image* fake_sky=NULL;
104  cpl_frame* frame=NULL;
105  cpl_frame* sky_frame=NULL;
106 
107  cpl_propertylist* plist=NULL;
108  char filename[FILE_NAME_SZ];
109 
110  check_nomsg(obj_list=cpl_imagelist_load_frameset(obj_set,CPL_TYPE_FLOAT,0,0));
111  check_nomsg(fake_sky = cpl_imagelist_collapse_median_create(obj_list));
112 
113  check_nomsg(frame = cpl_frameset_get_frame(obj_set,0));
114  strcpy(filename,cpl_frame_get_filename(frame));
115 
116  check(plist = cpl_propertylist_load(filename, 0),
117  "getting header from reference ima frame %s",filename);
118 
119  if (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
120  cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
121  } else {
122  cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
123  }
124 
125  check(cpl_image_save(fake_sky, "out_fake_sky.fits", CPL_BPP_IEEE_FLOAT,
126  plist,CPL_IO_DEFAULT),
127  "Cannot save the product %s","out_fake_sky.fits");
128 
129  sinfo_free_propertylist(&plist);
130 
131  check_nomsg(sky_frame = cpl_frame_new()) ;
132  check_nomsg(cpl_frame_set_filename(sky_frame, "out_fake_sky.fits")) ;
133  check_nomsg(cpl_frame_set_tag(sky_frame, PRO_SKY_DUMMY)) ;
134  check_nomsg(cpl_frame_set_type(sky_frame, CPL_FRAME_TYPE_IMAGE));
135  /*
136  check_nomsg(cpl_frame_set_group(sky_frame, CPL_FRAME_GROUP_PRODUCT));
137  */
138  check_nomsg(cpl_frame_set_level(sky_frame, CPL_FRAME_LEVEL_FINAL));
139  sinfo_free_image(&fake_sky);
140  sinfo_free_imagelist(&obj_list);
141 
142  return sky_frame;
143 
144  cleanup:
145 
146  sinfo_free_propertylist(&plist) ;
147 
148  return NULL;
149 
150 }
151 
152 
153 
154 int
155 sinfo_new_get_dummy_obj_sky_stacked(cpl_frameset* obj_set,cpl_frameset** set,
156  cpl_parameterlist* config,fake* fk, char* pro_ctg, const char* plugin_id)
157 {
158  int nobj=0;
159  int ncdb=0;
160  int ntot=0;
161  int nstk=0;
162  //int nwrk=0;
163  int i=0;
164  int k=0;
165 
166  double mjd_obj=0;
167  double mjd_sky_inf=0;
168  double mjd_sky_sup=0;
169  char sky_name[FILE_NAME_SZ];
170  char out_name[FILE_NAME_SZ];
171 
172  char fake_sky_name[FILE_NAME_SZ];
173 
174  cpl_frame* obj_frm=NULL;
175  cpl_frame* sky_frm=NULL;
176  cpl_frame* cdb_frm=NULL;
177  cpl_frame* wrk_frm=NULL;
178  cpl_frame* tot_frm=NULL;
179  cpl_frame* dup_frm=NULL;
180 
181  cpl_frame* sky_frm_inf=NULL;
182  cpl_frame* sky_frm_sup=NULL;
183 
184  cpl_propertylist* plist=NULL;
185  cpl_frameset* wrk_set=NULL;
186  cpl_frameset* cdb_set=NULL;
187  cpl_frameset* tot_set=NULL;
188  cpl_frameset* stk_set=NULL;
189  cpl_image* sky_ima=NULL;
190  double obj_cumx=0;
191  double obj_cumy=0;
192 
193  double sky_sup_cumx=0;
194  double sky_sup_cumy=0;
195 
196  double sky_inf_cumx=0;
197  double sky_inf_cumy=0;
198  double cum_thres=0.5;
199 
200  check_nomsg(cdb_set=cpl_frameset_new());
201  ck0(sinfo_extract_mst_frames(*set,cdb_set),"Error extracting CDB frames");
202  nobj=cpl_frameset_get_size(obj_set);
203  ncdb=cpl_frameset_get_size(cdb_set);
204 
205 
206  check_nomsg(tot_set=cpl_frameset_new());
207 
208  for(i=0;i<nobj;i++) {
209 
210 
211 
212 
213  check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
214  mjd_obj = sinfo_get_mjd_obs(obj_frm);
215  obj_cumx=sinfo_get_cumoffsetx(obj_frm);
216  obj_cumy=sinfo_get_cumoffsety(obj_frm);
217 
218  if(i>0) {
219  check_nomsg(sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1));
220  mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);
221  sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);
222  sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);
223  }
224 
225  if(i<nobj-1) {
226  check_nomsg(sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1));
227  mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);
228  sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);
229  sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);
230  }
231 
232 
233 
234  if(i==0) {
235  sky_frm = sky_frm_sup;
236  }
237  else if(i==(nobj-1)) {
238  sky_frm = sky_frm_inf;
239  } else {
240  if( fabs( mjd_sky_inf - mjd_obj ) <
241  fabs( mjd_sky_sup - mjd_obj ) ) {
242  if((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||
243  (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {
244  sky_frm = sky_frm_inf;
245  } else {
246  sky_frm = sky_frm_sup;
247  }
248  } else {
249  if((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||
250  (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {
251  sky_frm = sky_frm_sup;
252  } else {
253  sky_frm = sky_frm_inf;
254  }
255  }
256  }
257 
258  strcpy(sky_name,cpl_frame_get_filename(sky_frm));
259 
260  sinfo_msg("obj: %s",cpl_frame_get_filename(obj_frm));
261  sinfo_msg("sky: %s",sky_name);
262 
263  if (strstr(sky_name, "." ) != NULL ) {
264  /*snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%s","fake_",
265  basename(sky_name)); */
266  snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_fake_sky",i,".fits");
267  } else {
268  snprintf(fake_sky_name, MAX_NAME_SIZE-1,"%s", sky_name) ;
269  }
270 
271  check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
272 
273  cknull(plist = cpl_propertylist_load(sky_name, 0),
274  "getting header from reference ima frame %s",sky_name);
275 
276  if (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
277  cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
278  } else {
279  cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
280  }
281 
282  check(cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_IEEE_FLOAT,
283  plist,CPL_IO_DEFAULT),
284  "Cannot save the product %s",fake_sky_name);
285 
286  sinfo_free_propertylist(&plist);
287  sinfo_free_image(&sky_ima);
288 
289  check_nomsg(cpl_frame_set_filename(sky_frm, fake_sky_name)) ;
290  /* The following makes program crash
291  check_nomsg(cpl_frame_set_tag(sky_frm, PRO_SKY_DUMMY)) ;
292  */
293  check_nomsg(cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE));
294  /* check_nomsg(cpl_frame_set_group(sky_frm, CPL_FRAME_GROUP_PRODUCT)); */
295  check_nomsg(cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL));
296 
297 
298  check_nomsg(wrk_set=cpl_frameset_new());
299 
300  check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
301  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
302 
303  check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
304  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
305 
306 
307  for(k=0;k<ncdb;k++) {
308  check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
309  check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
310  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
311  }
312  snprintf(out_name,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
313  //nwrk=cpl_frameset_get_size(wrk_set);
314 
315 
316  ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id),
317  "Error stacking frames");
318 
319  check_nomsg(cpl_frame_set_filename(sky_frm, sky_name)) ;
320  /* This commented as was screwing up the catalogue.
321  check_nomsg(cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING)) ;
322  */
323  check_nomsg(stk_set=cpl_frameset_new());
324  sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
325  nstk=cpl_frameset_get_size(stk_set);
326  for(k=0;k<nstk;k++) {
327  check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
328  check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
329  check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
330  }
331  sinfo_free_frameset(&stk_set);
332  sinfo_free_frameset(&wrk_set);
333 
334  }
335  ntot=cpl_frameset_get_size(tot_set);
336  for(k=0;k<ntot;k++) {
337  check_nomsg(tot_frm=cpl_frameset_get_frame(tot_set,k));
338  check_nomsg(dup_frm=cpl_frame_duplicate(tot_frm));
339  check_nomsg(cpl_frameset_insert(*set,dup_frm));
340  }
341 
342  sinfo_free_frameset(&cdb_set);
343  sinfo_free_frameset(&tot_set);
344 
345  return 0;
346 
347  cleanup:
348  sinfo_free_propertylist(&plist) ;
349  sinfo_free_frameset(&cdb_set);
350  sinfo_free_frameset(&tot_set);
351  return -1;
352 
353 }
354 
355 int
356 sinfo_get_dummy_obj_sky_stacked_and_cubes(cpl_frameset* obj_set,
357  cpl_frameset** set,
358  cpl_parameterlist* config,
359  fake* fk,
360  char* pro_ctg,
361  const char* plugin_id)
362 {
363  int nobj=0;
364  int ncdb=0;
365  //int nwrk=0;
366  int i=0;
367  int k=0;
368  int ind=0;
369 
370  double mjd_obj=0;
371  double mjd_sky_inf=0;
372  double mjd_sky_sup=0;
373  char sky_name[FILE_NAME_SZ];
374  char out_name[FILE_NAME_SZ];
375 
376  char fake_sky_name[FILE_NAME_SZ];
377 
378  cpl_frame* obj_frm=NULL;
379  cpl_frame* sky_frm=NULL;
380  cpl_frame* cdb_frm=NULL;
381  cpl_frame* dup_frm=NULL;
382 
383  cpl_frame* sky_frm_inf=NULL;
384  cpl_frame* sky_frm_sup=NULL;
385 
386  cpl_propertylist* plist=NULL;
387  cpl_frameset* wrk_set=NULL;
388  cpl_frameset* cdb_set=NULL;
389  cpl_frameset* tot_set=NULL;
390  cpl_frameset* pro_set=NULL;
391  cpl_image* sky_ima=NULL;
392  double obj_cumx=0;
393  double obj_cumy=0;
394 
395  double sky_sup_cumx=0;
396  double sky_sup_cumy=0;
397 
398  double sky_inf_cumx=0;
399  double sky_inf_cumy=0;
400  double cum_thres=0.5;
401 
402  check_nomsg(cdb_set=cpl_frameset_new());
403  ck0(sinfo_extract_mst_frames(*set,cdb_set),"Error extracting CDB frames");
404  nobj=cpl_frameset_get_size(obj_set);
405  ncdb=cpl_frameset_get_size(cdb_set);
406 
407 
408  check_nomsg(tot_set=cpl_frameset_new());
409 
410  for(i=0;i<nobj;i++) {
411 
412  check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
413  mjd_obj = sinfo_get_mjd_obs(obj_frm);
414  obj_cumx=sinfo_get_cumoffsetx(obj_frm);
415  obj_cumy=sinfo_get_cumoffsety(obj_frm);
416 
417  if(i>0) {
418  check_nomsg(sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1));
419  mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);
420  sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);
421  sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);
422  }
423 
424  if(i<nobj-1) {
425  check_nomsg(sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1));
426  mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);
427  sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);
428  sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);
429  }
430 
431 
432 
433  if(i==0) {
434  sky_frm = sky_frm_sup;
435  }
436  else if(i==(nobj-1)) {
437  sky_frm = sky_frm_inf;
438  } else {
439  if( fabs( mjd_sky_inf - mjd_obj ) <
440  fabs( mjd_sky_sup - mjd_obj ) ) {
441  if((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||
442  (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {
443  sky_frm = sky_frm_inf;
444  } else {
445  sky_frm = sky_frm_sup;
446  }
447  } else {
448  if((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||
449  (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {
450  sky_frm = sky_frm_sup;
451  } else {
452  sky_frm = sky_frm_inf;
453  }
454  }
455  }
456 
457 
458  strcpy(sky_name,cpl_frame_get_filename(sky_frm));
459  sinfo_msg("obj: %s",cpl_frame_get_filename(obj_frm));
460  sinfo_msg("sky: %s",sky_name);
461  if (strstr(sky_name, "." ) != NULL ) {
462  /*snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%s",
463  "fake_",basename(sky_name)); */
464  snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_fake_sky",i,".fits");
465  } else {
466  snprintf(fake_sky_name, MAX_NAME_SIZE-1, "%s", sky_name) ;
467  }
468 
469  check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
470 
471  cknull(plist = cpl_propertylist_load(sky_name, 0),
472  "getting header from reference ima frame %s",sky_name);
473 
474  if (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
475  cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, "SKY");
476  } else {
477  cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,"SKY") ;
478  }
479  check(cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_IEEE_FLOAT,
480  plist,CPL_IO_DEFAULT),
481  "Cannot save the product %s",fake_sky_name);
482 
483  sinfo_free_propertylist(&plist);
484  sinfo_free_image(&sky_ima);
485 
486  check_nomsg(cpl_frame_set_filename(sky_frm, fake_sky_name)) ;
487  /* The following makes program crash
488  check_nomsg(cpl_frame_set_tag(sky_frm, PRO_SKY_DUMMY)) ;
489  */
490  check_nomsg(cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE));
491  /* check_nomsg(cpl_frame_set_group(sky_frm, CPL_FRAME_GROUP_PRODUCT)); */
492  check_nomsg(cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL));
493 
494 
495  check_nomsg(wrk_set=cpl_frameset_new());
496 
497  check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
498  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
499 
500  check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
501  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
502 
503  for(k=0;k<ncdb;k++) {
504  check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
505  check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
506  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
507  }
508  snprintf(out_name,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
509  //nwrk=cpl_frameset_get_size(wrk_set);
510 
511 
512  ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id),
513  "Error stacking frames");
514 
515 
516  check_nomsg(cpl_frame_set_filename(sky_frm, sky_name)) ;
517  /* This commented as was screwing up the catalogue.
518  check_nomsg(cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING)) ;
519  */
520  sinfo_msg("--------------------------------------");
521  sinfo_msg("BUILDING CUBE %d",i);
522  sinfo_msg("--------------------------------------");
523 
524  /* cube generation */
525  ck0(ind=sinfo_new_cubes_build(plugin_id,config,wrk_set,pro_ctg,i),
526  "GENERATING CUBE no. %d\n", ind) ;
527  sinfo_msg("--------------------------------------");
528  sinfo_msg("BUILT CUBE %d",i);
529  sinfo_msg("--------------------------------------");
530 
531 
532  check_nomsg(sinfo_extract_frames_group_type(wrk_set,&pro_set,
533  CPL_FRAME_GROUP_PRODUCT));
534  check_nomsg(cpl_frameset_join(tot_set,pro_set));
535  sinfo_free_frameset(&pro_set);
536  sinfo_free_frameset(&wrk_set);
537 
538  } /* end loop over object frames */
539 
540  check_nomsg(sinfo_extract_frames_group_type(tot_set,&pro_set,
541  CPL_FRAME_GROUP_PRODUCT));
542  check_nomsg(cpl_frameset_join(*set,pro_set));
543  sinfo_free_frameset(&pro_set);
544  sinfo_free_frameset(&tot_set);
545  sinfo_free_frameset(&cdb_set);
546 
547  return 0;
548 
549  cleanup:
550  sinfo_free_image(&sky_ima);
551  sinfo_free_propertylist(&plist) ;
552  sinfo_free_frameset(&wrk_set);
553  sinfo_free_frameset(&pro_set);
554  sinfo_free_frameset(&cdb_set);
555  sinfo_free_frameset(&tot_set);
556  return -1;
557 
558 }
559 
560 
561 int sinfo_new_sci_stk_frames(cpl_parameterlist* config,
562  cpl_frameset** set,
563  const char* recipe_id,
564  const char** pro_ctg_cube)
565 {
566  char tag[FILE_NAME_SZ];
567  char pro_ctg_stack[FILE_NAME_SZ];
568  char outname[FILE_NAME_SZ];
569  char filename[FILE_NAME_SZ];
570 
571 
572  cpl_frameset * obj_set=NULL;
573  cpl_frameset * sky_set=NULL;
574  cpl_frameset * cdb_set=NULL;
575  cpl_frameset * wrk_set=NULL;
576  cpl_frameset * stk_set=NULL;
577  cpl_frameset * tot_set=NULL;
578  cpl_frame * obj_frm=NULL;
579  cpl_frame * sky_frm=NULL;
580  cpl_frame * cdb_frm=NULL;
581  cpl_frame * wrk_frm=NULL;
582  cpl_frame * dup_frm=NULL;
583 
584  int nsky=0;
585  int nobj=0;
586  int ncdb=0;
587  int ntot=0;
588  int nstk=0;
589 
590  int i=0;
591  int j=0;
592  int k=0;
593  int aj_meth=0;
594 
595 
596  double mjd_obj=0;
597  double mjd_sky=0;
598  double mjd_sky_frm=0;
599  cpl_parameter* p=NULL;
600  fake* fk=sinfo_fake_new();
601 
602  check_nomsg(obj_set=cpl_frameset_new());
603  check_nomsg(sky_set=cpl_frameset_new());
604  check_nomsg(cdb_set=cpl_frameset_new());
605 
606  sinfo_extract_obj_frames(*set,obj_set);
607  sinfo_extract_sky_frames(*set,sky_set);
608  sinfo_extract_mst_frames(*set,cdb_set);
609 
610 
611  cknull(obj_frm = cpl_frameset_get_frame(obj_set,0),
612  "No object frames in input set.");
613 
614  strcpy(tag,cpl_frame_get_tag(obj_frm));
615  if(NULL!=sinfo_new_set_obj_procatg(tag)){
616  *pro_ctg_cube=sinfo_new_set_obj_procatg(tag);
617  } else {
618  sinfo_msg_error("Frame tag %s not supported.",tag);
619  goto cleanup;
620  }
621 
622 
623  if(NULL!=sinfo_new_set_stk_procatg(tag)){
624  strcpy(pro_ctg_stack,sinfo_new_set_stk_procatg(tag));
625  } else {
626  sinfo_msg_error("Frame tag %s not supported.",tag);
627  goto cleanup;
628  }
629 
630  nobj=cpl_frameset_get_size(obj_set);
631  nsky=cpl_frameset_get_size(sky_set);
632  ncdb=cpl_frameset_get_size(cdb_set);
633 
634  if ((nobj==0) && (nsky==0)) {
635  sinfo_msg_error("Empty input set");
636  goto cleanup;
637  }
638 
639 
640  if ( (nobj != 0) && (nsky != 0) ) {
641  /* We have either OBJ and SKY: we need to create OBJ-SKY pairs */
642  sinfo_msg("------------------------------") ;
643  sinfo_msg("Generates OBJ-SKY pairs");
644  sinfo_msg("------------------------------") ;
645  check_nomsg(tot_set=cpl_frameset_new());
646  check_nomsg(p=cpl_parameterlist_find(config,
647  "sinfoni.objnod.autojitter_method"));
648  check_nomsg(cpl_parameter_set_int(p,0));
649  cpl_msg_warning(cpl_func , "******** 1 *********");
650 
651 
652  for (i=0;i<nobj;i++) {
653 
654  check_nomsg(wrk_set=cpl_frameset_new());
655 
656  check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
657  mjd_obj=sinfo_get_mjd_obs(obj_frm);
658  check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,0));
659  mjd_sky=sinfo_get_mjd_obs(sky_frm);
660  strcpy(filename,cpl_frame_get_filename(obj_frm));
661 
662 
663  for (j=1;j<nsky;j++) {
664  check_nomsg(mjd_sky_frm=sinfo_get_mjd_obs(
665  cpl_frameset_get_frame(sky_set,j)));
666  if(1000.*(mjd_sky_frm-mjd_obj)*(mjd_sky_frm-mjd_obj) <
667  1000.*(mjd_sky- mjd_obj)*(mjd_sky- mjd_obj) ) {
668  mjd_sky=mjd_sky_frm;
669  check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,j));
670  }
671  }
672 
673  strcpy(filename,cpl_frame_get_filename(sky_frm));
674 
675 
676 
677  /* monitors whih obj-sky frames are inserted in each wrk_set */
678  check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
679  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
680  check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
681  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
682 
683  /* merged CDB frames to work set */
684  for(k=0;k<ncdb;k++) {
685  check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
686  check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
687  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
688  }
689 
690 
691  /* defines a new name for the output stacked frame */
692  snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
693  ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,i,fk,recipe_id),
694  "Cannot stack frames");
695 
696  check_nomsg(stk_set=cpl_frameset_new());
697  sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
698  nstk=cpl_frameset_get_size(stk_set);
699 
700  for(k=0;k<nstk;k++) {
701  check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
702  check_nomsg(dup_frm = cpl_frame_duplicate(wrk_frm));
703  check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
704  }
705  sinfo_free_frameset(&stk_set);
706  sinfo_free_frameset(&wrk_set);
707 
708  }
709 
710  ntot=cpl_frameset_get_size(tot_set);
711  for(k=0;k<ntot;k++) {
712  check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));
713  check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
714  check_nomsg(cpl_frameset_insert(*set,dup_frm));
715  }
716  sinfo_free_frameset(&tot_set);
717 
718  }
719 
720  if ( (nobj == 0) && (nsky != 0) ) {
721 
722  /* ===============================================================
723  SKY FRAMES STACKING
724  =============================================================== */
725 
726  {
727  sinfo_msg("------------------------------") ;
728  sinfo_msg("SKY ONLY FRAMES DATA REDUCTION NOT SUPPORTED") ;
729  sinfo_msg("------------------------------") ;
730  goto cleanup;
731  }
732 
733  }
734 
735 
736 
737  if ( (nobj != 0) && (nsky == 0) ) {
738 
739  /* ===============================================================
740  OBJ FRAMES STACKING
741  =============================================================== */
742  check_nomsg(p = cpl_parameterlist_find(config,
743  "sinfoni.objnod.autojitter_method"));
744  check_nomsg(aj_meth = cpl_parameter_get_int(p));
745  if(strcmp(pro_ctg_stack,PRO_PUPIL_LAMP_STACKED) == 0) {
746 
747  aj_meth = 0;
748 
749  }
750 
751  if(aj_meth == 2) {
752 
753  sinfo_msg("Dummy sky case");
754  sinfo_msg("Fake sky is coming from median of all objects");
755  cknull(sky_frm = sinfo_new_get_dummy_sky(obj_set),
756  "Problem to get dummy frame");
757 
758  sinfo_msg("------------------------------") ;
759  sinfo_msg("Generates OBJ-SKY pairs");
760  sinfo_msg("------------------------------") ;
761  check_nomsg(tot_set=cpl_frameset_new());
762 
763 
764 
765  for (i=0;i<nobj;i++) {
766 
767  check_nomsg(wrk_set=cpl_frameset_new());
768  check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
769  check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
770  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
771  check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
772  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
773  for(k=0;k<ncdb;k++) {
774  check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
775  check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
776  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
777  }
778 
779  snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
780  ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
781  i,fk,recipe_id),
782  "Error Stacking frame %d",i);
783 
784  check_nomsg(stk_set=cpl_frameset_new());
785  sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
786  nstk=cpl_frameset_get_size(stk_set);
787  for(k=0;k<nstk;k++) {
788  check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
789  check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
790  check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
791  }
792  sinfo_free_frameset(&stk_set);
793  sinfo_free_frameset(&wrk_set);
794 
795  }
796  check_nomsg(ntot=cpl_frameset_get_size(tot_set));
797  for(k=0;k<ntot;k++) {
798  check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));
799  check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
800  check_nomsg(cpl_frameset_insert(*set,dup_frm));
801  }
802  sinfo_free_frameset(&tot_set);
803  sinfo_free_frame(&sky_frm);
804 
805  } else if(aj_meth == 1 ) {
806 
807  sinfo_msg("Dummy obj-sky case");
808  sinfo_msg("Fake sky is coming from each next object");
809 
810  if(nobj > 1) {
811  fk->is_fake_sky=1;
812  ck0(sinfo_new_get_dummy_obj_sky_stacked(obj_set,&(*set),config,
813  fk,pro_ctg_stack,recipe_id),
814  "Found error to get obj-sky-stacked frame");
815  } else {
816  sinfo_msg("Only one object frame, no sky");
817  ck0(sinfo_new_stack_frames(config,*set,pro_ctg_stack,0,fk,recipe_id),
818  "Error stacking frame");
819  }
820 
821  } else {
822 
823  sinfo_msg("------------------------------") ;
824  sinfo_msg("staks each OBJECT ");
825  sinfo_msg("------------------------------") ;
826  tot_set=cpl_frameset_new();
827 
828  for (i=0;i<nobj;i++) {
829 
830  check_nomsg(wrk_set=cpl_frameset_new());
831  check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
832  check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
833  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
834  for(k=0;k<ncdb;k++) {
835  check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
836  check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
837  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
838  }
839 
840 
841  snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
842  ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
843  i,fk,recipe_id),"Error stacking frame %d",i);
844 
845  check_nomsg(stk_set=cpl_frameset_new());
846  sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
847  check_nomsg(nstk=cpl_frameset_get_size(stk_set));
848  for(k=0;k<nstk;k++) {
849  check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
850  check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
851  check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
852  }
853  sinfo_free_frameset(&stk_set);
854  sinfo_free_frameset(&wrk_set);
855 
856  }
857 
858  check_nomsg(ntot=cpl_frameset_get_size(tot_set));
859  for(k=0;k<ntot;k++) {
860  check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));
861  check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
862  check_nomsg(cpl_frameset_insert(*set,dup_frm));
863  }
864  sinfo_free_frameset(&tot_set);
865  }
866  }
867 
868  sinfo_free_frameset(&obj_set);
869  sinfo_free_frameset(&sky_set);
870  sinfo_free_frameset(&cdb_set);
871  sinfo_fake_delete(&fk);
872 
873  return 0;
874 
875 
876 
877  cleanup:
878 
879  sinfo_free_frame(&sky_frm);
880  sinfo_free_frameset(&wrk_set);
881  sinfo_free_frameset(&tot_set);
882  sinfo_free_frameset(&obj_set);
883  sinfo_free_frameset(&sky_set);
884  sinfo_free_frameset(&cdb_set);
885  sinfo_fake_delete(&fk);
886  return -1;
887 
888 }
889 
890 
891 int sinfo_cub_stk_frames(cpl_parameterlist* config,
892  cpl_frameset** set,
893  const char* recipe_id,
894  const char** pro_ctg_cube)
895 {
896  cpl_frame * obj_frm=NULL;
897  char tag[FILE_NAME_SZ];
898  char pro_ctg_stack[FILE_NAME_SZ];
899  char outname[FILE_NAME_SZ];
900  char filename[FILE_NAME_SZ];
901 
902 
903  cpl_frameset * obj_set=NULL;
904  cpl_frameset * sky_set=NULL;
905  cpl_frameset * cdb_set=NULL;
906  cpl_frameset * wrk_set=NULL;
907  cpl_frameset * tot_set=NULL;
908  cpl_frameset * pro_set=NULL;
909  cpl_frame * sky_frm=NULL;
910  cpl_frame * cdb_frm=NULL;
911  cpl_frame * dup_frm=NULL;
912 
913  int nsky=0;
914  int nobj=0;
915  int ncdb=0;
916 
917  int i=0;
918  int j=0;
919  int k=0;
920  int aj_meth=0;
921  int ind=0;
922 
923  double mjd_obj=0;
924  double mjd_sky=0;
925  double mjd_sky_frm=0;
926  cpl_parameter* p=NULL;
927  fake* fk=sinfo_fake_new();
928 
929  obj_set=cpl_frameset_new();
930  sky_set=cpl_frameset_new();
931  cdb_set=cpl_frameset_new();
932 
933  sinfo_extract_obj_frames(*set,obj_set);
934  sinfo_extract_sky_frames(*set,sky_set);
935  sinfo_extract_mst_frames(*set,cdb_set);
936 
937  cknull(obj_frm = cpl_frameset_get_frame(obj_set,0),
938  "No object frames in input set.");
939 
940 
941  strcpy(tag,cpl_frame_get_tag(obj_frm));
942  if(NULL!=sinfo_new_set_obj_procatg(tag)){
943  *pro_ctg_cube=sinfo_new_set_obj_procatg(tag);
944  } else {
945  sinfo_msg_error("Frame tag %s not supported.",tag);
946  goto cleanup;
947  }
948 
949 
950  if(NULL!=sinfo_new_set_stk_procatg(tag)){
951  strcpy(pro_ctg_stack,sinfo_new_set_stk_procatg(tag));
952  } else {
953  sinfo_msg_error("Frame tag %s not supported.",tag);
954  goto cleanup;
955  }
956 
957  nobj=cpl_frameset_get_size(obj_set);
958  nsky=cpl_frameset_get_size(sky_set);
959  ncdb=cpl_frameset_get_size(cdb_set);
960 
961  if ((nobj==0) && (nsky==0)) {
962  sinfo_msg_error("Empty input set");
963  goto cleanup;
964  }
965 
966 
967  if ( (nobj != 0) && (nsky != 0) ) {
968  /* We have either OBJ and SKY: we need to create OBJ-SKY pairs */
969  sinfo_msg("------------------------------") ;
970  sinfo_msg("Generates OBJ-SKY pairs");
971  sinfo_msg("------------------------------") ;
972 
973  check_nomsg(tot_set=cpl_frameset_new());
974  check_nomsg(p = cpl_parameterlist_find(config,
975  "sinfoni.objnod.autojitter_method"));
976  check_nomsg(cpl_parameter_set_int(p,0));
977 
978  for (i=0;i<nobj;i++) {
979 
980  cknull_nomsg(wrk_set=cpl_frameset_new());
981  check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
982  mjd_obj=sinfo_get_mjd_obs(obj_frm);
983  check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,0));
984  mjd_sky=sinfo_get_mjd_obs(sky_frm);
985  strcpy(filename,cpl_frame_get_filename(obj_frm));
986 
987 
988  for (j=1;j<nsky;j++) {
989  mjd_sky_frm = sinfo_get_mjd_obs(cpl_frameset_get_frame(sky_set,j));
990  if(1000.*(mjd_sky_frm-mjd_obj)*(mjd_sky_frm-mjd_obj) <
991  1000.*(mjd_sky- mjd_obj)*(mjd_sky- mjd_obj) ) {
992  mjd_sky=mjd_sky_frm;
993  check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,j));
994  }
995  }
996  strcpy(filename,cpl_frame_get_filename(sky_frm));
997 
998 
999 
1000  /* monitors whih obj-sky frames are inserted in each wrk_set */
1001  cknull_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
1002  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
1003  cknull_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
1004  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
1005 
1006  /* merged CDB frames to work set */
1007  for(k=0;k<ncdb;k++) {
1008  check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
1009  check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
1010  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
1011  }
1012 
1013 
1014  /* defines a new name for the output stacked frame */
1015  snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
1016  ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,i,fk,recipe_id),
1017  "Cannot stack frames");
1018 
1019  /* cube generation */
1020  ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,
1021  *pro_ctg_cube,i),
1022  "GENERATING CUBE no. %d\n", ind) ;
1023 
1024  check_nomsg(sinfo_extract_frames_group_type(wrk_set,
1025  &pro_set,
1026  CPL_FRAME_GROUP_PRODUCT));
1027  check_nomsg(cpl_frameset_join(tot_set,pro_set));
1028  sinfo_free_frameset(&pro_set);
1029  sinfo_free_frameset(&wrk_set);
1030 
1031 
1032  }
1033 
1034  check_nomsg(sinfo_extract_frames_group_type(tot_set,
1035  &pro_set,
1036  CPL_FRAME_GROUP_PRODUCT));
1037  check_nomsg(cpl_frameset_join(*set,pro_set));
1038  sinfo_free_frameset(&pro_set);
1039  sinfo_free_frameset(&tot_set);
1040 
1041  }
1042 
1043 
1044  if ( (nobj == 0) && (nsky != 0) ) {
1045 
1046  /* ===============================================================
1047  SKY FRAMES STACKING
1048  =============================================================== */
1049 
1050  {
1051  sinfo_msg("------------------------------") ;
1052  sinfo_msg("SKY ONLY FRAMES DATA REDUCTION NOT SUPPORTED") ;
1053  sinfo_msg("------------------------------") ;
1054  goto cleanup;
1055  }
1056 
1057 
1058  }
1059 
1060 
1061 
1062  if ( (nobj != 0) && (nsky == 0) ) {
1063 
1064  /* ===============================================================
1065  OBJ FRAMES STACKING
1066  =============================================================== */
1067  check_nomsg(p=cpl_parameterlist_find(config,
1068  "sinfoni.objnod.autojitter_method"));
1069  check_nomsg(aj_meth = cpl_parameter_get_int(p));
1070  if(strcmp(pro_ctg_stack,PRO_PUPIL_LAMP_STACKED) == 0) {
1071 
1072  aj_meth = 0;
1073 
1074  }
1075 
1076  if(aj_meth == 2) {
1077 
1078  sinfo_msg("Dummy sky case");
1079  sinfo_msg("Fake sky is coming from median of all objects");
1080  if( (sky_frm = sinfo_new_get_dummy_sky(obj_set)) == NULL) {
1081 
1082  sinfo_msg_error("Problem to get dummy frame");
1083 
1084  return -1;
1085 
1086  }
1087  sinfo_msg("------------------------------") ;
1088  sinfo_msg("Generates OBJ-SKY pairs");
1089  sinfo_msg("------------------------------") ;
1090 
1091  check_nomsg(tot_set=cpl_frameset_new());
1092 
1093 
1094  for (i=0;i<nobj;i++) {
1095 
1096  check_nomsg(wrk_set=cpl_frameset_new());
1097  check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
1098  check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
1099  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
1100  check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
1101  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
1102  for(k=0;k<ncdb;k++) {
1103  check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
1104  check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
1105  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
1106  }
1107 
1108  snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
1109  ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
1110  i,fk,recipe_id),"Error Stacking frame %d",i);
1111 
1112 
1113  /* cube generation */
1114  ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,
1115  *pro_ctg_cube,i),
1116  "Error GENERATING CUBE no. %d\n", ind) ;
1117 
1118 
1119 
1120 
1121  check_nomsg(sinfo_extract_frames_group_type(wrk_set,
1122  &pro_set,
1123  CPL_FRAME_GROUP_PRODUCT));
1124  check_nomsg(cpl_frameset_join(tot_set,pro_set));
1125  sinfo_free_frameset(&pro_set);
1126  sinfo_free_frameset(&wrk_set);
1127 
1128 
1129  }
1130  check_nomsg(sinfo_extract_frames_group_type(tot_set,
1131  &pro_set,
1132  CPL_FRAME_GROUP_PRODUCT));
1133  check_nomsg(cpl_frameset_join(*set,pro_set));
1134  sinfo_free_frameset(&pro_set);
1135  sinfo_free_frameset(&tot_set);
1136  sinfo_free_frame(&sky_frm);
1137  } else if(aj_meth == 1 ) {
1138 
1139 
1140  sinfo_msg("Dummy obj-sky case");
1141  sinfo_msg("Fake sky is coming from each next object");
1142 
1143  if(nobj > 1) {
1144  fk->is_fake_sky=1;
1145  ck0(sinfo_get_dummy_obj_sky_stacked_and_cubes(obj_set,&(*set),config,
1146  fk,pro_ctg_stack,recipe_id),
1147  "Found error to get obj-sky-stacked frame");
1148 
1149  } else {
1150  sinfo_msg("Only one object frame, no sky");
1151  check_nomsg(p=cpl_parameterlist_find(config,
1152  "sinfoni.sinfo_utl_skycor.rot_cor"));
1153  check_nomsg(cpl_parameter_set_bool(p,FALSE));
1154 
1155  ck0(sinfo_new_stack_frames(config,*set,pro_ctg_stack,0,fk,recipe_id),
1156  "Error stacking frame");
1157 
1158  /* cube generation */
1159  sinfo_msg("------------------------------") ;
1160  sinfo_msg("BUILDING CUBE %d",i);
1161  sinfo_msg("------------------------------") ;
1162  ck0(sinfo_new_cubes_build(recipe_id,config,*set,*pro_ctg_cube,i),
1163  "Error GENERATING CUBE %d", i) ;
1164 
1165  sinfo_msg("------------------------------") ;
1166  sinfo_msg("BUILT CUBE %d",i);
1167  sinfo_msg("------------------------------") ;
1168 
1169  }
1170 
1171  } else { /* aj_meth == 0 */
1172 
1173  sinfo_msg("------------------------------") ;
1174  sinfo_msg("staks each OBJECT ");
1175  sinfo_msg("------------------------------") ;
1176  check_nomsg(tot_set=cpl_frameset_new());
1177 
1178  for (i=0;i<nobj;i++) {
1179 
1180  check_nomsg(wrk_set=cpl_frameset_new());
1181  check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
1182  check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
1183  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
1184  for(k=0;k<ncdb;k++) {
1185  check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
1186  check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
1187  check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
1188  }
1189 
1190 
1191  snprintf(outname,MAX_NAME_SIZE-1,"%s%d%s","out_stack",i,".fits");
1192  ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
1193  i,fk,recipe_id),"Error stacking frame %d",i);
1194 
1195 
1196  /* cube generation */
1197  sinfo_msg("------------------------------") ;
1198  sinfo_msg("BUILDING CUBE %d",i);
1199  sinfo_msg("------------------------------") ;
1200  ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,
1201  *pro_ctg_cube,i),
1202  "Error GENERATING CUBE no. %d\n", ind) ;
1203 
1204  sinfo_msg("------------------------------") ;
1205  sinfo_msg("BUILT CUBE %d",i);
1206  sinfo_msg("------------------------------") ;
1207  check_nomsg(sinfo_extract_frames_group_type(wrk_set,
1208  &pro_set,
1209  CPL_FRAME_GROUP_PRODUCT));
1210  check_nomsg(cpl_frameset_join(tot_set,pro_set));
1211  sinfo_free_frameset(&pro_set);
1212  sinfo_free_frameset(&wrk_set);
1213 
1214 
1215  }
1216 
1217 
1218  check_nomsg(sinfo_extract_frames_group_type(tot_set,
1219  &pro_set,
1220  CPL_FRAME_GROUP_PRODUCT));
1221  check_nomsg(cpl_frameset_join(*set,pro_set));
1222  sinfo_free_frameset(&pro_set);
1223  sinfo_free_frameset(&tot_set);
1224 
1225  }
1226  }
1227  sinfo_free_frameset(&obj_set);
1228  sinfo_free_frameset(&sky_set);
1229  sinfo_free_frameset(&cdb_set);
1230  sinfo_fake_delete(&fk);
1231 
1232  return 0;
1233 
1234  cleanup:
1235 
1236  sinfo_free_frameset(&wrk_set);
1237  sinfo_free_frameset(&tot_set);
1238  sinfo_free_frameset(&obj_set);
1239  sinfo_free_frameset(&sky_set);
1240  sinfo_free_frameset(&cdb_set);
1241  sinfo_fake_delete(&fk);
1242  return -1;
1243 
1244 
1245 }
1246 
1247 
1248 
1249 static const char* sinfo_new_set_stk_procatg(const char* tag)
1250 {
1251 
1252  const char* pro_ctg_stack=NULL;
1253 
1254  if(strstr(tag,"OBJ") != NULL) {
1255  pro_ctg_stack=PRO_OBJECT_NODDING_STACKED;
1256  } else if(strstr(tag,"PSF") != NULL) {
1257  pro_ctg_stack=PRO_PSF_CALIBRATOR_STACKED;
1258  } else if(strstr(tag,"STD") != NULL) {
1259  pro_ctg_stack=PRO_STD_NODDING_STACKED;
1260  } else if(strstr(tag,"PUPIL") != NULL) {
1261  pro_ctg_stack=PRO_PUPIL_LAMP_STACKED;
1262  } else {
1263  sinfo_msg_error("frame tag %s not supported",tag);
1264  return NULL;
1265  }
1266 
1267  return pro_ctg_stack;
1268 
1269 }
1270 const char* sinfo_new_set_obj_procatg(const char* tag)
1271 {
1272  const char* pro_ctg_cube=NULL;
1273 
1274  if(strstr(tag,"OBJ") != NULL) {
1275  pro_ctg_cube=PRO_COADD_OBJ;
1276  } else if(strstr(tag,"PSF") != NULL) {
1277  pro_ctg_cube=PRO_COADD_PSF;
1278  } else if(strstr(tag,"STD") != NULL) {
1279  pro_ctg_cube=PRO_COADD_STD;
1280  } else if(strstr(tag,"PUPIL") != NULL) {
1281  pro_ctg_cube=PRO_COADD_PUPIL;
1282  } else {
1283  sinfo_msg_error("frame tag %s not supported",tag);
1284  return NULL;
1285  }
1286 
1287  return pro_ctg_cube;
1288 
1289 }
1290 
1291 /*
1292 static int
1293 sinfo_get_obj_sky_frm_pair(
1294 cpl_frameset** obj_set,
1295 const int i,
1296 cpl_frame** obj_frm,
1297 cpl_frame** sky_frm)
1298 {
1299  double mjd_obj=0;
1300  double mjd_sky_inf=0;
1301  double mjd_sky_sup=0;
1302 
1303 
1304  double obj_cumx=0;
1305  double obj_cumy=0;
1306 
1307  double sky_sup_cumx=0;
1308  double sky_sup_cumy=0;
1309 
1310  double sky_inf_cumx=0;
1311  double sky_inf_cumy=0;
1312  double cum_thres=0.5;
1313  int nobj=0;
1314  cpl_frame* sky_frm_inf=NULL;
1315  cpl_frame* sky_frm_sup=NULL;
1316 
1317  check_nomsg(*obj_frm=cpl_frameset_get_frame(*obj_set,i));
1318  mjd_obj = sinfo_get_mjd_obs(*obj_frm);
1319  obj_cumx=sinfo_get_cumoffsetx(*obj_frm);
1320  obj_cumy=sinfo_get_cumoffsety(*obj_frm);
1321 
1322  if(i>0) {
1323  check_nomsg(sky_frm_inf=cpl_frameset_get_frame(*obj_set,i-1));
1324  mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);
1325  sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);
1326  sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);
1327  }
1328 
1329  if(i<nobj-1) {
1330  check_nomsg(sky_frm_sup=cpl_frameset_get_frame(*obj_set,i+1));
1331  mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);
1332  sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);
1333  sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);
1334  }
1335 
1336  if(i==0) {
1337  *sky_frm = sky_frm_sup;
1338  } else if(i==(nobj-1)) {
1339  *sky_frm = sky_frm_inf;
1340  } else {
1341  if( fabs( mjd_sky_inf - mjd_obj ) <
1342  fabs( mjd_sky_sup - mjd_obj ) ) {
1343  if((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||
1344  (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {
1345  *sky_frm = sky_frm_inf;
1346  } else {
1347  *sky_frm = sky_frm_sup;
1348  }
1349  } else {
1350  if((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||
1351  (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {
1352  *sky_frm = sky_frm_sup;
1353  } else {
1354  *sky_frm = sky_frm_inf;
1355  }
1356  }
1357  }
1358  return 0;
1359 
1360  cleanup:
1361  return -1;
1362 
1363 }
1364  */