Changeset 5939
- Timestamp:
- Jan 6, 2006, 6:13:41 PM (20 years ago)
- Location:
- branches/eam_rel9_p0/psModules/src/astrom
- Files:
-
- 3 edited
-
pmFPAConceptsGet.c (modified) (2 diffs)
-
pmFPAConceptsGet.h (modified) (1 diff)
-
pmFPAConstruct.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_rel9_p0/psModules/src/astrom/pmFPAConceptsGet.c
r5861 r5939 1 1 #include <stdio.h> 2 2 #include <strings.h> 3 #include <assert.h> 3 4 #include "pslib.h" 4 5 … … 1059 1060 return item; // item is either NULL or is what we want. 1060 1061 } 1062 1063 1064 // Set up concepts for blank image 1065 bool 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 1155 bool 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 86 86 ); 87 87 88 // Set up concepts for blank image 89 bool pmFPABlankConcepts(pmFPA *fpa // The FPA 90 ); 91 92 // Copy concepts from one FPA to another 93 bool pmFPACopyConcepts(pmFPA *target, // The target FPA 94 pmFPA *source // The target FPA 95 ); 96 88 97 // Retrieve a concept 89 98 psMetadataItem *pmCellGetConcept(pmCell *cell, // The cell -
branches/eam_rel9_p0/psModules/src/astrom/pmFPAConstruct.c
r5796 r5939 6 6 #include "pmFPAConstruct.h" 7 7 #include "psAdditionals.h" 8 #include "pmFPAConceptsGet.h" 8 9 9 10 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// … … 265 266 } 266 267 268 // Initialise with dummy concepts, until the real ones can be read. 269 pmFPABlankConcepts(fpa); 270 267 271 return fpa; 268 272 }
Note:
See TracChangeset
for help on using the changeset viewer.
