IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 15, 2015, 1:56:42 PM (11 years ago)
Author:
eugene
Message:

fix interpolation of Sigma,Core -> FWHM in PS1_V1 and QGAUSS; test code to prove fix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/objects/models/pmModel_QGAUSS.c

    r36857 r38280  
    339339
    340340// I used the script in models/fwhm.sh to generate the trend of FWHM scaling vs the K value
    341 // FWHM = Scale * Sigma (not that PAR[PM_PAR_SXX] = sigma * sqrt(2)
    342 //  K : z_hm  : FWHM
    343 //  0 : 1.000 : 2.83
    344 //  1 : 0.648 : 2.28
    345 //  2 : 0.430 : 1.85
    346 //  3 : 0.310 : 1.58
    347 //  4 : 0.244 : 1.40
    348 //  5 : 0.200 : 1.26
    349 //  6 : 0.165 : 1.15
    350 //  7 : 0.149 : 1.09
    351 //  8 : 0.125 : 1.00
    352 //  9 : 0.116 : 0.96
    353 // 10 : 0.101 : 0.90
    354 // 11 : 0.095 : 0.87
    355 // 12 : 0.083 : 0.82
    356 // 13 : 0.082 : 0.81
    357 // 14 : 0.080 : 0.80
    358 // 15 : 0.074 : 0.77
    359 // 16 : 0.064 : 0.71
    360 // 17 : 0.068 : 0.74
    361 // 18 : 0.057 : 0.67
    362 // 19 : 0.058 : 0.68
    363 
    364 // static float QGAUSS_Core[] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0};
    365 static float QGAUSS_Scale[] = {2.83, 2.28, 1.85, 1.58, 1.40, 1.26, 1.15, 1.09, 1.00, 0.96, 0.90, 0.87, 0.82, 0.81, 0.80, 0.77, 0.71, 0.74, 0.67, 0.68};
     341# include "qgauss.fwhm.h"
    366342
    367343psF64 PM_MODEL_SET_FWHM (const psVector *params, psF64 sigma) {
     
    373349    if (!isfinite(core)) return (2.0*M_SQRT2*sigma);
    374350
    375     // QGAUSS_Core is defined as a set of integer steps, so we can simplify:
    376     int binCore = MAX(0, MIN (19, (int)core));
    377 
    378     float scale = NAN;
    379     if (binCore == 0) {
    380         scale = (core - binCore + 0) * (QGAUSS_Scale[binCore + 1] - QGAUSS_Scale[binCore + 0]) + QGAUSS_Scale[binCore + 0];
    381     } else {
    382         scale = (core - binCore - 1) * (QGAUSS_Scale[binCore + 0] - QGAUSS_Scale[binCore - 1]) + QGAUSS_Scale[binCore - 1];
    383     }
     351    int binCore = MAX(0, MIN (N_FWHM_BIN - 2, (int)((core - MIN_FWHM_BIN)/FWHM_BIN)));
     352    float coreBin = binCore * FWHM_BIN + MIN_FWHM_BIN;
     353
     354    float scale = (core - coreBin) * (QGAUSS_Scale[binCore + 1] - QGAUSS_Scale[binCore]) / FWHM_BIN + QGAUSS_Scale[binCore];
    384355
    385356    return (scale * sigma);
Note: See TracChangeset for help on using the changeset viewer.