Changeset 40291 for trunk/Ohana/src/opihi
- Timestamp:
- Dec 13, 2017, 10:53:48 AM (9 years ago)
- Location:
- trunk/Ohana
- Files:
-
- 35 edited
- 2 copied
-
. (modified) (1 prop)
-
src/opihi/cmd.astro/fitplx.c (modified) (4 diffs)
-
src/opihi/cmd.astro/fitplx_irls.c (modified) (3 diffs)
-
src/opihi/cmd.astro/fitpm.c (modified) (1 diff)
-
src/opihi/cmd.astro/fitpm_irls.c (modified) (1 diff)
-
src/opihi/cmd.astro/star.c (modified) (4 diffs)
-
src/opihi/cmd.data/Makefile (modified) (1 diff)
-
src/opihi/cmd.data/init.c (modified) (2 diffs)
-
src/opihi/cmd.data/limits.c (modified) (4 diffs)
-
src/opihi/cmd.data/print_vectors.c (modified) (3 diffs)
-
src/opihi/cmd.data/reindex.c (modified) (2 diffs)
-
src/opihi/cmd.data/test/periodogram-fm.sh (modified) (15 diffs)
-
src/opihi/cmd.data/test/periodogram.sh (modified) (4 diffs)
-
src/opihi/cmd.data/test/uniqpair.sh (copied) (copied from branches/eam_branches/ohana.20170822/src/opihi/cmd.data/test/uniqpair.sh )
-
src/opihi/cmd.data/uniq.c (modified) (1 diff)
-
src/opihi/cmd.data/uniqpair.c (copied) (copied from branches/eam_branches/ohana.20170822/src/opihi/cmd.data/uniqpair.c )
-
src/opihi/cmd.data/write_vectors.c (modified) (1 diff)
-
src/opihi/dvo/dvo_host_utils.c (modified) (1 diff)
-
src/opihi/dvo/gimages.c (modified) (1 diff)
-
src/opihi/dvo/gstar.c (modified) (12 diffs)
-
src/opihi/dvo/imdata.c (modified) (1 diff)
-
src/opihi/dvo/imlist.c (modified) (1 diff)
-
src/opihi/dvo/imphot.c (modified) (3 diffs)
-
src/opihi/dvo/imstats.c (modified) (2 diffs)
-
src/opihi/dvo/objectcoverage.c (modified) (1 diff)
-
src/opihi/dvo/paverage.c (modified) (1 diff)
-
src/opihi/dvo/remote.c (modified) (1 diff)
-
src/opihi/dvo/skycoverage.c (modified) (1 diff)
-
src/opihi/include/astro.h (modified) (1 diff)
-
src/opihi/include/data.h (modified) (1 diff)
-
src/opihi/lib.data/graphtools.c (modified) (2 diffs)
-
src/opihi/lib.data/starfuncs.c (modified) (1 diff)
-
src/opihi/lib.shell/VectorIO.c (modified) (4 diffs)
-
src/opihi/lib.shell/convert_to_RPN.c (modified) (2 diffs)
-
src/opihi/lib.shell/dvomath.c (modified) (2 diffs)
-
src/opihi/lib.shell/evaluate_stack.c (modified) (5 diffs)
-
src/opihi/lib.shell/parse.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana
-
trunk/Ohana/src/opihi/cmd.astro/fitplx.c
r39610 r40291 77 77 double *dD = dDvec->elements.Flt; 78 78 79 int *mask = NULL;79 opihi_int *mask = NULL; 80 80 if (mvec) { 81 81 mask = mvec->elements.Int; … … 380 380 } 381 381 382 int PlxSetMeanEpoch (double *R, double *D, double *T, double *Rmean, double *Dmean, double *Tmean, int *mask, int Ntotal) {382 int PlxSetMeanEpoch (double *R, double *D, double *T, double *Rmean, double *Dmean, double *Tmean, opihi_int *mask, int Ntotal) { 383 383 384 384 int i; … … 413 413 414 414 // generate the fit values (projected X,Y; parallax factors; 415 int PlxSetEpochPosition (PlxFitData *fitdata, double *R, double *D, double *dR, double *dD, double *T, int *mask, int Ntotal, Coords *coords, double Tmean) {415 int PlxSetEpochPosition (PlxFitData *fitdata, double *R, double *D, double *dR, double *dD, double *T, opihi_int *mask, int Ntotal, Coords *coords, double Tmean) { 416 416 417 417 int i; … … 464 464 # define MAX_REJECT 0.1 465 465 466 int PlxOutlierClip (PlxFitData *fitdata, int *mask, int Noutlier, float dPsigMax, Vector *dPvec, int VERBOSE) {466 int PlxOutlierClip (PlxFitData *fitdata, opihi_int *mask, int Noutlier, float dPsigMax, Vector *dPvec, int VERBOSE) { 467 467 468 468 int i, n; -
trunk/Ohana/src/opihi/cmd.astro/fitplx_irls.c
r39926 r40291 81 81 double *dD = dDvec->elements.Flt; 82 82 83 int *mask = NULL;83 opihi_int *mask = NULL; 84 84 if (mvec) { 85 85 mask = mvec->elements.Int; … … 109 109 for (i = 0; (VERBOSE == 2) && (i < fitdata.Npts); i++) { 110 110 int n = fitdata.index[i]; 111 int maskValue = mask ? mask[n] : 1;112 fprintf (stderr, "%f %f : %f %d: %f %f %f\n", R[n], D[n], T[n], maskValue, fitdata.t[i], fitdata.X[i], fitdata.Y[i]);111 opihi_int maskValue = mask ? mask[n] : 1; 112 fprintf (stderr, "%f %f : %f "OPIHI_INT_FMT" : %f %f %f\n", R[n], D[n], T[n], maskValue, fitdata.t[i], fitdata.X[i], fitdata.Y[i]); 113 113 } 114 114 … … 150 150 151 151 if (VERBOSE == 2) { 152 fprintf (stderr, "%f %f : %f %d: %f %f %f : %f %f %f %f\n", R[n], D[n], T[n], mask[n], fitdata.t[i], fitdata.X[i], fitdata.Y[i], fitdata.Wx[i], fitdata.Wy[i], Sum_Wx, Sum_Wy);152 fprintf (stderr, "%f %f : %f "OPIHI_INT_FMT" : %f %f %f : %f %f %f %f\n", R[n], D[n], T[n], mask[n], fitdata.t[i], fitdata.X[i], fitdata.Y[i], fitdata.Wx[i], fitdata.Wy[i], Sum_Wx, Sum_Wy); 153 153 } 154 154 } -
trunk/Ohana/src/opihi/cmd.astro/fitpm.c
r39228 r40291 50 50 double *dD = dDvec->elements.Flt; 51 51 52 int *mask = NULL;52 opihi_int *mask = NULL; 53 53 if (mvec) { 54 54 mask = mvec->elements.Int; -
trunk/Ohana/src/opihi/cmd.astro/fitpm_irls.c
r39596 r40291 58 58 double *dD = dDvec->elements.Flt; 59 59 60 int *mask = NULL;60 opihi_int *mask = NULL; 61 61 if (mvec) { 62 62 mask = mvec->elements.Int; -
trunk/Ohana/src/opihi/cmd.astro/star.c
r36679 r40291 3 3 int star (int argc, char **argv) { 4 4 5 int x, y, N, dx,Nborder;5 int x, y, N, Nborder; 6 6 double max; 7 7 Buffer *buf; … … 33 33 } 34 34 35 int dx = 11; 36 int dy = 11; 37 int BOX = FALSE; 38 if ((N = get_argument (argc, argv, "-box"))) { 39 remove_argument (N, &argc, argv); 40 dx = atoi(argv[N]); 41 remove_argument (N, &argc, argv); 42 dy = atoi(argv[N]); 43 remove_argument (N, &argc, argv); 44 BOX = TRUE; 45 } 46 35 47 if ((argc != 4) && (argc != 5)) { 36 gprint (GP_ERR, "USAGE: star (buffer) x y [dx] [-border N] [-sat cnts] \n");48 gprint (GP_ERR, "USAGE: star (buffer) x y [dx] [-border N] [-sat cnts] [-box dx dy]\n"); 37 49 gprint (GP_ERR, " dx is the aperture diameter, but is adjusted up to the next odd number\n"); 38 50 return (FALSE); … … 40 52 if ((buf = SelectBuffer (argv[1], OLDBUFFER, TRUE)) == NULL) return (FALSE); 41 53 42 dx = 11;43 54 x = atof (argv[2]); 44 55 y = atof (argv[3]); … … 47 58 } 48 59 49 get_aperture_stats (&buf[0].matrix, x, y, dx, Nborder, max, VERBOSE); 60 if (BOX) { 61 get_box_stats (&buf[0].matrix, x, y, dx, dy, Nborder, max, VERBOSE); 62 } else { 63 get_aperture_stats (&buf[0].matrix, x, y, dx, Nborder, max, VERBOSE); 64 } 50 65 51 66 return (TRUE); -
trunk/Ohana/src/opihi/cmd.data/Makefile
r40165 r40291 155 155 $(SRC)/type.$(ARCH).o \ 156 156 $(SRC)/uniq.$(ARCH).o \ 157 $(SRC)/uniqpair.$(ARCH).o \ 157 158 $(SRC)/unsign.$(ARCH).o \ 158 159 $(SRC)/vbin.$(ARCH).o \ -
trunk/Ohana/src/opihi/cmd.data/init.c
r40165 r40291 141 141 int tvcontour PROTO((int, char **)); 142 142 int tvgrid PROTO((int, char **)); 143 int opihi_type PROTO((int, char **));143 int opihi_type PROTO((int, char **)); 144 144 int uniq PROTO((int, char **)); 145 int uniqpair PROTO((int, char **)); 145 146 int unsign PROTO((int, char **)); 146 147 int vbin PROTO((int, char **)); … … 325 326 {1, "ungridify", ungridify, "convert image region to vector triplet"}, 326 327 {1, "uniq", uniq, "create a uniq vector subset from a vector"}, 328 {1, "uniqpair", uniqpair, "create a uniq vector subset from a pair of vectors, saving duplicates if desired"}, 327 329 {1, "unsign", unsign, "toggle the UNSIGN status"}, 328 330 {1, "vbin", vbin, "rebin vector data by a factor of N"}, -
trunk/Ohana/src/opihi/cmd.data/limits.c
r31160 r40291 3 3 int limits (int argc, char **argv) { 4 4 5 int N, APPLY,dX, dY;5 int N, dX, dY; 6 6 int kapa; 7 char *name;8 7 Graphdata graphmode; 9 8 Vector *xvec, *yvec; … … 11 10 xvec = yvec = NULL; 12 11 13 APPLY = FALSE; 12 float minLimitX = NAN; 13 float minLimitY = NAN; 14 float maxLimitX = NAN; 15 float maxLimitY = NAN; 16 float delLimitX = NAN; 17 float delLimitY = NAN; 18 19 if ((N = get_argument (argc, argv, "-minX"))) { 20 remove_argument (N, &argc, argv); 21 minLimitX = atof (argv[N]); 22 remove_argument (N, &argc, argv); 23 } 24 if ((N = get_argument (argc, argv, "-maxX"))) { 25 remove_argument (N, &argc, argv); 26 maxLimitX = atof (argv[N]); 27 remove_argument (N, &argc, argv); 28 } 29 if ((N = get_argument (argc, argv, "-delX"))) { 30 if (!isnan(minLimitX) || !isnan(maxLimitX)) { 31 gprint (GP_ERR, "-minX & -maxX cannot be mixed with -delX\n"); 32 return (FALSE); 33 } 34 remove_argument (N, &argc, argv); 35 delLimitX = atof (argv[N]); 36 remove_argument (N, &argc, argv); 37 } 38 if ((N = get_argument (argc, argv, "-minY"))) { 39 remove_argument (N, &argc, argv); 40 minLimitY = atof (argv[N]); 41 remove_argument (N, &argc, argv); 42 } 43 if ((N = get_argument (argc, argv, "-maxY"))) { 44 remove_argument (N, &argc, argv); 45 maxLimitY = atof (argv[N]); 46 remove_argument (N, &argc, argv); 47 } 48 if ((N = get_argument (argc, argv, "-delY"))) { 49 if (!isnan(minLimitY) || !isnan(maxLimitY)) { 50 gprint (GP_ERR, "-minY & -maxY cannot be mixed with -delY\n"); 51 return (FALSE); 52 } 53 remove_argument (N, &argc, argv); 54 delLimitY = atof (argv[N]); 55 remove_argument (N, &argc, argv); 56 } 57 58 int APPLY = FALSE; 14 59 if ((N = get_argument (argc, argv, "-a"))) { 15 60 remove_argument (N, &argc, argv); 16 61 APPLY = TRUE; 17 62 } 18 name = NULL;63 char *name = NULL; 19 64 if ((N = get_argument (argc, argv, "-n"))) { 20 65 remove_argument (N, &argc, argv); … … 22 67 remove_argument (N, &argc, argv); 23 68 } 69 24 70 if (!GetGraph (&graphmode, &kapa, name)) return (FALSE); 25 71 FREE (name); … … 97 143 success: 98 144 SetLimits (xvec, yvec, &graphmode); 145 146 if (!isnan(minLimitX)) graphmode.xmin = MIN (minLimitX, graphmode.xmin); 147 if (!isnan(maxLimitX)) graphmode.xmax = MAX (maxLimitX, graphmode.xmax); 148 if (!isnan(minLimitY)) graphmode.ymin = MIN (minLimitY, graphmode.ymin); 149 if (!isnan(maxLimitY)) graphmode.ymax = MAX (maxLimitY, graphmode.ymax); 150 151 if (!isnan(delLimitX)) { 152 float delta = graphmode.xmax - graphmode.xmin; 153 if (fabs(delLimitX) > fabs(delta)) { 154 float midpt = 0.5*(graphmode.xmax + graphmode.xmin); 155 graphmode.xmax = midpt + 0.5*delLimitX; 156 graphmode.xmin = midpt - 0.5*delLimitX; 157 } 158 } 159 if (!isnan(delLimitY)) { 160 float delta = graphmode.ymax - graphmode.ymin; 161 if (fabs(delLimitY) > fabs(delta)) { 162 float midpt = 0.5*(graphmode.ymax + graphmode.ymin); 163 graphmode.ymax = midpt + 0.5*delLimitY; 164 graphmode.ymin = midpt - 0.5*delLimitY; 165 } 166 } 167 99 168 if (APPLY) KapaSetLimits (kapa, &graphmode); 100 169 return (TRUE); -
trunk/Ohana/src/opihi/cmd.data/print_vectors.c
r37049 r40291 4 4 5 5 Vector **vec; 6 int i, j; 6 int i, j, N; 7 8 int START_VALUE = 0; 9 if ((N = get_argument (argc, argv, "-s"))) { 10 remove_argument (N, &argc, argv); 11 START_VALUE = atoi (argv[N]); 12 remove_argument (N, &argc, argv); 13 } 14 15 int END_VALUE = -1; 16 if ((N = get_argument (argc, argv, "-e"))) { 17 remove_argument (N, &argc, argv); 18 END_VALUE = atoi (argv[N]); 19 remove_argument (N, &argc, argv); 20 } 7 21 8 22 if (argc < 2) { … … 27 41 } 28 42 29 for (j = 0; j < MaxLen; j++) { 43 // start and end may be 0 - N (truncated to N) or may be negative, in which case it refers to 44 // distance from the end (just like vector[-5]) 45 START_VALUE = (START_VALUE < 0) ? MaxLen + START_VALUE + 1 : MIN (START_VALUE, MaxLen); 46 START_VALUE = MAX (0, START_VALUE); 47 48 END_VALUE = (END_VALUE < 0) ? MaxLen + END_VALUE + 1 : MIN (END_VALUE, MaxLen); 49 END_VALUE = MAX (0, END_VALUE); 50 51 for (j = START_VALUE; j < END_VALUE; j++) { 30 52 for (i = 0; i < Nvec; i++) { 31 53 if (j >= vec[i][0].Nelements) { … … 35 57 gprint (GP_LOG, "%f ", vec[i][0].elements.Flt[j]); 36 58 } else { 37 gprint (GP_LOG, "%d", vec[i][0].elements.Int[j]);59 gprint (GP_LOG, OPIHI_INT_FMT" ", vec[i][0].elements.Int[j]); 38 60 } 39 61 } -
trunk/Ohana/src/opihi/cmd.data/reindex.c
r39227 r40291 47 47 continue; 48 48 } 49 if (*vx > Nmax) ESCAPE("unexpected value in index: %d(%d)\n", *vx, i);49 if (*vx > Nmax) ESCAPE("unexpected value in index: "OPIHI_INT_FMT" (%d)\n", *vx, i); 50 50 ovec[0].elements.Flt[Npts] = vi[*vx]; 51 51 Npts++; … … 67 67 continue; 68 68 } 69 if (*vx > Nmax) ESCAPE("unexpected value in index: %d(%d)\n", *vx, i);69 if (*vx > Nmax) ESCAPE("unexpected value in index: "OPIHI_INT_FMT" (%d)\n", *vx, i); 70 70 ovec[0].elements.Int[Npts] = vi[*vx]; 71 71 Npts++; -
trunk/Ohana/src/opihi/cmd.data/test/periodogram-fm.sh
r40165 r40291 55 55 56 56 periodogram_fm t f df 5 50 period power 57 #periodogram t f 5 50 period power58 57 59 58 # lim -n 0 t f; clear; box; plot -x 2 -pt 2 t f … … 88 87 89 88 periodogram_fm t f df 1 10 period power 90 #periodogram t f 1 10 period power91 89 92 90 # lim -n 0 t f; clear; box; plot -x 2 -pt 2 t f … … 97 95 if (abs ($peakpos - $P) > 0.05) 98 96 $PASS = 0 97 end 98 99 if ($PLOT) 100 lim period power; clear; box; line -c red70 -lw 3 $P 0 to $P $peakval; plot period power -x line 99 101 end 100 102 end … … 117 119 118 120 periodogram_fm t f df 2 30 period power 119 #periodogram t f 2 30 period power120 121 121 122 # lim -n 0 t f; clear; box; plot -x 2 -pt 2 t f … … 126 127 if (abs ($peakpos - $P) > 0.05) 127 128 $PASS = 0 129 end 130 131 if ($PLOT) 132 lim period power; clear; box; line -c red70 -lw 3 $P 0 to $P $peakval; plot period power -x line 128 133 end 129 134 end … … 145 150 set df = 0.01 + zero(f) 146 151 147 periodogram_fm t f 2 30 period power152 periodogram_fm t f df 2 30 period power 148 153 149 154 # lim -n 0 t f; clear; box; plot -x 2 -pt 2 t f … … 155 160 $PASS = 0 156 161 end 157 end 158 159 # test using random samples, offset start, non-zero DC, some noise 162 163 if ($PLOT) 164 lim period power; clear; box; line -c red70 -lw 3 $P 0 to $P $peakval; plot period power -x line 165 end 166 end 167 168 # test using 300 random samples, offset start, non-zero DC, some noise 160 169 macro test6 161 170 $PASS = 1 … … 178 187 set df = 0.01 + zero(f) 179 188 180 periodogram_fm t f 2 30 period power189 periodogram_fm t f df 2 30 period power 181 190 182 191 # lim -n 0 t f; clear; box; plot -x 2 -pt 2 t f … … 188 197 $PASS = 0 189 198 end 190 end 191 192 # test using fewer random samples, offset start, non-zero DC, some noise 199 200 if ($PLOT) 201 lim period power; clear; box; line -c red70 -lw 3 $P 0 to $P $peakval; plot period power -x line 202 end 203 end 204 205 # test using 100 fewer random samples, offset start, non-zero DC, some noise 193 206 macro test7 194 207 $PASS = 1 … … 211 224 set df = 0.01 + zero(f) 212 225 213 periodogram_fm t f 2 30 period power226 periodogram_fm t f df 2 30 period power 214 227 215 228 # lim -n 0 t f; clear; box; plot -x 2 -pt 2 t f … … 221 234 $PASS = 0 222 235 end 223 end 224 225 # test using fewer random samples, high frequency, non-zero DC, some noise 236 237 if ($PLOT) 238 lim period power; clear; box; line -c red70 -lw 3 $P 0 to $P $peakval; plot period power -x line 239 end 240 end 241 242 # test using Ndays random samples, RR Lyrae-sized light curves (0.7 mag), 243 # optional noise level 226 244 macro test8 227 if ($0 != 2)228 echo "USAGE: test8: Ndays")245 if ($0 != 4) 246 echo "USAGE: test8: Period Ndays (df)" 229 247 break 230 248 end 231 249 232 250 local Ndays 233 $Ndays = $1 234 235 $PASS = 1 236 break -auto off 237 238 local P PI 239 $PI = 3.14159265359 240 $P = 0.8*rnd(0) + 0.2 251 $P = $1 252 $Ndays = $2 253 $dM = $3 254 255 $PASS = 1 256 break -auto off 257 258 local PI 259 $PI = 3.14159265359 241 260 $trueP = $P 242 261 … … 246 265 247 266 # t is a time in days, but we always have 4 within 1 hour: 248 set t 0 = int(100 * rnd(x))249 set dtx = (3/24) * rnd(x) 250 set t0 = t 0+ dtx267 set tday = int(100 * rnd(x)); # choose Ndays random days between 0 and 100 268 set dtx = (3/24) * rnd(x); # choose a starting time within that night 269 set t0 = tday + dtx 251 270 252 271 set dt1 = (15.0 / 1440) * rnd(x) + ( 0 + 7.5) / 1440 … … 260 279 set tmp = t0 + dt3; concat tmp t 261 280 262 set fraw = sin(2*$PI*t/$P) + 0.5281 set fraw = 0.75*sin(2*$PI*t/$P) 263 282 264 283 # 0.05 : peakpos = 14.95 265 284 # 0.10 : peakpos = 15.04 ( 266 gaussdev df t[] 0.0 0.25285 gaussdev df t[] 0.0 $dM 267 286 set f = fraw + df 268 set df = 0.01+ zero(f)269 270 periodogram_fm t f 0.1 2.0 period power287 set df = $dM + zero(f) 288 289 periodogram_fm t f df 0.1 20.0 period power 271 290 272 291 # lim -n 0 t f; clear; box; plot -x 2 -pt 2 t f … … 278 297 $PASS = 0 279 298 end 280 end 299 if ($PLOT) 300 lim period power; clear; box; line -c red70 -lw 3 $P 0 to $P $peakval; plot period power -x line 301 end 302 end 303 304 # test using Ndays random samples, RR Lyrae-sized light curves (0.7 mag), 305 # optional noise level 306 # compare periodogram and periodogram_fm 307 macro test9 308 if ($0 != 4) 309 echo "USAGE: test8: Period Ndays (df)" 310 break 311 end 312 313 local Ndays 314 $P = $1 315 $Ndays = $2 316 $dM = $3 317 318 $PASS = 1 319 break -auto off 320 321 local PI 322 $PI = 3.14159265359 323 $trueP = $P 324 325 delete -q x t f period power 326 327 create x 0 $Ndays 328 329 # t is a time in days, but we always have 4 within 1 hour: 330 set tday = int(100 * rnd(x)); # choose Ndays random days between 0 and 100 331 set dtx = (3/24) * rnd(x); # choose a starting time within that night 332 set t0 = tday + dtx 333 334 set dt1 = (15.0 / 1440) * rnd(x) + ( 0 + 7.5) / 1440 335 set dt2 = (15.0 / 1440) * rnd(x) + (15 + 7.5) / 1440 336 set dt3 = (15.0 / 1440) * rnd(x) + (30 + 7.5) / 1440 337 338 delete -q t 339 concat t0 t 340 set tmp = t0 + dt1; concat tmp t 341 set tmp = t0 + dt2; concat tmp t 342 set tmp = t0 + dt3; concat tmp t 343 344 set fraw = 0.75*sin(2*$PI*t/$P) 345 346 # 0.05 : peakpos = 14.95 347 # 0.10 : peakpos = 15.04 ( 348 gaussdev df t[] 0.0 $dM 349 set f = fraw + df 350 set df = $dM + zero(f) 351 352 periodogram_fm t f df 0.1 20.0 period_fm power_fm 353 periodogram t f 0.1 20.0 period power 354 355 # lim -n 0 t f; clear; box; plot -x 2 -pt 2 t f 356 # lim -n 1 period power; clear; box; plot period power 357 358 peak -q period_fm power_fm 359 $peakval_fm = $peakval 360 361 peak -q period power 362 vstat -q power 363 set power = power / $MAX 364 365 # if (abs ($peakpos - $P) > 0.05) 366 # $PASS = 0 367 # end 368 369 set freq = 1 / period 370 set freq_fm = 1 / period_fm 371 $Freq = 1 / $P 372 373 if ($PLOT) 374 if (1) 375 lim period power; clear; box 376 line -c red70 -lw 3 $P 0 to $P $peakval_fm; 377 plot period power -x line -c grey70 -lw 2 378 plot period_fm power_fm -x line -c black 379 else 380 lim freq power; clear; box 381 line -c red70 -lw 3 $Freq 0 to $Freq 1.0 382 plot freq power -x line -c grey70 -lw 2 383 plot freq_fm power_fm -x line -c black 384 end 385 end 386 end 387 388 389 # test using Ndays random samples, RR Lyrae-sized light curves (0.7 mag), 390 # optional noise level 391 # compare periodogram and periodogram_fm 392 macro test10 393 if ($0 != 4) 394 echo "USAGE: test8: Period Ndays (df)" 395 break 396 end 397 398 local Ndays 399 $P = $1 400 $Ndays = $2 401 $dM = $3 402 403 $PASS = 1 404 break -auto off 405 406 local PI 407 $PI = 3.14159265359 408 $trueP = $P 409 410 delete -q x t f period power 411 412 create x 0 $Ndays 413 414 # t is a time in days, but we always have 4 within 1 hour: 415 set tday = int(100 * rnd(x)); # choose Ndays random days between 0 and 100 416 set dtx = (3/24) * rnd(x); # choose a starting time within that night 417 set t0 = tday + dtx 418 419 set dt1 = (15.0 / 1440) * rnd(x) + ( 0 + 7.5) / 1440 420 set dt2 = (15.0 / 1440) * rnd(x) + (15 + 7.5) / 1440 421 set dt3 = (15.0 / 1440) * rnd(x) + (30 + 7.5) / 1440 422 423 delete -q t 424 concat t0 t 425 set tmp = t0 + dt1; concat tmp t 426 set tmp = t0 + dt2; concat tmp t 427 set tmp = t0 + dt3; concat tmp t 428 429 set fraw = 0.75*sin(2*$PI*t/$P) 430 431 # 0.05 : peakpos = 14.95 432 # 0.10 : peakpos = 15.04 ( 433 gaussdev df t[] 0.0 $dM 434 set f = fraw + df 435 set df = $dM + zero(f) 436 437 periodogram_fm t f df 0.05 20.0 period_fm power_fm 438 439 gaussdev df t[] 0.0 $dM 440 set Fo = df 441 periodogram_fm t Fo df 0.05 20.0 period power 442 443 # lim -n 0 t f; clear; box; plot -x 2 -pt 2 t f 444 # lim -n 1 period power; clear; box; plot period power 445 446 peak -q period_fm power_fm 447 $peakval_fm = $peakval 448 449 peak -q period power 450 451 # if (abs ($peakpos - $P) > 0.05) 452 # $PASS = 0 453 # end 454 455 set freq = 1 / period 456 set freq_fm = 1 / period_fm 457 $Freq = 1 / $P 458 459 if ($PLOT) 460 if (1) 461 lim period_fm power_fm; clear; box 462 line -c red70 -lw 3 $P 0 to $P $peakval_fm; 463 plot period power -x line -c grey70 -lw 2 464 plot period_fm power_fm -x line -c black 465 else 466 lim freq power; clear; box 467 line -c red70 -lw 3 $Freq 0 to $Freq 1.0 468 plot freq power -x line -c grey70 -lw 2 469 plot freq_fm power_fm -x line -c black 470 end 471 end 472 end 473 474 # we have time (MJD) and mag 475 # we generate the folded lightcure and measure sigma relative to the smoothed version (bins of 0.1 period) 476 macro fold.one.period 477 if ($0 != 5) 478 echo "USAGE: fold.one.period (time) (mag) (magErr) (period)" 479 break 480 end 481 482 local myTime myMag myMagErr myPeriod 483 $myTime = $1 484 $myMag = $2 485 $myMagErr = $3 486 $myPeriod = $4 487 488 set phi = $myTime / $myPeriod - int($myTime / $myPeriod) 489 490 if ($PLOT_FOLD) 491 lim -n phi phi $myMag; clear; box; 492 end 493 494 delete -q magResid 495 496 $dPhi = 0.05; # half of bin size 497 create nphi $dPhi {1 + $dPhi} {2*$dPhi} 498 set magR = zero(nphi) 499 set magS = zero(nphi) 500 for i 0 nphi[] 501 subset tmp_mag_sub = $myMag where (phi >= nphi[$i] - $dPhi) && (phi < nphi[$i] + $dPhi) 502 vstat -q tmp_mag_sub 503 magR[$i] = $MEDIAN 504 magS[$i] = $SIGMA 505 506 set magDelta = tmp_mag_sub - $MEDIAN 507 concat magDelta magResid 508 509 if ($PLOT_FOLD) 510 subset tmp_phi_sub = phi where (phi >= nphi[$i] - $dPhi) && (phi < nphi[$i] + $dPhi) 511 if ($i % 2) 512 plot tmp_phi_sub tmp_mag_sub -pt 7 -sz 3 -c blue -lw 2 513 else 514 plot tmp_phi_sub tmp_mag_sub -pt 7 -sz 3 -c red -lw 2 515 end 516 end 517 end 518 519 if ($PLOT_FOLD) 520 plot -pt 10 -sz 1.5 phi $myMag -dy $myMagErr 521 plot -pt 2 -sz 2.0 -c red nphi magR -dy magS 522 end 523 524 vstat -q magResid 525 end 526 527 281 528 282 529 # Memory test … … 298 545 299 546 for i 0 100 300 periodogram_fm t f 2 30 period power547 periodogram_fm t f df 2 30 period power 301 548 end 302 549 -
trunk/Ohana/src/opihi/cmd.data/test/periodogram.sh
r40165 r40291 209 209 # test using fewer random samples, high frequency, non-zero DC, some noise 210 210 macro test8 211 if ($0 != 2)212 echo "USAGE: test8: Ndays")211 if ($0 != 4) 212 echo "USAGE: test8: Period Ndays df" 213 213 break 214 214 end 215 215 216 216 local Ndays 217 $Ndays = $1 218 219 $PASS = 1 220 break -auto off 221 222 local P PI 223 $PI = 3.14159265359 224 $P = 0.8*rnd(0) + 0.2 217 $P = $1 218 $Ndays = $2 219 $dM = $3 220 221 $PASS = 1 222 break -auto off 223 224 local PI 225 $PI = 3.14159265359 225 226 $trueP = $P 226 227 … … 230 231 231 232 # t is a time in days, but we always have 4 within 1 hour: 232 set t 0 = int(100 * rnd(x))233 set dtx = (3/24) * rnd(x) 234 set t0 = t 0+ dtx233 set tday = int(100 * rnd(x)); # choose Ndays random days between 0 and 100 234 set dtx = (3/24) * rnd(x); # choose a starting time within that night 235 set t0 = tday + dtx 235 236 236 237 set dt1 = (15.0 / 1440) * rnd(x) + ( 0 + 7.5) / 1440 … … 244 245 set tmp = t0 + dt3; concat tmp t 245 246 246 set fraw = sin(2*$PI*t/$P) + 0.5247 set fraw = 0.75*sin(2*$PI*t/$P) 247 248 248 249 # 0.05 : peakpos = 14.95 249 250 # 0.10 : peakpos = 15.04 ( 250 gaussdev df t[] 0.0 0.25251 gaussdev df t[] 0.0 $dM 251 252 set f = fraw + df 252 253 … … 260 261 if (abs ($peakpos - $P) > 0.05) 261 262 $PASS = 0 263 end 264 if ($PLOT) 265 lim period power; clear; box; line -c red70 -lw 3 $P 0 to $P $peakval; plot period power -x line 262 266 end 263 267 end -
trunk/Ohana/src/opihi/cmd.data/uniq.c
r39457 r40291 80 80 memcpy (indata, ivec->elements.Int, ivec[0].Nelements*sizeof(opihi_int)); 81 81 82 isort (indata, ivec->Nelements);82 llsort (indata, ivec->Nelements); 83 83 84 84 Nnew = 0; -
trunk/Ohana/src/opihi/cmd.data/write_vectors.c
r39360 r40291 165 165 } else { 166 166 if (CSV) { 167 fprintf (f, "%d,", vec[j][0].elements.Int[i]);167 fprintf (f, OPIHI_INT_FMT",", vec[j][0].elements.Int[i]); 168 168 } else { 169 fprintf (f, "%d", vec[j][0].elements.Int[i]);169 fprintf (f, OPIHI_INT_FMT" ", vec[j][0].elements.Int[i]); 170 170 } 171 171 } -
trunk/Ohana/src/opihi/dvo/dvo_host_utils.c
r39524 r40291 284 284 // XXX a bit of a waste (but only 1024 * 60 bytes or so 285 285 ALLOCATE (table->hosts[i].results, char, DVO_MAX_PATH); 286 snprintf (table->hosts[i].results, DVO_MAX_PATH, "%s/dvo.results.%s. fits", table->hosts[i].pathname, uniquer);286 snprintf (table->hosts[i].results, DVO_MAX_PATH, "%s/dvo.results.%s.%04d.fits", table->hosts[i].pathname, uniquer, table->hosts[i].hostID); 287 287 288 288 int Ninvec = 0; -
trunk/Ohana/src/opihi/dvo/gimages.c
r39347 r40291 214 214 if (PixelCoords) { 215 215 gprint (GP_LOG, "%3d %5d %s %6.1f %6.1f %20s %5d %2d %4.2f %6.3f %5.3f %5.3f %4x %7d\n", 216 Nfound, (int) i, image[i].name, X, Y, date, image[i].nstar, image[i].photcode, image[i].secz, image[i].Mcal , image[i].dMcal, image[i].exptime, image[i].flags, image[i].imageID);216 Nfound, (int) i, image[i].name, X, Y, date, image[i].nstar, image[i].photcode, image[i].secz, image[i].McalPSF, image[i].dMcal, image[i].exptime, image[i].flags, image[i].imageID); 217 217 } else { 218 218 XY_to_RD (&ra, &dec, 0.5*image[i].NX, 0.5*image[i].NY, &image[i].coords); 219 219 gprint (GP_LOG, "%3d %5d %s %8.4f %8.4f %20s %5d %2d %4.2f %6.3f %5.3f %5.3f %4x %7d\n", 220 Nfound, (int) i, image[i].name, ra, dec, date, image[i].nstar, image[i].photcode, image[i].secz, image[i].Mcal , image[i].dMcal, image[i].exptime, image[i].flags, image[i].imageID);220 Nfound, (int) i, image[i].name, ra, dec, date, image[i].nstar, image[i].photcode, image[i].secz, image[i].McalPSF, image[i].dMcal, image[i].exptime, image[i].flags, image[i].imageID); 221 221 } 222 222 sprintf (name, "IMAGEx:%d", Nfound); -
trunk/Ohana/src/opihi/dvo/gstar.c
r39634 r40291 760 760 761 761 if (FULL_OUTPUT) { 762 gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].Mcal); 762 gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].McalPSF); 763 gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].McalAPER); 763 764 gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].Mflat); 764 gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].Map); 765 gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].Mkron); 765 Mrel = PhotRel (&catalog.measure[Nv], &catalog.average[k], &catalog.secfilt[k*Nsecfilt], MAG_CLASS_APER); 766 gprint (GP_LOG, "%6.3f ", Mrel); 767 Mrel = PhotRel (&catalog.measure[Nv], &catalog.average[k], &catalog.secfilt[k*Nsecfilt], MAG_CLASS_KRON); 768 gprint (GP_LOG, "%6.3f ", Mrel); 766 769 gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].dMkron); 767 770 gprint (GP_LOG, "%5.1f ", pow(10.0, 0.4*catalog.measure[Nv].dt)); … … 960 963 print_double (NAN); 961 964 } else { 962 print_double_exp (secfilt[seq]. Mstdev);965 print_double_exp (secfilt[seq].sMpsfChp); 963 966 } 964 967 break; … … 1023 1026 print_double (NAN); 1024 1027 } else { 1025 print_double (secfilt[seq].M );1028 print_double (secfilt[seq].MpsfChp); 1026 1029 } 1027 1030 break; … … 1031 1034 print_double (NAN); 1032 1035 } else { 1033 print_double (secfilt[seq].dM );1036 print_double (secfilt[seq].dMpsfChp); 1034 1037 } 1035 1038 break; … … 1039 1042 print_double (NAN); 1040 1043 } else { 1041 print_double (secfilt[seq].Map );1044 print_double (secfilt[seq].MapChp); 1042 1045 } 1043 1046 break; … … 1047 1050 print_double (NAN); 1048 1051 } else { 1049 print_double (secfilt[seq].dMap );1052 print_double (secfilt[seq].dMapChp); 1050 1053 } 1051 1054 break; … … 1055 1058 print_double (NAN); 1056 1059 } else { 1057 print_double_exp (secfilt[seq].sMap );1060 print_double_exp (secfilt[seq].sMapChp); 1058 1061 } 1059 1062 break; … … 1063 1066 print_double (NAN); 1064 1067 } else { 1065 print_double_exp (secfilt[seq].dMap );1068 print_double_exp (secfilt[seq].dMapChp); 1066 1069 } 1067 1070 break; … … 1071 1074 print_double (NAN); 1072 1075 } else { 1073 print_double (secfilt[seq].Mkron );1076 print_double (secfilt[seq].MkronChp); 1074 1077 } 1075 1078 break; … … 1079 1082 print_double (NAN); 1080 1083 } else { 1081 print_double (secfilt[seq].dMkron );1084 print_double (secfilt[seq].dMkronChp); 1082 1085 } 1083 1086 break; … … 1087 1090 print_double (NAN); 1088 1091 } else { 1089 print_double_exp (secfilt[seq].sMkron );1092 print_double_exp (secfilt[seq].sMkronChp); 1090 1093 } 1091 1094 break; … … 1095 1098 print_double (NAN); 1096 1099 } else { 1097 print_double_exp (secfilt[seq].dMkron );1100 print_double_exp (secfilt[seq].dMkronChp); 1098 1101 } 1099 1102 break; -
trunk/Ohana/src/opihi/dvo/imdata.c
r39457 r40291 183 183 for (i = 0; i < catalog.Nmeasure; i++) { 184 184 if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue; 185 vec[0].elements.Flt[N] = catalog.measure[i].Mcal ;185 vec[0].elements.Flt[N] = catalog.measure[i].McalPSF; 186 186 N++; 187 187 CHECK_REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS, N, 1000); -
trunk/Ohana/src/opihi/dvo/imlist.c
r39310 r40291 141 141 if (VERBOSE) { 142 142 gprint (GP_LOG, "%3lld %s %8lld %8.4f %8.4f %f %5d %2d %4.2f %5.3f %5.3f", 143 (long long) i, image[i].name, (long long) image[i].imageID, r, d, t, image[i].nstar, image[i].photcode, image[i].secz, image[i].Mcal , image[i].dMcal);143 (long long) i, image[i].name, (long long) image[i].imageID, r, d, t, image[i].nstar, image[i].photcode, image[i].secz, image[i].McalPSF, image[i].dMcal); 144 144 145 145 if (showUR) { -
trunk/Ohana/src/opihi/dvo/imphot.c
r39233 r40291 64 64 for (x = 0; x < 100; x+=1.0, p++) { 65 65 // *p = applyMcal (&image[subset[0]], (fx*x), (fy*y)); 66 *p = image[subset[0]].Mcal ;66 *p = image[subset[0]].McalPSF; 67 67 } 68 68 } … … 71 71 for (j = 0; j < Nsubset; j++) { 72 72 i = subset[j]; 73 gprint (GP_ERR, "%s: %f\n", image[i].name, image[i].Mcal );73 gprint (GP_ERR, "%s: %f\n", image[i].name, image[i].McalPSF); 74 74 75 75 // XXX old code when we had the option of a 2D zero point model … … 77 77 switch (image[i].order) { 78 78 case 0: 79 gprint (GP_ERR, "%s: %d - %f\n", image[i].name, image[i].order, image[i].Mcal );79 gprint (GP_ERR, "%s: %d - %f\n", image[i].name, image[i].order, image[i].McalPSF); 80 80 break; 81 81 case 1: 82 gprint (GP_ERR, "%s: %d - %f, %d %d\n", image[i].name, image[i].order, image[i].Mcal , image[i].Mx, image[i].My);82 gprint (GP_ERR, "%s: %d - %f, %d %d\n", image[i].name, image[i].order, image[i].McalPSF, image[i].Mx, image[i].My); 83 83 break; 84 84 case 2: 85 gprint (GP_ERR, "%s: %d - %f, %d %d, %d %d %d\n", image[i].name, image[i].order, image[i].Mcal , image[i].Mx, image[i].My, image[i].Mxx, image[i].Mxy, image[i].Myy);85 gprint (GP_ERR, "%s: %d - %f, %d %d, %d %d %d\n", image[i].name, image[i].order, image[i].McalPSF, image[i].Mx, image[i].My, image[i].Mxx, image[i].Mxy, image[i].Myy); 86 86 break; 87 87 case 3: 88 gprint (GP_ERR, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal , image[i].Mx, image[i].My,88 gprint (GP_ERR, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d\n", image[i].name, image[i].order, image[i].McalPSF, image[i].Mx, image[i].My, 89 89 image[i].Mxx, image[i].Mxy, image[i].Myy, image[i].Mxxx, image[i].Mxxy, image[i].Mxyy, image[i].Myyy); 90 90 break; 91 91 case 4: 92 gprint (GP_ERR, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d, %d %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal , image[i].Mx, image[i].My,92 gprint (GP_ERR, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d, %d %d %d %d %d\n", image[i].name, image[i].order, image[i].McalPSF, image[i].Mx, image[i].My, 93 93 image[i].Mxx, image[i].Mxy, image[i].Myy, image[i].Mxxx, image[i].Mxxy, image[i].Mxyy, image[i].Myyy, 94 94 image[i].Mxxxx, image[i].Mxxxy, image[i].Mxxyy, image[i].Mxyyy, image[i].Myyyy); -
trunk/Ohana/src/opihi/dvo/imstats.c
r40165 r40291 41 41 Xvec.elements.Flt[i] = image[i].secz; 42 42 if (Mcal) 43 Yvec.elements.Flt[i] = image[i].Mcal ;43 Yvec.elements.Flt[i] = image[i].McalPSF; 44 44 else 45 45 Yvec.elements.Flt[i] = image[i].dMcal; … … 47 47 gprint (GP_ERR, "%d %8.4f %8.4f %10d %6d %5.3f %6.3f %6.3f\n", 48 48 i, r, d, image[i].tzero, image[i].nstar, Xvec.elements.Flt[i], 49 image[i].Mcal , image[i].dMcal);49 image[i].McalPSF, image[i].dMcal); 50 50 } 51 51 if (AutoLimits) SetLimits (&Xvec, &Yvec, &graphmode); -
trunk/Ohana/src/opihi/dvo/objectcoverage.c
r39457 r40291 203 203 if (catalog.secfilt[j*Nsecfilt+Nsec].Ncode < 2) { continue; } 204 204 205 invalid = ((catalog.secfilt[j*Nsecfilt + Nsec].M < 1.0) || (isnan(catalog.secfilt[j*Nsecfilt + Nsec].M)));205 invalid = ((catalog.secfilt[j*Nsecfilt + Nsec].MpsfChp < 1.0) || (isnan(catalog.secfilt[j*Nsecfilt + Nsec].MpsfChp))); 206 206 if (invalid) continue; 207 207 -
trunk/Ohana/src/opihi/dvo/paverage.c
r40165 r40291 125 125 while (average[i].R > Rmax) average[i].R -= 360.0; 126 126 127 mag = secfilt[i*Nsecfilt+Nsec].M ;127 mag = secfilt[i*Nsecfilt+Nsec].MpsfChp; 128 128 Zvec[Npts] = MIN (1.0, MAX (0.01, (mag - Mz) / Mr)); 129 129 if (LimExclude && (Zvec[Npts] > 0.99)) continue; -
trunk/Ohana/src/opihi/dvo/remote.c
r39283 r40291 27 27 gprint (GP_ERR, " -skip-result : do not try to read from the result file\n"); 28 28 gprint (GP_ERR, "OR: remote -reload (uniquer)\n"); 29 gprint (GP_ERR, " (reloads the remote host results into vectors as if a parallel command were run)\n"); 29 30 gprint (GP_ERR, "OR: remote -get-results (uniquer)\n"); 31 gprint (GP_ERR, " (generates the list of remote result filenames and status variables)\n"); 32 gprint (GP_ERR, " (RESULT_FILE:i is the filenme, RESULT_STATUS:i is the dvo_client exit status)\n"); 30 33 return FALSE; 31 34 } -
trunk/Ohana/src/opihi/dvo/skycoverage.c
r39233 r40291 330 330 break; 331 331 case MIN_MCAL: 332 V[ys*Nx + xs] = MIN(V[ys*Nx + xs], image[i].Mcal );332 V[ys*Nx + xs] = MIN(V[ys*Nx + xs], image[i].McalPSF); 333 333 break; 334 334 case MAX_MCAL: 335 V[ys*Nx + xs] = MAX(V[ys*Nx + xs], image[i].Mcal );335 V[ys*Nx + xs] = MAX(V[ys*Nx + xs], image[i].McalPSF); 336 336 break; 337 337 case MIN_TIME: { -
trunk/Ohana/src/opihi/include/astro.h
r39610 r40291 47 47 double VectorFractionInterpolate (double *values, float fraction, int Npts); 48 48 49 int PlxSetMeanEpoch (double *R, double *D, double *T, double *Rmean, double *Dmean, double *Tmean, int *mask, int Ntotal);50 int PlxSetEpochPosition (PlxFitData *fitdata, double *R, double *D, double *dR, double *dD, double *T, int *mask, int Ntotal, Coords *coords, double Tmean);51 int PlxOutlierClip (PlxFitData *fitdata, int *mask, int Noutlier, float dPsigMax, Vector *dPvec, int VERBOSE);49 int PlxSetMeanEpoch (double *R, double *D, double *T, double *Rmean, double *Dmean, double *Tmean, opihi_int *mask, int Ntotal); 50 int PlxSetEpochPosition (PlxFitData *fitdata, double *R, double *D, double *dR, double *dD, double *T, opihi_int *mask, int Ntotal, Coords *coords, double Tmean); 51 int PlxOutlierClip (PlxFitData *fitdata, opihi_int *mask, int Noutlier, float dPsigMax, Vector *dPvec, int VERBOSE); 52 52 53 53 int PlxFitDataAlloc (PlxFitData *data, int N); -
trunk/Ohana/src/opihi/include/data.h
r37807 r40291 162 162 /* starfuncs.c */ 163 163 double get_aperture_stats (Matrix *matrix, int X, int Y, int Npix, int Nborder, double max, int VERBOSE); 164 double get_box_stats (Matrix *matrix, int X, int Y, int dX, int dY, int Nborder, double max, int VERBOSE); 165 164 166 int set_rough_radii (double Ra, double Ri, double Ro); 165 167 int get_rough_star (float *data, int Nx, int Ny, int x, int y, opihi_flt *xc, opihi_flt *yc, opihi_flt *sx, opihi_flt *sy, opihi_flt *sxy, opihi_flt *zs, opihi_flt *zp, opihi_flt *sk); -
trunk/Ohana/src/opihi/lib.data/graphtools.c
r38153 r40291 10 10 if (xvec != NULL) { 11 11 if (xvec->type == OPIHI_FLT) { 12 maxX = DBL_MIN;12 maxX = -DBL_MAX; 13 13 minX = DBL_MAX; 14 14 for (i = 0; i < xvec[0].Nelements; i++) { … … 33 33 if (yvec != NULL) { 34 34 if (yvec->type == OPIHI_FLT) { 35 maxY = DBL_MIN;35 maxY = -DBL_MAX; 36 36 minY = DBL_MAX; 37 37 for (i = 0; i < yvec[0].Nelements; i++) { -
trunk/Ohana/src/opihi/lib.data/starfuncs.c
r36679 r40291 101 101 } 102 102 103 double get_box_stats (Matrix *matrix, int X, int Y, int dX, int dY, int Nborder, double max, int VERBOSE) { 104 105 double *ring; 106 double x, y, x2, y2, xy, I, sky, FWHMx, FWHMy, value, mag, Sxy; 107 int i, j, n, Nring, Nmax; 108 double Npts, gain, dsky2, dmag, peak, offset; 109 char *string; 110 111 string = get_variable ("GAIN"); 112 if (string == (char *) NULL) { 113 gprint (GP_ERR, "assuming a value of 1.0\n"); 114 gain = 1.0; 115 } else { 116 gain = atof (string); 117 } 118 Nborder = MAX (1, Nborder); 119 Nborder = MIN (1000, Nborder); 120 121 int dX2 = (int)(0.5*dX); 122 int dY2 = (int)(0.5*dY); 123 dX = 2 * dX2 + 1; 124 dY = 2 * dY2 + 1; 125 126 Nring = 2*Nborder*(dX + 2*Nborder) + 2*Nborder*(dY + 2*Nborder); 127 ALLOCATE (ring, double, Nring); 128 bzero (ring, sizeof(double)*Nring); 129 130 // get the pixels in the border regions: 131 // XXX gfits_get_matrix_value returns 0 for out-of-bounds pixels, but should return NAN 132 // and they should be skipped 133 n = 0; 134 for (j = 0; j < Nborder; j++) { 135 for (i = X - dX2 - Nborder; i < X + dX2 + Nborder + 1; i++) { 136 value = gfits_get_matrix_value (matrix, i, (int)(Y - dY2 - j)); 137 if (isfinite(value)) { ring[n] = value; n++; } 138 value = gfits_get_matrix_value (matrix, i, (int)(Y + dY2 + j)); 139 if (isfinite(value)) { ring[n] = value; n++; } 140 } 141 for (i = Y - dY2; i < Y + dY2 + 1; i++) { 142 value = gfits_get_matrix_value (matrix, (int)(X - dX2 - j), i); 143 if (isfinite(value)) { ring[n] = value; n++; } 144 value = gfits_get_matrix_value (matrix, (int)(X + dX2 + j), i); 145 if (isfinite(value)) { ring[n] = value; n++; } 146 } 147 } 148 Nring = n; 149 dsort (ring, Nring); 150 for (Npts = sky = dsky2 = 0, i = 0.25*Nring; i < 0.75*Nring; i++, Npts += 1.0) { 151 sky += ring[i]; 152 dsky2 += ring[i]*ring[i]; 153 } 154 sky = sky / Npts; 155 dsky2 = dsky2 / Npts - sky*sky; 156 free (ring); 157 158 float dx, dy; 159 160 peak = 0; 161 Npts = Nmax = 0; 162 x = y = x2 = y2 = xy = I = 0; 163 for (i = X - dX2; i < X + dX2 + 1; i++) { 164 for (j = Y - dY2; j < Y + dY2 + 1; j++) { 165 value = gfits_get_matrix_value (matrix, i, j); 166 if (!isfinite(value)) continue; 167 offset = value - sky; 168 dx = i - X; 169 dy = j - Y; 170 x += dx*offset; 171 y += dy*offset; 172 x2 += dx*dx*offset; 173 y2 += dy*dy*offset; 174 xy += dx*dy*offset; 175 I += offset; 176 Npts ++; 177 if (value > max) { 178 Nmax ++; 179 } 180 if (value > peak) peak = value; 181 } 182 } 183 184 x = x / I; 185 y = y / I; 186 FWHMx = 2.355*sqrt (fabs(x2 / I - x*x)); 187 FWHMy = 2.355*sqrt (fabs(y2 / I - y*y)); 188 Sxy = xy / I - x*y; 189 mag = -2.5*log10(I); 190 191 // flux_error = sqrt( I + Npts*dsky2 ) 192 // dmag = 1.086 * flux_error / flux 193 dmag = 1.086 * sqrt (fabs(I + Npts*dsky2)) / (gain * I); 194 x = x + X; 195 y = y + Y; 196 197 set_variable ("Xg", x); 198 set_variable ("Yg", y); 199 set_variable ("SXg", FWHMx); 200 set_variable ("SYg", FWHMy); 201 set_variable ("SXYg", Sxy); 202 set_variable ("Sg", sky); 203 set_variable ("dSg", sqrt (fabs (dsky2))); 204 set_variable ("Zg", mag); 205 set_variable ("dZg", dmag); 206 set_variable ("Zcg", I); 207 set_variable ("Zpk", peak); 208 set_int_variable ("Nsat", Nmax); 209 set_int_variable ("Npts", Npts); 210 211 if (VERBOSE) gprint (GP_LOG, "%f %f %f %f %f %f %f %f\n", x, y, FWHMx, FWHMy, sky, I, mag, dmag); 212 213 return (mag); 214 215 } 216 103 217 static double Raper = 5; 104 218 static double Rinner = 10; -
trunk/Ohana/src/opihi/lib.shell/VectorIO.c
r39457 r40291 41 41 for (j = 0; j < Nvec; j++) { 42 42 // if the format is not defined, just use the native byte-widths 43 tformat[2*j + 0] = (vec[j][0].type == OPIHI_FLT) ? 'D' : ' J';43 tformat[2*j + 0] = (vec[j][0].type == OPIHI_FLT) ? 'D' : 'K'; // this depends on opihi_int == int64_t for Int 44 44 tformat[2*j + 1] = 0; 45 45 } … … 60 60 for (j = 0; j < Nvec; j++) { 61 61 if (vec[j][0].type == OPIHI_FLT) { 62 gfits_set_bintable_column_reformat (theader, ftable, vec[j][0].name, "double", vec[j][0].elements.Flt, vec[j][0].Nelements, nativeOrder);62 gfits_set_bintable_column_reformat (theader, ftable, vec[j][0].name, "double", vec[j][0].elements.Flt, vec[j][0].Nelements, nativeOrder); 63 63 } else { 64 gfits_set_bintable_column_reformat (theader, ftable, vec[j][0].name, "int", vec[j][0].elements.Int, vec[j][0].Nelements, nativeOrder); 64 // gfits_set_bintable_column_reformat (theader, ftable, vec[j][0].name, "int", vec[j][0].elements.Int, vec[j][0].Nelements, nativeOrder); 65 gfits_set_bintable_column_reformat (theader, ftable, vec[j][0].name, "int64_t", vec[j][0].elements.Int, vec[j][0].Nelements, nativeOrder); 65 66 } 66 67 } … … 328 329 ASSIGN_DATA(short, short, Int); 329 330 ASSIGN_DATA(int, int, Int); 330 ASSIGN_DATA(int64_t, int64_t, Flt); // int64_t has a problem: Int is too small, Flt is wrong precision 331 ASSIGN_DATA(int64_t, int64_t, Int); // XXX this works if opihi_int is assigned to int64_t 332 //ASSIGN_DATA(int64_t, int64_t, Flt); // int64_t has a problem: Int is too small, Flt is wrong precision 331 333 ASSIGN_DATA(float, float, Flt); 332 334 ASSIGN_DATA(double, double, Flt); … … 353 355 ASSIGN_DATA_TRANSPOSE(short, short, Int); 354 356 ASSIGN_DATA_TRANSPOSE(int, int, Int); 355 ASSIGN_DATA_TRANSPOSE(int64_t, int64_t, Flt); 357 ASSIGN_DATA_TRANSPOSE(int64_t, int64_t, Int); 358 //ASSIGN_DATA_TRANSPOSE(int64_t, int64_t, Flt); // see above comment 356 359 ASSIGN_DATA_TRANSPOSE(float, float, Flt); 357 360 ASSIGN_DATA_TRANSPOSE(double, double, Flt); -
trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c
r39558 r40291 120 120 Nop_stack ++; 121 121 break; 122 case ST_UNARY:123 122 case ST_BINARY: 124 123 case ST_TRINARY: … … 139 138 Nop_stack ++; 140 139 break; 140 case ST_UNARY: 141 141 case ST_LEFT: 142 142 /* push operator on OP stack */ -
trunk/Ohana/src/opihi/lib.shell/dvomath.c
r39457 r40291 29 29 unsigned int Ncstack; 30 30 cstack = isolate_elements (argc, argv, &Ncstack); 31 32 // for (i = 0; i < Ncstack; i++) { 33 // fprintf (stderr, "%d : %s\n", i, cstack[i]); 34 // } 31 35 32 36 /* generate RPN stack from cstack arguments */ … … 82 86 } else { 83 87 if (stack[0].type == ST_SCALAR_INT) { 84 sprintf (outname, "%d", stack[0].IntValue);88 sprintf (outname, OPIHI_INT_FMT, stack[0].IntValue); 85 89 } else { 86 90 sprintf (outname, "%.12g", stack[0].FltValue); -
trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c
r40014 r40291 89 89 } 90 90 if (tmp_stack.type == ST_SCALAR_INT) { 91 gprint (GP_ERR, "---> %d", tmp_stack.IntValue);91 gprint (GP_ERR, "---> "OPIHI_INT_FMT" ", tmp_stack.IntValue); 92 92 } 93 93 if (tmp_stack.type == ST_SCALAR_FLT) { … … 110 110 111 111 if (i < 3) { /* need two variables to operate on */ 112 snprintf (line, 512, "syntax error: trinary operator without three operands: %s\n ", stack[i].name);112 snprintf (line, 512, "syntax error: trinary operator without three operands: %s\n(Note that the : in a trinary operation must be protected by spaces", stack[i].name); 113 113 push_error (line); 114 114 clear_stack (&tmp_stack); … … 124 124 125 125 /* there are no valid unary string operators */ 126 snprintf (line, 512, "invalid operands for trinary operator %s (mismatch types?) ", stack[i].name);126 snprintf (line, 512, "invalid operands for trinary operator %s (mismatch types?)\n(Note that the : in a trinary operation must be protected by spaces)", stack[i].name); 127 127 push_error (line); 128 128 clear_stack (&tmp_stack); … … 131 131 got_three_op: 132 132 if (!status) { 133 snprintf (line, 512, "syntax error: invalid operand for trinary operation: %s or %s or %s\n ", stack[i-1].name, stack[i-2].name, stack[i-3].name);133 snprintf (line, 512, "syntax error: invalid operand for trinary operation: %s or %s or %s\n(Note that the : in a trinary operation must be protected by spaces)", stack[i-1].name, stack[i-2].name, stack[i-3].name); 134 134 push_error (line); 135 135 clear_stack (&tmp_stack); … … 188 188 snprintf (line, 512, "syntax error: invalid operand for binary operation: %s or %s\n", stack[i-1].name, stack[i-2].name); 189 189 push_error (line); 190 if (strchr(stack[i-1].name, ':') || strchr(stack[i-2].name, ':')) { 191 snprintf (line, 512, "syntax error: invalid operand for binary operation: %s or %s\n(Note that the : in a trinary operation must be protected by spaces)\n", stack[i-1].name, stack[i-2].name); 192 push_error (line); 193 } 190 194 clear_stack (&tmp_stack); 191 195 return (FALSE); -
trunk/Ohana/src/opihi/lib.shell/parse.c
r33662 r40291 245 245 vec[0].elements.Flt[Nx] = atof (val); 246 246 } else { 247 vec[0].elements.Int[Nx] = atol (val);247 vec[0].elements.Int[Nx] = atoll (val); 248 248 } 249 249 }
Note:
See TracChangeset
for help on using the changeset viewer.
