IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 29, 2006, 10:55:42 AM (20 years ago)
Author:
magnier
Message:

fixed up output logic for files and views

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/rel10_ifa/psModules/src/astrom/pmFPAfile.c

    r6713 r6726  
    11#include <stdio.h>
    22#include "pslib.h"
     3#include "psAdditionals.h"
    34#include "pmHDU.h"
    45#include "pmFPA.h"
     
    1920    psFree (file->names);
    2021
    21     psFitsClose (file->fits);
     22    if (file->fits != NULL) {
     23        psFitsClose (file->fits);
     24    }
    2225
    2326    psFree (file->filerule);
     
    2629    psFree (file->extxtra);
    2730
    28     // these are just views:
    29     // psFree (file->filename);
    30     // psFree (file->extname);
     31    psFree (file->filename);
     32    psFree (file->extname);
     33
     34    // these are just views ??
    3135    // psFree (file->phu);
    3236    // psFree (file->header);
     
    6367}
    6468
    65 // XXX is a file allowed to be both READ and WRITE?
    6669pmFPAfile *pmFPAfileDefine (psMetadata *files, psMetadata *format, pmFPA *fpa, char *name)
    6770{
     
    195198}
    196199
    197 // open file (if not already opened XXX : better tracking of open state?
    198 bool pmFPAfileOpen (pmFPAfile *file, pmFPAview *view)
     200// open file (if not already opened)
     201bool pmFPAfileOpen (pmFPAfile *file, const pmFPAview *view)
    199202{
    200203
     
    220223
    221224    // determine the file name
    222     // XXX file->filename needs to be a copy, and freed in places like this...
    223225    file->filename = pmFPAfileNameFromRule (file->filerule, file, view);
    224226    if (file->filename == NULL)
     
    227229    // indirect filenames
    228230    if (!strcasecmp (file->filename, "@FPAIO")) {
     231        psFree (file->filename);
    229232        extra = pmFPAfileNameFromRule (file->filextra, file, view);
    230233        file->filename = psMetadataLookupStr (&status, file->names, extra);
     234        psFree (extra);
    231235        if (file->filename == NULL)
    232236            return false;
     237        // psMetadataLookupStr just returns a view, file->filename must be protected
     238        psMemIncrRefCounter (file->filename);
    233239    }
    234240    if (!strcasecmp (file->filename, "@DETDB")) {
     241        psFree (file->filename);
    235242        extra = pmFPAfileNameFromRule (file->filextra, file, view);
    236243        // file->filename = pmDetrendSelect (extra);
     244        psFree (extra);
    237245        if (file->filename == NULL)
    238246            return false;
     247        psMemIncrRefCounter (file->filename);
    239248    }
    240249
     
    263272}
    264273
    265 bool pmFPAfileRead (pmFPAfile *file, pmFPAview *view)
     274bool pmFPAfileRead (pmFPAfile *file, const pmFPAview *view)
    266275{
    267276    if (file->mode != PM_FPA_MODE_READ)
     
    305314}
    306315
    307 bool pmFPAfileWrite (pmFPAfile *file, pmFPAview *view)
     316bool pmFPAfileWrite (pmFPAfile *file, const pmFPAview *view)
    308317{
    309318    if (file->mode != PM_FPA_MODE_WRITE)
     
    324333    switch (file->type) {
    325334    case PM_FPA_FILE_IMAGE:
    326         psLogMsg (__func__, 3, "write image disabled\n");
    327         // XXX disabled for now
    328         // XXX pmFPAviewWriteFitsImage (view, file->fits);
     335        pmFPAviewWriteFitsImage (view, file);
     336        psTrace ("pmFPAfile", 5, "wrote image %s (fpa: %p)\n", file->filename, file->fpa);
    329337        break;
    330338
     
    335343    case PM_FPA_FILE_CMF:
    336344        pmFPAviewWriteObjects (view, file);
    337         psTrace ("pmFPAfile", 5, "wrote %s (type: %d)\n", file->filename, file->type);
     345        psTrace ("pmFPAfile", 5, "wrote object %s (fpa: %p)\n", file->filename, file->fpa);
    338346        break;
    339347
     
    345353}
    346354
    347 bool pmFPAfileClose (pmFPAfile *file, pmFPAview *view)
     355bool pmFPAfileClose (pmFPAfile *file, const pmFPAview *view)
    348356{
    349357    if (file->state == PM_FPA_STATE_CLOSED) {
     
    385393
    386394// attempt open, read, write, or close pmFPAfiles in files
    387 bool pmFPAfileIOChecks (psMetadata *files, pmFPAview *view, pmFPAfilePlace place)
     395bool pmFPAfileIOChecks (psMetadata *files, const pmFPAview *view, pmFPAfilePlace place)
    388396{
    389397    // recipe override values (command-line options):
     
    405413
    406414// select the rule from the camera configuration, perform substitutions as needed
    407 char *pmFPAfileNameFromRule (char *rule, pmFPAfile *file, pmFPAview *view)
     415char *pmFPAfileNameFromRule (char *rule, pmFPAfile *file, const pmFPAview *view)
    408416{
    409417
     
    445453}
    446454
    447 psImage *pmFPAfileReadoutImage (psMetadata *files, pmFPAview *view, char *name, int Nx, int Ny, int type)
     455psImage *pmFPAfileReadoutImage (psMetadata *files, const pmFPAview *view, char *name, int Nx, int Ny, int type)
    448456{
    449457    bool status;
     
    476484// given an already-opened fits file, read the components corresponding
    477485// to the specified view
    478 bool pmFPAviewReadFitsImage (pmFPAview *view, pmFPAfile *file)
     486bool pmFPAviewReadFitsImage (const pmFPAview *view, pmFPAfile *file)
    479487{
    480488    bool status;
     
    506514        return status;
    507515    }
     516    return false;
    508517
    509518    // XXX pmReadoutRead, pmReadoutReadSegement disabled for now
    510     return false;
    511 
    512519    # if (0)
    513520
     
    526533}
    527534
    528 // XXX image writes disabled for now
    529 # if (0)
    530     // given an already-opened fits file, write the components corresponding
    531     // to the specified view
    532     bool pmFPAviewWriteFitsImage (pmFPAview *view, pmFPAfile *file)
     535// given an already-opened fits file, write the components corresponding
     536// to the specified view
     537bool pmFPAviewWriteFitsImage (const pmFPAview *view, pmFPAfile *file)
    533538{
    534539
     
    536541    psFits *fits = file->fits;
    537542
     543    // pmFPAWrite takes care of all PHUs as needed
    538544    if (view->chip == -1) {
    539         pmFPAWrite (fpa, fits, NULL, NULL);
     545        pmFPAWrite (fpa, fits, NULL);
    540546        return true;
    541547    }
     
    546552    pmChip *chip = fpa->chips->data[view->chip];
    547553
     554    // do we need to write out a PHU for this entry?
     555    if (file->phu == NULL) {
     556        pmHDU *hdu = pmFPAviewThisHDU (view, file->fpa);
     557        pmHDU *phu = pmFPAviewThisPHU (view, file->fpa);
     558        // if this hdu is the phu, the write function below will create the phu
     559        if (hdu != phu) {
     560            // we assume that the PHU is just a header
     561            psMetadata *outhead = psMetadataCopy (NULL, phu->header);
     562            psMetadataAdd (outhead, PS_LIST_TAIL, "EXTEND", PS_DATA_BOOL | PS_META_REPLACE, "this file has extensions", true);
     563            psFitsWriteHeaderNotImage (file->fits, outhead);
     564            file->phu = phu->header;
     565            psTrace ("pmFPAfile", 5, "wrote phu %s (type: %d)\n", file->filename, file->type);
     566            psFree (outhead);
     567        }
     568    }
     569
    548570    if (view->cell == -1) {
    549         pmChipWrite (chip, fits, NULL, NULL);
     571        pmChipWrite (chip, fits, NULL);
    550572        return true;
    551573    }
     
    557579
    558580    if (view->readout == -1) {
    559         pmCellWrite (cell, fits, NULL, NULL);
     581        pmCellWrite (cell, fits, NULL);
    560582        return true;
    561583    }
    562 
    563     if (view->readout >= cell->readouts->n) {
    564         return false;
    565     }
     584    return false;
     585
     586    // XXX disable readout write for now
     587    # if (0)
     588
     589        if (view->readout >= cell->readouts->n) {
     590            return false;
     591        }
    566592    pmReadout *readout = cell->readouts->data[view->readout];
    567593
     
    572598    }
    573599    return true;
    574 }
    575 # endif
     600    # endif
     601}
Note: See TracChangeset for help on using the changeset viewer.