- Timestamp:
- Nov 29, 2012, 2:15:01 PM (14 years ago)
- Location:
- branches/eam_branches/ipp-20120905
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
ppTranslate/src/ppMopsRead.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20120905
- Property svn:mergeinfo changed
-
branches/eam_branches/ipp-20120905/ppTranslate/src/ppMopsRead.c
r34566 r34735 1 /* 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19 * 20 * 21 * 22 * 23 * 24 * 25 * 26 * 27 * 28 * 29 * 30 * THIS CODE CONTAINS DIRTY BUG FIXES! 31 * 32 * 33 * 34 * 35 * 36 * 37 * 38 * Look for "DIRTY_BUG_FIX" to know where 39 * 40 * and set the following to 0 to change the code 41 */ 42 #define DIRTY_BUG_FIX 1 43 /* 44 * 45 * 46 * 47 * 48 * 49 * 50 * 51 * 52 * 53 * 54 * 55 * 56 * 57 * 58 * 59 * 60 * 61 * 62 * 63 * 64 * 65 * 66 * 67 * 68 * 69 * 70 * 71 * 72 * 73 * 74 * 75 * 76 * 77 */ 1 #define DIRTY_BUG_FIX 0 78 2 79 3 #ifdef HAVE_CONFIG_H … … 90 14 static void replaceDummyValuesS32(const char* colName, psMetadata* source, psMetadata* target, psVector* indexes); 91 15 static void renameDummyValuesF32(const char* colNameSource, psMetadata* source, const char* colNameTarget, psMetadata* target, psVector* indexes); 92 #if DIRTY_BUG_FIX93 static psVector* createDummyF32_default(long size, float default_value);94 #endif95 16 96 17 /* … … 145 66 if (skyChipPsfVersion != args->version) { 146 67 if (skyChipPsfVersion > args->version) { 147 psWarning("The FITS data will be downgraded from PS1_DV%d to PS1_DV%d\n",148 skyChipPsfVersion, args->version);68 psWarning("The FITS data will be downgraded from PS1_DV%d to PS1_DV%d\n", 69 skyChipPsfVersion, args->version); 149 70 } else { // Necessarily: skyChipPsfVersion > args->version 150 psWarning("The FITS data will be upgraded from PS1_DV%d to PS1_DV%d (new values set to default 0, NaN...)\n",151 skyChipPsfVersion, args->version);71 psWarning("The FITS data will be upgraded from PS1_DV%d to PS1_DV%d (new values set to default 0, NaN...)\n", 72 skyChipPsfVersion, args->version); 152 73 } 153 74 } … … 199 120 addDummyValues(det->table, size, args->version); 200 121 if (!psFitsMoveExtName(fits, "SkyChip.xfit")) { 201 psTrace("ppMops.read", 3, "No fitted trails extension");122 psTrace("ppMops.read", 3, "No fitted trails extension"); 202 123 } else { 203 psTrace("ppMops.read", 3, "Fitted trails extension found\n"); 204 psTrace("ppMops.read", 10, "Getting size?\n"); 205 int fittedTrailsSize = psFitsTableSize(fits); 206 psTrace("ppMops.read", 10, "size = %d\n", fittedTrailsSize); 207 if (fittedTrailsSize <= 0) { 208 psErrorStackPrint(stderr, "Unable to determine size of fitted trails extension table %d", i); 209 psTrace("ppMops.read", 3, "No entry in fitted trails extension!!!!\n"); 210 psErrorClear(); 211 } else { 212 psTrace("ppMops.read", 10, "Reading table of interest?\n"); 213 psMetadata* fittedTrails = psFitsReadTableAllColumns(fits); // Table of interest 214 psTrace("ppMops.read", 10, "OK for table of interest\n"); 215 if (!fittedTrails) { 216 psError(PS_ERR_IO, false, "Unable to read fittedTrails table in file %d", i); 217 return NULL; 218 } 219 //Iterate on the different names and types expected in the fittedTrails parameters 220 psTrace("ppMops.read", 10, "Getting IPP_IDET\n"); 221 psVector* idet = psMetadataLookupVector(NULL, fittedTrails, "IPP_IDET"); 222 replaceDummyValuesF32("X_EXT", fittedTrails, det->table, idet); 223 replaceDummyValuesF32("Y_EXT", fittedTrails, det->table, idet); 224 replaceDummyValuesF32("X_EXT_SIG", fittedTrails, det->table, idet); 225 replaceDummyValuesF32("Y_EXT_SIG", fittedTrails, det->table, idet); 226 replaceDummyValuesF32("EXT_INST_MAG", fittedTrails, det->table, idet); 227 replaceDummyValuesF32("EXT_INST_MAG_SIG", fittedTrails, det->table, idet); 228 replaceDummyValuesS32("NPARAMS", fittedTrails, det->table, idet); 229 replaceDummyValuesF32("EXT_WIDTH_MAJ", fittedTrails, det->table, idet); 230 replaceDummyValuesF32("EXT_WIDTH_MIN", fittedTrails, det->table, idet); 231 replaceDummyValuesF32("EXT_THETA", fittedTrails, det->table, idet); 232 replaceDummyValuesF32("EXT_WIDTH_MAJ_ERR", fittedTrails, det->table, idet); 233 // EXT_WIDTH_MIN_ERR is actually undefined but set to 0. in CMF files 234 // We explicitely let it set to NaN, hence the commented out 235 // following line 236 //replaceDummyValuesF32("EXT_WIDTH_MIN_ERR", fittedTrails, det->table, idet); 237 replaceDummyValuesF32("EXT_THETA_ERR", fittedTrails, det->table, idet); 238 psTrace("ppMops.read", 10, "Got all version 2 values\n"); 239 if (skyChipPsfVersion >= 3) { 240 psTrace("ppMops.read", 10, "Getting PS1_DV3 data\n"); 241 replaceDummyValuesF32("RA_EXT", fittedTrails, det->table, idet); 242 // Note: RA_EXT_SIGMA is computed (see det->raExtErr) 243 replaceDummyValuesF32("DEC_EXT", fittedTrails, det->table, idet); 244 // Note: DEC_EXT_SIGMA is computed (see det->decExtErr) 245 //Note: POSANG_EXT is POSANGLE in xfit 246 #if DIRTY_BUG_FIX 247 #else 248 renameDummyValuesF32("POSANGLE", fittedTrails, "POSANG_EXT", det->table, idet); 249 #endif 250 //Note: PLTSCALE_EXT in xfit is PLTSCALE 251 renameDummyValuesF32("PLTSCALE", fittedTrails, "PLTSCALE_EXT", det->table, idet); 252 renameDummyValuesF32("EXT_INST_FLUX", fittedTrails, "EXT_FLUX", det->table, idet); 253 replaceDummyValuesF32("EXT_CAL_MAG", fittedTrails, det->table, idet); 254 renameDummyValuesF32("EXT_INST_MAG_SIG", fittedTrails, "EXT_MAG_SIG", det->table, idet); 255 replaceDummyValuesF32("EXT_CHISQ", fittedTrails, det->table, idet); 256 replaceDummyValuesS32("EXT_NDOF", fittedTrails, det->table, idet); 257 psTrace("ppMops.read", 10, "Got all version 3 values\n"); 258 } 259 } 124 psTrace("ppMops.read", 3, "Fitted trails extension found\n"); 125 psTrace("ppMops.read", 10, "Getting size?\n"); 126 int fittedTrailsSize = psFitsTableSize(fits); 127 psTrace("ppMops.read", 10, "size = %d\n", fittedTrailsSize); 128 if (fittedTrailsSize <= 0) { 129 psErrorStackPrint(stderr, "Unable to determine size of fitted trails extension table %d", i); 130 psTrace("ppMops.read", 3, "No entry in fitted trails extension!!!!\n"); 131 psErrorClear(); 132 } else { 133 psTrace("ppMops.read", 10, "Reading table of interest?\n"); 134 psMetadata* fittedTrails = psFitsReadTableAllColumns(fits); // Table of interest 135 psTrace("ppMops.read", 10, "OK for table of interest\n"); 136 if (!fittedTrails) { 137 psError(PS_ERR_IO, false, "Unable to read fittedTrails table in file %d", i); 138 return NULL; 139 } 140 //Iterate on the different names and types expected in the fittedTrails parameters 141 psTrace("ppMops.read", 10, "Getting IPP_IDET\n"); 142 psVector* idet = psMetadataLookupVector(NULL, fittedTrails, "IPP_IDET"); 143 replaceDummyValuesF32("X_EXT", fittedTrails, det->table, idet); 144 replaceDummyValuesF32("Y_EXT", fittedTrails, det->table, idet); 145 replaceDummyValuesF32("X_EXT_SIG", fittedTrails, det->table, idet); 146 replaceDummyValuesF32("Y_EXT_SIG", fittedTrails, det->table, idet); 147 replaceDummyValuesF32("EXT_INST_MAG", fittedTrails, det->table, idet); 148 replaceDummyValuesF32("EXT_INST_MAG_SIG", fittedTrails, det->table, idet); 149 replaceDummyValuesS32("NPARAMS", fittedTrails, det->table, idet); 150 replaceDummyValuesF32("EXT_WIDTH_MAJ", fittedTrails, det->table, idet); 151 replaceDummyValuesF32("EXT_WIDTH_MIN", fittedTrails, det->table, idet); 152 replaceDummyValuesF32("EXT_THETA", fittedTrails, det->table, idet); 153 replaceDummyValuesF32("EXT_WIDTH_MAJ_ERR", fittedTrails, det->table, idet); 154 // EXT_WIDTH_MIN_ERR is actually undefined but set to 0. in CMF files 155 // We explicitely let it set to NaN, hence the commented out 156 // following line 157 //replaceDummyValuesF32("EXT_WIDTH_MIN_ERR", fittedTrails, det->table, idet); 158 replaceDummyValuesF32("EXT_THETA_ERR", fittedTrails, det->table, idet); 159 psTrace("ppMops.read", 10, "Got all version 2 values\n"); 160 if (skyChipPsfVersion >= 3) { 161 psTrace("ppMops.read", 10, "Getting PS1_DV3 data\n"); 162 replaceDummyValuesF32("RA_EXT", fittedTrails, det->table, idet); 163 // Note: RA_EXT_SIGMA is computed (see det->raExtErr) 164 replaceDummyValuesF32("DEC_EXT", fittedTrails, det->table, idet); 165 // Note: DEC_EXT_SIGMA is computed (see det->decExtErr) 166 //Note: POSANG_EXT is POSANGLE in xfit 167 renameDummyValuesF32("POSANGLE", fittedTrails, "POSANG_EXT", det->table, idet); 168 //Not written anymore but still used in computation 169 renameDummyValuesF32("PLTSCALE", fittedTrails, "PLTSCALE_EXT", det->table, idet); 170 renameDummyValuesF32("EXT_INST_FLUX", fittedTrails, "EXT_FLUX", det->table, idet); 171 replaceDummyValuesF32("EXT_CAL_MAG", fittedTrails, det->table, idet); 172 renameDummyValuesF32("EXT_INST_MAG_SIG", fittedTrails, "EXT_MAG_SIG", det->table, idet); 173 replaceDummyValuesF32("EXT_CHISQ", fittedTrails, det->table, idet); 174 replaceDummyValuesS32("EXT_NDOF", fittedTrails, det->table, idet); 175 psTrace("ppMops.read", 10, "Got all version 3 values\n"); 176 } 177 } 260 178 } 261 179 } … … 264 182 if (args->version == 0) { 265 183 if (skyChipPsfVersion < 2) { 266 // XXX: TODO: Do we need to add dummy vectors for the missing columns?184 // XXX: TODO: Do we need to add dummy vectors for the missing columns? 267 185 } 268 186 } … … 324 242 psU32 flags = flagsV->data.U32[row]; // psFitsTableGetU32(NULL, table, row, "FLAGS"); 325 243 if (flags & SOURCE_MASK) { 326 psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of flags: %ud", row, i, flags);327 det->mask->data.U8[row] = 0xFF;328 continue;244 psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of flags: %ud", row, i, flags); 245 det->mask->data.U8[row] = 0xFF; 246 continue; 329 247 } 330 248 … … 333 251 double yErr = yErrV->data.F32[row]; 334 252 double scale = scaleV->data.F32[row]; 335 #if DIRTY_BUG_FIX336 double angle = 0. * angleV->data.F32[row];337 #else338 253 double angle = angleV->data.F32[row]; 339 #endif340 341 254 if (!isfinite(det->x->data.F32[row]) || !isfinite(det->y->data.F32[row]) || 342 !isfinite(det->ra->data.F64[row]) || !isfinite(det->dec->data.F64[row]) ||343 !isfinite(mag->data.F32[row]) || !isfinite(magErr->data.F32[row]) ||344 !isfinite(xErr) || !isfinite(yErr) || !isfinite(scale) || !isfinite(angle)) {345 psTrace("ppMops.read", 10,346 "Discarding row %ld from input %d because of non-finite values: "347 "%f %f %lf %lf %f %f %f %f %f %f",348 row, i,349 det->x->data.F32[row], det->y->data.F32[row],350 det->ra->data.F64[row], det->dec->data.F64[row],351 mag->data.F32[row], magErr->data.F32[row],352 xErr, yErr, scale, angle);353 det->mask->data.U8[row] = 0xFF;354 continue;255 !isfinite(det->ra->data.F64[row]) || !isfinite(det->dec->data.F64[row]) || 256 !isfinite(mag->data.F32[row]) || !isfinite(magErr->data.F32[row]) || 257 !isfinite(xErr) || !isfinite(yErr) || !isfinite(scale) || !isfinite(angle)) { 258 psTrace("ppMops.read", 10, 259 "Discarding row %ld from input %d because of non-finite values: " 260 "%f %f %lf %lf %f %f %f %f %f %f", 261 row, i, 262 det->x->data.F32[row], det->y->data.F32[row], 263 det->ra->data.F64[row], det->dec->data.F64[row], 264 mag->data.F32[row], magErr->data.F32[row], 265 xErr, yErr, scale, angle); 266 det->mask->data.U8[row] = 0xFF; 267 continue; 355 268 } 356 269 … … 364 277 det->mask->data.U8[row] = 0; 365 278 plateScale += scale; 279 //Update the platescale value (should be a constant) 280 if (isfinite(scale)) { 281 det->platescale = scale; 282 } 366 283 numGood++; 367 284 368 285 // Same for EXT data if version permits 369 286 if (skyChipPsfVersion >= 3) { 370 xErr = xExtErrV->data.F32[row]; 371 yErr = yExtErrV->data.F32[row]; 372 scale = scaleExtV->data.F32[row]/3600.; 373 #if DIRTY_BUG_FIX 374 angle = 0.; 375 #else 376 angle = angleExtV->data.F32[row]; 377 #endif 378 cosAngle = cos(angle); 379 sinAngle = sin(angle); 380 cosAngle2 = PS_SQR(cosAngle); 381 sinAngle2 = PS_SQR(sinAngle); 382 xErr2 = PS_SQR(xErr); 383 yErr2 = PS_SQR(yErr); 384 errScale = scale / 3600.0; 385 det->raExtErr->data.F64[row] = errScale * sqrt(cosAngle2 * xErr2 + sinAngle2 * yErr2); 386 det->decExtErr->data.F64[row] = errScale * sqrt(sinAngle2 * xErr2 + cosAngle2 * yErr2); 287 xErr = xExtErrV->data.F32[row]; 288 yErr = yExtErrV->data.F32[row]; 289 scale = scaleExtV->data.F32[row]/3600.; 290 angle = angleExtV->data.F32[row]; 291 cosAngle = cos(angle); 292 sinAngle = sin(angle); 293 cosAngle2 = PS_SQR(cosAngle); 294 sinAngle2 = PS_SQR(sinAngle); 295 xErr2 = PS_SQR(xErr); 296 yErr2 = PS_SQR(yErr); 297 errScale = scale / 3600.0; 298 det->raExtErr->data.F64[row] = errScale * sqrt(cosAngle2 * xErr2 + sinAngle2 * yErr2); 299 det->decExtErr->data.F64[row] = errScale * sqrt(sinAngle2 * xErr2 + cosAngle2 * yErr2); 387 300 } 388 301 } … … 406 319 return dummy; 407 320 } 408 #if DIRTY_BUG_FIX 409 static psVector* createDummyF32_default(long size, float default_value) { 410 psVector* dummy = psVectorAlloc(size, PS_TYPE_F32); 411 psVectorInit(dummy, default_value); 412 return dummy; 413 } 414 #endif 321 415 322 static psVector* createDummyS32(long size) { 416 323 psVector* dummy = psVectorAlloc(size, PS_TYPE_S32); 417 psVectorInit(dummy, NAN);324 psVectorInit(dummy, 0); 418 325 return dummy; 419 326 } … … 439 346 psMetadataAdd(md, PS_LIST_TAIL, "DEC_EXT", PS_DATA_VECTOR, "Fitted centroid DEC", createDummyF32(size)); 440 347 /* psMetadataAdd(md, PS_LIST_TAIL, "DEC_EXT_SIGMA", PS_DATA_VECTOR, "Fitted DEC sigma", createDummyF32(size)); *\/ */ 441 #if DIRTY_BUG_FIX442 psMetadataAdd(md, PS_LIST_TAIL, "POSANG_EXT", PS_DATA_VECTOR, "Fitted position angle", createDummyF32_default(size, 0.));443 #else444 348 psMetadataAdd(md, PS_LIST_TAIL, "POSANG_EXT", PS_DATA_VECTOR, "Fitted position angle", createDummyF32(size)); 445 #endif446 349 psMetadataAdd(md, PS_LIST_TAIL, "PLTSCALE_EXT", PS_DATA_VECTOR, "Plate scale at centroid", createDummyF32(size)); 447 350 psMetadataAdd(md, PS_LIST_TAIL, "EXT_FLUX", PS_DATA_VECTOR, "Fitted flux", createDummyF32(size));
Note:
See TracChangeset
for help on using the changeset viewer.
