IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 11, 2006, 5:27:13 PM (20 years ago)
Author:
eugene
Message:

major revisions to use the new pmFPAfile,view I/O handling

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psphot/src/psphotArguments.c

    r6522 r6571  
    11# include "psphot.h"
     2# include <glob.h>
    23
    34static void usage (void);
    45
    5 ppConfig *psphotArguments (int *argc, char **argv) {
     6pmConfig *psphotArguments (int *argc, char **argv) {
    67
    78    int N;
     
    1213    psLogSetFormat ("M");
    1314
    14     ppConfig *config = ppConfigAlloc ();
     15    // these other options override the PSPHOT recipe options
     16    psMetadata *options = psMetadataAlloc ();
    1517
    16     // load config data from default locations
    17     if (!pmConfigRead(&config->site, &config->camera, &config->recipe, argc, argv, PSPHOT_RECIPE)) {
    18         psErrorStackPrint(stderr, "Can't find site configuration!\n");
    19         exit (EXIT_FAILURE);
     18    // run the test model (requires X,Y coordinate)
     19    if ((N = psArgumentGet (*argc, argv, "-modeltest"))) {
     20        psMetadataAddBool (options, PS_LIST_TAIL, "TEST_FIT",   0, "", true);
     21        psMetadataAddF32  (options, PS_LIST_TAIL, "TEST_FIT_X", 0, "", atof(argv[N+1]));
     22        psMetadataAddF32  (options, PS_LIST_TAIL, "TEST_FIT_Y", 0, "", atof(argv[N+2]));
     23
     24        psArgumentRemove (N, argc, argv);
     25        psArgumentRemove (N, argc, argv);
     26        psArgumentRemove (N, argc, argv);
     27
     28        // specify the modeltest model
     29        if ((N = psArgumentGet (*argc, argv, "-model"))) {
     30            psArgumentRemove (N, argc, argv);
     31            psMetadataAddStr (options, PS_LIST_TAIL, "TEST_FIT_MODEL", 0, "", argv[N]);
     32            psArgumentRemove (N, argc, argv);
     33        }
     34
     35        // specify the test fit mode
     36        if ((N = psArgumentGet (*argc, argv, "-fitmode"))) {
     37            psArgumentRemove (N, argc, argv);
     38            psMetadataAddStr (options, PS_LIST_TAIL, "TEST_FIT_MODE", 0, "", argv[N]);
     39            psArgumentRemove (N, argc, argv);
     40        }
     41        if ((N = psArgumentGet (*argc, argv, "-fitset"))) {
     42            psArgumentRemove (N, argc, argv);
     43            psMetadataAddStr (options, PS_LIST_TAIL, "TEST_FIT_SET", 0, "", argv[N]);
     44            psArgumentRemove (N, argc, argv);
     45        }
    2046    }
    2147
    22     // Parse other command-line arguments
    23     config->arguments = psMetadataAlloc ();
    24 
    25     // arguments (must be supplied for each run, or not used)
    26     // mask image (input) is used by psphotImageLoop
    27     if ((N = psArgumentGet (*argc, argv, "-mask"))) {
     48    // photcode : used in output to supplement header data (argument or recipe?)
     49    if ((N = psArgumentGet (*argc, argv, "-photcode"))) {
    2850        psArgumentRemove (N, argc, argv);
    29         psMetadataAddStr (config->arguments, PS_LIST_TAIL, "MASK_IMAGE", PS_META_REPLACE, "", argv[N]);
     51        psMetadataAddStr (options, PS_LIST_TAIL, "PHOTCODE", PS_META_REPLACE, "", argv[N]);
    3052        psArgumentRemove (N, argc, argv);
    3153    }
    3254
    33     // weight image (input) is used by psphotImageLoop
    34     if ((N = psArgumentGet (*argc, argv, "-weight"))) {
     55    // break : used from recipe throughout psphotReadout
     56    if ((N = psArgumentGet (*argc, argv, "-break"))) {
    3557        psArgumentRemove (N, argc, argv);
    36         psMetadataAddStr (config->arguments, PS_LIST_TAIL, "WEIGHT_IMAGE", PS_META_REPLACE, "", argv[N]);
     58        psMetadataAddStr (options, PS_LIST_TAIL, "BREAK_POINT", PS_META_REPLACE, "", argv[N]);
    3759        psArgumentRemove (N, argc, argv);
    3860    }
    3961
    40     // residual image (output) is used by psphotOutput
    41     if ((N = psArgumentGet (*argc, argv, "-resid"))) {
     62    // fitmode : used from recipe throughout psphotReadout
     63    if ((N = psArgumentGet (*argc, argv, "-fitmode"))) {
    4264        psArgumentRemove (N, argc, argv);
    43         psMetadataAddStr (config->arguments, PS_LIST_TAIL, "RESID_IMAGE", PS_META_REPLACE, "", argv[N]);
     65        psMetadataAddStr (options, PS_LIST_TAIL, "FITMODE", PS_META_REPLACE, "", argv[N]);
    4466        psArgumentRemove (N, argc, argv);
    4567    }
    4668
    47     // background image (output) is used by psphotOutput
    48     if ((N = psArgumentGet (*argc, argv, "-background"))) {
     69    // analysis region : overrides recipe value, used in psphotReadout/psphotEnsemblePSF
     70    if ((N = psArgumentGet (*argc, argv, "-region"))) {
    4971        psArgumentRemove (N, argc, argv);
    50         psMetadataAddStr (config->arguments, PS_LIST_TAIL, "BACKGROUND_IMAGE", PS_META_REPLACE, "", argv[N]);
     72        psMetadataAddStr (options, PS_LIST_TAIL, "ANALYSIS_REGION", 0, "", argv[N]);
    5173        psArgumentRemove (N, argc, argv);
    5274    }
    5375
    54     // background model (output) is used by psphotOutput
    55     if ((N = psArgumentGet (*argc, argv, "-backmodel"))) {
     76    // other arbitrary recipe values: -D key value (all added as string)
     77    while ((N = psArgumentGet (*argc, argv, "-D"))) {
    5678        psArgumentRemove (N, argc, argv);
    57         psMetadataAddStr (config->arguments, PS_LIST_TAIL, "BACKGROUND_MODEL", PS_META_REPLACE, "", argv[N]);
     79        psMetadataAddStr (options, PS_LIST_TAIL, argv[N], 0, "", argv[N+1]);
     80        psArgumentRemove (N, argc, argv);
    5881        psArgumentRemove (N, argc, argv);
    5982    }
     83
     84    // other arbitrary recipe values: -Df key value (all added as float)
     85    while ((N = psArgumentGet (*argc, argv, "-Df"))) {
     86        psArgumentRemove (N, argc, argv);
     87        psMetadataAddF32 (options, PS_LIST_TAIL, argv[N], 0, "", atof(argv[N+1]));
     88        psArgumentRemove (N, argc, argv);
     89        psArgumentRemove (N, argc, argv);
     90    }
     91
     92    // other arbitrary recipe values: -Di key value (all added as int)
     93    while ((N = psArgumentGet (*argc, argv, "-Di"))) {
     94        psArgumentRemove (N, argc, argv);
     95        psMetadataAddS32 (options, PS_LIST_TAIL, argv[N], 0, "", atoi(argv[N+1]));
     96        psArgumentRemove (N, argc, argv);
     97        psArgumentRemove (N, argc, argv);
     98    }
     99
     100    // load config data from default locations
     101    pmConfig *config = pmConfigRead(argc, argv, PSPHOT_RECIPE);
     102
     103    // Storage for other command-line arguments
     104    config->arguments = psMetadataAlloc ();
     105
     106    // save these recipe options until we have loaded the options
     107    psMetadataAddPtr (config->arguments, PS_LIST_TAIL, "PSPHOT.OPTIONS",  PS_META_REPLACE, "", options);
    60108
    61109    // chip selection is used to limit chips to be processed
     
    66114    }
    67115
    68     // run the test model (requires X,Y coordinate)
    69     if ((N = psArgumentGet (*argc, argv, "-modeltest"))) {
    70         psMetadataAddBool (config->arguments, PS_LIST_TAIL, "TEST_FIT",   0, "", true);
    71         psMetadataAddF32  (config->arguments, PS_LIST_TAIL, "TEST_FIT_X", 0, "", atof(argv[N+1]));
    72         psMetadataAddF32  (config->arguments, PS_LIST_TAIL, "TEST_FIT_Y", 0, "", atof(argv[N+2]));
     116    // we load all input files onto a psArray, to be parsed later
     117    psArray *input = psArrayAlloc (16);
    73118
     119    // load the list of filenames the supplied file (may be a glob: "file*.fits")
     120    if ((N = psArgumentGet (*argc, argv, "-file"))) {
     121        glob_t globList;
    74122        psArgumentRemove (N, argc, argv);
    75         psArgumentRemove (N, argc, argv);
    76         psArgumentRemove (N, argc, argv);
    77 
    78         // specify the modeltest model
    79         if ((N = psArgumentGet (*argc, argv, "-model"))) {
    80             psArgumentRemove (N, argc, argv);
    81             psMetadataAddStr (config->arguments, PS_LIST_TAIL, "TEST_FIT_MODEL", 0, "", argv[N]);
    82             psArgumentRemove (N, argc, argv);
     123        globList.gl_offs = 0;
     124        glob (argv[N], 0, NULL, &globList);
     125        for (int i = 0; i < globList.gl_pathc; i++) {
     126            char *filename = psStringCopy (globList.gl_pathv[i]);
     127            psArrayAdd (input, 16, filename);
    83128        }
    84 
    85         // specify the test fit mode
    86         if ((N = psArgumentGet (*argc, argv, "-fitmode"))) {
    87             psArgumentRemove (N, argc, argv);
    88             psMetadataAddStr (config->arguments, PS_LIST_TAIL, "TEST_FIT_MODE", 0, "", argv[N]);
    89             psArgumentRemove (N, argc, argv);
    90         }
    91         if ((N = psArgumentGet (*argc, argv, "-fitset"))) {
    92             psArgumentRemove (N, argc, argv);
    93             psMetadataAddStr (config->arguments, PS_LIST_TAIL, "TEST_FIT_SET", 0, "", argv[N]);
    94             psArgumentRemove (N, argc, argv);
    95         }
    96     }
    97 
    98     // these other options override the recipe options
    99     config->options = psMetadataAlloc ();
    100 
    101     // PSF : optional psf file to be loaded
    102     if ((N = psArgumentGet (*argc, argv, "-psf"))) {
    103         psArgumentRemove (N, argc, argv);
    104         psMetadataAddStr (config->options, PS_LIST_TAIL, "PSF_INPUT_FILE", PS_META_REPLACE, "", argv[N]);
    105129        psArgumentRemove (N, argc, argv);
    106130    }
    107131
    108     // PSF : optional psf file to be loaded
    109     if ((N = psArgumentGet (*argc, argv, "-psfout"))) {
     132    // load the list from the supplied text file
     133    if ((N = psArgumentGet (*argc, argv, "-list"))) {
     134        int nItems;
     135        char line[1024]; // XXX limits the list lines to 1024 chars
     136        char word[1024];
     137        char *filename;
     138
    110139        psArgumentRemove (N, argc, argv);
    111         psMetadataAddStr (config->options, PS_LIST_TAIL, "PSF_OUTPUT_FILE", PS_META_REPLACE, "", argv[N]);
     140        FILE *f = fopen (argv[N], "r");
     141        if (f == NULL) {
     142            psAbort ("psphot", "unable to open specified list file");
     143        }
     144        while (fgets (line, 1024, f) != NULL) {
     145            nItems = sscanf (line, "%s", word);
     146            switch (nItems) {
     147              case 0:
     148                break;
     149              case 1:
     150                filename = psStringCopy (word);
     151                psArrayAdd (input, 16, filename);
     152                break;
     153              default:
     154                // rigid format, no comments allowed?
     155                psAbort ("psphot", "error parsing input list file");
     156                break;
     157            }
     158        }
    112159        psArgumentRemove (N, argc, argv);
    113     }
     160    }           
     161    if (input->n < 1) usage ();
    114162
    115     // photcode : used in output to supplement header data (argument or recipe?)
    116     if ((N = psArgumentGet (*argc, argv, "-photcode"))) {
    117         psArgumentRemove (N, argc, argv);
    118         psMetadataAddStr (config->options, PS_LIST_TAIL, "PHOTCODE", PS_META_REPLACE, "", argv[N]);
    119         psArgumentRemove (N, argc, argv);
    120     }
     163    // input list gets places as an array on the config->arguements list
     164    psMetadataAddPtr (config->arguments, PS_LIST_TAIL, "INPUT",  PS_META_REPLACE, "", input);
    121165
    122     // break : used from recipe throughout psphotReadout
    123     if ((N = psArgumentGet (*argc, argv, "-break"))) {
    124         psArgumentRemove (N, argc, argv);
    125         psMetadataAddStr (config->options, PS_LIST_TAIL, "BREAK_POINT", PS_META_REPLACE, "", argv[N]);
    126         psArgumentRemove (N, argc, argv);
    127     }
    128 
    129     // fitmode : used from recipe throughout psphotReadout
    130     if ((N = psArgumentGet (*argc, argv, "-fitmode"))) {
    131         psArgumentRemove (N, argc, argv);
    132         psMetadataAddStr (config->options, PS_LIST_TAIL, "FITMODE", PS_META_REPLACE, "", argv[N]);
    133         psArgumentRemove (N, argc, argv);
    134     }
    135 
    136     // analysis region : overrides recipe value, used in psphotReadout/psphotEnsemblePSF
    137     if ((N = psArgumentGet (*argc, argv, "-region"))) {
    138         psArgumentRemove (N, argc, argv);
    139         psMetadataAddStr (config->options, PS_LIST_TAIL, "ANALYSIS_REGION", 0, "", argv[N]);
    140         psArgumentRemove (N, argc, argv);
    141     }
    142 
    143     // other arbitrary recipe values: -D key value (all added as string)
    144     while ((N = psArgumentGet (*argc, argv, "-D"))) {
    145         psArgumentRemove (N, argc, argv);
    146         psMetadataAddStr (config->options, PS_LIST_TAIL, argv[N], 0, "", argv[N+1]);
    147         psArgumentRemove (N, argc, argv);
    148         psArgumentRemove (N, argc, argv);
    149     }
    150 
    151     // other arbitrary recipe values: -Df key value (all added as float)
    152     while ((N = psArgumentGet (*argc, argv, "-Df"))) {
    153         psArgumentRemove (N, argc, argv);
    154         psMetadataAddF32 (config->options, PS_LIST_TAIL, argv[N], 0, "", atof(argv[N+1]));
    155         psArgumentRemove (N, argc, argv);
    156         psArgumentRemove (N, argc, argv);
    157     }
    158 
    159     // other arbitrary recipe values: -Di key value (all added as int)
    160     while ((N = psArgumentGet (*argc, argv, "-Di"))) {
    161         psArgumentRemove (N, argc, argv);
    162         psMetadataAddS32 (config->options, PS_LIST_TAIL, argv[N], 0, "", atoi(argv[N+1]));
    163         psArgumentRemove (N, argc, argv);
    164         psArgumentRemove (N, argc, argv);
    165     }
    166 
    167     if (*argc != 3) usage ();
     166    if (*argc != 2) usage ();
    168167
    169168    // input and output positions are fixed
    170     psMetadataAddStr (config->arguments, PS_LIST_TAIL, "INPUT_FILE",  PS_META_REPLACE, "", argv[1]);
    171     psMetadataAddStr (config->arguments, PS_LIST_TAIL, "OUTPUT_ROOT", PS_META_REPLACE, "", argv[2]);
     169    psMetadataAddStr (config->arguments, PS_LIST_TAIL, "OUTPUT", PS_META_REPLACE, "", argv[1]);
    172170
    173171    psTrace(__func__, 1, "Done with psphotArguments...\n");
     
    176174
    177175static void usage (void) {
    178     fprintf (stderr, "USAGE: psphot (image) (output)\n");
     176    fprintf (stderr, "USAGE: psphot [-file image(s)] [-list imagelist] (output)\n");
    179177    exit (2);
    180178}
Note: See TracChangeset for help on using the changeset viewer.