Changeset 6571 for trunk/psphot/src/psphotArguments.c
- Timestamp:
- Mar 11, 2006, 5:27:13 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psphot/src/psphotArguments.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/src/psphotArguments.c
r6522 r6571 1 1 # include "psphot.h" 2 # include <glob.h> 2 3 3 4 static void usage (void); 4 5 5 p pConfig *psphotArguments (int *argc, char **argv) {6 pmConfig *psphotArguments (int *argc, char **argv) { 6 7 7 8 int N; … … 12 13 psLogSetFormat ("M"); 13 14 14 ppConfig *config = ppConfigAlloc (); 15 // these other options override the PSPHOT recipe options 16 psMetadata *options = psMetadataAlloc (); 15 17 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 } 20 46 } 21 47 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"))) { 28 50 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]); 30 52 psArgumentRemove (N, argc, argv); 31 53 } 32 54 33 // weight image (input) is used by psphotImageLoop34 if ((N = psArgumentGet (*argc, argv, "- weight"))) {55 // break : used from recipe throughout psphotReadout 56 if ((N = psArgumentGet (*argc, argv, "-break"))) { 35 57 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]); 37 59 psArgumentRemove (N, argc, argv); 38 60 } 39 61 40 // residual image (output) is used by psphotOutput41 if ((N = psArgumentGet (*argc, argv, "- resid"))) {62 // fitmode : used from recipe throughout psphotReadout 63 if ((N = psArgumentGet (*argc, argv, "-fitmode"))) { 42 64 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]); 44 66 psArgumentRemove (N, argc, argv); 45 67 } 46 68 47 // background image (output) is used by psphotOutput48 if ((N = psArgumentGet (*argc, argv, "- background"))) {69 // analysis region : overrides recipe value, used in psphotReadout/psphotEnsemblePSF 70 if ((N = psArgumentGet (*argc, argv, "-region"))) { 49 71 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]); 51 73 psArgumentRemove (N, argc, argv); 52 74 } 53 75 54 // background model (output) is used by psphotOutput55 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"))) { 56 78 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); 58 81 psArgumentRemove (N, argc, argv); 59 82 } 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); 60 108 61 109 // chip selection is used to limit chips to be processed … … 66 114 } 67 115 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); 73 118 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; 74 122 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); 83 128 } 84 85 // specify the test fit mode86 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 options99 config->options = psMetadataAlloc ();100 101 // PSF : optional psf file to be loaded102 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]);105 129 psArgumentRemove (N, argc, argv); 106 130 } 107 131 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 110 139 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 } 112 159 psArgumentRemove (N, argc, argv); 113 } 160 } 161 if (input->n < 1) usage (); 114 162 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); 121 165 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 (); 168 167 169 168 // 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]); 172 170 173 171 psTrace(__func__, 1, "Done with psphotArguments...\n"); … … 176 174 177 175 static void usage (void) { 178 fprintf (stderr, "USAGE: psphot (image)(output)\n");176 fprintf (stderr, "USAGE: psphot [-file image(s)] [-list imagelist] (output)\n"); 179 177 exit (2); 180 178 }
Note:
See TracChangeset
for help on using the changeset viewer.
