IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 11095


Ignore:
Timestamp:
Jan 14, 2007, 3:16:55 PM (19 years ago)
Author:
eugene
Message:

added tests for filters for flat and fringe detrends

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppImage/src/ppImageParseCamera.c

    r10969 r11095  
    1616        return NULL;
    1717    }
     18
     19    // determine filter from the concepts
     20    char *filter = psMetadataLookupStr (&status, input->fpa->concepts, "FPA.FILTER");
    1821
    1922#if 0
     
    8285        }
    8386    }
     87
    8488    if (options->doFlat) {
    85         bool status = false;
    86         pmFPAfileDefineFromArgs  (&status, config, "PPIMAGE.FLAT", "FLAT");
    87         pmFPAfileDefineFromConf  (&status, config, "PPIMAGE.FLAT");
    88         pmFPAfileDefineFromDetDB (&status, config, "PPIMAGE.FLAT", input->fpa, PM_DETREND_TYPE_FLAT);
    89         if (!status) {
    90             psError (PS_ERR_IO, false, "can't find a flat image source");
    91             return NULL;
    92         }
    93     }
     89        // select FLAT.FILTERS from the recipe and test if the filter matches
     90        // is the mdi saved with psList or string?
     91        psMetadataItem *mdi = psMetadataLookup (recipe, "FLAT.FILTERS");
     92        if (mdi == NULL) {
     93            // no valid filters for flat data for this camera
     94            options->doFlat = false;
     95            goto skip_flat;
     96        }
     97        // place entry on a list regardless of type
     98        psList *filters = NULL;
     99        if (mdi->type == PS_DATA_STRING) {
     100            filters = psListAlloc(NULL);
     101            psListAdd (filters, PS_LIST_HEAD, mdi);
     102        } else {
     103            if (mdi->type != PS_DATA_METADATA_MULTI) psAbort ("ppImage", "invalid type for FLAT.FILTERS");
     104            filter = psMemIncrRefCounter(mdi->data.list);
     105        }
     106
     107        // search through list to find the current filter
     108        psListIterator *iter = psListIteratorAlloc (filters, PS_LIST_HEAD, FALSE);
     109        options->doFlat = false;
     110        for (int i = 0; !options->doFlat && (i < filters->n); i++) {
     111            psMetadataItem *item = psListGetAndIncrement (iter);
     112            char *validFilter = item->data.V;
     113            if (strcmp (validFilter, filter)) continue;
     114            options->doFlat = true;
     115        }
     116    }
     117skip_flat:
     118    if (options->doFlat) {
     119        bool status = false;
     120        pmFPAfileDefineFromArgs  (&status, config, "PPIMAGE.FLAT", "FLAT");
     121        pmFPAfileDefineFromConf  (&status, config, "PPIMAGE.FLAT");
     122        pmFPAfileDefineFromDetDB (&status, config, "PPIMAGE.FLAT", input->fpa, PM_DETREND_TYPE_FLAT);
     123        if (!status) {
     124            psError (PS_ERR_IO, false, "can't find a flat image source");
     125            return NULL;
     126        }
     127    }
     128
    94129    if (options->doFringe) {
    95         bool status = false;
    96         pmFPAfileDefineFromArgs  (&status, config, "PPIMAGE.FRINGE", "FRINGE");
    97         pmFPAfileDefineFromConf  (&status, config, "PPIMAGE.FRINGE");
    98         pmFPAfileDefineFromDetDB (&status, config, "PPIMAGE.FRINGE", input->fpa, PM_DETREND_TYPE_FRINGE_IMAGE);
    99         if (!status) {
    100             psError (PS_ERR_IO, false, "can't find a fringe image source");
    101             return NULL;
    102         }
     130        // select FRINGE.FILTERS from the recipe and test if the filter matches
     131        // is the mdi saved with psList or string?
     132        psMetadataItem *mdi = psMetadataLookup (recipe, "FRINGE.FILTERS");
     133        if (mdi == NULL) {
     134            // no valid filters for fringe data for this camera
     135            options->doFringe = false;
     136            goto skip_fringe;
     137        }
     138        // place entry on a list regardless of type
     139        psList *filters = NULL;
     140        if (mdi->type == PS_DATA_STRING) {
     141            filters = psListAlloc(NULL);
     142            psListAdd (filters, PS_LIST_HEAD, mdi);
     143        } else {
     144            if (mdi->type != PS_DATA_METADATA_MULTI) psAbort ("ppImage", "invalid type for FRINGE.FILTERS");
     145            filter = psMemIncrRefCounter(mdi->data.list);
     146        }
     147
     148        // search through list to find the current filter
     149        psListIterator *iter = psListIteratorAlloc (filters, PS_LIST_HEAD, FALSE);
     150        options->doFringe = false;
     151        for (int i = 0; !options->doFringe && (i < filters->n); i++) {
     152            psMetadataItem *item = psListGetAndIncrement (iter);
     153            char *validFilter = item->data.V;
     154            if (strcmp (validFilter, filter)) continue;
     155            options->doFringe = true;
     156        }
     157    }
     158skip_fringe:
     159    if (options->doFringe) {
     160        bool status = false;
     161        pmFPAfileDefineFromArgs  (&status, config, "PPIMAGE.FRINGE", "FRINGE");
     162        pmFPAfileDefineFromConf  (&status, config, "PPIMAGE.FRINGE");
     163        pmFPAfileDefineFromDetDB (&status, config, "PPIMAGE.FRINGE", input->fpa, PM_DETREND_TYPE_FRINGE_IMAGE);
     164        if (!status) {
     165            psError (PS_ERR_IO, false, "can't find a fringe image source");
     166            return NULL;
     167        }
    103168    }
    104169
Note: See TracChangeset for help on using the changeset viewer.