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.

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.