Changeset 9529
- Timestamp:
- Oct 12, 2006, 4:36:54 PM (20 years ago)
- Location:
- trunk/psphot/src
- Files:
-
- 11 edited
-
models/pmModel_GAUSS.c (modified) (1 diff)
-
models/pmModel_PGAUSS.c (modified) (3 diffs)
-
models/pmModel_QGAUSS.c (modified) (4 diffs)
-
models/pmModel_RGAUSS.c (modified) (2 diffs)
-
models/pmModel_SGAUSS.c (modified) (5 diffs)
-
models/pmModel_TAUSS.c (modified) (1 diff)
-
models/pmModel_TGAUSS.c (modified) (4 diffs)
-
models/pmModel_ZGAUSS.c (modified) (4 diffs)
-
psphotApResid.c (modified) (1 diff)
-
psphotEnsemblePSF.c (modified) (2 diffs)
-
psphotGrowthCurve.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/src/models/pmModel_GAUSS.c
r8882 r9529 145 145 status = true; 146 146 status &= (dP < 0.5); 147 status &= (PAR[PM_PAR_ FLUX] > 0);148 status &= ((dPAR[PM_PAR_ FLUX]/PAR[PM_PAR_FLUX]) < 0.5);147 status &= (PAR[PM_PAR_I0] > 0); 148 status &= ((dPAR[PM_PAR_I0]/PAR[PM_PAR_I0]) < 0.5); 149 149 150 150 if (status) return true; -
trunk/psphot/src/models/pmModel_PGAUSS.c
r8882 r9529 23 23 psF32 t = 1 + z + z*z/2.0; 24 24 psF32 r = 1.0 / (t + z*z*z/6.0); /* exp (-Z) */ 25 psF32 f = PAR[PM_PAR_ FLUX]*r + PAR[PM_PAR_SKY];25 psF32 f = PAR[PM_PAR_I0]*r + PAR[PM_PAR_SKY]; 26 26 27 27 if (deriv != NULL) { 28 // note difference from a pure gaussian: q = PAR[PM_PAR_ FLUX]*r29 psF32 q = PAR[PM_PAR_ FLUX]*r*r*t;28 // note difference from a pure gaussian: q = PAR[PM_PAR_I0]*r 29 psF32 q = PAR[PM_PAR_I0]*r*r*t; 30 30 deriv->data.F32[0] = +1.0; 31 31 deriv->data.F32[1] = +r; … … 92 92 norm *= 0.01; 93 93 94 psF64 Flux = params->data.F32[PM_PAR_ FLUX] * Area * norm;94 psF64 Flux = params->data.F32[PM_PAR_I0] * Area * norm; 95 95 96 96 return(Flux); … … 160 160 status = true; 161 161 status &= (dP < 0.5); 162 status &= (PAR[PM_PAR_ FLUX] > 0);163 status &= ((dPAR[PM_PAR_ FLUX]/PAR[PM_PAR_FLUX]) < 0.5);162 status &= (PAR[PM_PAR_I0] > 0); 163 status &= ((dPAR[PM_PAR_I0]/PAR[PM_PAR_I0]) < 0.5); 164 164 165 165 if (status) return true; -
trunk/psphot/src/models/pmModel_QGAUSS.c
r8882 r9529 33 33 34 34 psF32 r = 1.0 / (1 + PAR[PM_PAR_7]*z + pow(z, QG_S1)); 35 psF32 f = PAR[PM_PAR_ FLUX]*r + PAR[PM_PAR_SKY];35 psF32 f = PAR[PM_PAR_I0]*r + PAR[PM_PAR_SKY]; 36 36 37 37 if (deriv != NULL) { 38 38 // note difference from a pure gaussian: q = params->data.F32[1]*r 39 psF32 t = PAR[PM_PAR_ FLUX]*r*r;39 psF32 t = PAR[PM_PAR_I0]*r*r; 40 40 psF32 q = t*(PAR[PM_PAR_7] + QG_S1*pow(z, dQG_S1)); 41 41 … … 125 125 norm *= 0.01; 126 126 127 psF64 Flux = PAR[PM_PAR_ FLUX] * Area * norm;127 psF64 Flux = PAR[PM_PAR_I0] * Area * norm; 128 128 129 129 return(Flux); … … 138 138 139 139 if (flux <= 0) return (1.0); 140 if (PAR[PM_PAR_ FLUX] <= 0) return (1.0);141 if (flux >= PAR[PM_PAR_ FLUX]) return (1.0);140 if (PAR[PM_PAR_I0] <= 0) return (1.0); 141 if (flux >= PAR[PM_PAR_I0]) return (1.0); 142 142 143 143 // if Sx == Sy, sigma = Sx == Sy 144 144 psF64 sigma = hypot (1.0 / PAR[PM_PAR_SXX], 1.0 / PAR[PM_PAR_SYY]) / sqrt(2.0); 145 145 psF64 dz = 1.0 / (2.0 * sigma*sigma); 146 psF64 limit = flux / PAR[PM_PAR_ FLUX];146 psF64 limit = flux / PAR[PM_PAR_I0]; 147 147 148 148 // we can do this much better with intelligent choices here … … 190 190 status = true; 191 191 status &= (dP < 0.5); 192 status &= (PAR[PM_PAR_ FLUX] > 0);193 status &= ((dPAR[PM_PAR_ FLUX]/PAR[PM_PAR_FLUX]) < 0.5);192 status &= (PAR[PM_PAR_I0] > 0); 193 status &= ((dPAR[PM_PAR_I0]/PAR[PM_PAR_I0]) < 0.5); 194 194 195 195 if (status) return true; -
trunk/psphot/src/models/pmModel_RGAUSS.c
r8882 r9529 30 30 psF32 p = pow(z, PAR[PM_PAR_7] - 1.0); 31 31 psF32 r = 1.0 / (1 + z + z*p); 32 psF32 f = PAR[PM_PAR_ FLUX]*r + PAR[PM_PAR_SKY];32 psF32 f = PAR[PM_PAR_I0]*r + PAR[PM_PAR_SKY]; 33 33 34 34 if (deriv != NULL) { 35 35 // note difference from a pure gaussian: q = params->data.F32[1]*r 36 psF32 t = PAR[PM_PAR_ FLUX]*r*r;36 psF32 t = PAR[PM_PAR_I0]*r*r; 37 37 psF32 q = t*(1 + PAR[PM_PAR_7]*p); 38 38 … … 87 87 88 88 if (flux <= 0) return (1.0); 89 if (PAR[PM_PAR_ FLUX] <= 0) return (1.0);90 if (flux >= PAR[PM_PAR_ FLUX]) return (1.0);89 if (PAR[PM_PAR_I0] <= 0) return (1.0); 90 if (flux >= PAR[PM_PAR_I0]) return (1.0); 91 91 92 92 // if Sx == Sy, sigma = Sx == Sy 93 93 psF64 sigma = hypot (1.0 / PAR[PM_PAR_SXX], 1.0 / PAR[PM_PAR_SYY]) / sqrt(2.0); 94 94 psF64 dz = 1.0 / (2.0 * sigma*sigma); 95 psF64 limit = flux / PAR[PM_PAR_ FLUX];95 psF64 limit = flux / PAR[PM_PAR_I0]; 96 96 97 97 // we can do this much better with intelligent choices here -
trunk/psphot/src/models/pmModel_SGAUSS.c
r8882 r9529 37 37 psF32 p = pow(z, PAR[PM_PAR_7] - 1.0); 38 38 psF32 r = 1.0 / (1 + z*p + pr*pr3); 39 psF32 f = PAR[PM_PAR_ FLUX]*r + PAR[PM_PAR_SKY];39 psF32 f = PAR[PM_PAR_I0]*r + PAR[PM_PAR_SKY]; 40 40 41 41 if (deriv != NULL) { 42 42 // note difference from a pure gaussian: q = params->data.F32[1]*r 43 psF32 t = PAR[PM_PAR_ FLUX]*r*r;43 psF32 t = PAR[PM_PAR_I0]*r*r; 44 44 psF32 q = t*(PAR[PM_PAR_7]*p + 4*PAR[PM_PAR_8]*pr3); 45 45 … … 245 245 norm *= 0.01; 246 246 247 psF64 Flux = PAR[PM_PAR_ FLUX] * Area * norm;247 psF64 Flux = PAR[PM_PAR_I0] * Area * norm; 248 248 249 249 return(Flux); … … 262 262 263 263 if (flux <= 0) return (1.0); 264 if (PAR[PM_PAR_ FLUX] <= 0) return (1.0);265 if (flux >= PAR[PM_PAR_ FLUX]) return (1.0);264 if (PAR[PM_PAR_I0] <= 0) return (1.0); 265 if (flux >= PAR[PM_PAR_I0]) return (1.0); 266 266 267 267 // convert Sx,Sy,Sxy to major/minor axes … … 272 272 axes = EllipseShapeToAxes (shape); 273 273 psF64 dr = 1.0 / axes.major; 274 psF64 limit = flux / PAR[PM_PAR_ FLUX];274 psF64 limit = flux / PAR[PM_PAR_I0]; 275 275 276 276 // XXX : we can do this faster with an intelligent starting choice … … 329 329 status = true; 330 330 status &= (dP < 0.5); 331 status &= (PAR[PM_PAR_ FLUX] > 0);332 status &= ((dPAR[PM_PAR_ FLUX]/PAR[PM_PAR_FLUX]) < 0.5);331 status &= (PAR[PM_PAR_I0] > 0); 332 status &= ((dPAR[PM_PAR_I0]/PAR[PM_PAR_I0]) < 0.5); 333 333 status &= (fabs(PAR[PM_PAR_8]) < 0.5); 334 334 status &= (dPAR[PM_PAR_8] < 0.1); -
trunk/psphot/src/models/pmModel_TAUSS.c
r8882 r9529 155 155 status = true; 156 156 status &= (dP < 0.5); 157 status &= (PAR[PM_PAR_ FLUX] > 0);158 status &= ((dPAR[PM_PAR_ FLUX]/PAR[PM_PAR_FLUX]) < 0.5);157 status &= (PAR[PM_PAR_I0] > 0); 158 status &= ((dPAR[PM_PAR_I0]/PAR[PM_PAR_I0]) < 0.5); 159 159 160 160 if (status) -
trunk/psphot/src/models/pmModel_TGAUSS.c
r8882 r9529 35 35 36 36 psF32 r = 1.0 / (er + PAR[PM_PAR_7]*z + pow(z, TG_S)); // (1/R) 37 psF32 f = PAR[PM_PAR_ FLUX]*r + PAR[PM_PAR_SKY];37 psF32 f = PAR[PM_PAR_I0]*r + PAR[PM_PAR_SKY]; 38 38 39 39 if (deriv != NULL) { 40 psF32 t = PAR[PM_PAR_ FLUX]*r*r; // df/dR40 psF32 t = PAR[PM_PAR_I0]*r*r; // df/dR 41 41 psF32 q = t*(TRF*er + PAR[PM_PAR_7] + TG_S*pow(z, dTG_S)); // (df/dR)(dR/dz) 42 42 … … 127 127 norm *= 0.01; 128 128 129 psF64 Flux = PAR[PM_PAR_ FLUX] * Area * norm;129 psF64 Flux = PAR[PM_PAR_I0] * Area * norm; 130 130 131 131 return(Flux); … … 140 140 141 141 if (flux <= 0) return (1.0); 142 if (PAR[PM_PAR_ FLUX] <= 0) return (1.0);143 if (flux >= PAR[PM_PAR_ FLUX]) return (1.0);142 if (PAR[PM_PAR_I0] <= 0) return (1.0); 143 if (flux >= PAR[PM_PAR_I0]) return (1.0); 144 144 145 145 // if Sx == Sy, sigma = Sx == Sy 146 146 psF64 sigma = hypot (1.0 / PAR[PM_PAR_SXX], 1.0 / PAR[PM_PAR_SYY]) / sqrt(2.0); 147 147 psF64 dz = 1.0 / (2.0 * sigma*sigma); 148 psF64 limit = flux / PAR[PM_PAR_ FLUX];148 psF64 limit = flux / PAR[PM_PAR_I0]; 149 149 150 150 // we can do this much better with intelligent choices here … … 193 193 status = true; 194 194 status &= (dP < 0.5); 195 status &= (PAR[PM_PAR_ FLUX] > 0);196 status &= ((dPAR[PM_PAR_ FLUX]/PAR[PM_PAR_FLUX]) < 0.5);195 status &= (PAR[PM_PAR_I0] > 0); 196 status &= ((dPAR[PM_PAR_I0]/PAR[PM_PAR_I0]) < 0.5); 197 197 198 198 if (status) return true; -
trunk/psphot/src/models/pmModel_ZGAUSS.c
r8882 r9529 32 32 psF32 p = pow(z, PAR[PM_PAR_7] - 1.0); 33 33 psF32 r = 1.0 / (1 + z*p + SQ(SQ(pr))); 34 psF32 f = PAR[PM_PAR_ FLUX]*r + PAR[PM_PAR_SKY];34 psF32 f = PAR[PM_PAR_I0]*r + PAR[PM_PAR_SKY]; 35 35 36 36 if (deriv != NULL) { 37 37 // note difference from a pure gaussian: q = params->data.F32[1]*r 38 psF32 t = PAR[PM_PAR_ FLUX]*r*r;38 psF32 t = PAR[PM_PAR_I0]*r*r; 39 39 psF32 q = t*(PAR[PM_PAR_7]*p + 4*PAR8*pr*pr*pr); 40 40 … … 72 72 norm *= 0.01; 73 73 74 psF64 Flux = PAR[PM_PAR_ FLUX] * Area * norm;74 psF64 Flux = PAR[PM_PAR_I0] * Area * norm; 75 75 76 76 return(Flux); … … 89 89 90 90 if (flux <= 0) return (1.0); 91 if (PAR[PM_PAR_ FLUX] <= 0) return (1.0);92 if (flux >= PAR[PM_PAR_ FLUX]) return (1.0);91 if (PAR[PM_PAR_I0] <= 0) return (1.0); 92 if (flux >= PAR[PM_PAR_I0]) return (1.0); 93 93 94 94 // convert Sx,Sy,Sxy to major/minor axes … … 99 99 axes = EllipseShapeToAxes (shape); 100 100 psF64 dr = 1.0 / axes.major; 101 psF64 limit = flux / PAR[PM_PAR_ FLUX];101 psF64 limit = flux / PAR[PM_PAR_I0]; 102 102 103 103 // XXX : we can do this faster with an intelligent starting choice -
trunk/psphot/src/psphotApResid.c
r9526 r9529 73 73 } 74 74 75 dMag->data.F64[Npsf] = model->dparams->data.F32[PM_PAR_ FLUX] / model->params->data.F32[PM_PAR_FLUX];75 dMag->data.F64[Npsf] = model->dparams->data.F32[PM_PAR_I0] / model->params->data.F32[PM_PAR_I0]; 76 76 77 77 psVectorExtend (mask, 100, 1); -
trunk/psphot/src/psphotEnsemblePSF.c
r9527 r9529 119 119 // set model to unit peak, zero sky (we assume sky is subtracted) 120 120 model->params->data.F32[PM_PAR_SKY] = 0.0; 121 model->params->data.F32[PM_PAR_ FLUX] = 1.0;121 model->params->data.F32[PM_PAR_I0] = 1.0; 122 122 123 123 // fill in the model pixel values … … 200 200 psAbort ("psphot", "ensemble source is nan"); 201 201 } 202 Fi->modelPSF->params->data.F32[PM_PAR_ FLUX] = norm->data.F32[i];203 Fi->modelPSF->dparams->data.F32[PM_PAR_ FLUX] = sqrt(sqrt(2) * norm->data.F32[i] / (sparse->Bfj->data.F32[i] * weight->data.F32[i]));202 Fi->modelPSF->params->data.F32[PM_PAR_I0] = norm->data.F32[i]; 203 Fi->modelPSF->dparams->data.F32[PM_PAR_I0] = sqrt(sqrt(2) * norm->data.F32[i] / (sparse->Bfj->data.F32[i] * weight->data.F32[i])); 204 204 // XXX EAM : this factor of sqrt(2) makes the errors consistent, but I don't understand it 205 205 -
trunk/psphot/src/psphotGrowthCurve.c
r9526 r9529 24 24 // create an object with center intensity of 1000 25 25 modelRef->params->data.F32[PM_PAR_SKY] = 0; 26 modelRef->params->data.F32[PM_PAR_ FLUX] = 1000;26 modelRef->params->data.F32[PM_PAR_I0] = 1000; 27 27 modelRef->params->data.F32[PM_PAR_XPOS] = xc; 28 28 modelRef->params->data.F32[PM_PAR_YPOS] = yc;
Note:
See TracChangeset
for help on using the changeset viewer.
