diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /noao/onedspec/sensfunc/sfshift.x | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'noao/onedspec/sensfunc/sfshift.x')
-rw-r--r-- | noao/onedspec/sensfunc/sfshift.x | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/noao/onedspec/sensfunc/sfshift.x b/noao/onedspec/sensfunc/sfshift.x new file mode 100644 index 00000000..07b204f3 --- /dev/null +++ b/noao/onedspec/sensfunc/sfshift.x @@ -0,0 +1,81 @@ +include "sensfunc.h" + + +# SF_SHIFT -- Shift or unshift all standard stars to have zero mean residual. + +procedure sf_shift (stds, nstds, flag) + +pointer stds[nstds] # Standard star data +int nstds # Number of standard stars +int flag # Shift flag + +pointer x, y, w, f +int i, j, n, nshift +real shift, shift1, minshift + +begin + # If flag is YES then unshift the data. + if (flag == YES) { + do i = 1, nstds { + if (STD_FLAG(stds[i]) == SF_EXCLUDE) + next + n = STD_NWAVES(stds[i]) + if (n == 0) + next + y = STD_SENS(stds[i]) + call asubkr (Memr[y], STD_SHIFT(stds[i]), Memr[y], n) + STD_SHIFT(stds[i]) = 0. + } + flag = NO + call printf ("Data unshifted") + return + } + + # Determine the shifts needed to make the mean residual zero. + # Also determine the minimum shift. + + minshift = 0. + do i = 1, nstds { + if (STD_FLAG(stds[i]) == SF_EXCLUDE) + next + n = STD_NWAVES(stds[i]) + if (n == 0) + next + x = STD_WAVES(stds[i]) + y = STD_SENS(stds[i]) + w = STD_WTS(stds[i]) + f = STD_FIT(stds[i]) + nshift = 0 + shift = 0. + shift1 = 0. + do j = 1, n { + shift1 = shift1 + Memr[f+j-1] - Memr[y+j-1] + if (Memr[w+j-1] > 0.) { + shift = shift + Memr[f+j-1] - Memr[y+j-1] + nshift = nshift + 1 + } + } + if (nshift > 0) { + shift = STD_SHIFT(stds[i]) + shift / nshift + if (shift < minshift) + minshift = shift + } else + shift = STD_SHIFT(stds[i]) + shift1 / n + STD_SHIFT(stds[i]) = shift + } + + # Adjust the shifts to be upwards. + do i = 1, nstds { + if (STD_FLAG(stds[i]) == SF_EXCLUDE) + next + n = STD_NWAVES(stds[i]) + if (n == 0) + next + y = STD_SENS(stds[i]) + shift = STD_SHIFT(stds[i]) - minshift + call aaddkr (Memr[y], shift, Memr[y], n) + STD_SHIFT(stds[i]) = shift + } + flag = YES + call printf ("Data shifted") +end |