int AcsSum (char *input, char *output, char *mtype, int printtime, int verbose) { extern int status; IRAFPointer tpin; AcsSumInfo acs; IODescPtr im; /* descriptor for input image */ Hdr phdr; /* primary header for input image */ int nimgs; int i; char acs_input[CHAR_FNAME_LENGTH]; int FileExists (char *); void TimeStamp (char *, char *); void PrBegin (char *); void PrEnd (char *); void PrFileName (char *, char *); void PrHdrInfo (char *, char *, char *, char *); int MkName (char *, char *, char *, char *, char *, int); void WhichError (int); void InitSumTrl (char *input, char *output); void FindAsnRoot (char *, char *); int mkNewSpt (char *, char *, char *); /* Determine input and output trailer files, then initialize output file by combining inputs into output file */ InitSumTrl (input, output); PrBegin ("ACSSUM"); nimgs = 0; if (printtime) TimeStamp ("ACSSUM started", ""); /* open the input file template */ tpin = c_imtopen (input); nimgs = c_imtlen(tpin); /* Initialize structure containing acssum information. */ AcsInit (&acs,nimgs); /* Copy command-line arguments into acs. */ for (i = 0; i < nimgs; i++) { c_imtgetim (tpin, acs.input[i], CHAR_FNAME_LENGTH); PrFileName ("input", acs.input[i]); } /* close file template */ c_imtclose (tpin); strcpy (acs.output, output); acs.printtime = printtime; acs.verbose = verbose; PrFileName ("output", acs.output); FindAsnRoot (output, acs.rootname); initHdr (&phdr); /* Check whether the output file already exists. */ if (FileExists (acs.output)) { FreeAcsInput (acs.input, nimgs); return (status); } strcpy(acs_input,acs.input[0]); /* Open input image in order to read its primary header. */ im = openInputImage (acs_input, "", 0); if (hstio_err()) { FreeAcsInput (acs.input, nimgs); return (status = OPEN_FAILED); } getHeader (im, &phdr); /* get primary header */ if (hstio_err()) { FreeAcsInput (acs.input, nimgs); return (status = OPEN_FAILED); } closeImage (im); /* Get keyword values from primary header. */ if (GetSumKeyInfo (&acs, &phdr)) { FreeAcsInput (acs.input, nimgs); return (status); } freeHdr (&phdr); /* Print information about this image. */ PrHdrInfo (acs.aperture, acs.filter1, acs.filter2, acs.det); if (acs.printtime) TimeStamp ("Begin processing", acs.rootname); /* Sum all imsets. */ if (SumGrps (&acs,mtype)){ FreeAcsInput (acs.input, nimgs); return (status); } /* create new SPT file for output product */ if (mkNewSpt (input, mtype, output)) { return(status); } /* Done... */ trlmessage ("\n"); PrEnd ("ACSSUM"); if (acs.printtime) TimeStamp ("ACSSUM completed", acs.rootname); /* Write out temp trailer file to final file */ WriteTrlFile (); FreeAcsInput (acs.input, nimgs); return (status); }
void InitSumTrl (char *input, char *output) { extern int status; IRAFPointer tpin; int n; char *trl_in; /* trailer filename for input */ char trl_out[CHAR_LINE_LENGTH+1]; /* output trailer filename */ char in_name[CHAR_FNAME_LENGTH+1]; char out_name[CHAR_FNAME_LENGTH+1]; int trl_len; char *isuffix[] = {"_crj", "_flt"}; char *osuffix[] = {"_sfl", "_sfl"}; char *trlsuffix[] = {"", ""}; int nsuffix = 2; int MkOutName (char *, char **, char **, int, char *, int); int MkNewExtn (char *, char *); void WhichError (int); trl_in = realloc (NULL, (CHAR_LINE_LENGTH)); trl_len = CHAR_LINE_LENGTH; if (trl_in == NULL) { trlerror ("Out of memory: Couldn't allocate for CRJ_TMP trailer file."); status = OUT_OF_MEMORY; trl_len = 0; } /* Initialize TRL filenames */ trl_in[0] = '\0'; trl_out[0] = '\0'; /* open the input file template */ tpin = c_imtopen (input); for (n = 0; n < c_imtlen(tpin); ++n) { c_imtgetim (tpin, in_name, CHAR_FNAME_LENGTH); out_name[0] = '\0'; /* Start by stripping off suffix from input/output filenames */ if (MkOutName (in_name, isuffix, trlsuffix, nsuffix, out_name, CHAR_LINE_LENGTH)) { WhichError (status); sprintf (MsgText, "Couldn't create trailer filename for %s", in_name); trlerror (MsgText); continue; } /* Now, convert trailer filename extensions from '.fits' to '.trl' */ if (MkNewExtn (out_name, TRL_EXTN) ) { sprintf(MsgText, "Error with input trailer filename %s", out_name); trlerror (MsgText); WhichError (status); } if ( (strlen(out_name) + strlen(trl_in) + 1) >= trl_len) { /* Add 1 to out_name to account for comma to be appended. WJH 4 June 2002 */ trl_len += strlen(out_name) + 1; trl_in = realloc (trl_in, trl_len); } /* Append each filename to create list of input trailer files */ strcat(trl_in, out_name); /* But don't put a comma after the last filename */ if (n < (c_imtlen(tpin)-1)) strcat (trl_in, ","); } if (MkOutName (output, osuffix, trlsuffix, nsuffix, trl_out, CHAR_LINE_LENGTH)) { WhichError (status); sprintf (MsgText, "Couldn't create trailer filename for %s", output); trlerror (MsgText); } /* Now, convert trailer filename extensions from '.fits' to '.trl' */ if (MkNewExtn (trl_out, TRL_EXTN) ) { sprintf(MsgText, "Error with input trailer filename %s", trl_out); trlerror (MsgText); WhichError (status); } /* Sets up temp trailer file for output and copies input trailer file into it. */ InitTrlFile (trl_in, trl_out); /* Deallocate memory */ free(trl_in); c_imtclose (tpin); }
/* Description: ------------ If using the exposure time, the scaling factors are normalized to ratios relative to the max exposure. Date Author Description ---- ------ ----------- 24-Sep-1998 W.J. Hack Initial Version 18-Mar-1999 W.J. Hack Revised to read EXPTIMEs from Primary headers using image-template list directly 20-Oct-1999 W.J. Hack Revised to compute number of good input images and insure they are less than MAX_FILES. 14-Apr-2000 W.J. Hack Revised to also return final EXPEND appropriate for output CR-combined product 14-Mar-2002 W.J. Hack Added computation of cumulative DARKTIME 4-Apr-2002 W.J. Hack added initialization of 'totd' 24-Apr-2002 W.J. Hack removed darktime altogether, find initial EXPSTART */ int cr_scaling (char *expname, IRAFPointer tpin, float efac[], int *nimgs, double *expend, double *expstart) { extern int status; Hdr prihdr; int nzero, k; char fdata[CHAR_FNAME_LENGTH + 1]; IODescPtr ip; int numimgs; /* How many good input images are there? */ double end, keyend, keystart, start; int GetKeyFlt (Hdr *, char *, int, float, float *); int GetKeyDbl (Hdr *, char *, int, double, double *); /* -------------------------------- begin ---------------------------------- */ /* Rewind the image template pointer */ c_imtrew(tpin); *nimgs = c_imtlen(tpin); end = 0.0; keyend = 0.0; start = 1e+10; keystart = 0.0; /* Check to make sure there are not too many images to work with... */ if (*nimgs > MAX_FILES) { trlerror("There are too many input images to combine. "); return(status = NOTHING_TO_DO); } /* if the parameter scaling is null, all images have equal weight. If no keyword name is given for the exposure time, assume equal weights of 1 for all images. */ if (expname[0] == '\0') { return (status); } /* Use exposure time as scaling factor */ nzero = 0; /* loop all input files counting how many usable inputs there are */ numimgs = 0; for (k = 0; k < *nimgs; ++k) { /* read the next input image name in the template list */ c_imtgetim (tpin, fdata, CHAR_FNAME_LENGTH); /* open the primary header */ ip = openInputImage (fdata, "", 0); if (hstio_err()) { sprintf (MsgText, "Cannot open data file '%s'", fdata); trlerror (MsgText); return (status = OPEN_FAILED); } initHdr (&prihdr); /* read in primary header from image */ getHeader (ip, &prihdr); if (GetKeyFlt (&prihdr, expname, USE_DEFAULT, 0., &efac[k]) != 0) { sprintf (MsgText, "cannot read '%s' from the primary header of '%s'", expname, fdata); trlerror (MsgText); freeHdr (&prihdr); return(status = KEYWORD_MISSING); } if (efac[k] < 0.) { sprintf (MsgText, "exposure time of file '%s' is negative", fdata); trlerror (MsgText); freeHdr (&prihdr); return(status = INVALID_VALUE); } if (efac[k] == 0.) { nzero++; } numimgs++; if (GetKeyDbl (&prihdr, "EXPEND", USE_DEFAULT, 0., &keyend) != 0) { sprintf (MsgText, "cannot read 'EXPEND' from the primary header of '%s'", fdata); trlerror (MsgText); freeHdr (&prihdr); return(status = KEYWORD_MISSING); } if (GetKeyDbl (&prihdr, "EXPSTART", USE_DEFAULT, 0., &keystart) != 0) { sprintf (MsgText, "cannot read 'EXPSTART' from the primary header of '%s'", fdata); trlerror (MsgText); freeHdr (&prihdr); return(status = KEYWORD_MISSING); } end = (keyend > end) ? keyend: end; start = (keystart < start) ? keystart : start; closeImage (ip); freeHdr (&prihdr); } if (nzero > 0 && nzero < *nimgs) { trlwarn ("Some (but not all) input imsets have zero exposure time."); trlwarn ("Final product will be compromised!"); /* This type of error will need to be handled differently in order to allow pipeline processing of this type of dataset. return (status = INVALID_VALUE); */ } /* Only return the number of valid input images, initial EXPSTART and final EXPEND value */ *nimgs = numimgs; *expend = end; *expstart = start; return (status); }
int main (int argc, char **argv) { char *inlist; /* input file name */ char *outlist; /* output blev file name */ /*int switch_on = 0;*/ /* was any switch specified? */ int printtime = NO; /* print time after each step? */ int verbose = NO; /* print additional info? */ int quiet = NO; /* print additional info? */ int too_many = 0; /* too many command-line arguments? */ int i, j; /* loop indexes */ int k; IRAFPointer i_imt, o_imt; /* imt list pointers */ char *input; /* name of input science file */ char *output; /* name of output file */ int n_in, n_out; /* number of files in each list */ int n; /* Input and output suffixes. */ char isuffix[] = "_raw"; char osuffix[] = "_blv_tmp"; /* A structure to pass the calibration switches to ACSCCD */ CalSwitch ccd_sw; /* reference file keywords and names */ RefFileInfo refnames; void InitRefFile (RefFileInfo *); void FreeRefFile (RefFileInfo *); void initSwitch (CalSwitch *); int ACSccd (char *, char *, CalSwitch *, RefFileInfo *, int, int); int DefSwitch (char *); int MkName (char *, char *, char *, char *, char *, int); void WhichError (int); int CompareNumbers (int, int, char *); /* For image header access */ Hdr phdr; int LoadHdr (char *, Hdr *); int GetSwitch (Hdr *, char *, int *); c_irafinit (argc, argv); /* Allocate space for file names. */ inlist = calloc (ACS_LINE+1, sizeof (char)); outlist = calloc (ACS_LINE+1, sizeof (char)); input = calloc (ACS_LINE+1, sizeof (char)); output = calloc (ACS_LINE+1, sizeof (char)); if (inlist == NULL || outlist == NULL || input == NULL || output == NULL) { printf ("Can't even begin; out of memory.\n"); exit (ERROR_RETURN); } inlist[0] = '\0'; outlist[0] = '\0'; input[0] = '\0'; output[0] = '\0'; /* Initialize the lists of reference file keywords and names. */ InitRefFile (&refnames); /* Initial values. */ initSwitch (&ccd_sw); for (i = 1; i < argc; i++) { /********** if (strcmp (argv[i], "-dqi") == 0) { ccd_sw.dqicorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-atod") == 0) { ccd_sw.atodcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-blev") == 0) { ccd_sw.blevcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-bias") == 0) { ccd_sw.biascorr = PERFORM; switch_on = 1; } else if (argv[i][0] == '-') { **********/ if (argv[i][0] == '-') { for (j = 1; argv[i][j] != '\0'; j++) { if (argv[i][j] == 't') { printtime = YES; } else if (argv[i][j] == 'v') { verbose = YES; } else if (argv[i][j] == 'q') { quiet = YES; } else { printf (MsgText, "Unrecognized option %s\n", argv[i]); FreeNames (inlist, outlist, input, output); exit (1); } } } else if (inlist[0] == '\0') { strcpy (inlist, argv[i]); } else if (outlist[0] == '\0') { strcpy (outlist, argv[i]); } else { too_many = 1; } } if (inlist[0] == '\0' || too_many) { printf ("syntax: acsccd [-t] [-v] [-q] input output\n"); /* printf (" command-line switches:\n"); printf (" -dqi -atod -blev -bias\n"); */ FreeNames (inlist, outlist, input, output); exit (ERROR_RETURN); } /* Initialize the structure for managing trailer file comments */ InitTrlBuf (); /* Copy command-line value for QUIET to structure */ SetTrlQuietMode(quiet); /* Was no calibration switch specified on command line? default values (mostly PERFORM) except ATODCORR if (!switch_on) {*/ ccd_sw.dqicorr = DefSwitch ("dqicorr"); ccd_sw.atodcorr = DefSwitch ("atodcorr"); ccd_sw.blevcorr = DefSwitch ("blevcorr"); ccd_sw.biascorr = DefSwitch ("biascorr"); /*}*/ /* Expand the templates. */ i_imt = c_imtopen (inlist); o_imt = c_imtopen (outlist); n_in = c_imtlen (i_imt); n_out = c_imtlen (o_imt); /* The number of input and output files must be the same. */ if (CompareNumbers (n_in, n_out, "output")) status = 1; if (status) { FreeNames (inlist, outlist, input, output); CloseTrlBuf(); exit (ERROR_RETURN); } /* Loop over the list of input files. */ for (n = 0; n < n_in; n++) { k = c_imtgetim (i_imt, input, ACS_LINE); if (n_out > 0) k = c_imtgetim (o_imt, output, ACS_LINE); else output[0] = '\0'; /* Open input image in order to read its primary header. */ if (LoadHdr (input, &phdr)) { WhichError (status); sprintf (MsgText, "Skipping %s", input); trlmessage (MsgText); continue; } /* Determine osuffix. */ strcpy(osuffix, "_blv_tmp"); if (MkName (input, isuffix, osuffix, "", output, ACS_LINE)) { WhichError (status); sprintf (MsgText, "Skipping %s", input); trlmessage (MsgText); continue; } /* Calibrate the current input file. */ if (ACSccd (input, output, &ccd_sw, &refnames, printtime, verbose)) { sprintf (MsgText, "Error processing %s.", input); trlerror (MsgText); WhichError (status); } } /* Close lists of file names, and free name buffers. */ c_imtclose (i_imt); c_imtclose (o_imt); CloseTrlBuf(); FreeRefFile (&refnames); FreeNames (inlist, outlist, input, output); if (status) exit (ERROR_RETURN); else exit (0); }
int main (int argc, char **argv) { char *inlist; /* input file name */ char *outlist; /* output blev file name */ int switch_on = 0; /* was any switch specified? */ int printtime = NO; /* print time after each step? */ int verbose = NO; /* print additional info? */ int quiet = NO; /* print additional info? */ int too_many = 0; /* too many command-line arguments? */ int i, j; /* loop indexes */ IRAFPointer i_imt, o_imt; /* imt list pointers */ char *input; /* name of input science file */ char *output; /* name of output file */ int n_in, n_out; /* number of files in each list */ int n; /* Input and output suffixes. */ char *isuffix[] = {"_raw", "_rac_tmp"}; char *osuffix[] = {"_blv_tmp", "_blc_tmp"}; int nsuffix = 2; /* A structure to pass the calibration switches to WF3CCD */ CCD_Switch ccd_sw; /* reference file keywords and names */ RefFileInfo refnames; void InitRefFile (RefFileInfo *); void FreeRefFile (RefFileInfo *); void initCCDSwitches (CCD_Switch *); int WF3ccd (char *, char *, CCD_Switch *, RefFileInfo *, int, int); int DefSwitch (char *); int MkName (char *, char *, char *, char *, char *, int); void WhichError (int); int CompareNumbers (int, int, char *); /*===========================================================================*/ /* Initialize IRAF interface environment */ c_irafinit (argc, argv); /* Post HSTIO error handler */ push_hstioerr (errchk); /* Allocate space for file names. */ inlist = calloc (SZ_LINE+1, sizeof (char)); outlist = calloc (SZ_LINE+1, sizeof (char)); input = calloc (SZ_LINE+1, sizeof (char)); output = calloc (SZ_LINE+1, sizeof (char)); if (inlist == NULL || outlist == NULL || input == NULL || output == NULL) { printf ("Can't even begin; out of memory.\n"); exit (ERROR_RETURN); } inlist[0] = '\0'; outlist[0] = '\0'; input[0] = '\0'; output[0] = '\0'; /* Initialize the lists of reference file keywords and names. */ InitRefFile (&refnames); /* Initial values. */ initCCDSwitches (&ccd_sw); /* Parse the command-line arguments */ for (i = 1; i < argc; i++) { if (!(strcmp(argv[i],"--version"))) { printf("%s\n",WF3_CAL_VER_NUM); exit(0); } if (strcmp (argv[i], "-dqi") == 0) { /* turn on */ ccd_sw.dqicorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-atod") == 0) { ccd_sw.atodcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-blev") == 0) { ccd_sw.blevcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-bias") == 0) { ccd_sw.biascorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-flash") == 0) { ccd_sw.flashcorr = PERFORM; switch_on = 1; } else if (argv[i][0] == '-') { for (j = 1; argv[i][j] != '\0'; j++) { if (argv[i][j] == 't') { printtime = YES; } else if (argv[i][j] == 'v') { verbose = YES; } else if (argv[i][j] == 'q') { quiet = YES; } else if (argv[i][j] == 'r'){ printf ("Current version: %s\n", WF3_CAL_VER); exit(0); } else { printf (MsgText, "Unrecognized option %s\n", argv[i]); FreeNames (inlist, outlist, input, output); exit (1); } } } else if (inlist[0] == '\0') { strcpy (inlist, argv[i]); } else if (outlist[0] == '\0') { strcpy (outlist, argv[i]); } else { too_many = 1; } } if (inlist[0] == '\0' || too_many) { printf ("syntax: wf3ccd [-t] [-v] [-q] [-r] input output\n"); printf (" command-line switches:\n"); printf (" -dqi -atod -blev -bias\n"); FreeNames (inlist, outlist, input, output); exit (ERROR_RETURN); } /* Initialize the structure for managing trailer file comments */ InitTrlBuf (); /* Copy command-line value for QUIET to structure */ SetTrlQuietMode(quiet); /* Was no calibration switch specified on command line? */ if (!switch_on) { /* default values (mostly PERFORM) */ ccd_sw.dqicorr = DefSwitch ("dqicorr"); ccd_sw.atodcorr = DefSwitch ("atodcorr"); ccd_sw.blevcorr = DefSwitch ("blevcorr"); ccd_sw.biascorr = DefSwitch ("biascorr"); ccd_sw.flashcorr = DefSwitch ("flshcorr"); ccd_sw.fluxcorr = DefSwitch ("fluxcorr"); ccd_sw.pctecorr = DefSwitch ("pctecorr"); } /* Expand the templates. */ i_imt = c_imtopen (inlist); o_imt = c_imtopen (outlist); n_in = c_imtlen (i_imt); n_out = c_imtlen (o_imt); /* The number of input and output files must be the same. */ if (CompareNumbers (n_in, n_out, "output")) status = 1; if (status) { FreeNames (inlist, outlist, input, output); CloseTrlBuf(); exit (ERROR_RETURN); } /* Loop over the list of input files. */ for (n = 0; n < n_in; n++) { i = c_imtgetim (i_imt, input, SZ_LINE); if (n_out > 0) { i = c_imtgetim (o_imt, output, SZ_LINE); } else { output[0] = '\0'; } if (MkOutName (input, isuffix, osuffix, nsuffix, output, SZ_LINE)) { WhichError (status); sprintf (MsgText, "Skipping %s", input); trlmessage (MsgText); continue; } /* Calibrate the current input file. */ if (WF3ccd (input, output, &ccd_sw, &refnames, printtime, verbose)){ sprintf (MsgText, "Error processing %s.", input); trlerror (MsgText); WhichError (status); } } /* Close lists of file names, and free name buffers. */ c_imtclose (i_imt); c_imtclose (o_imt); CloseTrlBuf(); FreeRefFile (&refnames); FreeNames (inlist, outlist, input, output); if (status) exit (ERROR_RETURN); else exit (0); }
int main (int argc, char **argv) { int status; /* zero is OK */ char *inlist; /* list of input file names */ char *outlist; /* list of output file names */ int switch_on = 0; /* was any switch specified? */ int sgeocorr = OMIT; /* calibration switches */ int helcorr = OMIT; int fluxcorr = OMIT; int statcorr = OMIT; int err_algorithm = WGT_VARIANCE; int printtime = 0; /* print time after each step? */ int verbose = 0; /* print additional info? */ int center_target = 0; /* center target in output image? */ int too_many = 0; /* too many command-line arguments? */ int i, j; /* loop indexes */ double blazeshift = NO_VALUE; IRAFPointer i_imt, o_imt; /* imt list pointers */ char *input; /* name of input science file */ char *output; /* optional name of output file */ int n_in, n_out; /* number of files in each list */ int n; /* Input and output suffixes. */ char *isuffix[] = {"_flt", "_crj", "_fwv", "_cwv", "_fwv_tmp", "_cwv_tmp"}; char *osuffix[] = {"_x2d", "_sx2", "_w2d", "_w2d", "_w2d_tmp", "_w2d_tmp"}; int nsuffix = 6; /* reference file keywords and names */ RefFileInfo refnames; c_irafinit (argc, argv); inlist = calloc (STIS_LINE+1, sizeof (char)); outlist = calloc (STIS_LINE+1, sizeof (char)); input = calloc (STIS_LINE+1, sizeof (char)); output = calloc (STIS_LINE+1, sizeof (char)); if (inlist == NULL || outlist == NULL || input == NULL || output == NULL) { printf ("ERROR: Can't even begin: out of memory.\n"); exit (ERROR_RETURN); } /* Get command-line arguments. */ for (i = 1; i < argc; i++) { if (strcmp (argv[i], "-x2d") == 0 || strcmp (argv[i], "-geo") == 0) { switch_on = 1; } else if (strcmp (argv[i], "-sgeo") == 0) { /* turn on */ sgeocorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-hel") == 0) { helcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-flux") == 0) { fluxcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-stat") == 0) { statcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-wgt_err") == 0) { err_algorithm = WGT_ERROR; } else if (argv[i][0] == '-') { if (strcmp (argv[i], "--version") == 0) { PrVersion(); exit (0); } if (strcmp (argv[i], "-r") == 0) { PrFullVersion(); exit (0); } for (j = 1; argv[i][j] != '\0'; j++) { if (argv[i][j] == 't') { printtime = 1; } else if (argv[i][j] == 'v') { verbose = 1; } else if (argv[i][j] == 'c') { center_target = 1; /* yes, center target */ } else if (argv[i][j] == 'b') { blazeshift = (double) atof (argv[++i]); if (i == argc-1) break; } else { printf ("ERROR: Unrecognized option %s\n", argv[i]); exit (1); } } } else if (inlist[0] == '\0') { strcpy (inlist, argv[i]); } else if (outlist[0] == '\0') { strcpy (outlist, argv[i]); } else { too_many = 1; } } if (inlist[0] == '\0' || too_many) { printf ( "syntax: cs7.e [-t] [-v] [-c] [-wgt_err] [-b blazeshift] input output\n"); printf (" command-line switches: -x2d -sgeo -hel -flux -stat\n"); FreeNames (inlist, outlist, input, output); exit (ERROR_RETURN); } /* Was no calibration switch specified on command line? */ if (!switch_on) { /* default values (mostly PERFORM) */ sgeocorr = DefSwitch ("sgeocorr"); helcorr = DefSwitch ("helcorr"); fluxcorr = DefSwitch ("fluxcorr"); statcorr = DefSwitch ("statcorr"); } /* Initialize the list of reference file keywords and names. */ InitRefFile (&refnames); /* Expand the templates. */ i_imt = c_imtopen (inlist); o_imt = c_imtopen (outlist); n_in = c_imtlen (i_imt); n_out = c_imtlen (o_imt); /* The number of input and output files must be the same. */ if (CompareNumbers (n_in, n_out, "output")) { FreeNames (inlist, outlist, input, output); exit (ERROR_RETURN); } /* Loop over the list of input files. */ for (n = 0; n < n_in; n++) { j = c_imtgetim (i_imt, input, STIS_LINE); if (n_out > 0) j = c_imtgetim (o_imt, output, STIS_LINE); else output[0] = '\0'; status = 0; if ((status = MkOutName (input, isuffix, osuffix, nsuffix, output, STIS_LINE))) { WhichError (status); printf ("Skipping %s\n", input); continue; } /* Calibrate the current input file. */ if ((status = CalStis7 (input, output, sgeocorr, helcorr, fluxcorr, statcorr, &refnames, printtime, verbose, center_target, blazeshift, err_algorithm))) { printf ("Error processing %s.\n", input); WhichError (status); } } /* Close lists of file names, and free name buffers. */ c_imtclose (i_imt); c_imtclose (o_imt); FreeRefFile (&refnames); FreeNames (inlist, outlist, input, output); if (status) exit (ERROR_RETURN); else exit (0); }
int main (int argc, char **argv) { int status; /* zero is OK */ char *inlist; /* list of input file names */ char *outlist; /* list of output file names */ char *blevlist; /* list of output blev file names */ int switch_on = 0; /* was any switch specified? */ int printtime = 0; /* print time after each step? */ int verbose = 0; /* print additional info? */ int too_many = 0; /* too many command-line arguments? */ int i, j; /* loop indexes */ int junk; IRAFPointer i_imt, o_imt, b_imt; /* imt list pointers */ char *input; /* name of input science file */ char *output; /* optional name of output file */ char *outblev; /* optional file for blev values */ int n_in, n_out, n_blev; /* number of files in each list */ int n; /* Input and output suffixes. */ char *isuffix[] = {"_raw", "_blv_tmp", "_crj_tmp", "_wav"}; char *osuffix[] = {"_flt", "_flt", "_crj", "_fwv"}; int nsuffix = 4; /* A structure to pass the calibration switches to CalStis1 */ cs1_switch cs1_sw; /* reference file keywords and names */ RefFileInfo refnames; c_irafinit (argc, argv); /* Allocate space for file names. */ inlist = calloc (1, sizeof (char)); /* allocated later */ outlist = calloc (1, sizeof (char)); blevlist = calloc (1, sizeof (char)); input = calloc (STIS_LINE+1, sizeof (char)); output = calloc (STIS_LINE+1, sizeof (char)); outblev = calloc (STIS_LINE+1, sizeof (char)); if (inlist == NULL || outlist == NULL || blevlist == NULL || input == NULL || output == NULL || outblev == NULL) { printf ("ERROR: Can't even begin; out of memory.\n"); exit (ERROR_RETURN); } /* Initialize the lists of reference file keywords and names. */ InitRefFile (&refnames); /* Initial values. */ cs1_sw.dqicorr = OMIT; cs1_sw.atodcorr = OMIT; cs1_sw.blevcorr = OMIT; cs1_sw.doppcorr = OMIT; cs1_sw.lorscorr = OMIT; cs1_sw.glincorr = OMIT; cs1_sw.lflgcorr = OMIT; cs1_sw.biascorr = OMIT; cs1_sw.darkcorr = OMIT; cs1_sw.flatcorr = OMIT; cs1_sw.shadcorr = OMIT; cs1_sw.photcorr = OMIT; cs1_sw.statcorr = OMIT; strcpy (cs1_sw.darkscale_string, ""); for (i = 1; i < argc; i++) { if (strcmp (argv[i], "--version") == 0) { PrVersion(); exit (0); } if (strcmp (argv[i], "-r") == 0) { PrFullVersion(); exit (0); } if (strcmp (argv[i], "-dqi") == 0) { /* turn on */ cs1_sw.dqicorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-atod") == 0) { cs1_sw.atodcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-blev") == 0) { cs1_sw.blevcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-dopp") == 0) { cs1_sw.doppcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-lors") == 0) { cs1_sw.lorscorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-glin") == 0) { cs1_sw.glincorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-lflg") == 0) { cs1_sw.lflgcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-bias") == 0) { cs1_sw.biascorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-dark") == 0) { cs1_sw.darkcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-flat") == 0) { cs1_sw.flatcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-shad") == 0) { cs1_sw.shadcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-phot") == 0) { cs1_sw.photcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-stat") == 0) { cs1_sw.statcorr = PERFORM; switch_on = 1; } else if (strcmp (argv[i], "-dscl") == 0) { strcpy (cs1_sw.darkscale_string, argv[++i]); switch_on = 1; } else if (argv[i][0] == '-') { for (j = 1; argv[i][j] != '\0'; j++) { if (argv[i][j] == 't') { printtime = 1; } else if (argv[i][j] == 'v') { verbose = 1; } else { printf ("ERROR: Unrecognized option %s\n", argv[i]); exit (1); } } } else if (inlist[0] == '\0') { free (inlist); if ((inlist = calloc (strlen(argv[i])+1, sizeof(char))) == NULL) { printf ("ERROR: Out of memory.\n"); exit (ERROR_RETURN); } strcpy (inlist, argv[i]); } else if (outlist[0] == '\0') { free (outlist); if ((outlist = calloc (strlen(argv[i])+1, sizeof(char))) == NULL) { printf ("ERROR: Out of memory.\n"); exit (ERROR_RETURN); } strcpy (outlist, argv[i]); } else if (blevlist[0] == '\0') { free (blevlist); if ((blevlist = calloc (strlen(argv[i])+1, sizeof(char))) == NULL) { printf ("ERROR: Out of memory.\n"); exit (ERROR_RETURN); } strcpy (blevlist, argv[i]); } else { too_many = 1; } } if (inlist[0] == '\0' || too_many) { printf ("syntax: cs1.e [-t] [-v] input output [outblev]\n"); printf (" command-line switches:\n"); printf (" -dqi -atod -blev\n"); printf (" -dopp -lors -glin -lflg\n"); printf (" -bias -dark -flat -shad -phot -stat\n"); FreeNames (inlist, outlist, blevlist, input, output, outblev); exit (ERROR_RETURN); } /* Was no calibration switch specified on command line? */ if (!switch_on) { /* default values (mostly PERFORM) */ cs1_sw.dqicorr = DefSwitch ("dqicorr"); cs1_sw.atodcorr = DefSwitch ("atodcorr"); cs1_sw.blevcorr = DefSwitch ("blevcorr"); cs1_sw.doppcorr = DefSwitch ("doppcorr"); cs1_sw.lorscorr = DefSwitch ("lorscorr"); cs1_sw.glincorr = DefSwitch ("glincorr"); cs1_sw.lflgcorr = DefSwitch ("lflgcorr"); cs1_sw.biascorr = DefSwitch ("biascorr"); cs1_sw.darkcorr = DefSwitch ("darkcorr"); cs1_sw.flatcorr = DefSwitch ("flatcorr"); cs1_sw.shadcorr = DefSwitch ("shadcorr"); cs1_sw.photcorr = DefSwitch ("photcorr"); cs1_sw.statcorr = DefSwitch ("statcorr"); } /* Expand the templates. */ i_imt = c_imtopen (inlist); o_imt = c_imtopen (outlist); b_imt = c_imtopen (blevlist); n_in = c_imtlen (i_imt); n_out = c_imtlen (o_imt); n_blev = c_imtlen (b_imt); /* The number of input and output files must be the same. */ status = 0; if (CompareNumbers (n_in, n_out, "output")) status = ERROR_RETURN; if (CompareNumbers (n_in, n_blev, "outblev")) status = ERROR_RETURN; if (status) { FreeNames (inlist, outlist, blevlist, input, output, outblev); exit (ERROR_RETURN); } /* Loop over the list of input files. */ for (n = 0; n < n_in; n++) { junk = c_imtgetim (i_imt, input, STIS_LINE); if (n_out > 0) junk = c_imtgetim (o_imt, output, STIS_LINE); else output[0] = '\0'; if (n_blev > 0) junk = c_imtgetim (b_imt, outblev, STIS_LINE); else outblev[0] = '\0'; status = 0; if ((status = MkOutName (input, isuffix, osuffix, nsuffix, output, STIS_LINE))) { WhichError (status); printf ("Skipping %s\n", input); continue; } /* Calibrate the current input file. */ if ((status = CalStis1 (input, output, outblev, &cs1_sw, &refnames, printtime, verbose))) { printf ("Error processing %s.\n", input); WhichError (status); } } /* Close lists of file names, and free name buffers. */ c_imtclose (i_imt); c_imtclose (o_imt); c_imtclose (b_imt); FreeRefFile (&refnames); FreeNames (inlist, outlist, blevlist, input, output, outblev); if (status) exit (ERROR_RETURN); else exit (0); }