IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 13, 2006, 12:15:55 PM (19 years ago)
Author:
Paul Price
Message:

Adding FRINGE type to pmFPAfile, which reads from/writes to FITS tables at the cell level.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/camera/pmFPAfileFitsIO.c

    r9067 r9950  
    1616#include "pmFPAfile.h"
    1717#include "pmFPAfileFitsIO.h"
     18
     19// given an already-opened fits file, read the table corresponding to the specified view
     20bool pmFPAviewReadFitsTable(const pmFPAview *view, pmFPAfile *file, const char *name)
     21{
     22    PS_ASSERT_PTR_NON_NULL(view, false);
     23    PS_ASSERT_PTR_NON_NULL(file, false);
     24
     25    pmFPA *fpa = file->fpa;             // FPA of interest
     26    psFits *fits = file->fits;          // FITS file
     27
     28    if (view->chip == -1) {
     29        return pmFPAReadTable(fpa, fits, name) > 0;
     30    }
     31
     32    if (view->cell == -1) {
     33        pmChip *chip = pmFPAviewThisChip(view, fpa); // Chip of interest
     34        return pmChipReadTable(chip, fits, name) > 0;
     35    }
     36
     37    pmCell *cell = pmFPAviewThisCell(view, fpa); // Cell of interest
     38    return pmCellReadTable(cell, fits, name) > 0;
     39}
     40
     41// given an already-opened fits file, write the table corresponding to the specified view
     42bool pmFPAviewWriteFitsTable(const pmFPAview *view, pmFPAfile *file, const char *name)
     43{
     44    PS_ASSERT_PTR_NON_NULL(view, false);
     45    PS_ASSERT_PTR_NON_NULL(file, false);
     46
     47    pmFPA *fpa = file->fpa;             // FPA of interest
     48    psFits *fits = file->fits;          // FITS file
     49
     50    if (view->chip == -1) {
     51        return pmFPAWriteTable(fits, fpa, name) > 0;
     52    }
     53
     54    if (view->cell == -1) {
     55        pmChip *chip = pmFPAviewThisChip(view, fpa); // Chip of interest
     56        return pmChipWriteTable(fits, chip, name) > 0;
     57    }
     58
     59    pmCell *cell = pmFPAviewThisCell(view, fpa); // Cell of interest
     60    return pmCellWriteTable(fits, cell, name) > 0;
     61}
    1862
    1963// given an already-opened fits file, read the components corresponding
     
    226270}
    227271
     272
     273// Free the table within a cell
     274static void freeTable(pmCell *cell,     // Cell of interest
     275                      const char *name  // Name of table to free
     276                     )
     277{
     278    assert(cell);
     279    assert(name && strlen(name) > 0);
     280
     281    psString headerName = NULL;         // Name of header
     282    psStringAppend(&headerName, "%s.HEADER", name);
     283    if (psMetadataLookup(cell->analysis, headerName)) {
     284        psMetadataRemoveKey(cell->analysis, headerName);
     285    }
     286    psFree(headerName);
     287
     288    if (psMetadataLookup(cell->analysis, name)) {
     289        psMetadataRemoveKey(cell->analysis, name);
     290    }
     291
     292    return;
     293}
     294
     295// given a file, free the components corresponding to the specified view
     296bool pmFPAviewFreeFitsTable (const pmFPAview *view, pmFPAfile *file, const char *name)
     297{
     298    PS_ASSERT_PTR_NON_NULL(view, false);
     299    PS_ASSERT_PTR_NON_NULL(file, false);
     300
     301    pmFPA *fpa = file->fpa;
     302
     303    if (view->chip == -1) {
     304        psArray *chips = fpa->chips;    // Array of chips
     305        for (int i = 0; i < chips->n; i++) {
     306            pmChip *chip = chips->data[i]; // Chip of interest
     307            psArray *cells = chip->cells; // Array of cells
     308            for (int j = 0; j < cells->n; j++) {
     309                pmCell *cell = cells->data[j]; // Cell of interest
     310                freeTable(cell, name);
     311            }
     312        }
     313        return true;
     314    }
     315
     316    if (view->cell == -1) {
     317        pmChip *chip = pmFPAviewThisChip(view, fpa); // Chip of interest
     318        psArray *cells = chip->cells;   // Array of cells
     319        for (int i = 0; i < cells->n; i++) {
     320            pmCell *cell = cells->data[i]; // Cell of interest
     321            freeTable(cell, name);
     322        }
     323        return true;
     324    }
     325
     326    pmCell *cell = pmFPAviewThisCell(view, fpa); // Cell of interest
     327    freeTable(cell, name);
     328    return true;
     329}
     330
Note: See TracChangeset for help on using the changeset viewer.