IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 9, 2006, 3:55:20 PM (20 years ago)
Author:
Paul Price
Message:

Was having trouble reading and writing concepts at different levels. Added 'propagateUp' and 'propagateDown' flags to the pmConceptsRead and pmConceptsWrite functions so we can read up and down the hierarchy. For example, when you read a header at the chip level, it may be a PHU so that you want the FPA to also read concepts from it if it doesn't have its own HDU, and you want the cell to read concepts from it if it doesn't have its own HDU. But if I add a PHU, I only want to propagate upwards, because the downwards propagation will occur when I read the header lower down.

Location:
trunk/psModules/src/concepts
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/concepts/pmConcepts.c

    r7447 r7469  
    189189    }
    190190
     191    psTrace(__func__, 3, "Writing concepts (%x %x %x): %x\n", fpa, chip, cell, source);
     192
    191193    if (source & PM_CONCEPT_SOURCE_CAMERA) {
    192194        pmConceptsWriteToCamera(*specs, cell, concepts);
     
    218220bool pmConceptsReadFPA(pmFPA *fpa,      // FPA for which to read concepts
    219221                       pmConceptSource source, // The source of the concepts to read
    220                        psDB *db         // Database handle
     222                       bool propagateDown, // Propagate to lower levels?
     223                       psDB *db        // Database handle
    221224                      )
    222225{
    223226    PS_ASSERT_PTR_NON_NULL(fpa, false);
    224227    psTrace("psModule.concepts", 5, "Reading FPA concepts: %x %x\n", conceptsFPA, fpa->concepts);
    225     return conceptsRead(&conceptsFPA, fpa, NULL, NULL, &fpa->conceptsRead, source, db, fpa->concepts);
     228    bool success = conceptsRead(&conceptsFPA, fpa, NULL, NULL, &fpa->conceptsRead, source, db, fpa->concepts);
     229    if (propagateDown) {
     230        psArray *chips = fpa->chips;    // Array of chips
     231        for (long i = 0; i < chips->n; i++) {
     232            pmChip *chip = chips->data[i]; // Chip of interest
     233            if (chip && !chip->hdu) {
     234                success |= pmConceptsReadChip(chip, source, false, true, db);
     235            }
     236        }
     237    }
     238
     239    return success;
    226240}
    227241
     
    229243bool pmConceptsWriteFPA(pmFPA *fpa,     // FPA for which to write concepts
    230244                        pmConceptSource source, // The source of the concepts to read
     245                        bool propagateDown, // Propagate to lower levels?
    231246                        psDB *db        // Database handle
    232247                       )
     
    234249    PS_ASSERT_PTR_NON_NULL(fpa, false);
    235250    psTrace("psModule.concepts", 5, "Writing FPA concepts: %x %x\n", conceptsFPA, fpa->concepts);
    236     return conceptsWrite(&conceptsFPA, fpa, NULL, NULL, source, db, fpa->concepts);
     251    bool success = conceptsWrite(&conceptsFPA, fpa, NULL, NULL, source, db, fpa->concepts);
     252    if (propagateDown) {
     253        psArray *chips = fpa->chips;        // Array of chips
     254        for (long i = 0; i < chips->n; i++) {
     255            pmChip *chip = chips->data[i];  // Chip of interest
     256            if (chip && !chip->hdu) {
     257                success |= pmConceptsWriteChip(chip, source, false, true, db);
     258            }
     259        }
     260    }
     261    return success;
    237262}
    238263
     
    249274bool pmConceptsReadChip(pmChip *chip,   // Chip for which to read concepts
    250275                        pmConceptSource source, // The source of the concepts to read
    251                         bool propagate, // Propagate to higher levels as well?
     276                        bool propagateUp, // Propagate to higher levels?
     277                        bool propagateDown, // Propagate to lower levels?
    252278                        psDB *db        // Database handle
    253279                       )
     
    256282    psTrace("psModule.concepts", 5, "Reading chip concepts: %x %x\n", conceptsChip, chip->concepts);
    257283    pmFPA *fpa = chip->parent;          // FPA to which the chip belongs
    258     return conceptsRead(&conceptsChip, fpa, chip, NULL, &chip->conceptsRead, source, db, chip->concepts) &&
    259            ((propagate && conceptsRead(&conceptsFPA, fpa, chip, NULL, &fpa->conceptsRead, source, db,
    260                                        fpa->concepts)) ||
    261             !propagate);
     284    bool success = conceptsRead(&conceptsChip, fpa, chip, NULL, &chip->conceptsRead, source, db,
     285                                chip->concepts);
     286    if (propagateUp && !fpa->hdu) {
     287        success |= conceptsRead(&conceptsFPA, fpa, chip, NULL, &fpa->conceptsRead, source, db, fpa->concepts);
     288    }
     289    if (propagateDown) {
     290        psArray *cells = chip->cells;        // Array of cells
     291        for (long i = 0; i < cells->n; i++) {
     292            pmCell *cell = cells->data[i];  // Cell of interest
     293            if (cell && !cell->hdu) {
     294                success |= pmConceptsReadCell(cell, source, false, db);
     295            }
     296        }
     297    }
     298    return success;
    262299}
    263300
     
    265302bool pmConceptsWriteChip(pmChip *chip,  // Chip for which to write concepts
    266303                         pmConceptSource source, // The source of the concepts to read
    267                          bool propagate,// Propagate to higher levels as well?
     304                         bool propagateUp, // Propagate to higher levels?
     305                         bool propagateDown, // Propagate to lower levels?
    268306                         psDB *db        // Database handle
    269307                        )
     
    272310    psTrace("psModule.concepts", 5, "Writing chip concepts: %x %x\n", conceptsChip, chip->concepts);
    273311    pmFPA *fpa = chip->parent;          // FPA to which the chip belongs
    274     return conceptsWrite(&conceptsChip, fpa, chip, NULL, source, db, chip->concepts) &&
    275            ((propagate && conceptsWrite(&conceptsFPA, fpa, chip, NULL, source, db, fpa->concepts)) ||
    276             !propagate);
     312    bool success = conceptsWrite(&conceptsChip, fpa, chip, NULL, source, db, chip->concepts);
     313    if (propagateUp && !fpa->hdu) {
     314        success |= conceptsWrite(&conceptsFPA, fpa, chip, NULL, source, db, fpa->concepts);
     315    }
     316    if (propagateDown) {
     317        psArray *cells = chip->cells;        // Array of cells
     318        for (long i = 0; i < cells->n; i++) {
     319            pmCell *cell = cells->data[i];  // Cell of interest
     320            if (cell && !cell->hdu) {
     321                success |= pmConceptsWriteCell(cell, source, false, db);
     322            }
     323        }
     324    }
     325    return success;
    277326}
    278327
     
    289338bool pmConceptsReadCell(pmCell *cell,   // Cell for which to read concepts
    290339                        pmConceptSource source, // The source of the concepts to read
    291                         bool propagate,// Propagate to higher levels as well?
     340                        bool propagateUp, // Propagate to higher levels?
    292341                        psDB *db        // Database handle
    293342                       )
     
    298347    pmFPA *fpa = chip->parent;          // FPA to which the chip belongs
    299348
    300     bool cellSuccess = conceptsRead(&conceptsCell, fpa, chip, cell, &cell->conceptsRead, source, db, cell->concepts);
    301 
    302     bool chipSuccess = true;
    303     if (propagate) {
    304         chipSuccess = conceptsRead(&conceptsChip, fpa, chip, cell, &chip->conceptsRead, source, db, chip->concepts);
    305     }
    306 
    307     bool fpaSuccess = true;
    308     if (propagate) {
    309         fpaSuccess = conceptsRead(&conceptsFPA, fpa, chip, cell, &fpa->conceptsRead, source, db, fpa->concepts);
    310     }
    311 
    312     return (cellSuccess && chipSuccess && fpaSuccess);
     349    bool success = conceptsRead(&conceptsCell, fpa, chip, cell, &cell->conceptsRead, source, db,
     350                                cell->concepts);
     351    if (propagateUp) {
     352        if (!chip->hdu) {
     353            success |= conceptsRead(&conceptsChip, fpa, chip, cell, &chip->conceptsRead, source, db,
     354                                    chip->concepts);
     355            if (!fpa->hdu) {
     356                success |= conceptsRead(&conceptsFPA, fpa, chip, cell, &fpa->conceptsRead, source, db,
     357                                        fpa->concepts);
     358            }
     359        }
     360    }
     361
     362    return success;
    313363}
    314364
     
    316366bool pmConceptsWriteCell(pmCell *cell,  // FPA for which to write concepts
    317367                         pmConceptSource source, // The source of the concepts to read
    318                          bool propagate,// Propagate to higher levels as well?
     368                         bool propagateUp, // Propagate to higher levels?
    319369                         psDB *db       // Database handle
    320370                        )
     
    324374    pmChip *chip = cell->parent;        // Chip to which the cell belongs
    325375    pmFPA *fpa = chip->parent;          // FPA to which the chip belongs
    326     return conceptsWrite(&conceptsCell, fpa, chip, cell, source, db, cell->concepts) &&
    327            ((propagate && conceptsWrite(&conceptsChip, fpa, chip, cell, source, db, chip->concepts) &&
    328              conceptsWrite(&conceptsFPA, fpa, chip, cell, source, db, fpa->concepts)) || !propagate);
     376
     377    bool success = conceptsWrite(&conceptsCell, fpa, chip, cell, source, db, cell->concepts);
     378    if (propagateUp) {
     379        if (!chip->hdu) {
     380            success |= conceptsWrite(&conceptsChip, fpa, chip, cell, source, db, chip->concepts);
     381            if (!fpa->hdu) {
     382                success |= conceptsWrite(&conceptsFPA, fpa, chip, cell, source, db, fpa->concepts);
     383            }
     384        }
     385    }
     386
     387    return success;
    329388}
    330389
  • trunk/psModules/src/concepts/pmConcepts.h

    r7311 r7469  
    4747bool pmConceptsReadFPA(pmFPA *fpa,      // FPA for which to read concepts
    4848                       pmConceptSource source, // Source for concepts
     49                       bool propagateDown, // Propagate to lower levels?
    4950                       psDB *db         // Database handle
    5051                      );
    5152bool pmConceptsWriteFPA(pmFPA *fpa,     // FPA for which to write concepts
    5253                        pmConceptSource source, // Source for concepts
     54                        bool propagateDown, // Propagate to lower levels?
    5355                        psDB *db        // Database handle
    5456                       );
     
    5759bool pmConceptsReadChip(pmChip *chip,   // Chip for which to read concepts
    5860                        pmConceptSource source, // Source for concepts
    59                         bool propagate, // Propagate to higher levels as well?
     61                        bool propagateUp, // Propagate to higher levels?
     62                        bool propagateDown, // Propagate to lower levels?
    6063                        psDB *db        // Database handle
    6164                       );
    6265bool pmConceptsWriteChip(pmChip *chip,  // Chip for which to write concepts
    6366                         pmConceptSource source, // Source for concepts
    64                          bool propagate,// Propagate to higher levels as well?
     67                         bool propagateUp,// Propagate to higher levels?
     68                         bool propagateDown, // Propagate to lower levels?
    6569                         psDB *db       // Database handle
    6670                        );
     
    6973bool pmConceptsReadCell(pmCell *cell,   // Cell for which to read concepts
    7074                        pmConceptSource source, // Source for concepts
    71                         bool propagate, // Propagate to higher levels as well?
     75                        bool propagateUp, // Propagate to higher levels?
    7276                        psDB *db        // Database handle
    7377                       );
    7478bool pmConceptsWriteCell(pmCell *cell,  // FPA for which to write concepts
    7579                         pmConceptSource source, // Source for concepts
    76                          bool propagate,// Propagate to higher levels as well?
     80                         bool propagateUp, // Propagate to higher levels?
    7781                         psDB *db       // Database handle
    7882                        );
  • trunk/psModules/src/concepts/pmConceptsWrite.c

    r7382 r7469  
    141141    switch (item->type) {
    142142    case PS_DATA_STRING:
     143        psTrace(__func__, 9, "Writing header %s: %s\n", keyword, item->data.V);
    143144        return psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, item->comment,
    144145                                item->data.V);
    145146    case PS_DATA_S32:
     147        psTrace(__func__, 9, "Writing header %s: %d\n", keyword, item->data.S32);
    146148        return psMetadataAddS32(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, item->comment,
    147149                                item->data.S32);
    148150    case PS_DATA_F32:
     151        psTrace(__func__, 9, "Writing header %s: %f\n", keyword, item->data.F32);
    149152        return psMetadataAddF32(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, item->comment,
    150153                                item->data.F32);
    151154    case PS_DATA_F64:
     155        psTrace(__func__, 9, "Writing header %s: %f\n", keyword, item->data.F64);
    152156        return psMetadataAddF64(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, item->comment,
    153157                                item->data.F64);
    154158    case PS_DATA_REGION: {
    155159            psString region = psRegionToString(*(psRegion*)item->data.V);
     160            psTrace(__func__, 9, "Writing header %s: %s\n", keyword, region);
    156161            bool result = psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, item->comment,
    157162                                           region);
     
    378383                continue;
    379384            }
     385            psTrace(__func__, 3, "Writing %s to header %s\n", name, headerItem->data.V);
    380386            psMetadataItem *conceptItem = psMetadataLookup(concepts, name); // The item from the concepts
    381387            psMetadataItem *formatted = conceptFormat(spec, conceptItem, cameraFormat, fpa, chip, cell);
Note: See TracChangeset for help on using the changeset viewer.