Changeset 2843 for trunk/Ohana/src/opihi/lib.data/starfuncs.c
- Timestamp:
- Dec 28, 2004, 8:40:04 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/lib.data/starfuncs.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/lib.data/starfuncs.c
r2827 r2843 92 92 } 93 93 94 static double Raper = 5; 95 static double Rinner = 10; 96 static double Router = 15; 97 static double *sky = NULL; 98 99 int set_rough_radii (double Ra, double Ri, double Ro) { 100 101 Raper = Ra; 102 Rinner = Ri; 103 Router = Ro; 104 if (sky == NULL) { 105 ALLOCATE (sky, double, SQ(2*Router + 1)); 106 } else { 107 REALLOCATE (sky, double, SQ(2*Router + 1)); 108 } 109 return (TRUE); 110 } 111 94 112 /* use a circular aperture */ 95 113 int get_rough_star (float *data, int Nx, int Ny, int x, int y, 96 float *xc, float *yc, 97 float *sx, float *sy, 98 float *zs, float *zp) { 99 100 double *sky; 101 double Raper, Rinner, Router, Ra2, Ri2, Ro2, rad2; 114 float *xc, float *yc, 115 float *sx, float *sy, float *sxy, 116 float *zs, float *zp, float *sk) { 117 118 double Ra2, Ri2, Ro2, rad2; 102 119 int i, j, Npts, Nsky; 103 120 int Xs, Xe, Ys, Ye, off, Xc, Yc; 104 121 double peak, fsky, value; 105 double Sx, Sy, Sx2, Sy2, S um;122 double Sx, Sy, Sx2, Sy2, Sxy, Sum; 106 123 107 124 /* define circular boundaries */ 108 Ra per = 15; Ra2 = SQ(Raper);109 Ri nner = 25; Ri2 = SQ(Rinner);110 Ro uter = 35; Ro2 = SQ(Router);125 Ra2 = SQ(Raper); 126 Ri2 = SQ(Rinner); 127 Ro2 = SQ(Router); 111 128 112 129 /* measure the sky level */ 113 ALLOCATE (sky, double, SQ(2*Router + 1));114 115 130 /* boundaries for the outer sky region */ 116 131 Xs = MAX (x - Router, 0); … … 119 134 Ye = MIN (y + Router + 1, Ny); 120 135 136 /* this sample uses a circular aperture */ 137 # if (0) 121 138 Nsky = 0; 122 139 for (j = Ys; j < Ye; j++) { … … 135 152 } 136 153 fsky = fsky / Npts; 137 free (sky); 154 # else 155 156 /* this sample uses a square outer annulus, without loop if tests */ 157 Nsky = 0; 158 Xs = MAX (x - Router, 0); 159 Xe = MIN (x - Rinner + 1, Nx); 160 Ys = MAX (y - Rinner, 0); 161 Ye = MIN (y + Rinner + 1, Ny); 162 for (j = Ys; j < Ye; j++) { 163 off = j*Nx; 164 for (i = Xs; i < Xe; i++) { 165 sky[Nsky] = data[i+off]; 166 Nsky ++; 167 } 168 } 169 Xs = MAX (x + Rinner, 0); 170 Xe = MIN (x + Router + 1, Nx); 171 for (j = Ys; j < Ye; j++) { 172 off = j*Nx; 173 for (i = Xs; i < Xe; i++) { 174 sky[Nsky] = data[i+off]; 175 Nsky ++; 176 } 177 } 178 Xs = MAX (x - Rinner, 0); 179 Xe = MIN (x - Rinner + 1, Nx); 180 Ys = MAX (y - Router, 0); 181 Ye = MIN (y - Rinner + 1, Ny); 182 for (j = Ys; j < Ye; j++) { 183 off = j*Nx; 184 for (i = Xs; i < Xe; i++) { 185 sky[Nsky] = data[i+off]; 186 Nsky ++; 187 } 188 } 189 Ys = MAX (y + Rinner, 0); 190 Ye = MIN (y + Router + 1, Ny); 191 for (j = Ys; j < Ye; j++) { 192 off = j*Nx; 193 for (i = Xs; i < Xe; i++) { 194 sky[Nsky] = data[i+off]; 195 Nsky ++; 196 } 197 } 198 sort (sky, Nsky); 199 for (Npts = fsky = 0, i = 0.25*Nsky; i < 0.75*Nsky; i++, Npts += 1.0) { 200 fsky += sky[i]; 201 } 202 fsky = fsky / Npts; 203 # endif 138 204 139 205 /* boundaries for the star region */ … … 145 211 /** note that this will fail on negative flux objects */ 146 212 peak = Npts = 0; 147 Sx = Sy = Sx2 = Sy2 = S um = 0;213 Sx = Sy = Sx2 = Sy2 = Sxy = Sum = 0; 148 214 for (j = Ys; j < Ye; j++) { 149 215 off = j*Nx; … … 158 224 Sx2 += Xc*Xc*value; 159 225 Sy2 += Yc*Yc*value; 226 Sxy += Xc*Yc*value; 160 227 Sum += value; 161 228 Npts ++; … … 168 235 *sx = sqrt (fabs (Sx2 / Sum - SQ(*xc))); 169 236 *sy = sqrt (fabs (Sy2 / Sum - SQ(*yc))); 237 *sxy = Sxy / Sum; 170 238 *xc += x; 171 239 *yc += y; 172 240 *zs = Sum; 173 241 *zp = peak; 242 *sk = fsky; 174 243 /* note sigma is rough: round-off errors can introduce errors */ 175 244 /* using values relative to x,y should minimize this effect */
Note:
See TracChangeset
for help on using the changeset viewer.
