IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 13, 2006, 4:21:07 PM (20 years ago)
Author:
magnier
Message:

updates to pmFPAview, pmFPAfile

File:
1 edited

Legend:

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

    r6568 r6573  
    33#include "pmHDU.h"
    44#include "pmFPA.h"
     5#include "pmFPAConstruct.h"
    56#include "pmFPAview.h"
    67#include "pmFPAfile.h"
     8#include "pmFPARead.h"
     9#include "pmFPAWrite.h"
    710#include "pmFPAviewObjectsIO.h"
    811
     
    4043
    4144// XXX is a file allowed to be both READ and WRITE?
    42 pmFPAfile *pmFPAfileDefine (pmFPAview *view, psMetadata *camera, char *name)
     45pmFPAfile *pmFPAfileDefine (psMetadata *files, psMetadata *camera, pmFPA *fpa, char *name)
    4346{
    4447
     
    4952    psMetadata *data = psMetadataLookupPtr (&status, camera, name);
    5053    if (data == NULL) {
    51         return false;
     54        return NULL;
    5255    }
    5356
     
    114117    }
    115118
     119    if (fpa == NULL) {
     120        fpa = pmFPAConstruct (camera);
     121    }
     122    file->fpa = fpa;
     123
     124    psMetadataAddPtr (files, PS_LIST_TAIL, name, PS_META_REPLACE, "", file);
    116125    return (file);
    117126}
    118127
    119 bool pmFPAfileOpen (pmFPAfile *file, pmFPAview *view, psMetadata *camera)
     128bool pmFPAfileOpen (pmFPAfile *file, pmFPAview *view)
    120129{
    121130
     
    130139
    131140    // determine the file name
    132     file->filename = pmFPAviewNameFromRule (file->filerule, view);
     141    file->filename = pmFPAviewNameFromRule (file->filerule, view, file->fpa);
    133142
    134143    // indirect filenames
    135144    if (!strcasecmp (file->filename, "@FPAIO")) {
    136         extra = pmFPAviewNameFromRule (file->filextra, view);
    137         file->filename = psMetadataLookupStr (&status, view->IO, extra);
     145        extra = pmFPAviewNameFromRule (file->filextra, view, file->fpa);
     146        file->filename = psMetadataLookupStr (&status, file->names, extra);
    138147    }
    139148    if (!strcasecmp (file->filename, "@DETDB")) {
    140         extra = pmFPAviewNameFromRule (file->filextra, view);
     149        extra = pmFPAviewNameFromRule (file->filextra, view, file->fpa);
    141150        // file->filename = pmDetrendSelect (extra);
    142151    }
     
    165174    switch (file->type) {
    166175    case PM_FPA_FILE_IMAGE:
    167         pmFPAviewReadFitsImage (view, file->fits);
     176        pmFPAviewReadFitsImage (view, file);
    168177        break;
    169178
     
    216225}
    217226
     227bool pmFPAfileClose (pmFPAfile *file, pmFPAview *view)
     228{
     229    // is current depth == open depth?
     230    pmFPAdepth depth = pmFPAviewDepth (view);
     231    if (file->openDepth != depth) {
     232        return false;
     233    }
     234
     235    // check if we are actually open
     236    psFitsClose (file->fits);
     237    return true;
     238}
     239
    218240// attempt open and read for all pmFPAfiles in view->IO
    219 bool pmFPAfileIOCheck (pmFPAview *view, psMetadata *camera)
    220 {
    221 
     241bool pmFPAfileReadChecks (psMetadata *files, pmFPAview *view)
     242{
    222243    // recipe override values (command-line options):
    223244    psMetadataItem *item = NULL;
    224     psMetadataIterator *iter = psMetadataIteratorAlloc (view->IO, PS_LIST_HEAD, NULL);
     245    psMetadataIterator *iter = psMetadataIteratorAlloc (files, PS_LIST_HEAD, NULL);
    225246    while ((item = psMetadataGetAndIncrement (iter)) != NULL) {
    226247        pmFPAfile *file = item->data.V;
    227248
    228         pmFPAfileOpen (file, view, camera);
     249        pmFPAfileOpen (file, view);
    229250        pmFPAfileRead (file, view);
    230251    }
     
    232253    return true;
    233254}
     255
     256// attempt open and read for all pmFPAfiles in view->IO
     257bool pmFPAfileWriteChecks (psMetadata *files, pmFPAview *view)
     258{
     259    // recipe override values (command-line options):
     260    psMetadataItem *item = NULL;
     261    psMetadataIterator *iter = psMetadataIteratorAlloc (files, PS_LIST_HEAD, NULL);
     262    while ((item = psMetadataGetAndIncrement (iter)) != NULL) {
     263        pmFPAfile *file = item->data.V;
     264
     265        pmFPAfileWrite (file, view);
     266        pmFPAfileClose (file, view);
     267    }
     268    psFree (iter);
     269    return true;
     270}
     271
     272psImage *pmFPAfileReadoutImage (psMetadata *files, pmFPAview *view, char *name, int Nx, int Ny, int type)
     273{
     274    bool status;
     275    psImage *image = NULL;
     276
     277    // I want an image from the
     278    pmFPA *fpa = psMetadataLookupPtr (&status, files, name);
     279    if (fpa == NULL) {
     280        // use Nx or Ny == 0 to avoid creating an image
     281        if (Nx*Ny <= 0) {
     282            return NULL;
     283        }
     284        image = psImageAlloc (Nx, Ny, type);
     285        return (image);
     286    }
     287
     288    // inconsistent result: return NULL
     289    pmReadout *readout = pmFPAviewThisReadout (view, fpa);
     290    if (readout == NULL) {
     291        return NULL;
     292    }
     293
     294    // resize the existing readout??? this is wrong...
     295    // need to allocate it if it does not exist...
     296    image = psImageRecycle (readout->image, Nx, Ny, type);
     297    psMemIncrRefCounter (image);
     298    return (image);
     299}
     300
     301# if (0)
     302    // return the named pmFPAfile
     303    pmFPAfile *pmFPAfileSelect (pmFPAview *view, char *name)
     304{
     305
     306    // select the name from the camera config data
     307    pmFPAfile *file = psMetadataLookupPtr (&status, view->IO, name);
     308    if (file == NULL) {
     309        return NULL;
     310    }
     311    return file;
     312}
     313
     314bool pmFPAfileWriteChecks (pmFPAview *view, char *name)
     315{
     316
     317    pmFPAfile *file = pmFPAfileSelect (view, name);
     318    pmFPAfileWrite (file, view);
     319    return true;
     320}
     321#endif
     322
     323// given an already-opened fits file, read the components corresponding
     324// to the specified view
     325bool pmFPAviewReadFitsImage (pmFPAview *view, pmFPAfile *file)
     326{
     327    pmFPA *fpa = file->fpa;
     328    psFits *fits = file->fits;
     329
     330    if (view->chip == -1) {
     331        pmFPARead (fpa, fits, NULL);
     332        return true;
     333    }
     334
     335    if (view->chip >= fpa->chips->n) {
     336        return false;
     337    }
     338    pmChip *chip = fpa->chips->data[view->chip];
     339
     340    if (view->cell == -1) {
     341        pmChipRead (chip, fits, NULL);
     342        return true;
     343    }
     344
     345    if (view->cell >= chip->cells->n) {
     346        return false;
     347    }
     348    pmCell *cell = chip->cells->data[view->cell];
     349
     350    if (view->readout == -1) {
     351        pmCellRead (cell, fits, NULL);
     352        return true;
     353    }
     354
     355    // XXX pmReadoutRead, pmReadoutReadSegement disabled for now
     356    return false;
     357
     358    # if (0)
     359
     360        if (view->readout >= cell->readouts->n) {
     361            return false;
     362        }
     363    pmReadout *readout = cell->readouts->data[view->readout];
     364
     365    if (view->nRows == 0) {
     366        pmReadoutRead (readout, fits, NULL);
     367    } else {
     368        pmReadoutReadSegment (readout, fits, view->nRows, view->iRows, NULL, NULL);
     369    }
     370    return true;
     371    # endif
     372}
     373
     374// XXX image writes disabled for now
     375# if (0)
     376    // given an already-opened fits file, write the components corresponding
     377    // to the specified view
     378    bool pmFPAviewWriteFitsImage (pmFPAview *view, pmFPAfile *file)
     379{
     380
     381    pmFPA *fpa = file->fpa;
     382    psFits *fits = file->fits;
     383
     384    if (view->chip == -1) {
     385        pmFPAWrite (fpa, fits, NULL, NULL);
     386        return true;
     387    }
     388
     389    if (view->chip >= fpa->chips->n) {
     390        return false;
     391    }
     392    pmChip *chip = fpa->chips->data[view->chip];
     393
     394    if (view->cell == -1) {
     395        pmChipWrite (chip, fits, NULL, NULL);
     396        return true;
     397    }
     398
     399    if (view->cell >= chip->cells->n) {
     400        return false;
     401    }
     402    pmCell *cell = chip->cells->data[view->cell];
     403
     404    if (view->readout == -1) {
     405        pmCellWrite (cell, fits, NULL, NULL);
     406        return true;
     407    }
     408
     409    if (view->readout >= cell->readouts->n) {
     410        return false;
     411    }
     412    pmReadout *readout = cell->readouts->data[view->readout];
     413
     414    if (view->nRows == 0) {
     415        pmReadoutWrite (readout, fits, NULL, NULL);
     416    } else {
     417        pmReadoutWriteSegment (readout, fits, view->nRows, view->iRows, NULL, NULL);
     418    }
     419    return true;
     420}
     421# endif
Note: See TracChangeset for help on using the changeset viewer.