Changeset 6575
- Timestamp:
- Mar 13, 2006, 4:23:40 PM (20 years ago)
- Location:
- branches/rel10_ifa/psModules/src/astrom
- Files:
-
- 12 edited
-
Makefile.am (modified) (2 diffs)
-
pmConcepts.c (modified) (11 diffs)
-
pmConcepts.h (modified) (1 diff)
-
pmConceptsRead.c (modified) (19 diffs)
-
pmConceptsRead.h (modified) (2 diffs)
-
pmConceptsStandard.c (modified) (16 diffs)
-
pmConceptsStandard.h (modified) (2 diffs)
-
pmConceptsWrite.c (modified) (16 diffs)
-
pmConceptsWrite.h (modified) (2 diffs)
-
pmFPAConstruct.c (modified) (5 diffs)
-
pmFPARead.c (modified) (3 diffs)
-
pmHDU.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/rel10_ifa/psModules/src/astrom/Makefile.am
r6573 r6575 8 8 pmFPARead.c \ 9 9 pmHDU.c \ 10 pmHDUGetLowest.c \ 10 11 pmReadout.c \ 11 12 pmConcepts.c \ … … 27 28 pmFPARead.h \ 28 29 pmHDU.h \ 30 pmHDUGetLowest.h \ 29 31 pmReadout.h \ 30 32 psAdditionals.h \ -
branches/rel10_ifa/psModules/src/astrom/pmConcepts.c
r6570 r6575 83 83 pmConceptsInit(); 84 84 } 85 psMetadataIterator *specsIter = psMetadataIteratorAlloc( *specs, PS_LIST_HEAD, NULL); // Iterator on specs85 psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator on specs 86 86 psMetadataItem *specItem = NULL; // Item from the specs metadata 87 87 while ((specItem = psMetadataGetAndIncrement(specsIter))) { … … 122 122 } 123 123 if (source & PM_CONCEPT_SOURCE_DATABASE || source == PM_CONCEPT_SOURCE_ALL) { 124 pmConceptsReadFrom Header(specs, fpa, chip, cell, db, target);124 pmConceptsReadFromDatabase(specs, fpa, chip, cell, db, target); 125 125 } 126 126 … … 152 152 } 153 153 if (source & PM_CONCEPT_SOURCE_DATABASE || source == PM_CONCEPT_SOURCE_ALL) { 154 pmConceptsWriteTo Header(specs, fpa, chip, cell, db, concepts);154 pmConceptsWriteToDatabase(specs, fpa, chip, cell, db, concepts); 155 155 } 156 156 … … 179 179 // Read the concepts for a given FPA 180 180 bool pmConceptsWriteFPA(pmFPA *fpa, // FPA for which to write concepts 181 pmConceptSource source, // The source of the concepts to read 181 182 psDB *db // Database handle 182 183 ) 183 184 { 184 185 psTrace("psModule.concepts", 5, "Writing FPA concepts: %x %x\n", conceptsFPA, fpa->concepts); 185 return conceptsWrite(conceptsFPA, fpa, NULL, NULL, db, fpa->concepts);186 return conceptsWrite(conceptsFPA, fpa, NULL, NULL, source, db, fpa->concepts); 186 187 } 187 188 … … 207 208 // Read the concepts for a given FPA 208 209 bool pmConceptsWriteChip(pmChip *chip, // Chip for which to write concepts 210 pmConceptSource source, // The source of the concepts to read 209 211 psDB *db // Database handle 210 212 ) … … 212 214 psTrace("psModule.concepts", 5, "Writing chip concepts: %x %x\n", conceptsChip, chip->concepts); 213 215 pmFPA *fpa = chip->parent; // FPA to which the chip belongs 214 return conceptsWrite(conceptsChip, fpa, chip, NULL, db, chip->concepts);216 return conceptsWrite(conceptsChip, fpa, chip, NULL, source, db, chip->concepts); 215 217 } 216 218 … … 237 239 // Read the concepts for a given FPA 238 240 bool pmConceptsWriteCell(pmCell *cell, // FPA for which to write concepts 241 pmConceptSource source, // The source of the concepts to read 239 242 psDB *db // Database handle 240 243 ) … … 243 246 pmChip *chip = cell->parent; // Chip to which the cell belongs 244 247 pmFPA *fpa = chip->parent; // FPA to which the chip belongs 245 return conceptsWrite(conceptsCell, fpa, chip, cell, db, cell->concepts);248 return conceptsWrite(conceptsCell, fpa, chip, cell, source, db, cell->concepts); 246 249 } 247 250 … … 394 397 395 398 // CELL.DARKTIME 396 { Read399 { 397 400 psMetadataItem *cellDarktime = psMetadataItemAllocF32("CELL.DARKTIME", 398 401 "Time since flush (sec)", NAN); … … 428 431 psMetadataItem *cellXbin = psMetadataItemAllocS32("CELL.XBIN", "Binning in x", 0); 429 432 pmConceptRegister(cellXbin, (pmConceptParseFunc)pmConceptParse_CELL_Binning, 430 (pmConceptFormatFunc)pmConceptFormat_CELL_ Binning, PM_CONCEPT_LEVEL_CELL);433 (pmConceptFormatFunc)pmConceptFormat_CELL_XBIN, PM_CONCEPT_LEVEL_CELL); 431 434 psFree(cellXbin); 432 435 } … … 436 439 psMetadataItem *cellYbin = psMetadataItemAllocS32("CELL.YBIN", "Binning in y", 0); 437 440 pmConceptRegister(cellYbin, (pmConceptParseFunc)pmConceptParse_CELL_Binning, 438 (pmConceptFormatFunc)pmConceptFormat_CELL_ Binning, PM_CONCEPT_LEVEL_CELL);441 (pmConceptFormatFunc)pmConceptFormat_CELL_YBIN, PM_CONCEPT_LEVEL_CELL); 439 442 psFree(cellYbin); 440 443 } -
branches/rel10_ifa/psModules/src/astrom/pmConcepts.h
r6570 r6575 8 8 9 9 // Function to call to parse a concept once it has been read 10 typedef psMetadataItem* (*pmConceptParseFunc)(psMetadataItem *concept, p mConceptSpec *spec, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);10 typedef psMetadataItem* (*pmConceptParseFunc)(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); 11 11 // Function to call to format a concept for writing 12 12 typedef psMetadataItem* (*pmConceptFormatFunc)(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); -
branches/rel10_ifa/psModules/src/astrom/pmConceptsRead.c
r6570 r6575 4 4 5 5 #include "pmFPA.h" 6 #include "pmHDU.h" 7 #include "pmHDUGetLowest.h" 8 #include "pmConcepts.h" 6 9 #include "pmConceptsRead.h" 7 10 … … 88 91 default: 89 92 psError(PS_ERR_IO, true, "Concept %s (%s) is not of string type (%x) --- treating as " 90 "undefined.\n", name, item->comment, item->type);93 "undefined.\n", item->name, item->comment, item->type); 91 94 return psStringCopy(""); 92 95 } … … 98 101 // since the type is already known. 99 102 static psMetadataItem *parsePlain(psMetadataItem *concept, // The concept to parse 100 p mConceptSpec *spec // The concept specification103 psMetadataItem *pattern // The concept pattern 101 104 ) 102 105 { 103 psMetadataItem *blank = spec->blank;// The blank specification, which carries the name, comment, type 104 switch (blank->type) { 106 switch (pattern->type) { 105 107 case PS_DATA_STRING: { 106 108 psString string = parseString(concept); // Get the string, so I can free it after it goes on the MDI 107 psMetadataItem *item = psMetadataItemAllocStr( blank->name, blank->comment, string);109 psMetadataItem *item = psMetadataItemAllocStr(pattern->name, pattern->comment, string); 108 110 psFree(string); 109 111 return item; 110 112 } 111 113 case PS_DATA_S32: 112 return psMetadataItemAllocS32( blank->name, blank->comment, parseS32(concept));114 return psMetadataItemAllocS32(pattern->name, pattern->comment, parseS32(concept)); 113 115 case PS_DATA_F32: 114 return psMetadataItemAllocF32( blank->name, blank->comment, parseF32(concept));116 return psMetadataItemAllocF32(pattern->name, pattern->comment, parseF32(concept)); 115 117 case PS_DATA_F64: 116 return psMetadataItemAllocF64( blank->name, blank->comment, parseF64(concept));118 return psMetadataItemAllocF64(pattern->name, pattern->comment, parseF64(concept)); 117 119 default: 118 120 psLogMsg(__func__, PS_LOG_WARN, "Concept %s (%s) is not of a standard type (%x)\n", 119 blank->name, blank->comment, blank->type);121 pattern->name, pattern->comment, pattern->type); 120 122 return NULL; 121 123 } 122 }123 124 // Get the lowest HDU125 static pmHDU *getLowestHDU(pmFPA *fpa, // The FPA126 pmChip *chip, // The chip, or NULL127 pmCell *cell // The cell, or NULL128 )129 {130 pmHDU *hdu = NULL; // The HDU that's at the lowest level131 if (cell) {132 hdu = pmHDUFromCell(cell);133 } else if (chip) {134 hdu = pmHDUFromChip(chip);135 } else if (fpa) {136 hdu = pmHDUFromFPA(fpa);137 }138 139 return hdu;140 124 } 141 125 … … 154 138 psMetadataItem *parsed = NULL; // The parsed concept 155 139 if (spec->parse) { 156 parsed = spec->parse(concept, spec , cameraFormat, fpa, chip, cell);140 parsed = spec->parse(concept, spec->blank, cameraFormat, fpa, chip, cell); 157 141 } else { 158 142 parsed = parsePlain(concept, spec->blank); … … 160 144 161 145 // Reformat so that everything's clean 162 if (strcmp(spec->blank->name, parsed Item->name) != 0 ||163 strcmp(spec->blank->comment, parsed Item->comment) != 0) {146 if (strcmp(spec->blank->name, parsed->name) != 0 || 147 strcmp(spec->blank->comment, parsed->comment) != 0) { 164 148 psMetadataItem *cleaned = NULL; // Item that's been cleaned up --- correct name and comment 165 switch (spec-> type) {149 switch (spec->blank->type) { 166 150 case PS_DATA_STRING: 167 cleaned = psMetadataItemAllocStr(spec->blank->name, spec->blank->comment, concept->data.V);151 cleaned = psMetadataItemAllocStr(spec->blank->name, spec->blank->comment, parsed->data.V); 168 152 break; 169 153 case PS_DATA_S32: 170 cleaned = psMetadataItemAllocS32(spec->blank->name, spec->blank->comment, concept->data.S32);154 cleaned = psMetadataItemAllocS32(spec->blank->name, spec->blank->comment, parsed->data.S32); 171 155 break; 172 156 case PS_DATA_F32: 173 cleaned = psMetadataItemAllocF32(spec->blank->name, spec->blank->comment, concept->data.F32);157 cleaned = psMetadataItemAllocF32(spec->blank->name, spec->blank->comment, parsed->data.F32); 174 158 break; 175 159 case PS_DATA_F64: 176 cleaned = psMetadataItemAllocF64(spec->blank->name, spec->blank->comment, concept->data.F64);160 cleaned = psMetadataItemAllocF64(spec->blank->name, spec->blank->comment, parsed->data.F64); 177 161 break; 178 162 default: 179 163 cleaned = psMetadataItemAlloc(spec->blank->name, concept->type, spec->blank->comment, 180 concept->data.V);164 parsed->data.V); 181 165 } 182 166 psFree(parsed); … … 201 185 { 202 186 if (cell) { 203 pmHDU *hdu = getLowestHDU(NULL, NULL, cell); // The HDU at the lowest level187 pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level 204 188 psMetadata *cameraFormat = hdu->format; // The camera format 205 189 psMetadata *cellConfig = cell->config; // The camera configuration for this cell … … 214 198 // Check the SOURCE 215 199 psString nameSource = NULL; // String with the concept name and ".SOURCE" added 216 psStringAppend( nameSource, "%s.SOURCE", name);200 psStringAppend(&nameSource, "%s.SOURCE", name); 217 201 bool mdok = true; // Status of MD lookup 218 202 psString source = psMetadataLookupStr(&mdok, cell->config, nameSource); // The source … … 248 232 ) 249 233 { 250 bool mdok = true; // Status of MD lookup 234 pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level 235 psMetadata *cameraFormat = hdu->format; // The camera format 236 bool mdok = true; // Status of MD lookup 251 237 psMetadata *defaults = psMetadataLookupMD(&mdok, cameraFormat, "DEFAULTS"); // The DEFAULTS spec 252 238 if (mdok && defaults) { 253 pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level239 pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level 254 240 psMetadata *cameraFormat = hdu->format; // The camera format 255 241 psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator … … 274 260 ) 275 261 { 276 bool mdok = true; // Status of MD lookup 262 pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level 263 psMetadata *cameraFormat = hdu->format; // The camera format 264 bool mdok = true; // Status of MD lookup 277 265 psMetadata *transSpec = psMetadataLookupMD(&mdok, cameraFormat, "TRANSLATION"); // The TRANSLATION spec 278 266 if (mdok && transSpec) { 279 pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level267 pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level 280 268 psMetadata *cameraFormat = hdu->format; // The camera format 281 269 psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator … … 285 273 psString name = specItem->name; // The concept name 286 274 psString keywords = psMetadataLookupStr(&mdok, transSpec, name); // The FITS keywords 287 if (mdok && strlen(keyword ) > 0) {275 if (mdok && strlen(keywords) > 0) { 288 276 // In case there are multiple headers 289 277 psList *keys = psStringSplit(keywords, " ,;"); // List of keywords … … 294 282 } else { 295 283 psListIterator *keysIter = psListIteratorAlloc(keys, PS_LIST_HEAD, false); // Iterator 296 ps MetadataItem *key = NULL; // Item from iteration297 psList *values = psListAlloc( void); // List containing the values284 psString key = NULL; // Item from iteration 285 psList *values = psListAlloc(NULL); // List containing the values 298 286 while ((key = psListGetAndIncrement(keysIter))) { 299 287 psMetadataItem *value = psMetadataLookup(hdu->header, key); … … 325 313 ) 326 314 { 327 bool mdok = true; // Status of MD lookup 315 pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level 316 psMetadata *cameraFormat = hdu->format; // The camera format 317 bool mdok = true; // Status of MD lookup 328 318 psMetadata *dbSpec = psMetadataLookupMD(&mdok, cameraFormat, "DATABSE"); // The DATABASE spec 329 319 if (mdok && dbSpec) { 330 pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level320 pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level 331 321 psMetadata *cameraFormat = hdu->format; // The camera format 332 322 psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator … … 338 328 psMetadata *dbLookup = psMetadataLookupMD(&mdok, dbSpec, name); 339 329 if (mdok && dbLookup) { 340 const char *tableName = psMetadataLookupStr(&md Status, dbLookup, "TABLE"); // Table name330 const char *tableName = psMetadataLookupStr(&mdok, dbLookup, "TABLE"); // Table name 341 331 // Names of the "where" columns 342 const char *givenCols = psMetadataLookupStr(&md Status, dbLookup, "GIVENDBCOL");332 const char *givenCols = psMetadataLookupStr(&mdok, dbLookup, "GIVENDBCOL"); 343 333 // Values of the "where" columns 344 const char *givenPS = psMetadataLookupStr(&md Status, dbLookup, "GIVENPS");334 const char *givenPS = psMetadataLookupStr(&mdok, dbLookup, "GIVENPS"); 345 335 346 336 // Now, need to get the "given"s … … 352 342 psLogMsg(__func__, PS_LOG_WARN, 353 343 "The GIVENDBCOL and GIVENPS entries for %s do not have " 354 "the same number of entries --- ignored.\n", concept);344 "the same number of entries --- ignored.\n", name); 355 345 } else { 356 346 // Iterators for the lists … … 359 349 char *column = NULL; // Name of the column 360 350 while ((column = psListGetAndIncrement(colsIter))) { 361 char * name = psListGetAndIncrement(valuesIter); // Name for the value351 char *dependName = psListGetAndIncrement(valuesIter); // Name for the value 362 352 if (!strlen(column) || !strlen(name)) { 363 353 psLogMsg(__func__, PS_LOG_WARN, "One of the columns or value names for %s is " 364 " empty --- ignored.\n", concept);354 " empty --- ignored.\n", name); 365 355 } else { 366 356 // Search for the value name 367 psMetadataItem *item = pmConceptReadFromHeader(fpa, chip, cell, name); 368 if (! item) { 369 item = pmConceptReadFromDefault(fpa, chip, cell, name); 357 psMetadataItem *item = NULL; // The value 358 if (!item && cell) { 359 item = psMetadataLookup(cell->concepts, dependName); 360 } 361 if (!item && chip) { 362 item = psMetadataLookup(chip->concepts, dependName); 363 } 364 if (!item && fpa) { 365 item = psMetadataLookup(fpa->concepts, dependName); 370 366 } 371 367 if (! item) { 372 368 psLogMsg(__func__, PS_LOG_ERROR, "Unable to find the value name %s for DB" 373 " lookup on %s --- ignored.\n", name, concept);369 " lookup on %s --- ignored.\n", dependName, name); 374 370 } else { 375 371 // We need to create a new psMetadataItem. I don't think we can't 376 372 // simply hack the existing one, since that could conceivably cause 377 373 // memory leaks 378 psMetadataItem *newItem = psMetadataItemAlloc( concept, item->type,374 psMetadataItem *newItem = psMetadataItemAlloc(name, item->type, 379 375 item->comment, 380 376 item->data.V); … … 383 379 } 384 380 } 385 psFree( name);381 psFree(dependName); 386 382 psFree(column); 387 383 } // Iterating through the columns … … 395 391 if (dbResult->n == 0) { 396 392 psLogMsg(__func__, PS_LOG_WARN, 397 "Unable to find any rows in DB for %s --- ignored\n", concept);393 "Unable to find any rows in DB for %s --- ignored\n", name); 398 394 } else { 399 395 if (dbResult-> n > 1) { 400 396 psLogMsg(__func__, PS_LOG_WARN, 401 397 "Multiple rows returned in DB lookup for %s --- " 402 " using the first one only.\n", concept);398 " using the first one only.\n", name); 403 399 } 404 400 conceptItem = (psMetadataItem*)dbResult->data[0]; … … 406 402 407 403 // Now we have the result 408 conceptParse(spec, headerItem, cameraFormat, target, fpa, chip, cell);404 conceptParse(spec, conceptItem, cameraFormat, target, fpa, chip, cell); 409 405 410 406 } … … 425 421 426 422 427 #if 0423 #ifdef OLD 428 424 429 425 psMetadataItem *pmConceptReadFromCamera(pmCell *cell, // The cell -
branches/rel10_ifa/psModules/src/astrom/pmConceptsRead.h
r6448 r6575 4 4 #include "pmFPA.h" 5 5 6 7 bool pmConceptsReadFromCamera(psMetadata *specs, // The concept specifications 8 pmCell *cell, // The cell 9 psMetadata *target // Place into which to read the concepts 10 ); 11 bool pmConceptsReadFromDefaults(psMetadata *specs, // The concept specifications 12 pmFPA *fpa, // The FPA 13 pmChip *chip, // The chip 14 pmCell *cell, // The cell 15 psMetadata *target // Place into which to read the concepts 16 ); 17 bool pmConceptsReadFromHeader(psMetadata *specs, // The concept specifications 18 pmFPA *fpa, // The FPA 19 pmChip *chip, // The chip 20 pmCell *cell, // The cell 21 psMetadata *target // Place into which to read the concepts 22 ); 23 bool pmConceptsReadFromDatabase(psMetadata *specs, // The concept specifications 24 pmFPA *fpa, // The FPA 25 pmChip *chip, // The chip 26 pmCell *cell, // The cell 27 psDB *db, // The database handle 28 psMetadata *target // Place into which to read the concepts 29 ); 30 31 32 33 34 #ifdef OLD 6 35 psMetadataItem *pmConceptReadFromCamera(pmCell *cell, // The cell 7 36 const char *concept // Name of concept … … 61 90 const char *name // Name of the concept 62 91 ); 63 92 #endif 64 93 65 94 #endif -
branches/rel10_ifa/psModules/src/astrom/pmConceptsStandard.c
r6570 r6575 1 1 #include <stdio.h> 2 #include <assert.h> 2 3 3 4 #include "pslib.h" 4 5 6 #include "pmFPA.h" 5 7 #include "pmConceptsRead.h" 6 8 #include "pmConceptsWrite.h" 7 #include "pmFPA.h"8 9 #include "pmConceptsStandard.h" 9 #include "psAdditionals.h"10 10 11 11 … … 21 21 psLogMsg(__func__, PS_LOG_WARN, "Assuming format for %s is HOURS.\n", pattern->name); 22 22 return M_PI / 12.0; 23 } else if (strcmp(pattern->name, "FPA.DEC") == 0) { 23 } 24 if (strcmp(pattern->name, "FPA.DEC") == 0) { 24 25 psLogMsg(__func__, PS_LOG_WARN, "Assuming format for %s is DEGREES.\n", pattern->name); 25 26 return M_PI / 180.0; 26 } else {27 psAbort("Should never ever get here.\n");28 }27 } 28 psAbort(__func__, "Should never ever get here.\n"); 29 return NAN; 29 30 } 30 31 … … 73 74 psMetadata *formats = psMetadataLookupMD(&mdok, cameraFormat, "FORMATS"); 74 75 if (mdok && formats) { 75 psString format = psMetadataLookupStr(&mdok, formats, blank->name);76 psString format = psMetadataLookupStr(&mdok, formats, pattern->name); 76 77 if (mdok && strlen(format) > 0) { 77 78 if (strcasecmp(format, "HOURS") == 0) { … … 95 96 96 97 // FPA.RA and FPA.DEC 97 psMetadataItem *pmConceptFormat_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, p mConceptSpec *spec, psMetadata *cameraFormat)98 psMetadataItem *pmConceptFormat_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat) 98 99 { 99 100 assert(concept); … … 128 129 int big, medium; 129 130 float small; 130 big = (int) ra;131 big = (int)coords; 131 132 medium = (int)(60.0*(coords - (double)big)); 132 133 small = 3600.0*(coords - (double)big - 60.0 * (double)medium); … … 146 147 assert(pattern); 147 148 148 psMetadata *cellConfig = cell->config; // The cell configuration149 149 psRegion *trimsec = psAlloc(sizeof(psRegion)); // Make space for a psRegion (usually passed by value) 150 150 … … 166 166 assert(cell); 167 167 assert(pattern); 168 psMetadata *cellConfig = cell->config; // The cell configuration169 168 170 169 psList *biassecs = psListAlloc(NULL); // List of bias sections 171 psMetadataItem *item = psMetadataItemAlloc("CELL.BIASSEC", PS_DATA_LIST, "Bias sections", biassecs);172 170 psFree(biassecs); // Drop reference 173 171 … … 215 213 216 214 // CELL.XBIN and CELL.YBIN 217 psMetadataItem *pmConceptParse_CELL_B INNING(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell)215 psMetadataItem *pmConceptParse_CELL_Binning(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell) 218 216 { 219 217 assert(concept); … … 226 224 sscanf(binString, "%d,%*d", &binning) != 1) || 227 225 (strcmp(pattern->name, "CELL.YBIN") == 0 && sscanf(binString, "%*d %d", &binning) != 1 && 228 sscanf(binString, "%*d,%d", &binning) != 1) { 229 psError(PS_ERR_IO, true, "Unable to parse string to get %s: %s\n", pattern->name, binString) 230 ; 231 } 232 } else if (concept->type == PS_TYPE_S32) { 233 binning = concept->data.S32; 234 } else { 235 psError(PS_ERR_IO, true, "Note sure how to parse %s of type %x --- assuming 1.\n", pattern->name, 236 binItem->type); 237 } 238 239 return psMetadataItemAllocS32(pattern->name, pattern->comment, binning); 226 sscanf(binString, "%*d,%d", &binning) != 1)) { 227 psError(PS_ERR_IO, true, "Unable to parse string to get %s: %s\n", pattern->name, binString); 228 } 229 } else if (concept->type == PS_TYPE_S32) { 230 binning = concept->data.S32; 231 } else { 232 psError(PS_ERR_IO, true, "Note sure how to parse %s of type %x --- assuming 1.\n", pattern->name, 233 concept->type); 234 } 235 236 return psMetadataItemAllocS32(pattern->name, pattern->comment, binning); 240 237 } 241 238 … … 247 244 248 245 psTimeType timeSys = PS_TIME_UTC; // The time system 246 psString sys = concept->data.V; // The time system string 249 247 if (concept->type != PS_DATA_STRING || strlen(sys) <= 0) { 250 248 psError(PS_ERR_IO, true, "Can't interpret CELL.TIMESYS --- assuming UTC.\n"); … … 273 271 274 272 // Need CELL.TIMESYS first 275 bool mdok = false; // Result of MD lookup273 bool mdok = true; // Result of MD lookup 276 274 psTimeType timeSys = psMetadataLookupS32(&mdok, cell->concepts, "CELL.TIMESYS"); // The time system 277 275 if (!mdok) { … … 281 279 282 280 // Get format 283 bool mdok = true; // Status of MD lookup284 281 psMetadata *formats = psMetadataLookupMD(&mdok, cameraFormat, "FORMATS"); 285 282 if (!mdok || !formats) { … … 446 443 psRegion *trimsec = concept->data.V; // The trimsec region 447 444 psString trimsecString = psRegionToString(*trimsec); 448 psMetadataItem *formatted = psMetadataItemAllocStr( trimsecItem->name, trimsecItem->comment,445 psMetadataItem *formatted = psMetadataItemAllocStr(concept->name, concept->comment, 449 446 trimsecString); 450 447 psFree(trimsecString); … … 543 540 psFree(sys); 544 541 545 return success;542 return newItem; 546 543 } 547 544 … … 602 599 } 603 600 604 psError(PS_ERR_IO, true, "Not sure how to format concept CELL.TIME (%s)\n", dateTimeString);601 psError(PS_ERR_IO, true, "Not sure how to format concept CELL.TIME\n"); 605 602 return NULL; 606 603 } 607 604 608 psMetadataItem *pmConceptFormat_CELL_Positions(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell *db)605 psMetadataItem *pmConceptFormat_CELL_Positions(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell) 609 606 { 610 607 assert(concept); … … 612 609 613 610 if (concept->type != PS_TYPE_S32) { 614 psError(PS_ERR_IO, true, "Concept %s is not of type S32, as expected.\n", pattern->name);611 psError(PS_ERR_IO, true, "Concept %s is not of type S32, as expected.\n", concept->name); 615 612 return NULL; 616 613 } -
branches/rel10_ifa/psModules/src/astrom/pmConceptsStandard.h
r6570 r6575 5 5 #include "pmFPA.h" 6 6 7 7 8 psMetadataItem *pmConceptParse_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); 8 psMetadataItem *pmConceptFormat_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, p mConceptSpec *spec, psMetadata *cameraFormat);9 psMetadataItem *pmConceptFormat_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat); 9 10 psMetadataItem *pmConceptParse_CELL_TRIMSEC(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); 10 11 psMetadataItem *pmConceptParse_CELL_BIASSEC(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); 11 psMetadataItem *pmConceptParse_CELL_B INNING(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);12 psMetadataItem *pmConceptParse_CELL_Binning(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); 12 13 psMetadataItem *pmConceptParse_CELL_TIMESYS(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); 13 14 psMetadataItem *pmConceptParse_CELL_TIME(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); … … 19 20 psMetadataItem *pmConceptFormat_CELL_TIMESYS(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); 20 21 psMetadataItem *pmConceptFormat_CELL_TIME(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); 21 psMetadataItem *pmConceptFormat_CELL_Positions(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell *db);22 psMetadataItem *pmConceptFormat_CELL_Positions(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell); 22 23 23 24 #endif -
branches/rel10_ifa/psModules/src/astrom/pmConceptsWrite.c
r6570 r6575 4 4 5 5 #include "pmFPA.h" 6 #include "pmHDU.h" 7 #include "pmHDUGetLowest.h" 8 #include "pmConcepts.h" 6 9 #include "pmConceptsRead.h" 7 10 #include "psAdditionals.h" … … 89 92 return formatted; 90 93 } 94 return NULL; 91 95 } 92 96 … … 127 131 { 128 132 if (cell) { 129 pmHDU *hdu = getLowestHDU(NULL, NULL, cell); // The HDU at the lowest level133 pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level 130 134 psMetadata *cameraFormat = hdu->format; // The camera format 131 135 psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator … … 142 146 psMetadataItem *formatted = conceptFormat(spec, conceptItem, cameraFormat, NULL, NULL, cell); 143 147 psString nameSource = NULL; // String with the concept name and ".SOURCE" added 144 psStringAppend( nameSource, "%s.SOURCE", name);148 psStringAppend(&nameSource, "%s.SOURCE", name); 145 149 bool mdok = true; // Status of MD lookup 146 150 psString source = psMetadataLookupStr(&mdok, cell->config, nameSource); // The source … … 149 153 if (cameraItem->type != PS_DATA_STRING) { 150 154 psLogMsg(__func__, PS_LOG_WARN, "Concept %s is specified by header, but is not " 151 "of type STR --- ignored.\n", conceptItem->name) 155 "of type STR --- ignored.\n", conceptItem->name); 152 156 continue; 153 157 } … … 181 185 182 186 183 bool pmConceptsWriteToDefault(psMetadata *specs, // The concept specifications 184 pmFPA *fpa, // The FPA 185 pmChip *chip, // The chip 186 pmCell *cell, // The cell 187 psMetadata *concepts // The concepts 188 ) 189 { 190 bool mdok = true; // Status of MD lookup 187 bool pmConceptsWriteToDefaults(psMetadata *specs, // The concept specifications 188 pmFPA *fpa, // The FPA 189 pmChip *chip, // The chip 190 pmCell *cell, // The cell 191 psMetadata *concepts // The concepts 192 ) 193 { 194 pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level 195 psMetadata *cameraFormat = hdu->format; // The camera format 196 bool mdok = true; // Status of MD lookup 191 197 psMetadata *defaults = psMetadataLookupMD(&mdok, cameraFormat, "DEFAULTS"); // The DEFAULTS spec 192 198 if (mdok && defaults) { 193 pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level199 pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level 194 200 psMetadata *cameraFormat = hdu->format; // The camera format 195 201 psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator … … 202 208 psMetadataItem *conceptItem = psMetadataLookup(concepts, name); // The item from the concepts 203 209 psMetadataItem *formatted = conceptFormat(spec, conceptItem, cameraFormat, fpa, chip, cell); 204 if (! compareConcepts( cameraItem, formatted)) {210 if (! compareConcepts(defaultItem, formatted)) { 205 211 psLogMsg(__func__, PS_LOG_WARN, "Concept %s is specified by the DEFAULTS in the camera " 206 212 "format, but the values don't match.\n"); … … 222 228 ) 223 229 { 224 bool mdok = true; // Status of MD lookup 230 pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level 231 psMetadata *cameraFormat = hdu->format; // The camera format 232 bool mdok = true; // Status of MD lookup 225 233 psMetadata *translation = psMetadataLookupMD(&mdok, cameraFormat, "TRANSLATION"); // The TRANSLATION spec 226 234 if (mdok && translation) { 227 pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level235 pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level 228 236 psMetadata *cameraFormat = hdu->format; // The camera format 229 237 psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator … … 271 279 } 272 280 273 281 // XXX Warning: This code has not been tested at all 274 282 bool pmConceptsWriteToDatabase(psMetadata *specs, // The concept specifications 275 283 pmFPA *fpa, // The FPA … … 280 288 ) 281 289 { 282 bool mdok = true; // Status of MD lookup 290 pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level 291 psMetadata *cameraFormat = hdu->format; // The camera format 292 bool mdok = true; // Status of MD lookup 283 293 psMetadata *database = psMetadataLookupMD(&mdok, cameraFormat, "DATABASE"); // The DATABASE spec 284 294 if (mdok && database) { 285 pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level295 pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level 286 296 psMetadata *cameraFormat = hdu->format; // The camera format 287 297 psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator … … 291 301 psString name = specItem->name; // The concept name 292 302 293 psMetadataItem *dbItem = psMetadataLookup( &mdok,database, name); // The item from the DATABASE303 psMetadataItem *dbItem = psMetadataLookup(database, name); // The item from the DATABASE 294 304 if (dbItem) { 295 305 if (dbItem->type != PS_DATA_METADATA) { … … 304 314 psMetadata *dbLookup = dbItem->data.V; // How to look up the value of interest 305 315 // Name of the table 306 const char *tableName = psMetadataLookupStr(&md Status, dbLookup, "TABLE");316 const char *tableName = psMetadataLookupStr(&mdok, dbLookup, "TABLE"); 307 317 // Name of "where" columns 308 const char *givenCols = psMetadataLookupStr(&md Status, dbLookup, "GIVENDBCOL");318 const char *givenCols = psMetadataLookupStr(&mdok, dbLookup, "GIVENDBCOL"); 309 319 // Values for "where" columns 310 const char *givenPS = psMetadataLookupStr(&md Status, dbLookup, "GIVENPS");320 const char *givenPS = psMetadataLookupStr(&mdok, dbLookup, "GIVENPS"); 311 321 312 322 // Now, need to get the "given"s … … 318 328 psLogMsg(__func__, PS_LOG_WARN, 319 329 "The GIVENDBCOL and GIVENPS entries for %s do not have " 320 "the same number of entries --- ignored.\n", concept);330 "the same number of entries --- ignored.\n", name); 321 331 } else { 322 332 // Iterators for the lists … … 325 335 char *column = NULL; // Name of the column 326 336 while ((column = psListGetAndIncrement(colsIter))) { 327 char * name = psListGetAndIncrement(valuesIter); // Name for the value337 char *dependName = psListGetAndIncrement(valuesIter); // Name for the value 328 338 if (!strlen(column) || !strlen(name)) { 329 339 psLogMsg(__func__, PS_LOG_WARN, "One of the columns or value names for %s is " 330 " empty --- ignored.\n", concept);340 " empty --- ignored.\n", name); 331 341 } else { 332 342 // Search for the value name 333 psMetadataItem *item = pmConceptReadFromHeader(fpa, chip, cell, name); 334 if (! item) { 335 item = pmConceptReadFromDefault(fpa, chip, cell, name); 343 psMetadataItem *item = NULL; // The value 344 if (!item && cell) { 345 item = psMetadataLookup(cell->concepts, dependName); 346 } 347 if (!item && chip) { 348 item = psMetadataLookup(chip->concepts, dependName); 349 } 350 if (!item && fpa) { 351 item = psMetadataLookup(fpa->concepts, dependName); 336 352 } 337 353 if (! item) { 338 354 psLogMsg(__func__, PS_LOG_ERROR, 339 355 "Unable to find the value name %s for DB " 340 " lookup on %s --- ignored.\n", name, concept);356 " lookup on %s --- ignored.\n", dependName, name); 341 357 } else { 342 358 // We need to create a new psMetadataItem. I don't think we can't simply … … 346 362 } 347 363 } 348 psFree( name);364 psFree(dependName); 349 365 psFree(column); 350 366 } // Iterating through the columns … … 357 373 if (! dbResult || dbResult->n == 0) { 358 374 psLogMsg(__func__, PS_LOG_WARN, "Unable to find any rows in DB for %s --- " 359 "ignored\n", concept->name);375 "ignored\n", name); 360 376 return false; 361 377 } else { 362 378 if (dbResult->n > 1) { 363 379 psLogMsg(__func__, PS_LOG_WARN, "Multiple rows returned in DB lookup for %s " 364 "--- ignored.\n", concept->name);380 "--- ignored.\n", name); 365 381 } 366 382 // Update the DB 367 383 psMetadata *update = psMetadataAlloc(); 368 psMetadataAddItem(update, concept , PS_LIST_HEAD, 0);384 psMetadataAddItem(update, conceptItem, PS_LIST_HEAD, 0); 369 385 psDBUpdateRows(db, tableName, selection, update); 370 386 psFree(update); -
branches/rel10_ifa/psModules/src/astrom/pmConceptsWrite.h
r6448 r6575 4 4 #include "pslib.h" 5 5 #include "pmFPA.h" 6 7 8 9 bool pmConceptsWriteToCamera(psMetadata *specs, // The concept specifications 10 pmCell *cell, // The cell 11 psMetadata *concepts // The concepts 12 ); 13 bool pmConceptsWriteToDefaults(psMetadata *specs, // The concept specifications 14 pmFPA *fpa, // The FPA 15 pmChip *chip, // The chip 16 pmCell *cell, // The cell 17 psMetadata *concepts // The concepts 18 ); 19 bool pmConceptsWriteToHeader(psMetadata *specs, // The concept specifications 20 pmFPA *fpa, // The FPA 21 pmChip *chip, // The chip 22 pmCell *cell, // The cell 23 psMetadata *concepts // The concepts 24 ); 25 bool pmConceptsWriteToDatabase(psMetadata *specs, // The concept specifications 26 pmFPA *fpa, // The FPA 27 pmChip *chip, // The chip 28 pmCell *cell, // The cell 29 psDB *db,// The database handle 30 psMetadata *concepts // The concepts 31 ); 32 33 34 #ifdef OLD 6 35 7 36 // Well, not really "write", but check to make sure it's there and matches … … 48 77 49 78 #endif 79 80 #endif -
branches/rel10_ifa/psModules/src/astrom/pmFPAConstruct.c
r6552 r6575 4 4 5 5 #include "pmFPA.h" 6 #include "pmConcepts.h" 6 7 #include "pmFPAConstruct.h" 7 #include "psAdditionals.h"8 8 9 9 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// … … 147 147 while ((cellName = psListGetAndIncrement(cellNamesIter))) { 148 148 pmCell *cell = pmCellAlloc(chip, cellName); // New cell 149 pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_DEFAULTS, NULL); 149 150 psFree(cell); // Drop reference 150 151 } 152 pmConceptsReadChip(chip, PM_CONCEPT_SOURCE_DEFAULTS, NULL); 151 153 psFree(chip); // Drop reference 152 154 psFree(cellNamesIter); 153 155 } 154 156 psFree(componentsIter); 157 pmConceptsReadFPA(fpa, PM_CONCEPT_SOURCE_DEFAULTS, NULL); 155 158 156 159 return fpa; … … 241 244 } 242 245 cell->config = psMemIncrRefCounter(cellData); 246 pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_CAMERA, NULL); 243 247 } 244 248 } … … 291 295 } 292 296 cell->config = psMemIncrRefCounter(cellData); 297 pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_CAMERA, NULL); 293 298 } 294 299 … … 332 337 } 333 338 cell->config = psMemIncrRefCounter(cellData); 339 pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_CAMERA, NULL); 334 340 } 335 341 -
branches/rel10_ifa/psModules/src/astrom/pmFPARead.c
r6552 r6575 189 189 } 190 190 191 pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_HEADER, NULL); 192 191 193 // Having read the cell, we now have to cut it up 192 194 psRegion *trimsec = psMetadataLookupPtr(NULL, cell->concepts, "CELL.TRIMSEC"); … … 218 220 return false; 219 221 } 222 pmConceptsReadChip(chip, PM_CONCEPT_SOURCE_HEADER, NULL); 220 223 } 221 224 … … 236 239 return false; 237 240 } 241 pmConceptsReadFPA(fpa, PM_CONCEPT_SOURCE_HEADER, NULL); 238 242 } 239 243 -
branches/rel10_ifa/psModules/src/astrom/pmHDU.c
r6568 r6575 41 41 } 42 42 43 43 44 // Read the HDU 44 45 // XXX: Add a region specifier?
Note:
See TracChangeset
for help on using the changeset viewer.
