IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 28243


Ignore:
Timestamp:
Jun 7, 2010, 9:45:30 AM (16 years ago)
Author:
Paul Price
Message:

Split output tables into .hdr and .psf parts (like SMF), and add detection efficiencies. Looks like it's working well now. Sent example to Larry for approval.

Location:
trunk/ppTranslate/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppTranslate/src/ppMops.h

    r28212 r28243  
    2828
    2929typedef struct {
    30     psMetadata *header;                 // FITS header
     30    psString component;                 // Component name
     31    psMetadata *header;                 // FITS header (extension names *.hdr)
    3132    psString raBoresight, decBoresight; // RA,Dec of telescope boresight
    3233    psString filter;                    // Filter for exposure
     
    3940    int naxis1, naxis2;                 // Size of image
    4041    long num;                           // Number of detections
     42    psMetadata *psfHeader;              // FITS header (extension names *.psf)
    4143    psMetadata *table;                  // Columns of data
    4244    psVector *x, *y;                    // Image coordinates
    4345    psVector *ra, *dec;                 // Sky coordinates
     46    psMetadata *deteffHeader;           // Detection efficiency header (extension names *.deteff)
     47    psMetadata *deteffTable;            // Detection efficiency table
    4448} ppMopsDetections;
    4549
  • trunk/ppTranslate/src/ppMopsDetections.c

    r28212 r28243  
    1010static void mopsDetectionsFree(ppMopsDetections *det)
    1111{
     12    psFree(det->component);
    1213    psFree(det->raBoresight);
    1314    psFree(det->decBoresight);
     
    1920    psFree(det->ra);
    2021    psFree(det->dec);
     22    psFree(det->deteffHeader);
     23    psFree(det->deteffTable);
    2124
    2225    return;
     
    2831    psMemSetDeallocator(det, (psFreeFunc)mopsDetectionsFree);
    2932
     33    det->component = NULL;
    3034    det->raBoresight = NULL;
    3135    det->decBoresight = NULL;
     
    4549    det->ra = NULL;
    4650    det->dec = NULL;
     51    det->deteffHeader = NULL;
     52    det->deteffTable = NULL;
    4753
    4854    return det;
  • trunk/ppTranslate/src/ppMopsRead.c

    r28218 r28243  
    44
    55#include <stdio.h>
     6#include <string.h>
    67#include <pslib.h>
    78
     
    1617    psArray *detections = psArrayAlloc(num); // Array of detections, to return
    1718    for (int i = 0; i < num; i++) {
    18         psFits *fits = psFitsOpen(inNames->data[i], "r"); // FITS file
     19        const char *name = inNames->data[i]; // File name
     20        psFits *fits = psFitsOpen(name, "r"); // FITS file
    1921        if (!fits) {
    2022            psError(PS_ERR_IO, false, "Unable to open input %d", i);
     
    4143            continue;
    4244        }
    43         ppMopsDetections *det = ppMopsDetectionsAlloc();
     45        ppMopsDetections *det = detections->data[i] = ppMopsDetectionsAlloc();
     46        det->component = psStringNCopy(name, strrchr(name, '.') - name); // Strip off extension
    4447        det->header = header;
    4548        det->num = size;
     
    6164        det->naxis2 = psMetadataLookupS32(NULL, header, "IMNAXIS2");
    6265
     66        det->psfHeader = psFitsReadHeader(NULL, fits);
     67        if (!det->psfHeader) {
     68            psError(psErrorCodeLast(), false, "Unable to read header %d", i);
     69            return false;
     70        }
    6371        psMetadata *table = det->table = psFitsReadTableAllColumns(fits); // Table of interest
    6472        if (!table) {
     
    6674            return false;
    6775        }
    68         psFitsClose(fits);
    6976
    7077        psVector *ra = psMetadataLookupVector(NULL, table, "RA_PSF");
     
    8087        }
    8188
    82         psTrace("ppMops.read", 2, "Read %ld rows from %s\n", det->num, (const char*)inNames->data[i]);
     89        psTrace("ppMops.read", 2, "Read %ld rows from %s\n", det->num, det->component);
    8390
    84         detections->data[i] = det;
     91        if (!psFitsMoveExtName(fits, "SkyChip.deteff")) {
     92            psWarning("No detection efficiencies included in %s", det->component);
     93            psErrorStackPrint(stderr, "No detection efficiencies included in %s", det->component);
     94            psErrorClear();
     95            continue;
     96        }
     97
     98        det->deteffHeader = psFitsReadHeader(NULL, fits);
     99        if (!det->deteffHeader) {
     100            psWarning("Unable to read detection efficiency header in %s", det->component);
     101            psErrorClear();
     102            continue;
     103        }
     104        det->deteffTable = psFitsReadTableAllColumns(fits);
     105        if (!det->deteffTable) {
     106            psFree(det->deteffHeader);
     107            det->deteffHeader = NULL;
     108            psWarning("Unable to read detection efficiency table in %s", det->component);
     109            psErrorClear();
     110            continue;
     111        }
     112        psTrace("ppMops.read", 2, "Read detection efficiency from %s\n", det->component);
     113        psFitsClose(fits);
    85114    }
    86115
  • trunk/ppTranslate/src/ppMopsWrite.c

    r28212 r28243  
    4646        ppMopsDetections *det = detections->data[i]; // Detections for extension
    4747        psTrace("ppMops.write", 1, "Writing extension %d to %s", i, args->output);
    48         if (!psFitsWriteTableAllColumns(fits, det->header, det->table, NULL)) {
    49             psError(psErrorCodeLast(), false, "Unable to write extension %d", i);
     48        psString hdrName = NULL, psfName = NULL, deteffName = NULL;
     49        psStringAppend(&hdrName, "%s.hdr", det->component);
     50        psStringAppend(&psfName, "%s.psf", det->component);
     51        psStringAppend(&deteffName, "%s.deteff", det->component);
     52
     53        if (!psFitsWriteBlank(fits, det->header, hdrName)) {
     54            psError(psErrorCodeLast(), false, "Unable to write header %d", i);
    5055            return false;
    5156        }
     57        if (!psFitsWriteTableAllColumns(fits, det->psfHeader, det->table, psfName)) {
     58            psError(psErrorCodeLast(), false, "Unable to write table %d", i);
     59            return false;
     60        }
     61        if (det->deteffHeader && det->deteffTable &&
     62            !psFitsWriteTableAllColumns(fits, det->deteffHeader, det->deteffTable, deteffName)) {
     63            psError(psErrorCodeLast(), false, "Unable to write detection efficiency %d", i);
     64            return false;
     65        }
     66        psFree(hdrName);
     67        psFree(psfName);
     68        psFree(deteffName);
    5269    }
    5370    psFitsClose(fits);
Note: See TracChangeset for help on using the changeset viewer.