IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 27, 2006, 4:14:56 PM (20 years ago)
Author:
magnier
Message:

substantial work on the pmFPAfile I/O concepts

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/rel10_ifa/psModules/src/objects/pmFPAviewWriteObjects.c

    r6573 r6712  
    33 *  @author EAM, IfA; GLG, MHPCC
    44 *
    5  *  @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $
    6  *  @date $Date: 2006-03-14 02:21:07 $
     5 *  @version $Revision: 1.1.2.4 $ $Name: not supported by cvs2svn $
     6 *  @date $Date: 2006-03-28 02:14:56 $
    77 *
    88 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2727#include "pmFPAviewObjectsIO.h"
    2828
     29bool psFitsWriteHeaderNotImage (psFits *fits, psMetadata *header)
     30{
     31
     32    int status = 0;
     33    char fitsErr[1024];
     34
     35    psMetadataItem *mdi = NULL;
     36    mdi = psMetadataLookup (header, "NAXIS");
     37    if (mdi != NULL) {
     38        mdi->data.S32 = 0;
     39        mdi->type = PS_DATA_S32;
     40    }
     41
     42    fits_create_img (fits->fd, SHORT_IMG, 0, NULL, &status);
     43
     44    if (status != 0) {
     45        fits_get_errstatus (status, fitsErr);
     46        psError (PS_ERR_IO, true, PS_ERRORTEXT_psFits_WRITE_FAILED, fitsErr);
     47        exit (2);
     48    }
     49
     50    psFitsWriteHeader (header, fits);
     51
     52    return true;
     53}
     54
    2955// Given a FITS file pointer, read the table of object data
    3056bool pmFPAviewWriteObjects (pmFPAview *view, pmFPAfile *file)
    3157{
    3258
    33     pmFPA *fpa = view->fpa;
     59    pmFPA *fpa = file->fpa;
    3460
    3561    if (view->chip == -1) {
     
    112138    char *headname;
    113139    pmHDU *hdu;
     140    pmHDU *phu;
    114141
    115142    psArray *sources = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.SOURCES");
     143    return true;
    116144
    117145    switch (file->type) {
     146    case PM_FPA_FILE_RAW:
     147        filename = pmFPAfileNameFromRule (file->filerule, file, view);
     148        pmSourcesWriteRAW (sources, filename);
     149        psFree (filename);
     150        break;
     151
    118152    case PM_FPA_FILE_OBJ:
    119         filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
     153        filename = pmFPAfileNameFromRule (file->filerule, file, view);
    120154        pmSourcesWriteOBJ (sources, filename);
     155        psFree (filename);
    121156        break;
    122157
    123158    case PM_FPA_FILE_SX:
    124         filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
     159        filename = pmFPAfileNameFromRule (file->filerule, file, view);
    125160        pmSourcesWriteSX (sources, filename);
     161        psFree (filename);
    126162        break;
    127163
     
    129165        // a SPLIT format : only one header and object table per file
    130166        hdu = pmFPAviewThisHDU (view, file->fpa);
    131         filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
     167        filename = pmFPAfileNameFromRule (file->filerule, file, view);
    132168        pmSourcesWriteCMP (sources, filename, hdu->header);
     169        psFree (filename);
    133170        break;
    134171
    135172    case PM_FPA_FILE_CMF:
    136         // write header, if not yet written?
     173        // write a PHU?
     174        // write a header?
     175        // write the data
     176
     177        // get the current header
    137178        hdu = pmFPAviewThisHDU (view, file->fpa);
    138179
    139         // XXX is this needed? is it automatically added?
    140         // psMetadataAdd (header, PS_LIST_TAIL, "EXTEND", PS_DATA_BOOL | PS_META_REPLACE, "this file has extensions", true);
    141 
    142         // I need a test to see if the Cell header has been written out
    143         if (hdu->header) {
    144             psMetadataItem *mdi = NULL;
    145             headname = pmFPAviewNameFromRule (file->extxtra, view, file->fpa);
    146 
    147             // set NAXIS to 0 (we don't write out the data array)
    148             // XXX part of the header cleanup?
    149             mdi = psMetadataLookup (hdu->header, "NAXIS");
    150             mdi->data.S32 = 0;
    151             mdi->type = PS_DATA_S32;
    152 
    153             if (strcasecmp (headname, "PHU")) {
    154                 psMetadataAdd (hdu->header, PS_LIST_HEAD, "EXTNAME", PS_DATA_STRING, "extension name", headname);
    155             }
    156             psFitsWriteHeader (hdu->header, file->fits);
     180        // if file does not yet have a PHU, write it to disk
     181        if (file->phu == NULL) {
     182            // get the corresponding phu
     183            phu = pmFPAviewThisPHU (view, file->fpa);
     184
     185            // CMF always has extensions
     186            psMetadataAdd (phu->header, PS_LIST_TAIL, "EXTEND", PS_DATA_BOOL | PS_META_REPLACE, "this file has extensions", true);
     187            psFitsWriteHeaderNotImage (file->fits, phu->header);
     188            file->phu = phu->header;
     189            psTrace ("pmFPAfile", 5, "wrote phu %s (type: %d)\n", file->filename, file->type);
     190
     191            file->phu = phu->header;
    157192        }
    158         dataname = pmFPAviewNameFromRule (file->extrule, view, file->fpa);
     193
     194        // this this header block is new, write it to disk,
     195        if (hdu->header != file->header) {
     196            // determine name for header extension
     197            headname = pmFPAfileNameFromRule (file->extxtra, file, view);
     198            psMetadataAddStr (hdu->header, PS_LIST_TAIL, "EXTNAME", PS_META_REPLACE, "extension name", headname);
     199            psFitsWriteHeaderNotImage (file->fits, hdu->header);
     200            psTrace ("pmFPAfile", 5, "wrote ext head %s (type: %d)\n", file->filename, file->type);
     201            file->header = hdu->header;
     202            psFree (headname);
     203        }
     204
     205        // write this table to disk
     206        dataname = pmFPAfileNameFromRule (file->extrule, file, view);
    159207        pmSourcesWriteCMF (file->fits, sources, hdu->header, dataname);
     208        psFree (dataname);
    160209        break;
    161210
Note: See TracChangeset for help on using the changeset viewer.