Changeset 14846
- Timestamp:
- Sep 14, 2007, 3:52:12 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/objects/pmSourceFitSet.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/pmSourceFitSet.c
r14652 r14846 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-0 8-24 00:11:02 $8 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-09-15 01:52:12 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 64 64 65 65 for (int i = 0; i < modelSet->n; i++) { 66 pmModel *model = modelSet->data[i];67 68 int nParams = pmModelClassParameterCount (model->type);69 70 set->paramSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);71 set->derivSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);72 73 set->nParamSet += nParams;66 pmModel *model = modelSet->data[i]; 67 68 int nParams = pmModelClassParameterCount (model->type); 69 70 set->paramSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32); 71 set->derivSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32); 72 73 set->nParamSet += nParams; 74 74 } 75 75 … … 87 87 int nParamBase = 0; 88 88 for (int i = 0; i < thisSet->modelSet->n; i++) { 89 psVector *param = thisSet->paramSet->data[i];90 if ((nParamBase <= nParam) && (nParam < nParamBase + param->n)) {91 nModel = i;92 nParamOne = nParam - nParamBase;93 break;94 }95 nParamBase += param->n;89 psVector *param = thisSet->paramSet->data[i]; 90 if ((nParamBase <= nParam) && (nParam < nParamBase + param->n)) { 91 nModel = i; 92 nParamOne = nParam - nParamBase; 93 break; 94 } 95 nParamBase += param->n; 96 96 } 97 97 assert (nModel > -1); … … 113 113 int n = 0; 114 114 for (int i = 0; i < set->paramSet->n; i++) { 115 116 psVector *paramOne = set->paramSet->data[i];117 psVector *derivOne = set->derivSet->data[i];118 assert ((deriv == NULL) || (paramOne->n == derivOne->n));119 120 for (int j = 0; j < paramOne->n; j++, n++) {121 param->data.F32[n] = paramOne->data.F32[j];122 if (deriv) {123 deriv->data.F32[n] = derivOne->data.F32[j];124 }125 }115 116 psVector *paramOne = set->paramSet->data[i]; 117 psVector *derivOne = set->derivSet->data[i]; 118 assert ((deriv == NULL) || (paramOne->n == derivOne->n)); 119 120 for (int j = 0; j < paramOne->n; j++, n++) { 121 param->data.F32[n] = paramOne->data.F32[j]; 122 if (deriv) { 123 deriv->data.F32[n] = derivOne->data.F32[j]; 124 } 125 } 126 126 } 127 127 return true; … … 135 135 int n = 0; 136 136 for (int i = 0; i < set->paramSet->n; i++) { 137 138 psVector *paramOne = set->paramSet->data[i];139 psVector *derivOne = set->derivSet->data[i];140 assert ((deriv == NULL) || (paramOne->n == derivOne->n));141 142 for (int j = 0; j < paramOne->n; j++, n++) {143 paramOne->data.F32[j] = param->data.F32[n];144 if (deriv) {145 derivOne->data.F32[j] = deriv->data.F32[n];146 }147 }137 138 psVector *paramOne = set->paramSet->data[i]; 139 psVector *derivOne = set->derivSet->data[i]; 140 assert ((deriv == NULL) || (paramOne->n == derivOne->n)); 141 142 for (int j = 0; j < paramOne->n; j++, n++) { 143 paramOne->data.F32[j] = param->data.F32[n]; 144 if (deriv) { 145 derivOne->data.F32[j] = deriv->data.F32[n]; 146 } 147 } 148 148 } 149 149 return true; … … 158 158 int n = 0; 159 159 for (int i = 0; i < set->paramSet->n; i++) { 160 161 pmModel *model = set->modelSet->data[i];162 163 for (int j = 0; j < model->params->n; j++, n++) {160 161 pmModel *model = set->modelSet->data[i]; 162 163 for (int j = 0; j < model->params->n; j++, n++) { 164 164 if (psTraceGetLevel("psModules.objects") >= 4) { 165 165 fprintf (stderr, "%f ", param->data.F32[n]); 166 166 } 167 model->params->data.F32[j] = param->data.F32[n];168 model->dparams->data.F32[j] = dparam->data.F32[n];169 }167 model->params->data.F32[j] = param->data.F32[n]; 168 model->dparams->data.F32[j] = dparam->data.F32[n]; 169 } 170 170 psTrace ("psModules.objects", 4, " src %d", i); 171 171 … … 199 199 200 200 for (int i = 0; i < thisSet->modelSet->n; i++) { 201 202 pmModel *model = thisSet->modelSet->data[i];203 204 psVector *paramOne = thisSet->paramSet->data[i];205 psVector *derivOne = thisSet->derivSet->data[i];206 207 chisqOne = model->modelFunc (derivOne, paramOne, x);208 chisqSum += chisqOne;201 202 pmModel *model = thisSet->modelSet->data[i]; 203 204 psVector *paramOne = thisSet->paramSet->data[i]; 205 psVector *derivOne = thisSet->derivSet->data[i]; 206 207 chisqOne = model->modelFunc (derivOne, paramOne, x); 208 chisqSum += chisqOne; 209 209 } 210 210 … … 220 220 int n = 0; 221 221 for (int i = 0; i < set->paramSet->n; i++) { 222 psVector *paramOne = set->paramSet->data[i];223 224 switch (mode) {225 case PM_SOURCE_FIT_NORM:226 // mask all but Xo,Yo,Io227 for (int j = 0; j < paramOne->n; j++) {228 if (j == PM_PAR_I0) continue;229 constraint->paramMask->data.U8[n + j] = 1;230 }231 break;232 case PM_SOURCE_FIT_PSF:233 // mask all but Xo,Yo,Io234 for (int j = 0; j < paramOne->n; j++) {235 if (j == PM_PAR_XPOS) continue;236 if (j == PM_PAR_YPOS) continue;237 if (j == PM_PAR_I0) continue;238 constraint->paramMask->data.U8[n + j] = 1;239 }240 break;241 case PM_SOURCE_FIT_EXT:242 // EXT model fits all params (except sky)243 constraint->paramMask->data.U8[n + PM_PAR_SKY] = 1;244 break;245 default:246 psAbort("invalid fitting mode");247 }248 n += paramOne->n;222 psVector *paramOne = set->paramSet->data[i]; 223 224 switch (mode) { 225 case PM_SOURCE_FIT_NORM: 226 // mask all but Xo,Yo,Io 227 for (int j = 0; j < paramOne->n; j++) { 228 if (j == PM_PAR_I0) continue; 229 constraint->paramMask->data.U8[n + j] = 1; 230 } 231 break; 232 case PM_SOURCE_FIT_PSF: 233 // mask all but Xo,Yo,Io 234 for (int j = 0; j < paramOne->n; j++) { 235 if (j == PM_PAR_XPOS) continue; 236 if (j == PM_PAR_YPOS) continue; 237 if (j == PM_PAR_I0) continue; 238 constraint->paramMask->data.U8[n + j] = 1; 239 } 240 break; 241 case PM_SOURCE_FIT_EXT: 242 // EXT model fits all params (except sky) 243 constraint->paramMask->data.U8[n + PM_PAR_SKY] = 1; 244 break; 245 default: 246 psAbort("invalid fitting mode"); 247 } 248 n += paramOne->n; 249 249 } 250 250 return true; … … 343 343 psTrace (__func__, 4, "insufficient valid pixels\n"); 344 344 psTrace("psModules.objects", 3, "---- %s() end : fail pixels ----\n", __func__); 345 for (int i = 0; i < modelSet->n; i++) {346 pmModel *model = modelSet->data[i];347 model->flags |= PM_MODEL_STATUS_BADARGS;348 }345 for (int i = 0; i < modelSet->n; i++) { 346 pmModel *model = modelSet->data[i]; 347 model->flags |= PM_MODEL_STATUS_BADARGS; 348 } 349 349 psFree (x); 350 350 psFree (y); … … 353 353 psFree(constraint); 354 354 psFree (thisSet); 355 thisSet = NULL;355 thisSet = NULL; 356 356 return(false); 357 357 } … … 382 382 altmask->data.U8[i] = (constraint->paramMask->data.U8[i]) ? 0 : 1; 383 383 } 384 psMinimizeGaussNewtonDelta(delta, params, altmask, x, y, yErr, pmSourceFitSetFunction); 384 if (!psMinimizeGaussNewtonDelta(delta, params, altmask, x, y, yErr, pmSourceFitSetFunction)) { 385 // Can we really do anything about it? 386 // It will happily continue on, but the presence of an error upsets the psphot cleanup 387 psErrorClear(); 388 } 385 389 for (int i = 0; i < dparams->n; i++) { 386 390 if (!constraint->paramMask->data.U8[i])
Note:
See TracChangeset
for help on using the changeset viewer.
