Changeset 35661 for branches/eam_branches/ipp-20130509/psphot/src
- Timestamp:
- Jun 14, 2013, 6:21:39 AM (13 years ago)
- File:
-
- 1 edited
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
Note:
See TracChangeset
for help on using the changeset viewer.
