Changeset 35661 for branches/eam_branches/ipp-20130509/psphot
- Timestamp:
- Jun 14, 2013, 6:21:39 AM (13 years ago)
- Location:
- branches/eam_branches/ipp-20130509/psphot
- Files:
-
- 1 added
- 2 edited
-
src/psphotExtendedSourceFits.c (modified) (10 diffs)
-
test/tap_psphot_galaxies.pro (modified) (6 diffs)
-
test/tap_psphot_galaxygrid.pro (added)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20130509/psphot/src/psphotExtendedSourceFits.c
r35654 r35661 73 73 if (!sources->n) { 74 74 psLogMsg ("psphot", PS_LOG_INFO, "no sources, skipping source size"); 75 psphotSersicModelClassCleanup(); 75 76 return true; 76 77 } … … 83 84 // do not thread if we are trying to study the fitting process 84 85 if (psTraceGetLevel ("psphot.psphotFitEXT") >= 6) { 85 nThreads = 0;86 nThreads = 0; 86 87 } 87 88 … … 138 139 139 140 // select the collection of desired models 140 psMetadata * models = psMetadataLookupMetadata (&status, recipe, "EXTENDED_SOURCE_MODELS");141 psMetadata *allModels = psMetadataLookupMetadata (&status, recipe, "EXTENDED_SOURCE_MODELS"); 141 142 if (!status) { 142 143 psWarning ("extended source model fits requested but model model is missing (EXTENDED_SOURCE_MODELS)\n"); 143 144 psFree (fitOptions); 145 psphotSersicModelClassCleanup(); 144 146 return true; 145 147 } 146 if ( models->list->n == 0) {148 if (allModels->list->n == 0) { 147 149 psWarning ("extended source model fits requested but no models are specified\n"); 148 150 psFree (fitOptions); 151 psphotSersicModelClassCleanup(); 149 152 return true; 150 153 } 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 201 got_models: 151 202 152 203 psphotInitRadiusEXT (recipe, readout); … … 157 208 while ((item = psMetadataGetAndIncrement (iter)) != NULL) { 158 209 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 } 189 246 } 190 247 psFree (iter); … … 245 302 psFree(AnalysisRegion); 246 303 psFree (fitOptions); 304 psFree (models); 305 psphotSersicModelClassCleanup(); 247 306 return false; 248 307 } … … 252 311 psFree(AnalysisRegion); 253 312 psFree (fitOptions); 313 psFree (models); 314 psphotSersicModelClassCleanup(); 254 315 return false; 255 316 } 256 317 psScalar *scalar = NULL; 257 scalar = job->args->data[ 8];318 scalar = job->args->data[9]; 258 319 Next += scalar->data.S32; 259 scalar = job->args->data[ 9];320 scalar = job->args->data[10]; 260 321 Nconvolve += scalar->data.S32; 261 scalar = job->args->data[1 0];322 scalar = job->args->data[11]; 262 323 NconvolvePass += scalar->data.S32; 263 scalar = job->args->data[1 1];324 scalar = job->args->data[12]; 264 325 Nplain += scalar->data.S32; 265 scalar = job->args->data[1 2];326 scalar = job->args->data[13]; 266 327 NplainPass += scalar->data.S32; 267 scalar = job->args->data[1 3];328 scalar = job->args->data[14]; 268 329 Nfaint += scalar->data.S32; 269 scalar = job->args->data[1 4];330 scalar = job->args->data[15]; 270 331 Nfail += scalar->data.S32; 271 332 psFree(job->args->data[3]); // iterator allocated above … … 279 340 psFree(AnalysisRegion); 280 341 psFree (fitOptions); 342 psFree (models); 343 psphotSersicModelClassCleanup(); 281 344 return false; 282 345 } … … 289 352 } else { 290 353 psScalar *scalar = NULL; 291 scalar = job->args->data[ 8];354 scalar = job->args->data[9]; 292 355 Next += scalar->data.S32; 293 scalar = job->args->data[ 9];356 scalar = job->args->data[10]; 294 357 Nconvolve += scalar->data.S32; 295 scalar = job->args->data[1 0];358 scalar = job->args->data[11]; 296 359 NconvolvePass += scalar->data.S32; 297 scalar = job->args->data[1 1];360 scalar = job->args->data[12]; 298 361 Nplain += scalar->data.S32; 299 scalar = job->args->data[1 2];362 scalar = job->args->data[13]; 300 363 NplainPass += scalar->data.S32; 301 scalar = job->args->data[1 3];364 scalar = job->args->data[14]; 302 365 Nfaint += scalar->data.S32; 303 scalar = job->args->data[1 4];366 scalar = job->args->data[15]; 304 367 Nfail += scalar->data.S32; 305 368 psFree(job->args->data[3]); // metadata iterator allocated above … … 311 374 psFree(AnalysisRegion); 312 375 psFree (fitOptions); 376 psFree (models); 313 377 314 378 psphotSersicModelClassCleanup(); … … 341 405 342 406 // 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]; 346 410 psMetadataIterator *iter = job->args->data[3]; 347 psRegion *region = job->args->data[4];411 psRegion *region = job->args->data[4]; 348 412 pmSourceFitOptions *fitOptions = job->args->data[5]; 349 413 -
branches/eam_branches/ipp-20130509/psphot/test/tap_psphot_galaxies.pro
r35659 r35661 75 75 end 76 76 77 macro 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 98 end 99 100 macro 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 105 end 106 77 107 # create a reference database of fake stars to be used by ppSim below 78 108 macro mkref … … 115 145 end 116 146 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 148 macro 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 171 end 172 126 173 macro ckchip 127 174 if ($0 != 5) … … 173 220 174 221 macro 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 177 228 read Xin_all 1 Yin_all 2 Type 4 Min_all 5 RmajIn_all 7 RminIn_all 8 ThetaIn_all 9 178 229 … … 185 236 subset RminIn = RminIn_all if (Type == 1) 186 237 187 data test.exp2.cmf238 data $2 188 239 read -fits Chip.xfit X_EXT Y_EXT EXT_INST_MAG EXT_WIDTH_MAJ EXT_WIDTH_MIN EXT_THETA 189 240 set EXT_THETA_ALT = EXT_THETA * (EXT_THETA >= 0.0) + (EXT_THETA + 3.14159265) * (EXT_THETA < 0.0) … … 200 251 set dX = Xin_m - Xot_m 201 252 set dY = Yin_m - Yot_m 202 lim -n 0 dX dY; clear; box; plot dX dY253 # lim -n 0 dX dY; clear; box; plot dX dY 203 254 204 255 reindex Mot_m = EXT_INST_MAG using index1 … … 218 269 set dM = Min_m - Mot_m 219 270 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)" 220 274 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 dTdM; 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" 223 277 224 278 set dR = Rin_m - Rot_m
Note:
See TracChangeset
for help on using the changeset viewer.
