IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 5939


Ignore:
Timestamp:
Jan 6, 2006, 6:13:41 PM (20 years ago)
Author:
Paul Price
Message:

Adding pmFPACopyConcepts and pmFPABlankConcepts

Location:
branches/eam_rel9_p0/psModules/src/astrom
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_rel9_p0/psModules/src/astrom/pmFPAConceptsGet.c

    r5861 r5939  
    11#include <stdio.h>
    22#include <strings.h>
     3#include <assert.h>
    34#include "pslib.h"
    45
     
    10591060    return item;                        // item is either NULL or is what we want.
    10601061}
     1062
     1063
     1064// Set up concepts for blank image
     1065bool pmFPABlankConcepts(pmFPA *fpa      // The FPA
     1066                       )
     1067{
     1068    assert(fpa);
     1069
     1070    // FPA-level concepts
     1071    if (! fpa->concepts) {
     1072        fpa->concepts = psMetadataAlloc();
     1073    }
     1074    psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "FPA.NAME", PS_META_REPLACE, "Name of FPA", "");
     1075    psMetadataAddF32(fpa->concepts, PS_LIST_TAIL, "FPA.AIRMASS", PS_META_REPLACE,
     1076                     "Airmass at boresight", NAN);
     1077    psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "FPA.FILTER", PS_META_REPLACE, "Filter used", "");
     1078    psMetadataAddF32(fpa->concepts, PS_LIST_TAIL, "FPA.POSANGLE", PS_META_REPLACE,
     1079                     "Position angle for instrument", NAN);
     1080    psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "FPA.RADECSYS", PS_META_REPLACE,
     1081                     "Celestial coordinate system", "");
     1082    psMetadataAddF64(fpa->concepts, PS_LIST_TAIL, "FPA.RA", PS_META_REPLACE,
     1083                     "Right Ascension of the boresight (radians)", NAN);
     1084    psMetadataAddF64(fpa->concepts, PS_LIST_TAIL, "FPA.DEC", PS_META_REPLACE,
     1085                     "Declination of the boresight (radians)", NAN);
     1086
     1087    // Iterate through the chips
     1088    psArray *chips = fpa->chips;        // Array of chips
     1089    for (int i = 0; i < chips->n; i++) {
     1090        pmChip *chip = chips->data[i];  // The chip of interest
     1091        if (! chip) {
     1092            continue;
     1093        }
     1094
     1095        // Chip-level concepts
     1096        if (! chip->concepts) {
     1097            chip->concepts = psMetadataAlloc();
     1098        }
     1099        // CHIP.NAME *should* have been added by pmFPAConstruct --- make sure
     1100        psMetadataItem *chipNameItem = psMetadataLookup(chip->concepts, "CHIP.NAME");
     1101        if (! chipNameItem) {
     1102            psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "CHIP.NAME", PS_META_REPLACE, "Name of Chip", "");
     1103        }
     1104
     1105        // Iterate through the cells
     1106        psArray *cells = chip->cells;   // Array of cells
     1107        for (int j = 0; j < cells->n; j++) {
     1108            pmCell *cell = cells->data[i]; // The cell of interest
     1109            if (! cell) {
     1110                continue;
     1111            }
     1112
     1113            // Cell-level concepts
     1114            if (! cell->concepts) {
     1115                cell->concepts = psMetadataAlloc();
     1116            }
     1117            // CELL.NAME *should* have been added by pmFPAConstruct --- make sure
     1118            psMetadataItem *cellNameItem = psMetadataLookup(cell->concepts, "CELL.NAME");
     1119            if (!cellNameItem) {
     1120                psMetadataAddStr(fpa->concepts, PS_LIST_TAIL, "CELL.NAME", PS_META_REPLACE,
     1121                                 "Name of Cell", "");
     1122            }
     1123            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.GAIN", PS_META_REPLACE, "CCD gain (e/count)", NAN);
     1124            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.READNOISE", PS_META_REPLACE, "CCD read noise (e)", NAN);
     1125            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.SATURATION", PS_META_REPLACE, "Saturation level (ADU)", NAN);
     1126            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.BAD", PS_META_REPLACE, "Bad level (ADU)", NAN);
     1127            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.XPARITY", PS_META_REPLACE, "Orientation in x compared to the rest of the FPA", NAN);
     1128            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.YPARITY", PS_META_REPLACE, "Orientation in x compared to the rest of the FPA", NAN);
     1129            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.READDIR", PS_META_REPLACE, "Read direction: 1=row, 2=col", NAN);
     1130            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.EXPOSURE", PS_META_REPLACE, "Exposure time (sec)", NAN);
     1131            psMetadataAddF32(cell->concepts, PS_LIST_TAIL, "CELL.DARKTIME", PS_META_REPLACE, "Time since CCD flush (sec)", NAN);
     1132            psMetadataAddS32(cell->concepts, PS_LIST_TAIL, "CELL.XBIN", PS_META_REPLACE, "Binning in x", 0);
     1133            psMetadataAddS32(cell->concepts, PS_LIST_TAIL, "CELL.YBIN", PS_META_REPLACE, "Binning in y", 0);
     1134            psMetadataAddS32(cell->concepts, PS_LIST_TAIL, "CELL.X0", PS_META_REPLACE, "Position of (0,0) on the chip", 0);
     1135            psMetadataAddS32(cell->concepts, PS_LIST_TAIL, "CELL.Y0", PS_META_REPLACE, "Position of (0,0) on the chip", 0);
     1136
     1137            psRegion *trimsec = psAlloc(sizeof(psRegion)); // Dummy region
     1138            trimsec->x0 = NAN;
     1139            trimsec->x1 = NAN;
     1140            trimsec->y0 = NAN;
     1141            trimsec->y1 = NAN;
     1142            psMetadataAddPtr(cell->concepts, PS_LIST_TAIL, "CELL.TRIMSEC", PS_META_REPLACE, "Trim section", trimsec);
     1143            psList *biassecs = psListAlloc(NULL); // Dummy list
     1144            psMetadataAddPtr(cell->concepts, PS_LIST_TAIL, "CELL.BIASSEC", PS_META_REPLACE, "Bias section", biassecs);
     1145            psTime *time = psTimeAlloc(PS_TIME_TAI); // Dummy time
     1146            psMetadataAddPtr(cell->concepts, PS_LIST_TAIL, "CELL.TIME", PS_META_REPLACE, "Time of exposure", time);
     1147            psMetadataAddS32(cell->concepts, PS_LIST_TAIL, "CELL.TIMESYS", PS_META_REPLACE, "Time system", PS_TIME_TAI);
     1148        }
     1149    }
     1150
     1151    return true;
     1152}
     1153
     1154// Copy concepts from one FPA to another
     1155bool pmFPACopyConcepts(pmFPA *target,   // The target FPA
     1156                       pmFPA *source    // The target FPA
     1157                      )
     1158{
     1159    // Copy FPA concepts
     1160    target->concepts = pap_psMetadataCopy(target->concepts, source->concepts);
     1161
     1162    // Copy chip concepts
     1163    psArray *targetChips = target->chips; // Chips in target
     1164    psArray *sourceChips = source->chips; // Chips in source
     1165    if (targetChips->n != sourceChips->n) {
     1166        psError(PS_ERR_IO, true, "Number of chips in target (%d) and source (%d) differ --- unable to copy "
     1167                "concepts.\n", targetChips->n, sourceChips->n);
     1168        return false;
     1169    }
     1170    for (int i = 0; i < targetChips->n; i++) {
     1171        pmChip *targetChip = targetChips->data[i]; // Target chip of interest
     1172        pmChip *sourceChip = sourceChips->data[i]; // Source chip of interest
     1173        if (! targetChip || ! sourceChip) {
     1174            continue;
     1175        }
     1176        targetChip->concepts = pap_psMetadataCopy(targetChip->concepts, sourceChip->concepts);
     1177
     1178        // Copy cell concepts
     1179        psArray *targetCells = targetChip->cells; // Cells in target
     1180        psArray *sourceCells = sourceChip->cells; // Cells in source
     1181        if (targetCells->n != sourceCells->n) {
     1182            psError(PS_ERR_IO, true, "Number of cells in target (%d) and source (%d) differ for chip %d ---"
     1183                    " unable to copy concepts.\n", targetCells->n, sourceCells->n, i);
     1184            return false;
     1185        }
     1186        for (int j = 0; j < targetCells->n; j++) {
     1187            pmCell *targetCell = targetCells->data[j]; // Target chip of interest
     1188            pmCell *sourceCell = sourceCells->data[j]; // Source chip of interest
     1189            if (! targetCell || ! sourceCell) {
     1190                continue;
     1191            }
     1192            targetCell->concepts = pap_psMetadataCopy(targetCell->concepts, sourceCell->concepts);
     1193        }
     1194    }
     1195
     1196    return true;
     1197}
  • branches/eam_rel9_p0/psModules/src/astrom/pmFPAConceptsGet.h

    r5796 r5939  
    8686                         );
    8787
     88// Set up concepts for blank image
     89bool pmFPABlankConcepts(pmFPA *fpa      // The FPA
     90                       );
     91
     92// Copy concepts from one FPA to another
     93bool pmFPACopyConcepts(pmFPA *target,   // The target FPA
     94                       pmFPA *source    // The target FPA
     95                      );
     96
    8897// Retrieve a concept
    8998psMetadataItem *pmCellGetConcept(pmCell *cell, // The cell
  • branches/eam_rel9_p0/psModules/src/astrom/pmFPAConstruct.c

    r5796 r5939  
    66#include "pmFPAConstruct.h"
    77#include "psAdditionals.h"
     8#include "pmFPAConceptsGet.h"
    89
    910//////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    265266    }
    266267
     268    // Initialise with dummy concepts, until the real ones can be read.
     269    pmFPABlankConcepts(fpa);
     270
    267271    return fpa;
    268272}
Note: See TracChangeset for help on using the changeset viewer.