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/fwhm.sh

    r36857 r38280  
    110110    $Zhm = 1.0
    111111    $FWHM = 2*sqrt(2)
    112     echo $K : $Zhm : $FWHM
     112    fprintf "%4.2f, // %4.1f, %4.2f" $FWHM $K $Zhm
    113113    return
    114114  end
     
    121121 
    122122  set f = $K*z + z^1.667 - 1.0
    123   set dfdz = $K + z^0.667
     123  set dfdz = $K + 1.677*z^0.667
    124124
    125125  #lim -n 0 z f; clear; box; plot z f
    126126  #lim -n 1 z dfdz; clear; box; plot z dfdz 
    127127
    128   $nZ0 = 0
    129   $nZ1 = 5 / $dz
    130 
    131   $Zg = 0.5*(z[$nZ0] + z[$nZ1]) 
    132   $nZg = int($Zg / $dz)
    133   $dZ = 1.0
    134 
    135   for i 0 10
    136     $Fg = f[$nZg]
    137     $dFdz_g = dfdz[$nZg]
    138 
    139     $dZ = $Fg / $dFdz_g
    140 
    141     # echo $Zg $Fg $dZ $dFdz_g
    142 
    143     $Zg -= $dZ
    144     $Zg = max ($Zg , 0)
    145     $nZg = int($Zg / $dz)
     128  # these just need to bound the solution
     129  $nZ0 = 0.5 / $dz
     130  $nZ1 = 5.0 / $dz
     131
     132  $Zg = 0.5*(z[$nZ0] + z[$nZ1]) 
     133  $nZg = int($Zg / $dz)
     134  $dZ = 1.0
     135
     136  for i 0 10
     137    # interpolate between $nZg and $nZg + 1
     138    $Fg = f[$nZg] + ($Zg - $nZg*$dz)*(f[$nZg+1] - f[$nZg])/$dz
     139    $dFdz_g = dfdz[$nZg] + ($Zg - $nZg*$dz)*(dfdz[$nZg+1] - dfdz[$nZg])/$dz
     140
     141    # $Fg = f[$nZg]
     142    # $dFdz_g = dfdz[$nZg]
     143
     144    $dZ = $Fg / $dFdz_g
     145
     146    # echo -no-return $Zg $Fg $dZ $dFdz_g
     147
     148    $Zg -= $dZ
     149
     150    $Zg = max ($Zg , 0)
     151    $Zg = min ($Zg , z[-2])
     152    $nZg = int($Zg / $dz)
     153   
     154    # echo ": $Zg $nZg"
    146155  end
    147156  # echo $Zg $Fg $dZ $dFdz_g
     
    149158  $FWHM = 2*sqrt(2*$Zg)
    150159
    151   echo $K : $Zhm : $FWHM
     160  fprintf "%4.2f, // %4.1f, %4.2f" $FWHM $K $Zhm
    152161end
    153162
     
    164173    $Zhm = 1.0
    165174    $FWHM = 2*sqrt(2)
    166     echo $K : $Zhm : $FWHM
     175    fprintf "%4.2f, // %4.1f, %4.2f" $FWHM $K $Zhm
    167176    return
    168177  end
     
    175184 
    176185  set f = $K*z + z^2.25 - 1.0
    177   set dfdz = $K + z^1.25
     186  set dfdz = $K + 2.25*z^1.25
    178187
    179188  #lim -n 0 z f; clear; box; plot z f
     
    188197
    189198  for i 0 10
    190     $Fg = f[$nZg]
    191     $dFdz_g = dfdz[$nZg]
     199    # interpolate between $nZg and $nZg + 1
     200    $Fg = f[$nZg] + ($Zg - $nZg*$dz)*(f[$nZg+1] - f[$nZg])/$dz
     201    $dFdz_g = dfdz[$nZg] + ($Zg - $nZg*$dz)*(dfdz[$nZg+1] - dfdz[$nZg])/$dz
     202
     203    # $Fg = f[$nZg]
     204    # $dFdz_g = dfdz[$nZg]
    192205
    193206    $dZ = $Fg / $dFdz_g
     
    197210    $Zg -= $dZ
    198211    $Zg = max ($Zg , 0)
     212    $Zg = min ($Zg , z[-2])
    199213    $nZg = int($Zg / $dz)
    200214  end
     
    203217  $FWHM = 2*sqrt(2*$Zg)
    204218
    205   echo $K : $Zhm : $FWHM
     219  fprintf "%4.2f, // %4.1f, %4.2f" $FWHM $K $Zhm
    206220end
    207221
    208222macro fwhm.trend
     223  if ($0 != 4)
     224    echo "USAGE: fwhm.trend (model) (struct) (output)"
     225    echo "  model: pgauss, rgauss, ps1v1, qgauss"
     226    break
     227  end
    209228
    210229  delete fwhm_v k_v
    211230
    212   for k 0 20 1.0
    213     find.fwhm.qgauss $k
     231  $SAVE = 0
     232  if ($SAVE) exec rm -f $3
     233  if ($SAVE) output $3
     234
     235  $minK = -1
     236  $maxK = 20
     237  $delK = 0.2
     238
     239  if ($SAVE) echo "# define FWHM_BIN $delK"
     240  if ($SAVE) echo "# define MIN_FWHM_BIN $minK"
     241  if ($SAVE) echo "# define N_FWHM_BIN {int(($maxK - $minK) / $delK) + 1}"
     242  if ($SAVE) echo "static float $2[] = \{"
     243
     244  for k $minK $maxK $delK -incl
     245    find.fwhm.$1 $k
    214246    concat $k k_v
    215247    concat $FWHM fwhm_v
    216248  end
    217 end
    218 
     249  if ($SAVE) echo "\}@"
     250  if ($SAVE) output stdout
     251
     252  lim k_v fwhm_v; clear; box; plot k_v fwhm_v -pt 10 -sz 1.0
     253end
     254
Note: See TracChangeset for help on using the changeset viewer.