Changeset 11749
- Timestamp:
- Feb 12, 2007, 12:22:15 PM (19 years ago)
- Location:
- trunk/psModules/src/concepts
- Files:
-
- 2 added
- 7 edited
-
Makefile.am (modified) (2 diffs)
-
pmConcepts.c (modified) (3 diffs)
-
pmConcepts.h (modified) (4 diffs)
-
pmConceptsRead.c (modified) (7 diffs)
-
pmConceptsStandard.c (modified) (21 diffs)
-
pmConceptsStandard.h (modified) (18 diffs)
-
pmConceptsUpdate.c (added)
-
pmConceptsUpdate.h (added)
-
pmConceptsWrite.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/concepts/Makefile.am
r8990 r11749 9 9 pmConceptsWrite.c \ 10 10 pmConceptsStandard.c \ 11 pmConceptsPhotcode.c 11 pmConceptsPhotcode.c \ 12 pmConceptsUpdate.c 12 13 13 14 pkginclude_HEADERS = \ … … 17 18 pmConceptsWrite.h \ 18 19 pmConceptsStandard.h \ 19 pmConceptsPhotcode.h 20 pmConceptsPhotcode.h \ 21 pmConceptsUpdate.h 20 22 21 23 CLEANFILES = *~ -
trunk/psModules/src/concepts/pmConcepts.c
r11284 r11749 13 13 #include "pmConceptsWrite.h" 14 14 #include "pmConceptsStandard.h" 15 #include "pmConceptsUpdate.h" 15 16 16 17 static bool conceptsInitialised = false;// Have concepts been read? … … 222 223 #endif 223 224 225 pmConceptsUpdate(fpa, chip, cell); 226 224 227 return success; 225 228 } … … 486 489 { 487 490 psMetadataItem *fpaFilterid = psMetadataItemAllocStr("FPA.FILTERID", 488 "Filter used (parsed, abstract name) ", "");491 "Filter used (parsed, abstract name) ", ""); 489 492 pmConceptRegister(fpaFilterid, (pmConceptParseFunc)p_pmConceptParse_FPA_FILTER, 490 493 (pmConceptFormatFunc)p_pmConceptFormat_FPA_FILTER, PM_FPA_LEVEL_FPA); -
trunk/psModules/src/concepts/pmConcepts.h
r11253 r11749 4 4 * @author Paul Price, IfA 5 5 * 6 * @version $Revision: 1.1 1$ $Name: not supported by cvs2svn $7 * @date $Date: 2007-0 1-24 02:54:14$6 * @version $Revision: 1.12 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2007-02-12 22:22:15 $ 8 8 * Copyright 2005-2006 Institute for Astronomy, University of Hawaii 9 9 */ … … 19 19 #include "pmFPALevel.h" 20 20 21 /// Source for concepts when reading and writing. 22 /// 23 /// Since some sources become available at different times from others, we need to provide some specificity to 24 /// reading and writing concepts (or we're forced to wait until everything's available, which we don't want to 25 /// do). Concepts may be read from or written to multiple sources at once by OR-ing them. 26 typedef enum { 27 PM_CONCEPT_SOURCE_NONE = 0x00, ///< No concepts 28 PM_CONCEPT_SOURCE_CELLS = 0x01, ///< Concept comes from the camera information 29 PM_CONCEPT_SOURCE_DEFAULTS = 0x02, ///< Concept comes from defaults 30 PM_CONCEPT_SOURCE_PHU = 0x04, ///< Concept comes from PHU 31 PM_CONCEPT_SOURCE_HEADER = 0x08, ///< Concept comes from FITS header 32 PM_CONCEPT_SOURCE_DATABASE = 0x10, ///< Concept comes from database 33 PM_CONCEPT_SOURCE_ALL = 0xff ///< All concepts 34 } pmConceptSource; 35 21 36 /// Function to call to parse a concept once it has been read 22 37 typedef psMetadataItem* (*pmConceptParseFunc)(const psMetadataItem *concept, ///< Concept to parse 23 38 const psMetadataItem *pattern, ///< Pattern for parsing 39 pmConceptSource source, ///< Source of concept 24 40 const psMetadata *cameraFormat, ///< Camera format definition 25 41 const pmFPA *fpa, ///< FPA for concept, or NULL … … 30 46 /// Function to call to format a concept for writing 31 47 typedef psMetadataItem* (*pmConceptFormatFunc)(const psMetadataItem *concept, ///< Concept to format 48 pmConceptSource source, ///< Source of concept 32 49 const psMetadata *cameraFormat, ///< Camera format definition 33 50 const pmFPA *fpa, ///< FPA for concept, or NULL … … 65 82 pmFPALevel level ///< Level at which to store concept in the FPA hierarchy 66 83 ); 67 68 /// Source for concepts when reading and writing.69 ///70 /// Since some sources become available at different times from others, we need to provide some specificity to71 /// reading and writing concepts (or we're forced to wait until everything's available, which we don't want to72 /// do). Concepts may be read from or written to multiple sources at once by OR-ing them.73 typedef enum {74 PM_CONCEPT_SOURCE_NONE = 0x00, ///< No concepts75 PM_CONCEPT_SOURCE_CELLS = 0x01, ///< Concept comes from the camera information76 PM_CONCEPT_SOURCE_DEFAULTS = 0x02, ///< Concept comes from defaults77 PM_CONCEPT_SOURCE_PHU = 0x04, ///< Concept comes from PHU78 PM_CONCEPT_SOURCE_HEADER = 0x08, ///< Concept comes from FITS header79 PM_CONCEPT_SOURCE_DATABASE = 0x10, ///< Concept comes from database80 PM_CONCEPT_SOURCE_ALL = 0xff ///< All concepts81 } pmConceptSource;82 84 83 85 /// Get a list of defined concepts for a particular level. -
trunk/psModules/src/concepts/pmConceptsRead.c
r11404 r11749 53 53 static bool conceptParse(pmConceptSpec *spec, // The concept specification 54 54 psMetadataItem *concept, // The concept to parse 55 pmConceptSource source, // The concept source 55 56 psMetadata *cameraFormat, // The camera format 56 57 psMetadata *target, // The target … … 71 72 psMetadataItem *parsed = NULL; // The parsed concept 72 73 if (spec->parse) { 73 parsed = spec->parse(concept, spec->blank, cameraFormat, fpa, chip, cell);74 parsed = spec->parse(concept, spec->blank, source, cameraFormat, fpa, chip, cell); 74 75 } else { 75 76 parsed = parsePlain(concept, spec->blank); … … 144 145 psString source = psMetadataLookupStr(&mdok, cell->config, nameSource); // The source 145 146 psFree(nameSource); 146 if (mdok && strlen(source) > 0 && strcasecmp(source, "VALUE") == 0) { 147 if (!conceptParse(spec, conceptItem, cameraFormat, target, NULL, NULL, cell)) { 147 if (mdok && source && strlen(source) > 0 && strcasecmp(source, "VALUE") == 0) { 148 if (!conceptParse(spec, conceptItem, PM_CONCEPT_SOURCE_CELLS, 149 cameraFormat, target, NULL, NULL, cell)) { 148 150 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from camera " 149 151 "configuration\n", name); … … 158 160 } else { 159 161 // Another type --- should be OK 160 if (!conceptParse(spec, conceptItem, cameraFormat, target, NULL, NULL, cell)) { 162 if (!conceptParse(spec, conceptItem, PM_CONCEPT_SOURCE_CELLS, 163 cameraFormat, target, NULL, NULL, cell)) { 161 164 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from camera " 162 165 "configuration.\n", name); … … 241 244 // Now we can parse this as we would ordinarily 242 245 } 243 if (conceptItem && !conceptParse(spec, conceptItem, cameraFormat, target, fpa, chip, cell)) { 246 if (conceptItem && !conceptParse(spec, conceptItem, PM_CONCEPT_SOURCE_DEFAULTS, 247 cameraFormat, target, fpa, chip, cell)) { 244 248 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from DEFAULTS.\n", name); 245 249 status = false; … … 340 344 // This will also clean up the name 341 345 if (headerItem) { 342 if (!conceptParse(spec, headerItem, cameraFormat, target, fpa, chip, cell)) { 346 if (!conceptParse(spec, headerItem, PM_CONCEPT_SOURCE_HEADER, 347 cameraFormat, target, fpa, chip, cell)) { 343 348 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from header.\n", name); 344 349 status = false; … … 459 464 460 465 // Now we have the result 461 if (!conceptParse(spec, conceptItem, cameraFormat, target, fpa, chip, cell)) { 466 if (!conceptParse(spec, conceptItem, PM_CONCEPT_SOURCE_DATABASE, 467 cameraFormat, target, fpa, chip, cell)) { 462 468 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to parse concept %s from database.\n", 463 469 name); -
trunk/psModules/src/concepts/pmConceptsStandard.c
r11687 r11749 47 47 psMetadataItem *p_pmConceptParse_FPA_FILTER(const psMetadataItem *concept, 48 48 const psMetadataItem *pattern, 49 pmConceptSource source, 49 50 const psMetadata *cameraFormat, 50 51 const pmFPA *fpa, … … 82 83 83 84 psMetadataItem *p_pmConceptFormat_FPA_FILTER(const psMetadataItem *concept, 85 pmConceptSource source, 84 86 const psMetadata *cameraFormat, 85 87 const pmFPA *fpa, … … 133 135 psMetadataItem *p_pmConceptParse_FPA_Coords(const psMetadataItem *concept, 134 136 const psMetadataItem *pattern, 137 pmConceptSource source, 135 138 const psMetadata *cameraFormat, 136 139 const pmFPA *fpa, … … 202 205 // FPA.RA and FPA.DEC 203 206 psMetadataItem *p_pmConceptFormat_FPA_Coords(const psMetadataItem *concept, 207 pmConceptSource source, 204 208 const psMetadata *cameraFormat, 205 209 const pmFPA *fpa, … … 264 268 psMetadataItem *p_pmConceptParse_CELL_TRIMSEC(const psMetadataItem *concept, 265 269 const psMetadataItem *pattern, 270 pmConceptSource source, 266 271 const psMetadata *cameraFormat, 267 272 const pmFPA *fpa, … … 277 282 if (concept->type != PS_DATA_STRING) { 278 283 psError(PS_ERR_UNKNOWN, true, "CELL.TRIMSEC after read is not of type STR (%x)\n", concept->type); 284 return NULL; 279 285 } else { 280 286 *trimsec = psRegionFromString(concept->data.V); 287 } 288 289 // Need to correct for binning when CELL.TRIMSEC are specified immutably in the CELLS 290 if (source == PM_CONCEPT_SOURCE_CELLS) { 291 psMetadataAddBool(cell->concepts, PS_LIST_TAIL, "CELL.TRIMSEC.UPDATE", 0, 292 "Need to update CELL.TRIMSEC when the binning is available.", 293 true); 281 294 } 282 295 … … 288 301 psMetadataItem *p_pmConceptParse_CELL_BIASSEC(const psMetadataItem *concept, 289 302 const psMetadataItem *pattern, 303 pmConceptSource source, 290 304 const psMetadata *cameraFormat, 291 305 const pmFPA *fpa, … … 336 350 } 337 351 352 // Need to correct for binning when CELL.BIASSEC are specified immutably in the CELLS 353 if (source == PM_CONCEPT_SOURCE_CELLS) { 354 psMetadataAddBool(cell->concepts, PS_LIST_TAIL, "CELL.BIASSEC.UPDATE", 0, 355 "Need to update CELL.BIASSEC when the binning is available.", 356 true); 357 } 358 338 359 psMetadataItem *item = psMetadataItemAllocPtr(pattern->name, PS_DATA_LIST, pattern->comment, biassecs); 339 360 psFree(biassecs); // Drop reference … … 344 365 psMetadataItem *p_pmConceptParse_CELL_Binning(const psMetadataItem *concept, 345 366 const psMetadataItem *pattern, 367 pmConceptSource source, 346 368 const psMetadata *cameraFormat, 347 369 const pmFPA *fpa, … … 381 403 psMetadataItem *p_pmConceptParse_TIMESYS(const psMetadataItem *concept, 382 404 const psMetadataItem *pattern, 405 pmConceptSource source, 383 406 const psMetadata *cameraFormat, 384 407 const pmFPA *fpa, … … 410 433 psMetadataItem *p_pmConceptParse_TIME(const psMetadataItem *concept, 411 434 const psMetadataItem *pattern, 435 pmConceptSource source, 412 436 const psMetadata *cameraFormat, 413 437 const pmFPA *fpa, … … 663 687 psMetadataItem *p_pmConceptParse_Positions(const psMetadataItem *concept, 664 688 const psMetadataItem *pattern, 689 pmConceptSource source, 665 690 const psMetadata *cameraFormat, 666 691 const pmFPA *fpa, … … 718 743 719 744 psMetadataItem *p_pmConceptFormat_CELL_TRIMSEC(const psMetadataItem *concept, 720 const psMetadata *cameraFormat, 721 const pmFPA *fpa, 722 const pmChip *chip, 723 const pmCell *cell) 724 { 725 assert(concept); 726 727 psRegion *trimsec = concept->data.V; // The trimsec region 745 pmConceptSource source, 746 const psMetadata *cameraFormat, 747 const pmFPA *fpa, 748 const pmChip *chip, 749 const pmCell *cell) 750 { 751 assert(concept); 752 753 psRegion *trimsec = psMemIncrRefCounter(concept->data.V); // The trimsec region 754 755 // Correct trim section for binning if it's specified explicitly (i.e., immutably) in the CELLS. 756 if (source == PM_CONCEPT_SOURCE_CELLS) { 757 bool xStatus, yStatus; // Status of MD lookups 758 int xBin = psMetadataLookupS32(&xStatus, cell->concepts, "CELL.XBIN"); 759 int yBin = psMetadataLookupS32(&yStatus, cell->concepts, "CELL.YBIN"); 760 if (!xStatus || !yStatus || xBin == 0 || yBin == 0) { 761 psWarning("Unable to find CELL.XBIN and CELL.YBIN to correct CELL.TRIMSEC.\n"); 762 return psMemIncrRefCounter((psPtr)concept); // Casting away "const" to increment 763 } 764 psRegion *newTrimsec = psRegionAlloc(trimsec->x0 * xBin, trimsec->x1 * xBin, 765 trimsec->y0 * yBin, trimsec->y1 * yBin); // Adjusted for binning 766 psFree(trimsec); 767 trimsec = newTrimsec; 768 } 769 728 770 psString trimsecString = psRegionToString(*trimsec); 771 psFree(trimsec); 729 772 psMetadataItem *formatted = psMetadataItemAllocStr(concept->name, concept->comment, 730 773 trimsecString); … … 734 777 735 778 psMetadataItem *p_pmConceptFormat_CELL_BIASSEC(const psMetadataItem *concept, 779 pmConceptSource source, 736 780 const psMetadata *cameraFormat, 737 781 const pmFPA *fpa, … … 745 789 psList *new = psListAlloc(NULL); // New list containing metadatas 746 790 while ((region = psListGetAndIncrement(biassecsIter))) { 791 792 // Correct bias section for binning if it's specified explicitly (i.e., immutably) in the CELLS. 793 if (source == PM_CONCEPT_SOURCE_CELLS) { 794 bool xStatus, yStatus; // Status of MD lookups 795 int xBin = psMetadataLookupS32(&xStatus, cell->concepts, "CELL.XBIN"); 796 int yBin = psMetadataLookupS32(&yStatus, cell->concepts, "CELL.YBIN"); 797 if (!xStatus || !yStatus || xBin == 0 || yBin == 0) { 798 psWarning("Unable to find CELL.XBIN and CELL.YBIN to correct CELL.BIASSEC.\n"); 799 } else { 800 psRegion *newTrimsec = psRegionAlloc(region->x0 * xBin, region->x1 * xBin, 801 region->y0 * yBin, region->y1 * yBin); 802 region = newTrimsec; 803 } 804 } else { 805 psMemIncrRefCounter(region); 806 } 807 747 808 psString regionString = psRegionToString(*region); // The string region "[x0:x1,y0:y1]" 809 psFree(region); 748 810 psMetadataItem *item = psMetadataItemAllocStr(concept->name, concept->comment, regionString); 749 811 psFree(regionString); // Drop reference … … 760 822 // same header. 761 823 psMetadataItem *p_pmConceptFormat_CELL_XBIN(const psMetadataItem *concept, 824 pmConceptSource source, 762 825 const psMetadata *cameraFormat, 763 826 const pmFPA *fpa, … … 787 850 // Only need to format if both if CELL.XBIN and CELL.YBIN are not specified by the same header. 788 851 psMetadataItem *p_pmConceptFormat_CELL_YBIN(const psMetadataItem *concept, 852 pmConceptSource source, 789 853 const psMetadata *cameraFormat, 790 854 const pmFPA *fpa, … … 810 874 811 875 psMetadataItem *p_pmConceptFormat_TIMESYS(const psMetadataItem *concept, 876 pmConceptSource source, 812 877 const psMetadata *cameraFormat, 813 878 const pmFPA *fpa, … … 839 904 840 905 psMetadataItem *p_pmConceptFormat_TIME(const psMetadataItem *concept, 906 pmConceptSource source, 841 907 const psMetadata *cameraFormat, 842 908 const pmFPA *fpa, … … 973 1039 974 1040 psMetadataItem *p_pmConceptFormat_Positions(const psMetadataItem *concept, 1041 pmConceptSource source, 975 1042 const psMetadata *cameraFormat, 976 1043 const pmFPA *fpa, … … 1042 1109 } 1043 1110 1111 -
trunk/psModules/src/concepts/pmConceptsStandard.h
r11253 r11749 4 4 * @author Paul Price, IfA 5 5 * 6 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $7 * @date $Date: 2007-0 1-24 02:54:15 $6 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2007-02-12 22:22:15 $ 8 8 * Copyright 2005-2006 Institute for Astronomy, University of Hawaii 9 9 */ … … 17 17 #include <pslib.h> 18 18 #include "pmFPA.h" 19 #include "pmConcepts.h" 19 20 20 21 /// Parse the FPA.FILTER concept to apply a lookup table 21 22 psMetadataItem *p_pmConceptParse_FPA_FILTER(const psMetadataItem *concept, ///< Concept to parse 22 23 const psMetadataItem *pattern, ///< Pattern to use in parsing 24 pmConceptSource source, ///< Source for concept 23 25 const psMetadata *cameraFormat, ///< Camera format definition 24 26 const pmFPA *fpa, ///< FPA for concept, or NULL … … 29 31 /// Format the FPA.FILTER concept to (reverse-)apply a lookup table 30 32 psMetadataItem *p_pmConceptFormat_FPA_FILTER(const psMetadataItem *concept, ///< Concept to format 33 pmConceptSource source, ///< Source for concept 31 34 const psMetadata *cameraFormat, ///< Camera format definition 32 35 const pmFPA *fpa, ///< FPA for concept, or NULL … … 38 41 psMetadataItem *p_pmConceptParse_FPA_Coords(const psMetadataItem *concept, ///< Concept to parse 39 42 const psMetadataItem *pattern, ///< Pattern to use in parsing 43 pmConceptSource source, ///< Source for concept 40 44 const psMetadata *cameraFormat, ///< Camera format definition 41 45 const pmFPA *fpa, ///< FPA for concept, or NULL … … 46 50 /// Format the coordinates concepts: FPA.RA and FPA.DEC 47 51 psMetadataItem *p_pmConceptFormat_FPA_Coords(const psMetadataItem *concept, ///< Concept to format 52 pmConceptSource source, ///< Source for concept 48 53 const psMetadata *cameraFormat, ///< Camera format definition 49 54 const pmFPA *fpa, ///< FPA for concept, or NULL … … 55 60 psMetadataItem *p_pmConceptParse_CELL_TRIMSEC(const psMetadataItem *concept, ///< Concept to parse 56 61 const psMetadataItem *pattern, ///< Pattern to use in parsing 62 pmConceptSource source, ///< Source for concept 57 63 const psMetadata *cameraFormat, ///< Camera format definition 58 64 const pmFPA *fpa, ///< FPA for concept, or NULL … … 64 70 psMetadataItem *p_pmConceptParse_CELL_BIASSEC(const psMetadataItem *concept, ///< Concept to parse 65 71 const psMetadataItem *pattern, ///< Pattern to use in parsing 72 pmConceptSource source, ///< Source for concept 66 73 const psMetadata *cameraFormat, ///< Camera format definition 67 74 const pmFPA *fpa, ///< FPA for concept, or NULL … … 73 80 psMetadataItem *p_pmConceptParse_CELL_Binning(const psMetadataItem *concept, ///< Concept to parse 74 81 const psMetadataItem *pattern, ///< Pattern to use in parsing 82 pmConceptSource source, ///< Source for concept 75 83 const psMetadata *cameraFormat, ///< Camera format definition 76 84 const pmFPA *fpa, ///< FPA for concept, or NULL … … 82 90 psMetadataItem *p_pmConceptParse_TIMESYS(const psMetadataItem *concept, ///< Concept to parse 83 91 const psMetadataItem *pattern, ///< Pattern to use in parsing 92 pmConceptSource source, ///< Source for concept 84 93 const psMetadata *cameraFormat, ///< Camera format definition 85 94 const pmFPA *fpa, ///< FPA for concept, or NULL … … 91 100 psMetadataItem *p_pmConceptParse_TIME(const psMetadataItem *concept, ///< Concept to parse 92 101 const psMetadataItem *pattern, ///< Pattern to use in parsing 102 pmConceptSource source, ///< Source for concept 93 103 const psMetadata *cameraFormat, ///< Camera format definition 94 104 const pmFPA *fpa, ///< FPA for concept, or NULL … … 100 110 psMetadataItem *p_pmConceptParse_Positions(const psMetadataItem *concept, ///< Concept to parse 101 111 const psMetadataItem *pattern, ///< Pattern to use in parsing 102 const psMetadata *cameraFormat, ///< Camera format definition 112 pmConceptSource source, ///< Source for concept 113 const psMetadata *cameraFormat, ///< Camera format definition 103 114 const pmFPA *fpa, ///< FPA for concept, or NULL 104 115 const pmChip *chip, ///< Chip for concept, or NULL … … 108 119 /// Format the CELL.TRIMSEC concept 109 120 psMetadataItem *p_pmConceptFormat_CELL_TRIMSEC(const psMetadataItem *concept, ///< Concept to format 121 pmConceptSource source, ///< Source for concept 110 122 const psMetadata *cameraFormat, ///< Camera format definition 111 123 const pmFPA *fpa, ///< FPA for concept, or NULL … … 116 128 /// Format the CELL.BIASSEC concept 117 129 psMetadataItem *p_pmConceptFormat_CELL_BIASSEC(const psMetadataItem *concept, ///< Concept to format 130 pmConceptSource source, ///< Source for concept 118 131 const psMetadata *cameraFormat, ///< Camera format definition 119 132 const pmFPA *fpa, ///< FPA for concept, or NULL … … 124 137 /// Format the CELL.XBIN concept 125 138 psMetadataItem *p_pmConceptFormat_CELL_XBIN(const psMetadataItem *concept, ///< Concept to format 139 pmConceptSource source, ///< Source for concept 126 140 const psMetadata *cameraFormat, ///< Camera format definition 127 141 const pmFPA *fpa, ///< FPA for concept, or NULL … … 132 146 /// Format the CELL.YBIN concept 133 147 psMetadataItem *p_pmConceptFormat_CELL_YBIN(const psMetadataItem *concept, ///< Concept to format 148 pmConceptSource source, ///< Source for concept 134 149 const psMetadata *cameraFormat, ///< Camera format definition 135 150 const pmFPA *fpa, ///< FPA for concept, or NULL … … 140 155 /// Format the time system concepts: FPA.TIMESYS and CELL.TIMESYS 141 156 psMetadataItem *p_pmConceptFormat_TIMESYS(const psMetadataItem *concept, ///< Concept to format 157 pmConceptSource source, ///< Source for concept 142 158 const psMetadata *cameraFormat, ///< Camera format definition 143 159 const pmFPA *fpa, ///< FPA for concept, or NULL … … 148 164 /// Format the time concepts: FPA.TIME and CELL.TIME 149 165 psMetadataItem *p_pmConceptFormat_TIME(const psMetadataItem *concept, ///< Concept to format 166 pmConceptSource source, ///< Source for concept 150 167 const psMetadata *cameraFormat, ///< Camera format definition 151 168 const pmFPA *fpa, ///< FPA for concept, or NULL … … 156 173 /// Format a cell position concept, e.g., CELL.X0 157 174 psMetadataItem *p_pmConceptFormat_Positions(const psMetadataItem *concept, ///< Concept to format 175 pmConceptSource source, ///< Source for concept 158 176 const psMetadata *cameraFormat, ///< Camera format definition 159 177 const pmFPA *fpa, ///< FPA for concept, or NULL -
trunk/psModules/src/concepts/pmConceptsWrite.c
r11257 r11749 106 106 static psMetadataItem *conceptFormat(const pmConceptSpec *spec, // The concept specification 107 107 const psMetadataItem *concept, // The concept to parse 108 pmConceptSource source, // The concept source 108 109 const psMetadata *cameraFormat, // The camera format 109 110 const pmFPA *fpa, // The FPA … … 118 119 psMetadataItem *formatted = NULL; // The formatted concept 119 120 if (spec->format) { 120 formatted = spec->format(concept, cameraFormat, fpa, chip, cell);121 formatted = spec->format(concept, source, cameraFormat, fpa, chip, cell); 121 122 } else if (strcmp(concept->name, spec->blank->name) != 0) { 122 123 // Adjust so that the name is correct … … 251 252 // Grab the concept 252 253 psMetadataItem *conceptItem = psMetadataLookup(concepts, name); // The concept 253 // Formatted version 254 psMetadataItem *formatted = conceptFormat(spec, conceptItem, cameraFormat, NULL, NULL, cell); 255 if (!formatted) { 256 continue; 257 } 254 258 255 psString nameSource = NULL; // String with the concept name and ".SOURCE" added 259 256 psStringAppend(&nameSource, "%s.SOURCE", name); … … 268 265 continue; 269 266 } 267 268 // Formatted version 269 psMetadataItem *formatted = conceptFormat(spec, conceptItem, PM_CONCEPT_SOURCE_HEADER, 270 cameraFormat, NULL, NULL, cell); 271 if (!formatted) { 272 continue; 273 } 274 270 275 psTrace("psModules.concepts", 8, "Writing %s to header %s\n", name, cameraItem->data.str); 271 276 writeHeader(hdu, cameraItem->data.V, formatted); 277 psFree(formatted); 272 278 } else if (strcasecmp(source, "VALUE") == 0) { 279 // Formatted version 280 psMetadataItem *formatted = conceptFormat(spec, conceptItem, PM_CONCEPT_SOURCE_CELLS, 281 cameraFormat, NULL, NULL, cell); 282 if (!formatted) { 283 continue; 284 } 285 273 286 psTrace("psModules.concepts", 8, "Checking %s against camera format.\n", name); 274 287 if (! compareConcepts(formatted, cameraItem)) { … … 276 289 "format, but the values don't match.\n", name); 277 290 } 291 psFree(formatted); 278 292 } else { 279 293 psLogMsg(__func__, PS_LOG_WARN, "Concept source %s isn't HEADER or VALUE --- can't " 280 294 "write\n", nameSource); 281 295 } 282 } else if (! compareConcepts(formatted, cameraItem)){296 } else { 283 297 // Assume it's specified by value 284 psLogMsg(__func__, PS_LOG_WARN, "Concept %s is specified by value in the camera " 285 "format, but the values don't match.\n", name); 286 } 287 psFree(formatted); 298 psMetadataItem *formatted = conceptFormat(spec, conceptItem, PM_CONCEPT_SOURCE_CELLS, 299 cameraFormat, NULL, NULL, cell); 300 if (!formatted) { 301 continue; 302 } 303 304 if (! compareConcepts(formatted, cameraItem)) { 305 psLogMsg(__func__, PS_LOG_WARN, "Concept %s is specified by value in the camera " 306 "format, but the values don't match.\n", name); 307 } 308 psFree(formatted); 309 } 288 310 psFree(nameSource); 289 311 } … … 346 368 } 347 369 conceptItem = psMetadataLookup(concepts, name); // The item from the concepts 348 psMetadataItem *formatted = conceptFormat(spec, conceptItem, cameraFormat, fpa, chip, cell); 370 psMetadataItem *formatted = conceptFormat(spec, conceptItem, PM_CONCEPT_SOURCE_DEFAULTS, 371 cameraFormat, fpa, chip, cell); 349 372 if (!formatted) { 350 373 continue; … … 394 417 psTrace("psModules.concepts", 3, "Writing %s to header %s\n", name, headerItem->data.str); 395 418 psMetadataItem *conceptItem = psMetadataLookup(concepts, name); // The item from the concepts 396 psMetadataItem *formatted = conceptFormat(spec, conceptItem, cameraFormat, fpa, chip, cell); 419 psMetadataItem *formatted = conceptFormat(spec, conceptItem, PM_CONCEPT_SOURCE_HEADER, 420 cameraFormat, fpa, chip, cell); 397 421 if (!formatted) { 398 422 continue; … … 446 470 447 471 psMetadataItem *conceptItem = psMetadataLookup(concepts, name); // The item from the concepts 448 psMetadataItem *formatted = conceptFormat(spec, conceptItem, cameraFormat, fpa, chip, cell); 472 psMetadataItem *formatted = conceptFormat(spec, conceptItem, PM_CONCEPT_SOURCE_DATABASE, 473 cameraFormat, fpa, chip, cell); 449 474 if (!formatted) { 450 475 continue;
Note:
See TracChangeset
for help on using the changeset viewer.
