Changeset 25181 for branches/pap_mops/ppMops/src/ppMopsWrite.c
- Timestamp:
- Aug 24, 2009, 6:00:00 PM (17 years ago)
- File:
-
- 1 edited
-
branches/pap_mops/ppMops/src/ppMopsWrite.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/pap_mops/ppMops/src/ppMopsWrite.c
r25162 r25181 8 8 #include "ppMops.h" 9 9 10 bool ppMopsWrite(const ppMopsDetections *det ections, const ppMopsArguments *args)10 bool ppMopsWrite(const ppMopsDetections *det, const ppMopsArguments *args) 11 11 { 12 psFits *fits = psFitsOpen(args->output, "w"); // FITS file 13 if (!fits) { 14 psError(PS_ERR_IO, false, "Unable to open output file."); 15 return false; 16 } 12 17 18 psMetadata *header = psMetadataAlloc(); // Header to write 19 psString source = ppMopsSource(), version = ppMopsVersion(); 20 psMetadataAddStr(header, PS_LIST_TAIL, "SWSOURCE", 0, "Software source", source); 21 psMetadataAddStr(header, PS_LIST_TAIL, "SWVERSN", 0, "Software version", version); 22 ppMopsVersionHeader(header); 23 psFree(source); 24 psFree(version); 25 26 psMetadataAddStr(header, PS_LIST_TAIL, "EXP_NAME", 0, "Exposure name", args->exp_name); 27 psMetadataAddS64(header, PS_LIST_TAIL, "EXP_ID", 0, "Exposure identifier", args->exp_id); 28 psMetadataAddS64(header, PS_LIST_TAIL, "CHIP_ID", 0, "Chip stage identifier", args->chip_id); 29 psMetadataAddS64(header, PS_LIST_TAIL, "CAM_ID", 0, "Cam stage identifier", args->cam_id); 30 psMetadataAddS64(header, PS_LIST_TAIL, "FAKE_ID", 0, "Fake stage identifier", args->fake_id); 31 psMetadataAddS64(header, PS_LIST_TAIL, "WARP_ID", 0, "Warp stage identifier", args->warp_id); 32 psMetadataAddS64(header, PS_LIST_TAIL, "DIFF_ID", 0, "Diff stage identifier", args->diff_id); 33 psMetadataAddBool(header, PS_LIST_TAIL, "DIFF_POS", 0, "Positive subtraction?", args->positive); 34 35 psMetadataAddF64(header, PS_LIST_TAIL, "MJD-OBS", 0, "MJD of exposure midpoint", det->mjd); 36 psMetadataAddStr(header, PS_LIST_TAIL, "RA", 0, "Right Ascension of boresight", det->raBoresight); 37 psMetadataAddStr(header, PS_LIST_TAIL, "DEC", 0, "Declination of boresight", det->decBoresight); 38 psMetadataAddF64(header, PS_LIST_TAIL, "TEL_ALT", 0, "Telescope altitude", det->alt); 39 psMetadataAddF64(header, PS_LIST_TAIL, "TEL_AZ", 0, "Telescope azimuth", det->az); 40 psMetadataAddF64(header, PS_LIST_TAIL, "EXPTIME", 0, "Exposure time (sec)", det->exptime); 41 psMetadataAddF64(header, PS_LIST_TAIL, "ROTANGLE", 0, "Rotator position angle", det->posangle); 42 psMetadataAddStr(header, PS_LIST_TAIL, "FILTER", 0, "Filter name", det->filter); 43 psMetadataAddF32(header, PS_LIST_TAIL, "AIRMASS", 0, "Airmass of exposure", det->airmass); 44 psMetadataAddStr(header, PS_LIST_TAIL, "OBSCODE", 0, "IAU Observatory code", OBSERVATORY_CODE); 45 psMetadataAddF32(header, PS_LIST_TAIL, "SEEING", 0, "Mean seeing", det->seeing); 46 psMetadataAddF32(header, PS_LIST_TAIL, "MAGZP", 0, "Magnitude zero point", args->zp); 47 psMetadataAddF32(header, PS_LIST_TAIL, "MAGZPERR", 0, "Error in magnitude zero point", args->zpErr); 48 psMetadataAddF32(header, PS_LIST_TAIL, "ASTRORMS", 0, "RMS of astrometric fit", args->rmsAstrom); 49 50 if (det->num == 0) { 51 // Write dummy table 52 psMetadata *row = psMetadataAlloc(); // Output row 53 psMetadataAddF64(row, PS_LIST_TAIL, "RA", 0, "Right ascension (degrees)", NAN); 54 psMetadataAddF64(row, PS_LIST_TAIL, "RA_ERR", 0, "Right ascension error (degrees)", NAN); 55 psMetadataAddF64(row, PS_LIST_TAIL, "DEC", 0, "Declination (degrees)", NAN); 56 psMetadataAddF64(row, PS_LIST_TAIL, "DEC_ERR", 0, "Declination error (degrees)", NAN); 57 psMetadataAddF64(row, PS_LIST_TAIL, "MAG", 0, "Magnitude", NAN); 58 psMetadataAddF64(row, PS_LIST_TAIL, "MAG_ERR", 0, "Magnitude error", NAN); 59 psMetadataAddF64(row, PS_LIST_TAIL, "STARPSF", 0, "EXT_NSIGMA", NAN); 60 psMetadataAddF32(row, PS_LIST_TAIL, "ANGLE", 0, "Position angle of trail (degrees)", NAN); 61 psMetadataAddF32(row, PS_LIST_TAIL, "ANGLE_ERR", 0, "Position angle error (degrees)", NAN); 62 psMetadataAddF32(row, PS_LIST_TAIL, "LENGTH", 0, "Length of trail (arcsec)", NAN); 63 psMetadataAddF32(row, PS_LIST_TAIL, "LENGTH_ERR", 0, "Length error (arcsec)", NAN); 64 psMetadataAddS32(row, PS_LIST_TAIL, "FLAGS", 0, "Detection bit flags", 0); 65 psMetadataAddS64(row, PS_LIST_TAIL, "DIFF_SKYFILE_ID", 0, "Identifier for diff skyfile", 0); 66 if (!psFitsWriteTableEmpty(fits, header, row, OUT_EXTNAME)) { 67 psErrorStackPrint(stderr, "Unable to write empty table."); 68 psFree(header); 69 psFree(row); 70 return false; 71 } 72 psFree(row); 73 } else { 74 psArray *table = psArrayAlloc(det->num); // Table to write 75 for (long i = 0; i < det->num; i++) { 76 psMetadata *row = psMetadataAlloc(); // Output row 77 psMetadataAddF64(row, PS_LIST_TAIL, "RA", 0, "Right ascension (degrees)", det->ra->data.F64[i]); 78 psMetadataAddF64(row, PS_LIST_TAIL, "RA_ERR", 0, "Right ascension error (degrees)", 79 det->raErr->data.F64[i]); 80 psMetadataAddF64(row, PS_LIST_TAIL, "DEC", 0, "Declination (degrees)", det->dec->data.F64[i]); 81 psMetadataAddF64(row, PS_LIST_TAIL, "DEC_ERR", 0, "Declination error (degrees)", 82 det->decErr->data.F64[i]); 83 psMetadataAddF64(row, PS_LIST_TAIL, "MAG", 0, "Magnitude", det->mag->data.F64[i]); 84 psMetadataAddF64(row, PS_LIST_TAIL, "MAG_ERR", 0, "Magnitude error", det->magErr->data.F64[i]); 85 psMetadataAddF64(row, PS_LIST_TAIL, "STARPSF", 0, "EXT_NSIGMA", det->extended->data.F32[i]); 86 psMetadataAddF32(row, PS_LIST_TAIL, "ANGLE", 0, "Position angle of trail (degrees)", 87 det->angle->data.F32[i]); 88 psMetadataAddF32(row, PS_LIST_TAIL, "ANGLE_ERR", 0, "Position angle error (degrees)", 89 det->angleErr->data.F32[i]); 90 psMetadataAddF32(row, PS_LIST_TAIL, "LENGTH", 0, "Length of trail (arcsec)", 91 det->length->data.F32[i]); 92 psMetadataAddF32(row, PS_LIST_TAIL, "LENGTH_ERR", 0, "Length error (arcsec)", 93 det->lengthErr->data.F32[i]); 94 psMetadataAddS32(row, PS_LIST_TAIL, "FLAGS", 0, "Detection bit flags", det->flags->data.S32[i]); 95 psMetadataAddS64(row, PS_LIST_TAIL, "DIFF_SKYFILE_ID", 0, "Identifier for diff skyfile", 96 det->diffSkyfileId->data.S64[i]); 97 table->data[i] = row; 98 } 99 if (!psFitsWriteTable(fits, header, table, OUT_EXTNAME)) { 100 psErrorStackPrint(stderr, "Unable to write table."); 101 psFree(header); 102 psFree(table); 103 return false; 104 } 105 psFree(table); 106 } 107 108 psFree(header); 109 psFitsClose(fits); 13 110 return true; 14 111 }
Note:
See TracChangeset
for help on using the changeset viewer.
