Changeset 40643
- Timestamp:
- Mar 18, 2019, 5:15:30 PM (7 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/mana/deimos_fitobj.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/mana/deimos_fitobj.c
r40642 r40643 6 6 int *deimos_sort_result (DeimosResult *result, int Nresult); 7 7 int deimos_get_random_sample (int Nresult); 8 opihi_flt *deimos_make_test (opihi_flt *guess, float range, int row, int Nrow, int fullInput);8 opihi_flt *deimos_make_test (opihi_flt *guess, float *sigma, int row, int Nrow, int fullInput); 9 9 10 10 int deimos_fitobj (int argc, char **argv) { … … 36 36 37 37 float stilt = 0.0; // angle of the slit 38 39 // a crude noise model valid for both the guess vectors and the 40 // data buffer: 41 float gain = 1.0; 42 if ((N = get_argument (argc, argv, "-gain"))) { 43 remove_argument (N, &argc, argv); 44 gain = atof(argv[N]); 45 remove_argument (N, &argc, argv); 46 } 47 float noise = 0.0; 48 if ((N = get_argument (argc, argv, "-noise"))) { 49 remove_argument (N, &argc, argv); 50 noise = atof(argv[N]); 51 remove_argument (N, &argc, argv); 52 } 38 53 39 54 int Niter = 25; … … 161 176 ALLOCATE_PTR (result, DeimosResult, NRESULT); 162 177 178 float noiseVar = SQ(noise); 179 ALLOCATE_PTR (objNoise, float, Nrow); 180 ALLOCATE_PTR (skyNoise, float, Nrow); 181 ALLOCATE_PTR (bckNoise, float, Nrow); 182 163 183 // work on segments of Nrow at a time 164 184 // XXX worry about last segment (< Nrow rows) … … 174 194 // likely have large errors in how the guess follows the truth. 175 195 196 /** old concept: 176 197 float objRange = 0, skyRange = 0, bckRange = 0; 177 198 for (int iy = 0; iy < Nrow; iy++) { … … 180 201 bckRange = MAX(bckVal[iy + row], bckRange); 181 202 } 203 **/ 204 205 // new concept: start with 2-sigma range, then ramp down below 206 for (int iy = 0; iy < Nrow; iy++) { 207 objNoise[iy] = 2*hypot(sqrt(fabs(objVal[iy + row]) / gain), noiseVar); 208 skyNoise[iy] = 2*hypot(sqrt(fabs(skyVal[iy + row]) / gain), noiseVar); 209 bckNoise[iy] = 2*hypot(sqrt(fabs(bckVal[iy + row]) / gain), noiseVar); 210 } 182 211 183 212 // first step, generate Niter samples (chisq + parameters) … … 187 216 188 217 // generate a set of test values for obj, sky, backgnd based on the current guess 189 opihi_flt *objtest = deimos_make_test (objVal, obj Range, row, Nrow, TRUE);190 opihi_flt *skytest = deimos_make_test (skyVal, sky Range, row, Nrow, TRUE);191 opihi_flt *bcktest = deimos_make_test (bckVal, bck Range, row, Nrow, TRUE);218 opihi_flt *objtest = deimos_make_test (objVal, objNoise, row, Nrow, TRUE); 219 opihi_flt *skytest = deimos_make_test (skyVal, skyNoise, row, Nrow, TRUE); 220 opihi_flt *bcktest = deimos_make_test (bckVal, bckNoise, row, Nrow, TRUE); 192 221 193 222 for (int itmp = 0; FALSE && (itmp < Nrow); itmp++) { … … 223 252 224 253 // XXX not sure this scaling factor, or even concept is good 225 objRange *= 0.75; 226 skyRange *= 0.75; 227 bckRange *= 0.75; 254 // objRange *= 0.75; 255 // skyRange *= 0.75; 256 // bckRange *= 0.75; 257 for (int iy = 0; iy < Nrow; iy++) { 258 objNoise[iy] = 0.75*objNoise[iy]; 259 skyNoise[iy] = 0.75*skyNoise[iy]; 260 bckNoise[iy] = 0.75*bckNoise[iy]; 261 } 228 262 229 263 // run Niter iterations, selecting guess values from the result set … … 234 268 235 269 // generate a set of test values for obj, sky, backgnd based on the current guess 236 opihi_flt *objtest = deimos_make_test (result[entry].obj, obj Range, row, Nrow, FALSE);237 opihi_flt *skytest = deimos_make_test (result[entry].sky, sky Range, row, Nrow, FALSE);238 opihi_flt *bcktest = deimos_make_test (result[entry].bck, bck Range, row, Nrow, FALSE);270 opihi_flt *objtest = deimos_make_test (result[entry].obj, objNoise, row, Nrow, FALSE); 271 opihi_flt *skytest = deimos_make_test (result[entry].sky, skyNoise, row, Nrow, FALSE); 272 opihi_flt *bcktest = deimos_make_test (result[entry].bck, bckNoise, row, Nrow, FALSE); 239 273 240 274 for (int itmp = 0; FALSE && (itmp < Nrow); itmp++) { … … 285 319 /****************** fitobj Support Functions *******************/ 286 320 287 opihi_flt *deimos_make_test (opihi_flt *guess, float range, int row, int Nrow, int fullInput) {321 opihi_flt *deimos_make_test (opihi_flt *guess, float *sigma, int row, int Nrow, int fullInput) { 288 322 289 323 // we have a vector, guess, with some length >= row + Nrow. … … 293 327 // if fullInput is TRUE, the guess vector runs from 0 to Ny (full wavelength range) 294 328 // if fullInput is FALSE, the guess vector runs from row to row + Nrow (subset range) 329 // sigma is always only Nrow long 295 330 296 331 ALLOCATE_PTR (value, opihi_flt, Nrow); … … 301 336 int iv = 0; 302 337 for (int i = start_pix; i < stop_pix; i++, iv++) { 303 value[iv] = range*(drand48() - 0.5) + guess[i];338 value[iv] = sigma[iv]*(drand48() - 0.5) + guess[i]; 304 339 } 305 340 return value;
Note:
See TracChangeset
for help on using the changeset viewer.
