IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 14, 2013, 6:21:39 AM (13 years ago)
Author:
eugene
Message:

extend galaxy tests; add recipe selection option to refine the set of extended fits used; cleanup extended fits outputs and leaks

Location:
branches/eam_branches/ipp-20130509/psphot
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20130509/psphot/src/psphotExtendedSourceFits.c

    r35654 r35661  
    7373    if (!sources->n) {
    7474        psLogMsg ("psphot", PS_LOG_INFO, "no sources, skipping source size");
     75        psphotSersicModelClassCleanup();
    7576        return true;
    7677    }
     
    8384    // do not thread if we are trying to study the fitting process
    8485    if (psTraceGetLevel ("psphot.psphotFitEXT") >= 6) {
    85       nThreads = 0;
     86        nThreads = 0;
    8687    }
    8788
     
    138139
    139140    // select the collection of desired models
    140     psMetadata *models = psMetadataLookupMetadata (&status, recipe, "EXTENDED_SOURCE_MODELS");
     141    psMetadata *allModels = psMetadataLookupMetadata (&status, recipe, "EXTENDED_SOURCE_MODELS");
    141142    if (!status) {
    142143        psWarning ("extended source model fits requested but model model is missing (EXTENDED_SOURCE_MODELS)\n");
    143144        psFree (fitOptions);
     145        psphotSersicModelClassCleanup();
    144146        return true;
    145147    }
    146     if (models->list->n == 0) {
     148    if (allModels->list->n == 0) {
    147149        psWarning ("extended source model fits requested but no models are specified\n");
    148150        psFree (fitOptions);
     151        psphotSersicModelClassCleanup();
    149152        return true;
    150153    }
     154
     155    psMetadata *models = NULL;
     156    char *modelSelection = psMetadataLookupStr (&status, recipe, "EXTENDED_SOURCE_MODELS_SELECTION");
     157    if (!modelSelection || !status) {
     158        models = psMemIncrRefCounter(allModels);
     159        goto got_models;
     160    }
     161
     162    if (!strcasecmp(modelSelection, "ALL")) {
     163        models = psMemIncrRefCounter(allModels);
     164        goto got_models;
     165    }
     166
     167    if (!strcasecmp(modelSelection, "NONE")) {
     168        psWarning ("extended source model fits requested but no models are selected (EXTENDED_SOURCE_MODELS_SELECTION = NONE)\n");
     169        psFree (fitOptions);
     170        psphotSersicModelClassCleanup();
     171        return true;
     172    }
     173
     174    psArray *selection = psStringSplitArray (modelSelection, ",", false);
     175    if (selection->n == 0) {
     176        psWarning ("extended source model fits requested but model selection string is empty (EXTENDED_SOURCE_MODELS_SELECTION)\n");
     177        psFree (fitOptions);
     178        psFree (selection);
     179        psphotSersicModelClassCleanup();
     180        return true;
     181    }
     182    models = psMetadataAlloc();
     183    for (int i = 0; i < selection->n; i++) {
     184        psMetadata *model = psMetadataLookupMetadata (&status, allModels, selection->data[i]);
     185        if (!model) {
     186            psWarning ("extended source model selection string includes an invalid name %s\n", (char *) selection->data[i]);
     187            continue;
     188        }
     189        psMetadataAddMetadata (models, PS_LIST_TAIL, selection->data[i], PS_META_REPLACE, "extended model", model);
     190    }
     191    psFree (selection);
     192
     193    if (models->list->n == 0) {
     194        psWarning ("extended source model fits requested but no valid models in selection string (EXTENDED_SOURCE_MODELS_SELECTION = %s)\n", modelSelection);
     195        psFree (fitOptions);
     196        psFree (models);
     197        psphotSersicModelClassCleanup();
     198        return true;
     199    }
     200
     201got_models:
    151202
    152203    psphotInitRadiusEXT (recipe, readout);
     
    157208    while ((item = psMetadataGetAndIncrement (iter)) != NULL) {
    158209
    159       if (item->type != PS_DATA_METADATA) {
    160         // XXX we could cull the bad entries or build a validated model folder
    161         psAbort ("Invalid type for EXTENDED_SOURCE_MODEL entry %s, not a metadata folder", item->name);
    162       }
    163 
    164       psMetadata *model = (psMetadata *) item->data.md;
    165 
    166       // check on the model type
    167       char *modelName = psMetadataLookupStr (&status, model, "MODEL");
    168       int modelType = pmModelClassGetType (modelName);
    169       if (modelType < 0) {
    170         psAbort ("Unknown model class for EXTENDED_SOURCE_MODEL entry %s: %s", item->name, modelName);
    171       }
    172       psMetadataAddS32 (model, PS_LIST_TAIL, "MODEL_TYPE", PS_META_REPLACE, "", modelType);
    173 
    174       // check on the SNLIM, set a float value
    175       char *SNword = psMetadataLookupStr (&status, model, "SNLIM");
    176       if (!status) {
    177         psAbort("SNLIM not defined for extended source model %s\n", item->name);
    178       }
    179       float SNlim = atof (SNword);
    180       psMetadataAddF32 (model, PS_LIST_TAIL, "SNLIM_VALUE", PS_META_REPLACE, "", SNlim);
    181 
    182       // check on the PSF-Convolution status
    183       char *convolvedWord = psMetadataLookupStr (&status, model, "PSF_CONVOLVED");
    184       if (!status || (strcasecmp (convolvedWord, "true") && strcasecmp (convolvedWord, "false"))) {
    185         psAbort ("PSF_CONVOLVED entry invalid or missing for EXTENDED_SOURCE_MODEL entry %s", item->name);
    186       }
    187       bool convolved = !strcasecmp (convolvedWord, "true");
    188       psMetadataAddBool (model, PS_LIST_TAIL, "PSF_CONVOLVED_VALUE", PS_META_REPLACE, "", convolved);
     210        if (item->type != PS_DATA_METADATA) {
     211            // XXX we could cull the bad entries or build a validated model folder
     212            psAbort ("Invalid type for EXTENDED_SOURCE_MODEL entry %s, not a metadata folder", item->name);
     213        }
     214
     215        psMetadata *model = (psMetadata *) item->data.md;
     216
     217        // check on the model type
     218        char *modelName = psMetadataLookupStr (&status, model, "MODEL");
     219        int modelType = pmModelClassGetType (modelName);
     220        if (modelType < 0) {
     221            psAbort ("Unknown model class for EXTENDED_SOURCE_MODEL entry %s: %s", item->name, modelName);
     222        }
     223        psMetadataAddS32 (model, PS_LIST_TAIL, "MODEL_TYPE", PS_META_REPLACE, "", modelType);
     224
     225        // check on the SNLIM, set a float value
     226        char *SNword = psMetadataLookupStr (&status, model, "SNLIM");
     227        if (!status) {
     228            psAbort("SNLIM not defined for extended source model %s\n", item->name);
     229        }
     230        float SNlim = atof (SNword);
     231        psMetadataAddF32 (model, PS_LIST_TAIL, "SNLIM_VALUE", PS_META_REPLACE, "", SNlim);
     232
     233        // check on the PSF-Convolution status
     234        char *convolvedWord = psMetadataLookupStr (&status, model, "PSF_CONVOLVED");
     235        if (!status || (strcasecmp (convolvedWord, "true") && strcasecmp (convolvedWord, "false"))) {
     236            psAbort ("PSF_CONVOLVED entry invalid or missing for EXTENDED_SOURCE_MODEL entry %s", item->name);
     237        }
     238        bool convolved = !strcasecmp (convolvedWord, "true");
     239        psMetadataAddBool (model, PS_LIST_TAIL, "PSF_CONVOLVED_VALUE", PS_META_REPLACE, "", convolved);
     240
     241        if (convolved) {
     242            psLogMsg ("psphot", PS_LOG_INFO, "using convolved model class %s (%s)", modelName, item->name);
     243        } else {
     244            psLogMsg ("psphot", PS_LOG_INFO, "using simple    model class %s (%s)", modelName, item->name);
     245        }
    189246    }
    190247    psFree (iter);
     
    245302                psFree(AnalysisRegion);
    246303                psFree (fitOptions);
     304                psFree (models);
     305                psphotSersicModelClassCleanup();
    247306                return false;
    248307            }
     
    252311                psFree(AnalysisRegion);
    253312                psFree (fitOptions);
     313                psFree (models);
     314                psphotSersicModelClassCleanup();
    254315                return false;
    255316            }
    256317            psScalar *scalar = NULL;
    257             scalar = job->args->data[8];
     318            scalar = job->args->data[9];
    258319            Next += scalar->data.S32;
    259             scalar = job->args->data[9];
     320            scalar = job->args->data[10];
    260321            Nconvolve += scalar->data.S32;
    261             scalar = job->args->data[10];
     322            scalar = job->args->data[11];
    262323            NconvolvePass += scalar->data.S32;
    263             scalar = job->args->data[11];
     324            scalar = job->args->data[12];
    264325            Nplain += scalar->data.S32;
    265             scalar = job->args->data[12];
     326            scalar = job->args->data[13];
    266327            NplainPass += scalar->data.S32;
    267             scalar = job->args->data[13];
     328            scalar = job->args->data[14];
    268329            Nfaint += scalar->data.S32;
    269             scalar = job->args->data[14];
     330            scalar = job->args->data[15];
    270331            Nfail += scalar->data.S32;
    271332            psFree(job->args->data[3]); // iterator allocated above
     
    279340            psFree(AnalysisRegion);
    280341            psFree (fitOptions);
     342            psFree (models);
     343            psphotSersicModelClassCleanup();
    281344            return false;
    282345        }
     
    289352            } else {
    290353                psScalar *scalar = NULL;
    291                 scalar = job->args->data[8];
     354                scalar = job->args->data[9];
    292355                Next += scalar->data.S32;
    293                 scalar = job->args->data[9];
     356                scalar = job->args->data[10];
    294357                Nconvolve += scalar->data.S32;
    295                 scalar = job->args->data[10];
     358                scalar = job->args->data[11];
    296359                NconvolvePass += scalar->data.S32;
    297                 scalar = job->args->data[11];
     360                scalar = job->args->data[12];
    298361                Nplain += scalar->data.S32;
    299                 scalar = job->args->data[12];
     362                scalar = job->args->data[13];
    300363                NplainPass += scalar->data.S32;
    301                 scalar = job->args->data[13];
     364                scalar = job->args->data[14];
    302365                Nfaint += scalar->data.S32;
    303                 scalar = job->args->data[14];
     366                scalar = job->args->data[15];
    304367                Nfail += scalar->data.S32;
    305368                psFree(job->args->data[3]); // metadata iterator allocated above
     
    311374    psFree(AnalysisRegion);
    312375    psFree (fitOptions);
     376    psFree (models);
    313377
    314378    psphotSersicModelClassCleanup();
     
    341405
    342406    // arguments: readout, sources, models, region, psfSize, maskVal, markVal
    343     pmReadout *readout      = job->args->data[0];
    344     psArray *sources        = job->args->data[1];
    345     psMetadata *models      = job->args->data[2];
     407    pmReadout *readout       = job->args->data[0];
     408    psArray *sources         = job->args->data[1];
     409    psMetadata *models       = job->args->data[2];
    346410    psMetadataIterator *iter = job->args->data[3];
    347     psRegion *region        = job->args->data[4];
     411    psRegion *region         = job->args->data[4];
    348412    pmSourceFitOptions *fitOptions = job->args->data[5];
    349413
  • branches/eam_branches/ipp-20130509/psphot/test/tap_psphot_galaxies.pro

    r35659 r35661  
    7575end
    7676
     77macro go
     78  mkexp test.exp 1.0 EXP
     79  fitexp test.exp test.exp.fit EXP_CONV
     80
     81  mkexp test.ser 1.0 SERSIC
     82  fitexp test.ser test.ser.fit SER_CONV
     83
     84  mkexp test.dev 1.0 DEV
     85  fitexp test.dev test.dev.fit DEV_CONV
     86
     87  mkexp test.gau 1.0 GAUSS
     88  fitexp test.gau test.gau.fit GAU_CONV
     89
     90  mkexp test.pg 1.0 PGAUSS
     91  fitexp test.pg test.pg.fit PGA_CONV
     92
     93  mkexp test.qga 1.0 QGAUSS
     94  fitexp test.qga test.qga.fit QGA_CONV
     95
     96  mkexp test.p1 1.0 PS1_V1
     97  fitexp test.p1 test.p1.fit PS1_CONV
     98end
     99
     100macro go.ckgalaxy
     101  foreach type exp ser dev gau pg qga p1
     102    ckgalaxy test.$type.dat test.$type.fit.cmf
     103    wait $type
     104  end
     105end
     106
    77107# create a reference database of fake stars to be used by ppSim below
    78108macro mkref
     
    115145end
    116146
    117 # compare two cmf files with extname Chip.psf
    118 # things to compare:
    119 # * completeness (which sources in (1) are not detected in (2)
    120 # * positions (X_PSF, Y_PSF)
    121 # * instrumental psf mags
    122 # * position errors (no input errors; use a model?)
    123 # * measured FWHM?
    124 # * kron mags (fluxes)
    125 # * etc, etc
     147# create a realistic distribution of fake stars, GAUSS PSF
     148macro fitexp
     149  if ($0 != 4)
     150    echo "USAGE: fitexp basename outname (fitModel)"
     151    break
     152  end
     153
     154  local basename fitModel outname
     155  $basename = $1
     156  $outname  = $2
     157  $fitModel = $3
     158
     159  $psphotConfig =
     160  $psphotConfig = $psphotConfig -recipe PSPHOT GALAXY_TEST
     161  $psphotConfig = $psphotConfig -threads 4
     162  $psphotConfig = $psphotConfig -Db PSPHOT:LMM_FIT_CHISQ_CONVERGENCE F
     163  $psphotConfig = $psphotConfig -Df PSPHOT:EXT_FIT_MIN_TOL 0.1
     164  $psphotConfig = $psphotConfig -Di PSPHOT:LMM_FIT_GAIN_FACTOR_MODE 2
     165  $psphotConfig = $psphotConfig -Db PSPHOT:SAVE.RESID T
     166  $psphotConfig = $psphotConfig -D  PSPHOT:EXTENDED_SOURCE_MODELS_SELECTION $fitModel
     167
     168  # ppImage / psphot on the output
     169  echo ppImage $ppImageConfig $psphotConfig -file $basename.fits $outname
     170  exec ppImage $ppImageConfig $psphotConfig -file $basename.fits $outname
     171end
     172
    126173macro ckchip
    127174  if ($0 != 5)
     
    173220
    174221macro ckgalaxy
    175 
    176   data test.exp.dat
     222  if ($0 != 3)
     223    echo "USAGE: ckgalaxy (dat) (cmf)"
     224    break
     225  end
     226
     227  data $1
    177228  read Xin_all 1 Yin_all 2 Type 4 Min_all 5 RmajIn_all 7 RminIn_all 8 ThetaIn_all 9
    178229
     
    185236  subset RminIn = RminIn_all if (Type == 1)
    186237
    187   data test.exp2.cmf
     238  data $2
    188239  read -fits Chip.xfit X_EXT Y_EXT EXT_INST_MAG EXT_WIDTH_MAJ EXT_WIDTH_MIN EXT_THETA
    189240  set EXT_THETA_ALT = EXT_THETA * (EXT_THETA >= 0.0) + (EXT_THETA + 3.14159265) * (EXT_THETA < 0.0)
     
    200251  set dX = Xin_m - Xot_m 
    201252  set dY = Yin_m - Yot_m 
    202   lim -n 0 dX dY; clear; box; plot dX dY
     253  # lim -n 0 dX dY; clear; box; plot dX dY
    203254
    204255  reindex Mot_m = EXT_INST_MAG using index1
     
    218269  set dM = Min_m - Mot_m 
    219270  set dT = (Tin_m - Tot_m) * 180 / 3.14159265
     271  set Tin_deg = Tin_m * 180 / 3.14159265
     272
     273  lim -n 0 Tin_deg -5 5; clear; box; plot Tin_deg dT; label -y "delta theta (deg)"
    220274  lim -n 1 n dM; clear; box; plot n dM; label -y "delta mag"
    221   lim -n 2 n dT; clear; box; plot n dT; label -y "delta theta (deg)"
    222   lim -n 3 dT dM; clear; box; plot dT dM; label -x "delta theta (deg)" -y "delta mag"
     275  lim -n 2 n -5 5; clear; box; plot n dT; label -y "delta theta (deg)"
     276  lim -n 3 -5 5 dM; clear; box; plot dT dM; label -x "delta theta (deg)" -y "delta mag"
    223277
    224278  set dR = Rin_m - Rot_m 
Note: See TracChangeset for help on using the changeset viewer.