Changeset 15363 for trunk/ppstamp/src/ppstampArguments.c
- Timestamp:
- Oct 23, 2007, 11:50:52 AM (19 years ago)
- Location:
- trunk/ppstamp/src
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
ppstampArguments.c (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppstamp/src
- Property svn:ignore
-
old new 6 6 config.h.in 7 7 stamp-h1 8 ppstampErrorCodes.c 9 ppstampErrorCodes.h
-
- Property svn:ignore
-
trunk/ppstamp/src/ppstampArguments.c
r15323 r15363 6 6 #include "ohana.h" 7 7 8 static bool get2Angles(int argnum, int *pArgc, char **argv, bool bothDegrees, double *p1, double *p2); 9 static bool get2Ints(int argnum, int *pArgc, char **argv, int *p1, int *p2); 10 11 // XXX This usage output is kind of busy 8 static bool get2Angles(int argnum, int *pArgc, char **argv, bool bothDegrees, bool makePositive, double *p1, double *p2); 9 static bool get2Ints(int argnum, int *pArgc, char **argv, bool makePositive, int *p1, int *p2); 12 10 13 11 static void usage (void) … … 15 13 fprintf(stderr, "\n"); 16 14 17 fprintf(stderr, "USAGE: ppstamp -celcenter RA DEC -arcrange dRA dDEC [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 18 fprintf(stderr, " ppstamp -celcenter RA DEC -celrange dRA dDEC [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 19 fprintf(stderr, " ppstamp -celcenter RA DEC -pixrange dx dy [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 20 fprintf(stderr, " ppstamp -pixcenter x y -pixrange dx dy -chip chipname [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 21 fprintf(stderr, " ppstamp -pixcenter x y -arcrange dRA dDEC -chip chipname [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 22 fprintf(stderr, " ppstamp -pixcenter x y -celrange dRA dDEC -chip chipname [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 23 fprintf(stderr, "\n"); 24 25 fprintf(stderr, "celcenter & celrange may be specified in HH:MM:SS DD:MM:SS or as 2 values in decimal degrees\n"); 26 fprintf(stderr, "arcrange may be specfied as 2 values DD:MM:SS DD:MM:SS or decimal degrees\n"); 15 fprintf(stderr, "USAGE: ppstamp -skycenter RA DEC -pixrange dx dy [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 16 fprintf(stderr, " ppstamp -skycenter RA DEC -arcrange dRA dDEC [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 17 fprintf(stderr, " ppstamp -pixcenter x y -pixrange dx dy [-chip chipname] [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 18 fprintf(stderr, " ppstamp -pixcenter x y -arcrange dRA dDEC [-chip chipname] [-file INPUT.fits] [-list INPUT.txt] OUTPUT\n"); 19 fprintf(stderr, "\n"); 20 21 fprintf(stderr, "-skycenter is specified as HH:MM:SS DD:MM:SS or decimal degrees\n"); 22 fprintf(stderr, "-arcrange values are seconds of arc\n"); 27 23 fprintf(stderr, "\n"); 28 24 fprintf(stderr, "Optional arguments:\n"); … … 55 51 pmConfig *config = pmConfigRead(&argc, argv, NULL); 56 52 if (config == NULL) { 57 psError StackPrint(stderr, "Can't find site configuration!\n");58 exit(EXIT_FAILURE);53 psError(PPSTAMP_ERR_CONFIG, false, "Can't read site configuration!\n"); 54 return(NULL); 59 55 } 60 56 … … 67 63 psArgumentRemove(argnum, &argc, argv); 68 64 69 if (!get2Ints(argnum, &argc, argv, &options->centerX, &options->centerY)) { 70 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "invalid pixcenter specification\n"); 71 usage(); 72 } 73 } 74 75 if ((argnum = psArgumentGet(argc, argv, "-celcenter"))) { 65 if (!get2Ints(argnum, &argc, argv, false, &options->centerX, &options->centerY)) { 66 psError(PPSTAMP_ERR_ARGUMENTS, true, "invalid pixcenter specification: %s %s\n", 67 argv[argnum], argv[argnum+1]); 68 usage(); 69 } 70 psArgumentRemove(argnum, &argc, argv); 71 psArgumentRemove(argnum, &argc, argv); 72 } 73 74 if ((argnum = psArgumentGet(argc, argv, "-skycenter"))) { 76 75 if (gotCenter) { 77 psError(P S_ERR_BAD_PARAMETER_VALUE, true, "can't specify both -pixcenter and -celcenter\n");;76 psError(PPSTAMP_ERR_ARGUMENTS, true, "can't specify both -pixcenter and -skycenter\n");; 78 77 usage(); 79 78 } … … 81 80 82 81 double raDeg, decDeg; 83 if (!get2Angles(argnum, &argc, argv, false, &raDeg, &decDeg)) { 84 usage(); 85 } 82 if (!get2Angles(argnum, &argc, argv, false, false, &raDeg, &decDeg)) { 83 psError(PPSTAMP_ERR_ARGUMENTS, true, "invalid skycenter specification: %s %s\n", 84 argv[argnum], argv[argnum+1]); 85 usage(); 86 } 87 psArgumentRemove(argnum, &argc, argv); 88 psArgumentRemove(argnum, &argc, argv); 86 89 options->centerRA = DEG_TO_RAD(raDeg); 87 90 options->centerDEC = DEG_TO_RAD(decDeg); … … 91 94 92 95 if (!gotCenter) { 93 psError(P S_ERR_BAD_PARAMETER_VALUE, true, "must specify center of region of interest\n");96 psError(PPSTAMP_ERR_ARGUMENTS, true, "must specify center of region of interest\n"); 94 97 usage(); 95 98 } … … 99 102 options->celestialRange = false; 100 103 psArgumentRemove(argnum, &argc, argv); 101 if (!get2Ints(argnum, &argc, argv, &options->dX, &options->dY)) { 102 usage(); 103 } 104 if (!get2Ints(argnum, &argc, argv, true, &options->dX, &options->dY)) { 105 psError(PPSTAMP_ERR_ARGUMENTS, true, "invalid pixrange specification: %s %s\n", 106 argv[argnum], argv[argnum+1]); 107 usage(); 108 } 109 psArgumentRemove(argnum, &argc, argv); 110 psArgumentRemove(argnum, &argc, argv); 104 111 } 105 112 106 113 if ((argnum = psArgumentGet(argc, argv, "-arcrange"))) { 107 114 if (gotRange) { 108 psError(P S_ERR_BAD_PARAMETER_VALUE, true, "specify only one of -pixrange or -arcrange or -celrange\n");;115 psError(PPSTAMP_ERR_ARGUMENTS, true, "specify only one of -pixrange or -arcrange\n");; 109 116 usage(); 110 117 } … … 113 120 options->celestialRange = true; 114 121 122 // arcrange values are seconds of arc 123 options->dRA = DEG_TO_RAD(atof(argv[argnum]) * 3600.); 124 options->dDEC = DEG_TO_RAD(atof(argv[argnum+1]) * 3600.); 125 126 psArgumentRemove(argnum, &argc, argv); 127 psArgumentRemove(argnum, &argc, argv); 128 } 129 // I'm leaving in the -celrange option (HH:MM:SS DD:MM:SS), but not publicizing it 130 if ((argnum = psArgumentGet(argc, argv, "-celrange"))) { 131 if (gotRange) { 132 psError(PPSTAMP_ERR_ARGUMENTS, true, "specify one of -pixrange, -arcrange, or -celrange\n");; 133 usage(); 134 } 135 psArgumentRemove(argnum, &argc, argv); 136 gotRange = true; 137 options->celestialRange = true; 138 115 139 double deg1, deg2; 116 if (!get2Angles(argnum, &argc, argv, true, °1, °2)) { 117 usage(); 118 } 140 if (!get2Angles(argnum, &argc, argv, false, true, °1, °2)) { 141 psError(PPSTAMP_ERR_ARGUMENTS, true, "invalid celrange specification: %s %s\n", 142 argv[argnum], argv[argnum+1]); 143 usage(); 144 } 145 psArgumentRemove(argnum, &argc, argv); 146 psArgumentRemove(argnum, &argc, argv); 119 147 options->dRA = DEG_TO_RAD(deg1); 120 148 options->dDEC = DEG_TO_RAD(deg2); 121 149 } 122 if ((argnum = psArgumentGet(argc, argv, "-celrange"))) {123 if (gotRange) {124 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "specify one of -pixrange or -arcrange or -celrange\n");;125 usage();126 }127 psArgumentRemove(argnum, &argc, argv);128 gotRange = true;129 options->celestialRange = true;130 131 double deg1, deg2;132 if (!get2Angles(argnum, &argc, argv, false, °1, °2)) {133 usage();134 }135 options->dRA = DEG_TO_RAD(deg1);136 options->dDEC = DEG_TO_RAD(deg2);137 }138 150 139 151 if (!gotRange) { 140 psError(P S_ERR_BAD_PARAMETER_VALUE, true, "must specify range\n");152 psError(PPSTAMP_ERR_ARGUMENTS, true, "must specify range\n"); 141 153 usage(); 142 154 } … … 151 163 bool status = pmConfigFileSetsMD (config->arguments, &argc, argv, "INPUT", "-file", "-list"); 152 164 if (!status) { 153 // TODO: shall we print a specific message? 154 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "must specify INPUT\n"); 155 usage (); 165 psError(PPSTAMP_ERR_ARGUMENTS, true, "must specify INPUT\n"); 166 usage(); 156 167 } 157 168 158 169 // finally the output file 159 if (argc != 2) { 160 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "must specify OUTPUT\n"); 161 usage (); 162 } 163 164 // Add the input and output images (which remain on the command-line) to the arguments list 170 if (argc < 2) { 171 psError(PPSTAMP_ERR_ARGUMENTS, true, "must specify OUTPUT\n"); 172 usage(); 173 } else if (argc > 2) { 174 psError(PPSTAMP_ERR_ARGUMENTS, true, "unknown argument(s)\n"); 175 usage(); 176 } 177 178 // Add the output image (which remains on the command-line) to the arguments list 165 179 psMetadataAddStr(config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "Name of the output image", argv[1]); 166 180 … … 173 187 { 174 188 char *p = string; 189 175 190 if ((*p == '+') || (*p == '-')) { 176 191 p++; … … 179 194 } 180 195 181 static bool get2Ints(int argnum, int *pArgc, char **argv, int *p1, int *p2)196 static bool get2Ints(int argnum, int *pArgc, char **argv, bool makePositive, int *p1, int *p2) 182 197 { 183 198 if (*pArgc < 2) { … … 188 203 return false; 189 204 } 190 191 205 *p1 = atoi(argv[argnum]); 192 psArgumentRemove(argnum, pArgc, argv); 193 194 if (!validNumber(argv[argnum])) { 206 207 if (!validNumber(argv[argnum+1])) { 195 208 return false; 196 209 } 197 198 *p2 = atoi(argv[argnum]); 199 psArgumentRemove(argnum, pArgc, argv); 210 *p2 = atoi(argv[argnum+1]); 211 212 if (makePositive) { 213 *p1 = abs(*p1); 214 *p2 = abs(*p2); 215 } 200 216 201 217 return true; 202 218 } 203 219 204 static bool get2Angles(int argnum, int *pArgc, char **argv, bool bothInDegrees, double *p1, double *p2) 220 static bool get2Angles(int argnum, int *pArgc, char **argv, bool bothInDegrees, bool makePositive, 221 double *p1, double *p2) 205 222 { 206 223 bool rval; … … 221 238 } 222 239 223 psArgumentRemove(argnum, pArgc, argv); 224 psArgumentRemove(argnum, pArgc, argv); 240 if (rval && makePositive) { 241 *p1 = abs(*p1); 242 *p2 = abs(*p2); 243 } 225 244 226 245 return rval;
Note:
See TracChangeset
for help on using the changeset viewer.
