# include # include /* defines HST I/O functions */ # include "calnic.h" /* defines NICMOS data structures */ # include "calnica.h" /* defines CALNICA data structures */ /* N_DOCALIB2: Applies second set of CALNICA calibration steps to ** all input data groups. These are steps that are applied just once, ** to all groups together. ** ** Revision history: ** H.Bushouse May 1996 Written for Build 2 (Version 2.0) ** H.Bushouse 13-Jun-1997 Modified to pass NOISFILE to n_cridcalc ** routine (Version 2.3) ** H.Bushouse 01-Oct-1997 Modified to no longer pass NOISFILE to ** n_cridcalc routine (Version 3.0) */ int n_docalib2 (NicInfo *nic, PhotData *phot, MultiNicmosGroup *input, SingleNicmosGroup *crimage) { /* Arguments: ** nic i: NICMOS info structure ** phot i: Photometry parameters ** input io: input image data ** crimage o: CR rejected image */ /* Local variables */ int i; /* loop index */ /* Function definitions */ int n_photcalc (NicInfo *, PhotData *, SingleNicmosGroup *); int n_cridcalc (NicInfo *, MultiNicmosGroup *, SingleNicmosGroup *); void n_macheck (NicInfo *, MultiNicmosGroup *); int n_statcalc (SingleNicmosGroup *); int n_backcalc (NicInfo *, SingleNicmosGroup *); int n_userwarn (NicInfo *, SingleNicmosGroup *); int n_calReport (CalStep *, int, Hdr *, Hdr *); int updatePriHdr (CalStep *, Hdr *); int updateSciHdr (CalStep *, Hdr *); /* Do photometric correction */ if (nic->PHOT.corr == PERFORM) { if (n_photcalc (nic, phot, &(input->group[0]))) return (status); } for (i=0; i < nic->ngroups; i++) { n_calReport (&nic->PHOT, -1, &(input->group[i].sci.hdr), input->group[0].globalhdr); } n_calReport (&nic->PHOT, 0, &(input->group[0].sci.hdr), input->group[0].globalhdr); /* Do cosmic-ray identification and rejection */ if (nic->CRID.corr == PERFORM) { if (n_cridcalc (nic, input, crimage)) return (status); if (nic->obsmode == MULTIACCUM) { if (updatePriHdr (&nic->CRID, crimage->globalhdr)) return (status); if (updateSciHdr (&nic->CRID, &(crimage->sci.hdr))) return (status); /* Compute statistics for CR image */ if (n_statcalc (crimage)) return (status); } } for (i=0; i < nic->ngroups; i++) { n_calReport (&nic->CRID, -1, &(input->group[i].sci.hdr), input->group[0].globalhdr); } n_calReport (&nic->CRID, 0, &(input->group[0].sci.hdr), input->group[0].globalhdr); /* Check MultiACCUM groups for decreasing counts */ if (nic->obsmode == MULTIACCUM) n_macheck (nic, input); /* Compute statistics for calibrated data */ for (i=0; i < nic->ngroups; i++) { if (n_statcalc (&(input->group[i]))) return (status); } /* Do predicted background calculation */ if (nic->BACK.corr == PERFORM) { if (n_backcalc (nic, &(input->group[0]))) return (status); } for (i=0; i < nic->ngroups; i++) { n_calReport (&nic->BACK, -1, &(input->group[i].sci.hdr), input->group[0].globalhdr); } n_calReport (&nic->BACK, 0, &(input->group[0].sci.hdr), input->group[0].globalhdr); /* Generate User Warnings */ if (nic->WARN.corr == PERFORM) { if (n_userwarn (nic, &(input->group[0]))) return (status); } for (i=0; i < nic->ngroups; i++) { n_calReport (&nic->WARN, -1, &(input->group[i].sci.hdr), input->group[0].globalhdr); } n_calReport (&nic->WARN, 0, &(input->group[0].sci.hdr), input->group[0].globalhdr); /* Successful return */ return (status = 0); }