- Timestamp:
- Nov 17, 2011, 2:17:35 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 43 edited
- 1 copied
-
. (modified) (1 prop)
-
Ohana/src/kapa2/doc/color.image.ps (copied) (copied from branches/eam_branches/ipp-20111110/Ohana/src/kapa2/doc/color.image.ps )
-
Ohana/src/kapa2/include/prototypes.h (modified) (1 diff)
-
Ohana/src/kapa2/include/structures.h (modified) (1 diff)
-
Ohana/src/kapa2/src/PSPixmap.c (modified) (2 diffs)
-
Ohana/src/kapa2/src/PSimage.c (modified) (2 diffs)
-
Ohana/src/kapa2/src/Sections.c (modified) (1 diff)
-
Ohana/src/kapa2/src/SetUpGraphic.c (modified) (1 diff)
-
Ohana/src/kapa2/src/bDrawImage.c (modified) (2 diffs)
-
Ohana/src/kapa2/src/bDrawIt.c (modified) (1 diff)
-
Ohana/src/libdvo/src/dbExtractMeasures.c (modified) (1 diff)
-
Ohana/src/libkapa/src/PSRotFont.c (modified) (1 diff)
-
Ohana/src/relastro/include/relastro.h (modified) (1 diff)
-
Ohana/src/relastro/src/FitPM.c (modified) (2 diffs)
-
Ohana/src/relastro/src/FitPMandPar.c (modified) (2 diffs)
-
Ohana/src/relastro/src/ImageOps.c (modified) (1 diff)
-
Ohana/src/relastro/src/UpdateObjects.c (modified) (5 diffs)
-
Ohana/src/relastro/src/args.c (modified) (2 diffs)
-
ippMonitor (modified) (1 prop)
-
ippScripts/scripts/ipp_apply_burntool_single.pl (modified) (1 prop)
-
ippTools/share/camtool_find_pendingimfile.sql (modified) (1 prop)
-
ippTools/share/pxadmin_create_tables.sql (modified) (1 prop)
-
ippTools/src (modified) (1 prop)
-
ippTools/src/magictool.c (modified) (1 prop)
-
ippconfig (modified) (1 prop)
-
ippconfig/recipes/reductionClasses.mdc (modified) (1 prop)
-
ppImage/src (modified) (1 prop)
-
psModules/src/imcombine/pmSubtraction.c (modified) (2 diffs)
-
psModules/src/objects/pmSource.c (modified) (6 diffs)
-
psModules/src/objects/pmSource.h (modified) (1 diff)
-
psphot (modified) (1 prop)
-
psphot/src/psphot.h (modified) (3 diffs)
-
psphot/src/psphotBlendFit.c (modified) (1 diff)
-
psphot/src/psphotEfficiency.c (modified) (1 diff)
-
psphot/src/psphotFake.c (modified) (1 diff)
-
psphot/src/psphotFitSourcesLinear.c (modified) (1 diff)
-
psphot/src/psphotMergeSources.c (modified) (10 diffs)
-
psphot/src/psphotOutput.c (modified) (2 diffs)
-
psphot/src/psphotReadout.c (modified) (6 diffs)
-
psphot/src/psphotReplaceUnfit.c (modified) (9 diffs)
-
psphot/src/psphotSourceFits.c (modified) (1 diff)
-
psphot/src/psphotStackChisqImage.c (modified) (1 diff)
-
psphot/src/psphotStackReadout.c (modified) (11 diffs)
-
psvideophot (modified) (1 prop)
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110 (added) merged: 32645-32647,32660-32663,32685-32686,32689-32694
- Property svn:mergeinfo changed
-
trunk/Ohana/src/kapa2/include/prototypes.h
r30606 r32695 126 126 void PSPixmap24 PROTO((Graphic *graphic, KapaImageWidget *image, FILE *f)); 127 127 void PSPixmap32 PROTO((Graphic *graphic, KapaImageWidget *image, FILE *f)); 128 void PSPixmap_3byte PROTO((Graphic *graphic, KapaImageWidget *image, FILE *f)); 128 129 129 130 /* kapa bDraw Functions */ -
trunk/Ohana/src/kapa2/include/structures.h
r29938 r32695 26 26 XFontStruct *font; 27 27 Cursor cursor; 28 int x, y; 29 unsigned int dx, dy; 28 int x, y; // corner coord in X world coords 29 unsigned int dx, dy; // size of window in X coords 30 int xwin, ywin; // corner coord of display subregion (eg, png, ps plot) 31 int dxwin, dywin; // corner coord of display subregion (eg, png, ps plot) 30 32 CCNode *cube; 31 33 XColor *cmap; -
trunk/Ohana/src/kapa2/src/PSPixmap.c
r16256 r32695 1 1 # include "Ximage.h" 2 3 // XXX this stuff has been broken by the conversion to the pixmap stuff4 2 5 3 void PSPixmap8 (Graphic *graphic, KapaImageWidget *image, FILE *f) { … … 146 144 } 147 145 148 # if (0) 149 // XXX needs work! 150 void PSPixmap32_RGB (Graphic *graphic, KapaImageWidget *image, FILE *f) { 151 152 int i, k, m, val; 153 double Nchar, Npix, start, slope, frac; 154 unsigned int *buff; 155 unsigned long back; 156 unsigned char 157 158 ALLOCATE (pixelR, unsigned char, graphic[0].Npixels); 159 ALLOCATE (pixelG, unsigned char, graphic[0].Npixels); 160 ALLOCATE (pixelB, unsigned char, graphic[0].Npixels); 146 # define WHITE_R 255 147 # define WHITE_G 255 148 # define WHITE_B 255 149 150 void PSPixmap_3byte (Graphic *graphic, KapaImageWidget *image, FILE *f) { 151 152 int i, j, ii, jj; 153 int i_start, i_end, j_start, j_end; 154 int I_start, J_start; 155 int dropback; /* this is a bit of a kludge... */ 156 int dx, dy, DX, DY, inDX, inDY, Xs, Ys; 157 int expand_in, expand_out; 158 double expand, Ix, Iy; 159 unsigned short *in_pix, *in_pix_ref; 160 unsigned char *pixel1, *pixel2, *pixel3; 161 162 if (image == NULL) return; 163 164 ALLOCATE (pixel1, unsigned char, graphic[0].Npixels); 165 ALLOCATE (pixel2, unsigned char, graphic[0].Npixels); 166 ALLOCATE (pixel3, unsigned char, graphic[0].Npixels); 161 167 162 168 /** cmap[i].pixel must be defined even if X is not used **/ 163 169 for (i = 0; i < graphic[0].Npixels; i++) { /* set up pixel array */ 164 pixelR[i] = graphic[0].cmap[i].red >> 8; 165 pixelG[i] = graphic[0].cmap[i].green >> 8; 166 pixelB[i] = graphic[0].cmap[i].blue >> 8; 167 } 168 169 for (i = 0; i < image[0].picture.dy; i++) { 170 for (k = 0; k < image[0].picture.dx; k++, buff++) { 171 if (*buff == back) 172 val = Nchar; 173 else { 174 for (m = 0; (graphic[0].cmap[m].pixel != *buff) && (m < Npix); m++); 175 val = Nchar - frac * MIN (MAX (start + m * slope, 0), Npix); 176 } 177 fprintf (f, "%02x", val); 178 if (!((k+1) % 40)) fprintf (f, "\n"); 179 } 180 fprintf (f, "\n"); 181 buff -= 2*image[0].picture.dx; 182 } 183 return; 184 } 185 # endif 170 pixel1[i] = graphic[0].cmap[i].red >> 8; 171 pixel2[i] = graphic[0].cmap[i].green >> 8; 172 pixel3[i] = graphic[0].cmap[i].blue >> 8; 173 } 174 175 assert ((image[0].picture.expand >= 1) || (image[0].picture.expand <= -2)); 176 expand = expand_in = expand_out = 1.0; 177 if (image[0].picture.expand > 0) { 178 expand = 1 / (1.0*image[0].picture.expand); 179 expand_out = image[0].picture.expand; 180 expand_in = 1; 181 } 182 if (image[0].picture.expand < 0) { 183 expand = fabs((double)image[0].picture.expand); 184 expand_out = 1; 185 expand_in = -image[0].picture.expand; 186 } 187 188 Xs = image[0].picture.x; 189 Ys = image[0].picture.y; 190 dx = image[0].picture.dx; 191 dy = image[0].picture.dy; 192 DX = image[0].image[0].matrix.Naxis[0]; 193 DY = image[0].image[0].matrix.Naxis[1]; 194 195 // i_start, j_start are the closest lit screen pixel to 0,0 196 // I_start, J_start are the image pixel corresponding to i_start, j_start 197 Picture_Lower (&i_start, &j_start, &I_start, &J_start, &image[0].image[0].matrix, &image[0].picture); 198 199 // i_end, j_end are the closest lit screen pixel to dx, dy 200 // I_end, J_end are the image pixel corresponding to i_end, j_end 201 Picture_Upper (&i_end, &j_end, i_start, j_start, &image[0].image[0].matrix, &image[0].picture); 202 203 assert (i_start <= i_end); 204 assert (j_start <= j_end); 205 206 Ix = image[0].picture.flipx ? I_start - 1 : I_start; 207 Iy = image[0].picture.flipy ? J_start - 1 : J_start; 208 209 inDX = image[0].picture.flipx ? -1 : +1; 210 inDY = image[0].picture.flipy ? -1 : +1; 211 212 dropback = expand_out - (i_end - i_start) % expand_out; 213 if ((i_end - i_start) % expand_out == 0) dropback = 0; 214 215 in_pix_ref = &image[0].pixmap[DX*(int)MAX(Iy,0) + (int)MAX(Ix,0)]; 216 217 /********** below we do the mapping from buffer pixels (in) to picture pixels (out) **********/ 218 219 // add in occasional return chars 220 221 /**** fill in bottom area ****/ 222 for (j = 0; j < j_start; j++) { 223 for (i = 0; i < dx; i++) { 224 fprintf (f, "%02x%02x%02x", WHITE_R, WHITE_G, WHITE_B); 225 } 226 } 227 228 // probably could do this all smarter with scale operations in PS... 229 230 /*** fill in the image data region ***/ 231 for (j = j_start; j < j_end; j+= expand_out, in_pix_ref += inDY*expand_in*DX) { 232 233 // repeat the section below 'expand_out' times 234 for (jj = 0; jj < expand_out; jj++) { 235 236 /* create one output image line */ 237 in_pix = in_pix_ref; 238 239 /**** fill in area to the left of the picture ****/ 240 for (i = 0; i < i_start; i++) { 241 fprintf (f, "%02x%02x%02x", WHITE_R, WHITE_G, WHITE_B); 242 } 243 244 /*** fill in the picture region ***/ 245 for (i = i_start; i < i_end; i+=expand_out, in_pix += inDX*expand_in) { 246 for (ii = 0; ii < expand_out; ii++) { 247 fprintf (f, "%02x%02x%02x", pixel1[*in_pix], pixel2[*in_pix], pixel3[*in_pix]); 248 } 249 } 250 251 /**** fill in area to the right of the picture ****/ 252 for (i = i_end; i < dx; i++) { 253 fprintf (f, "%02x%02x%02x", WHITE_R, WHITE_G, WHITE_B); 254 } 255 } 256 } 257 258 /**** fill in top area ****/ 259 for (j = j_end; j < dy; j++) { 260 for (i = 0; i < dx; i++) { 261 fprintf (f, "%02x%02x%02x", WHITE_R, WHITE_G, WHITE_B); 262 } 263 } 264 265 free (pixel1); 266 free (pixel2); 267 free (pixel3); 268 269 return; 270 } -
trunk/Ohana/src/kapa2/src/PSimage.c
r29938 r32695 13 13 graphic = GetGraphic(); 14 14 15 // Update this to generate color PS images: I need to test if the image if color or BW (based 16 // on the colormap). If it is a color image, I need to generate a 24 bit image. the header 17 // should look the same (Nx Ny 8 [1 0 0 1 0 0]) but then it should finish with "false 3 18 // colorimage" instead of just "image" (see ../doc/color.image.s for an example). the hex 19 // string needs to have RGB represented as chars (2 hex chars per R,G,B). 20 // the values come from the following map: image[0].pixmap[i] -> cmap[pixel].red -> R (0-255) 21 15 22 fprintf (f, " newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto closepath\n\n", 16 23 (int) image[0].picture.x, graphic->dy - (int) image[0].picture.y, … … 21 28 fprintf (f, "%d %d translate\n", (int) image[0].picture.x, graphic->dy - (int) image[0].picture.y - image[0].picture.dy); 22 29 fprintf (f, "%d %d 8\n", image[0].picture.dx, image[0].picture.dy); 23 fprintf (f, "[1 0 0 1 0 0]\n"); 30 fprintf (f, "[1 0 0 -1 0 %d]\n", image[0].picture.dy); 31 // write out the image in normal order, but flip in PS 32 33 # if (0) 34 24 35 fprintf (f, "{currentfile %d string readhexstring pop} image\n\n", image[0].picture.dx); 36 PSPixmap_1byte (graphic, image, f); 25 37 26 /******** First we draw the picture itself ********/ 27 /* in !USE_XWINDOW, we'll have to change this to use the JPEG function */ 28 switch (graphic[0].Nbits) { 29 case 8: 30 PSPixmap8 (graphic, image, f); 31 break; 32 case 16: 33 PSPixmap16 (graphic, image, f); 34 break; 35 case 24: 36 PSPixmap24 (graphic, image, f); 37 break; 38 case 32: 39 PSPixmap32 (graphic, image, f); 40 break; 41 } 38 # else 39 40 fprintf (f, "{currentfile %d string readhexstring pop} false 3 colorimage\n\n", 3*image[0].picture.dx); 41 PSPixmap_3byte (graphic, image, f); 42 43 # endif 42 44 43 45 fprintf (f, "grestore %% end of image\n"); -
trunk/Ohana/src/kapa2/src/Sections.c
r27790 r32695 237 237 return (TRUE); 238 238 } 239 240 int SectionMinBoundary (Graphic *graphic) { 241 242 int i; 243 int Xs = graphic->dx; 244 int Ys = graphic->dy; 245 int Xe = 0; 246 int Ye = 0; 247 248 // the boundary for a single section should probably be adjusted depending on the 249 // image status (should not include the imtool portion) 250 for (i = 0; i < Nsections; i++) { 251 Xs = MIN (Xs, sections[i][0].x); 252 Ys = MIN (Ys, sections[i][0].y); 253 Xe = MAX (Xe, sections[i][0].x + sections[i][0].dx); 254 Ye = MAX (Ye, sections[i][0].y + sections[i][0].dy); 255 } 256 257 if ((Xs >= Xe) || (Ys >- Ye)) { 258 // default values for the region window 259 graphic->xwin = 0; 260 graphic->ywin = 0; 261 graphic->dxwin = graphic->dx; 262 graphic->dywin = graphic->dy; 263 } 264 265 // set min/max boundary (min window containing max range of sections) 266 graphic->xwin = Xs; 267 graphic->ywin = Ys; 268 graphic->dxwin = Xe - Xs; 269 graphic->dywin = Ye - Ys; 270 return TRUE; 271 } -
trunk/Ohana/src/kapa2/src/SetUpGraphic.c
r25757 r32695 16 16 graphic->dx = 512; 17 17 graphic->dy = 512; 18 19 // default values for the region window 20 graphic->xwin = 0; 21 graphic->ywin = 0; 22 graphic->dxwin = graphic->dx; 23 graphic->dywin = graphic->dy; 18 24 19 25 if (!USE_XWINDOW) { -
trunk/Ohana/src/kapa2/src/bDrawImage.c
r29938 r32695 47 47 } 48 48 49 Xs = image[0].picture.x; 50 Ys = image[0].picture.y; 49 // Xs,Ys are in full-frame coords. can we trim here? 50 Xs = image[0].picture.x - graphic[0].xwin; 51 Ys = image[0].picture.y - graphic[0].ywin; 51 52 dx = image[0].picture.dx; 52 53 dy = image[0].picture.dy; … … 54 55 DY = image[0].image[0].matrix.Naxis[1]; 55 56 57 // the created buffer is supposed to contain the output windows 56 58 if (buffer[0].Nx < Xs + dx) { 57 59 fprintf (stderr, "invalid condition\n"); -
trunk/Ohana/src/kapa2/src/bDrawIt.c
r29938 r32695 13 13 black = KapaColorByName ("black"); 14 14 15 buffer = bDrawBufferCreate (graphic->dx, graphic->dy, Nbyte, palette, Npalette); 15 // SectionMinBoundary (graphic); 16 17 // if we want to trim, we'll need to carry about the start in graphic coords and 18 // the dx,dy size. 19 buffer = bDrawBufferCreate (graphic->dxwin, graphic->dywin, Nbyte, palette, Npalette); 16 20 bDrawSetStyle (buffer, black, 0, 0); 17 21 -
trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
r31635 r32695 245 245 break; 246 246 case MEAS_PAR: /* OK */ 247 value.Flt = average[0]. R;247 value.Flt = average[0].P; 248 248 break; 249 249 case MEAS_PAR_ERR: /* OK */ 250 value.Flt = average[0]. D;250 value.Flt = average[0].dP; 251 251 break; 252 252 case MEAS_CHISQ_POS: /* OK */ -
trunk/Ohana/src/libkapa/src/PSRotFont.c
r30603 r32695 32 32 dY = currentfont[65].ascent; 33 33 34 /*** 35 36 update this to use the following PS code: 37 38 /ceshow { % (string) fontsize fontname x y 39 gsave 40 moveto findfont exch scalefont setfont % s 41 gsave 42 dup false charpath flattenpath pathbbox % s x0 y0 x1 y1 43 grestore 44 3 -1 roll sub % s x0 x1 dy 45 3 1 roll sub % s dy -dx 46 2 div exch % s -dx/2 dy 47 -2 div % s -dx/2 -dy/2 48 rmoveto show 49 grestore 50 } bind def 51 52 ***/ 53 34 54 /* apply appropriate offset */ 35 55 Xoff = Yoff = 0; -
trunk/Ohana/src/relastro/include/relastro.h
r32346 r32695 317 317 int sun_ecliptic (double jd, double *lambda, double *beta, double *epsilon); 318 318 int ParFactor (double *pR, double *pD, double R, double D, double T, double Tmean); 319 int FitPM (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, int Npts );319 int FitPM (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, int Npts, int XVERB); 320 320 int FitPar (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *pR, double *pD, int Npts); 321 int FitPMandPar (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, double *pR, double *pD, int Npts );321 int FitPMandPar (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, double *pR, double *pD, int Npts, int XVERB); 322 322 323 323 Mosaic *getMosaicForImage (off_t N); -
trunk/Ohana/src/relastro/src/FitPM.c
r32346 r32695 2 2 3 3 /* do we want an init function which does the alloc and a clear function to free? */ 4 int FitPM (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, int Npts ) {4 int FitPM (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, int Npts, int XVERB) { 5 5 6 6 int i; … … 77 77 chisq += SQ(X[i] - Xf) / SQ(dX[i]); 78 78 chisq += SQ(Y[i] - Yf) / SQ(dY[i]); 79 if (XVERB) fprintf (stderr, "chisq contrib : %f %f : %f %f : %f %f : %f %f : %f\n", Xf, Yf, X[i] - Xf, Y[i] - Yf, dX[i], dY[i], (X[i] - Xf) / dX[i], (Y[i] - Yf) / dY[i], chisq); 79 80 } 80 81 fit[0].Nfit = Npts; -
trunk/Ohana/src/relastro/src/FitPMandPar.c
r32346 r32695 2 2 3 3 /* do we want an init function which does the alloc and a clear function to free? */ 4 int FitPMandPar (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, double *pR, double *pD, int Npts ) {4 int FitPMandPar (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, double *pR, double *pD, int Npts, int XVERB) { 5 5 6 6 int i; … … 99 99 chisq = 0.0; 100 100 for (i = 0; i < Npts; i++) { 101 Xf = fit[0].Ro + fit[0].uR*T[i] + fit[0]. dp*pR[i];102 Yf = fit[0].Do + fit[0].uD*T[i] + fit[0]. dp*pD[i];101 Xf = fit[0].Ro + fit[0].uR*T[i] + fit[0].p*pR[i]; 102 Yf = fit[0].Do + fit[0].uD*T[i] + fit[0].p*pD[i]; 103 103 chisq += SQ(X[i] - Xf) / SQ(dX[i]); 104 104 chisq += SQ(Y[i] - Yf) / SQ(dY[i]); 105 if (XVERB) fprintf (stderr, "chisq contrib : %f %f : %f %f : %f %f : %f %f : %f\n", Xf, Yf, X[i] - Xf, Y[i] - Yf, dX[i], dY[i], (X[i] - Xf) / dX[i], (Y[i] - Yf) / dY[i], chisq); 106 105 107 } 106 108 fit[0].Nfit = Npts; -
trunk/Ohana/src/relastro/src/ImageOps.c
r32346 r32695 913 913 if (!finite(measure[0].dR) || !finite(measure[0].dD)) return FALSE; 914 914 if (!finite(measure[0].M)) return FALSE; //XXX is this necessary for all relastro tasks? 915 if (!finite(measure[0].dM)) return FALSE; //XXX is this necessary for all relastro tasks? 915 916 916 917 /* select measurements by photcode, or equiv photcode, if specified */ -
trunk/Ohana/src/relastro/src/UpdateObjects.c
r32346 r32695 84 84 /* calculate the average value of R,D for a single star */ 85 85 86 XVERB = FALSE; 87 86 88 // skip objects which are known to be problematic 87 89 // XXX include this code or not? … … 196 198 } 197 199 198 XVERB = (catalog[i].measure[m].dM < 0.01) && (N == 6) && (mode == FIT_PM_ONLY); 200 // XVERB |= (catalog[i].averge[j].objID == 0xc90) && (catalog[i].average[j].catID == 0x2a1e); 201 XVERB |= (catalog[i].average[j].objID == OBJ_ID_SRC) && (catalog[i].average[j].catID == CAT_ID_SRC); 202 XVERB |= (catalog[i].average[j].objID == OBJ_ID_DST) && (catalog[i].average[j].catID == CAT_ID_DST); 203 // XVERB = (catalog[i].measure[m].dM < 0.01) && (N == 6) && (mode == FIT_PM_ONLY); 199 204 200 205 // to judge the quality of the PM and PAR fits, we need to fit all three models and compare Chisq … … 211 216 } 212 217 213 FitPM (&fitPM, X, dX, Y, dY, T, N );214 215 if (XVERB) fprintf (stderr, "fitted : %f - %f : %f %f : %f %f : %f vs %f\n", Tmin, Tmax, fitPM.Ro, fitPM.Do, fitPM.uR, fitPM.uD, fitPM.chisq, fitAve.chisq);218 FitPM (&fitPM, X, dX, Y, dY, T, N, XVERB); 219 220 if (XVERB) fprintf (stderr, "fitted PM: %f - %f : %f %f : %f %f : %f vs %f\n", Tmin, Tmax, fitPM.Ro, fitPM.Do, fitPM.uR, fitPM.uD, fitPM.chisq, fitAve.chisq); 216 221 217 222 // project Ro, Do back to RA,DEC … … 230 235 ParFactor (&pX[k], &pY[k], R[k], D[k], T[k], Tmean); 231 236 } 232 FitPMandPar (&fitPAR, X, dX, Y, dY, T, pX, pY, N );237 FitPMandPar (&fitPAR, X, dX, Y, dY, T, pX, pY, N, XVERB); 233 238 XY_to_RD (&fitPAR.Ro, &fitPAR.Do, fitPAR.Ro, fitPAR.Do, &coords); 234 239 catalog[i].average[j].flags |= ID_STAR_FIT_PAR; … … 275 280 break; 276 281 } 277 if (XVERB) fprintf (stderr, " A%f %f -> %f %f (%f,%f) pm=(%f %f)\n",282 if (XVERB) fprintf (stderr, "%f %f -> %f %f (%f,%f) pm=(%f %f)\n", 278 283 catalog[i].average[j].R, 279 284 catalog[i].average[j].D, -
trunk/Ohana/src/relastro/src/args.c
r32346 r32695 14 14 FIT_MODE = FIT_AVERAGE; 15 15 16 OBJ_ID_SRC = OBJ_ID_DST = 0; 17 CAT_ID_SRC = CAT_ID_DST = 0; 18 16 19 if ((N = get_argument (argc, argv, "-merge-source"))) { 17 20 if (N > argc - 6) usage_merge_source(); … … 40 43 remove_argument (N, &argc, argv); 41 44 FIT_TARGET = TARGET_OBJECTS; 45 } 46 47 if ((N = get_argument (argc, argv, "-testobj1"))) { 48 if (N > argc - 3) usage (); 49 remove_argument (N, &argc, argv); 50 OBJ_ID_SRC = strtol(argv[N], &endptr, 0); 51 if (*endptr) usage (); 52 remove_argument (N, &argc, argv); 53 CAT_ID_SRC = strtol(argv[N], &endptr, 0); 54 if (*endptr) usage (); 55 remove_argument (N, &argc, argv); 56 } 57 58 if ((N = get_argument (argc, argv, "-testobj2"))) { 59 if (N > argc - 3) usage (); 60 remove_argument (N, &argc, argv); 61 OBJ_ID_DST = strtol(argv[N], &endptr, 0); 62 if (*endptr) usage (); 63 remove_argument (N, &argc, argv); 64 CAT_ID_DST = strtol(argv[N], &endptr, 0); 65 if (*endptr) usage (); 66 remove_argument (N, &argc, argv); 42 67 } 43 68 -
trunk/ippMonitor
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/ippMonitor (added) merged: 32694
- Property svn:mergeinfo changed
-
trunk/ippScripts/scripts/ipp_apply_burntool_single.pl
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/ippScripts/scripts/ipp_apply_burntool_single.pl (added) merged: 32694
- Property svn:mergeinfo changed
-
trunk/ippTools/share/camtool_find_pendingimfile.sql
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/ippTools/share/camtool_find_pendingimfile.sql (added) merged: 32694
- Property svn:mergeinfo changed
-
trunk/ippTools/share/pxadmin_create_tables.sql
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/ippTools/share/pxadmin_create_tables.sql (added) merged: 32694
- Property svn:mergeinfo changed
-
trunk/ippTools/src
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/ippTools/src (added) merged: 32694
- Property svn:mergeinfo changed
-
trunk/ippTools/src/magictool.c
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/ippTools/src/magictool.c (added) merged: 32694
- Property svn:mergeinfo changed
-
trunk/ippconfig
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/ippconfig (added) merged: 32694
- Property svn:mergeinfo changed
-
trunk/ippconfig/recipes/reductionClasses.mdc
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/ippconfig/recipes/reductionClasses.mdc (added) merged: 32694
- Property svn:mergeinfo changed
-
trunk/ppImage/src
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/ppImage/src (added) merged: 32694
- Property svn:mergeinfo changed
-
trunk/psModules/src/imcombine/pmSubtraction.c
r30738 r32695 1487 1487 } 1488 1488 } 1489 psFree(out1->covariance); 1489 1490 out1->covariance = psImageCovarianceAverage(covars); 1490 1491 psFree(covars); … … 1527 1528 } 1528 1529 } 1530 psFree(out2->covariance); 1529 1531 out2->covariance = psImageCovarianceAverage(covars); 1530 1532 psFree(covars); -
trunk/psModules/src/objects/pmSource.c
r32633 r32695 121 121 source->modelFits = NULL; 122 122 source->extFitPars = NULL; 123 123 124 source->type = PM_SOURCE_TYPE_UNKNOWN; 124 125 source->mode = PM_SOURCE_MODE_DEFAULT; … … 138 139 source->apFluxErr = NAN; 139 140 141 source->windowRadius = NAN; 140 142 source->skyRadius = NAN; 141 143 source->skyFlux = NAN; … … 203 205 204 206 source->imageID = in->imageID; 207 205 208 source->type = in->type; 206 209 source->mode = in->mode; 207 210 source->mode2 = in->mode2; 208 211 source->tmpFlags = in->tmpFlags; 212 209 213 source->psfMag = in->psfMag; 210 214 source->psfMagErr = in->psfMagErr; … … 217 221 source->apFlux = in->apFlux; 218 222 source->apFluxErr = in->apFluxErr; 223 224 source->windowRadius = in->windowRadius; 225 source->skyRadius = in->skyRadius; 226 source->skyFlux = in->skyFlux; 227 source->skySlope = in->skySlope; 228 219 229 source->pixWeightNotBad = in->pixWeightNotBad; 220 230 source->pixWeightNotPoor = in->pixWeightNotPoor; 231 221 232 source->psfChisq = in->psfChisq; 222 233 source->crNsigma = in->crNsigma; … … 259 270 } 260 271 mySource->region = srcRegion; 272 mySource->windowRadius = Radius; 261 273 262 274 return true; … … 328 340 mySource->psfImage = NULL; 329 341 } 342 mySource->windowRadius = Radius; 330 343 return extend; 331 344 } -
trunk/psModules/src/objects/pmSource.h
r32633 r32695 97 97 float apFluxErr; ///< apFluxErr corresponding to psfMag or extMag (depending on type) 98 98 99 float windowRadius; ///< size of box used for full analysis 99 100 float skyRadius; ///< radius at which profile hits local sky (or goes flat) 100 101 float skyFlux; ///< mean flux per pixel in aperture at which profile hits local sky (or goes flat) -
trunk/psphot
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/psphot (added) merged: 32685-32686,32689,32692,32694
- Property svn:mergeinfo changed
-
trunk/psphot/src/psphot.h
r32633 r32695 108 108 bool psphotBlendFit_Threaded (psThreadJob *job); 109 109 110 bool psphotReplaceAllSources (pmConfig *config, const pmFPAview *view, const char *filerule );111 bool psphotReplaceAllSourcesReadout (pmConfig *config, const pmFPAview *view, const char *filerule, int index, psMetadata *recipe );110 bool psphotReplaceAllSources (pmConfig *config, const pmFPAview *view, const char *filerule, bool ignoreState); 111 bool psphotReplaceAllSourcesReadout (pmConfig *config, const pmFPAview *view, const char *filerule, int index, psMetadata *recipe, bool ignoreState); 112 112 113 113 bool psphotAddNoise (pmConfig *config, const pmFPAview *view, const char *filerule); … … 176 176 177 177 // in psphotReplaceUnfit.c: 178 bool psphotRemoveAllSources (const psArray *sources, const psMetadata *recipe); 178 bool psphotRemoveAllSourcesByArray (const psArray *sources, const psMetadata *recipe); 179 bool psphotRemoveAllSources (pmConfig *config, const pmFPAview *view, const char *filerule, bool ignoreState); 180 bool psphotRemoveAllSourcesReadout (pmConfig *config, const pmFPAview *view, const char *filename, int index, psMetadata *recipe, bool ignoreState); 179 181 bool psphotReplaceUnfitSources (psArray *sources, psImageMaskType maskVal); 180 182 … … 453 455 psArray *psphotSourceChildrenByObject (pmConfig *config, const pmFPAview *view, const char *filerule, psArray *objectsSrc); 454 456 457 bool psphotSourceParents (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc); 458 bool psphotSourceParentsReadout (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc, int index); 459 460 bool psphotCopyPeaks (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc); 461 bool psphotCopyPeaksReadout (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc, int index); 462 455 463 bool psphotSersicModelClassGuessPCM (pmPCMdata *pcm, pmSource *source); 456 464 void psphotSersicModelClassInit (); -
trunk/psphot/src/psphotBlendFit.c
r32348 r32695 236 236 pmSource *source = sources->data[i]; 237 237 238 # define TEST_X -420.0 239 # define TEST_Y 300.0 238 # if (0) 239 # define TEST_X 34 240 # define TEST_Y 28 240 241 241 242 if ((fabs(source->peak->xf - TEST_X) < 5) && (fabs(source->peak->yf - TEST_Y) < 5)) { 242 fprintf (stderr, "test galaxy\n");243 fprintf (stderr, "test object\n"); 243 244 } 244 245 245 246 # undef TEST_X 246 247 # undef TEST_Y 248 # endif 247 249 248 250 // skip non-astronomical objects (very likely defects) -
trunk/psphot/src/psphotEfficiency.c
r32348 r32695 255 255 256 256 // remove all sources, adding noise for subtracted sources 257 psphotRemoveAllSources (realSources, recipe);257 psphotRemoveAllSourcesByArray(realSources, recipe); 258 258 259 259 #if TESTING -
trunk/psphot/src/psphotFake.c
r26894 r32695 166 166 167 167 // remove all sources, adding noise for subtracted sources 168 psphotRemoveAllSources (realSources, recipe);168 psphotRemoveAllSourcesByArray(realSources, recipe); 169 169 psphotAddNoise(readout, realSources, recipe); 170 170 -
trunk/psphot/src/psphotFitSourcesLinear.c
r32633 r32695 342 342 psLogMsg ("psphot.ensemble", PS_LOG_MINUTIA, "solve matrix: %f sec (%d elements)\n", psTimerMark ("psphot.linear"), sparse->Nelem); 343 343 344 // XXXX **** philosophical question: 345 // we measure bright objects in three passes: 1) linear fit; 2) non-linear fit; 3) linear fit: 346 // should retain the chisq and errors from the intermediate non-linear fit? 347 // the non-linear fit provides better values for the position errors, and for 348 // extended sources, the shape errors 344 // Philosophical question: we measure bright objects in three passes: 1) linear fit; 2) 345 // non-linear fit; 3) linear fit: should we retain the chisq and errors from the 346 // intermediate non-linear fit? the non-linear fit provides better values for the position 347 // errors, and for extended sources, the shape errors 349 348 350 349 // adjust I0 for fitSources and subtract -
trunk/psphot/src/psphotMergeSources.c
r31452 r32695 520 520 } 521 521 522 // copy the newPeaks from the detections of one pmFPAfile to another 523 bool psphotCopyPeaks (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc) 524 { 525 bool status = true; 526 527 int num = psphotFileruleCount(config, ruleSrc); 528 529 // skip the chisq image because it is a duplicate of the detection version 530 int chisqNum = psMetadataLookupS32 (&status, config->arguments, "PSPHOT.CHISQ.NUM"); 531 if (!status) chisqNum = -1; 532 533 // loop over the available readouts 534 for (int i = 0; i < num; i++) { 535 if (i == chisqNum) continue; // skip chisq image 536 if (!psphotCopyPeaksReadout (config, view, ruleOut, ruleSrc, i)) { 537 psError (PSPHOT_ERR_CONFIG, false, "failed to copy peaks from %s to %s entry %d", ruleSrc, ruleOut, i); 538 return false; 539 } 540 } 541 return true; 542 } 543 544 // add newly detected peaks to the existing list of sources 545 bool psphotCopyPeaksReadout (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc, int index) { 546 547 bool status; 548 549 // find the currently selected readout 550 pmFPAfile *fileSrc = pmFPAfileSelectSingle(config->files, ruleSrc, index); // File of interest 551 psAssert (fileSrc, "missing file?"); 552 553 pmReadout *readoutSrc = pmFPAviewThisReadout(view, fileSrc->fpa); 554 psAssert (readoutSrc, "missing readout?"); 555 556 pmDetections *detections = psMetadataLookupPtr (&status, readoutSrc->analysis, "PSPHOT.DETECTIONS"); 557 psAssert (detections, "missing detections?"); 558 559 // find the currently selected readout 560 pmFPAfile *fileOut = pmFPAfileSelectSingle(config->files, ruleOut, index); // File of interest 561 psAssert (fileOut, "missing file?"); 562 563 pmReadout *readoutOut = pmFPAviewThisReadout(view, fileOut->fpa); 564 psAssert (readoutOut, "missing readout?"); 565 566 // generate a new detection structure for the output filerule 567 pmDetections *detectionsOut = psMetadataLookupPtr (&status, readoutOut->analysis, "PSPHOT.DETECTIONS"); 568 psAssert (detectionsOut, "missing PSPHOT.DETECTIONS?"); 569 570 psAssert (detectionsOut->peaks, "programming error"); 571 psAssert (!detectionsOut->oldPeaks, "programming error"); 572 psAssert (detections->peaks, "programming error"); 573 574 // save the OUT existing peaks on oldPeaks 575 detectionsOut->oldPeaks = detectionsOut->peaks; 576 detectionsOut->peaks = psArrayAllocEmpty(detections->peaks->n); 577 578 for (int i = 0; i < detections->peaks->n; i++) { 579 psAssert (detections->peaks->data[i], "programming error"); 580 pmPeak *peak = pmPeakAlloc (0, 0, 0.0, PM_PEAK_LONE); 581 pmPeakCopy(peak, detections->peaks->data[i]); 582 psArrayAdd (detectionsOut->peaks, 100, peak); 583 psFree (peak); 584 } 585 return true; 586 } 587 588 // create source parents children from ruleSrc for ruleOut for orphans 589 bool psphotSourceParents (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc) 590 { 591 bool status = true; 592 593 int num = psphotFileruleCount(config, ruleSrc); 594 595 // skip the chisq image because it is a duplicate of the detection version 596 int chisqNum = psMetadataLookupS32 (&status, config->arguments, "PSPHOT.CHISQ.NUM"); 597 if (!status) chisqNum = -1; 598 599 // loop over the available readouts 600 for (int i = 0; i < num; i++) { 601 if (i == chisqNum) continue; // skip chisq image 602 if (!psphotSourceParentsReadout (config, view, ruleOut, ruleSrc, i)) { 603 psError (PSPHOT_ERR_CONFIG, false, "failed to copy sources from %s to %s entry %d", ruleSrc, ruleOut, i); 604 return false; 605 } 606 } 607 return true; 608 } 609 610 // create source parents from ruleSrc for ruleOut for orphaned children for this readout. 611 bool psphotSourceParentsReadout (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc, int index) { 612 613 bool status; 614 int nParents = 0; 615 int nNonOrphans = 0; 616 617 // find the currently selected readout 618 pmFPAfile *fileSrc = pmFPAfileSelectSingle(config->files, ruleSrc, index); // File of interest 619 psAssert (fileSrc, "missing file?"); 620 621 pmReadout *readoutSrc = pmFPAviewThisReadout(view, fileSrc->fpa); 622 psAssert (readoutSrc, "missing readout?"); 623 624 pmDetections *detectionsSrc = psMetadataLookupPtr (&status, readoutSrc->analysis, "PSPHOT.DETECTIONS"); 625 psAssert (detectionsSrc, "missing detections?"); 626 627 psArray *sourcesSrc = detectionsSrc->allSources; 628 psAssert (sourcesSrc, "missing sources?"); 629 630 // find the currently selected readout 631 pmFPAfile *fileOut = pmFPAfileSelectSingle(config->files, ruleOut, index); // File of interest 632 psAssert (fileOut, "missing file?"); 633 634 pmReadout *readoutOut = pmFPAviewThisReadout(view, fileOut->fpa); 635 psAssert (readoutOut, "missing readout?"); 636 637 // generate a new detection structure for the output filerule 638 pmDetections *detectionsOut = psMetadataLookupPtr (&status, readoutOut->analysis, "PSPHOT.DETECTIONS"); 639 psAssert (detectionsOut, "missing PSPHOT.DETECTIONS?"); 640 641 // loop over the sources, redefine their pixels to point at the new filerule image, 642 // copy the source data, and add a reference back to the original source 643 644 // copy the sources from sourceSrcs to the new detection structure 645 for (int i = 0; i < sourcesSrc->n; i++) { 646 pmSource *sourceSrc = sourcesSrc->data[i]; 647 if (sourceSrc->parent) { 648 nNonOrphans ++; 649 continue; // Not an orphan 650 } 651 652 pmSource *sourceOut = pmSourceCopy(sourceSrc); 653 sourceOut->parent = sourceSrc; 654 655 // keep the original source flags 656 sourceOut->seq = sourceSrc->seq; 657 sourceOut->type = sourceSrc->type; 658 sourceOut->mode = sourceSrc->mode; 659 sourceOut->mode2 = sourceSrc->mode2; 660 sourceOut->tmpFlags = sourceSrc->tmpFlags; 661 662 // does this copy all model data? (NO) 663 sourceOut->modelPSF = pmModelCopy(sourceSrc->modelPSF); 664 sourceOut->modelEXT = pmModelCopy(sourceSrc->modelEXT); 665 666 if (sourceSrc->modelFits) { 667 sourceOut->modelFits = psArrayAlloc(sourceSrc->modelFits->n); 668 for (int j = 0; j < sourceSrc->modelFits->n; j++) { 669 sourceOut->modelFits->data[j] = pmModelCopy(sourceSrc->modelFits->data[j]); 670 } 671 } 672 673 // drop the references to the original image pixels: 674 pmSourceFreePixels (sourceOut); 675 676 // allocate image, weight, mask for the new image for each peak 677 if (sourceOut->modelPSF) { 678 pmSourceRedefinePixels (sourceOut, readoutOut, sourceOut->peak->x, sourceOut->peak->y, sourceOut->modelPSF->fitRadius); 679 } 680 681 // child sources have not been subtracted in this image, but this flag may be raised if 682 // they were subtracted in the parent's image 683 sourceOut->tmpFlags &= ~PM_SOURCE_TMPF_SUBTRACTED; 684 685 nParents ++; 686 psArrayAdd (detectionsOut->allSources, 100, sourceOut); 687 psFree (sourceOut); 688 } 689 psLogMsg ("psphot", 3, "%d parents created, %d unorphaned children, %ld input vs %ld output", nParents, nNonOrphans, sourcesSrc->n, detectionsOut->allSources->n); 690 691 return true; 692 } 693 522 694 // create source children from ruleSrc for ruleOut 523 695 bool psphotSourceChildren (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc) … … 542 714 } 543 715 544 // create source children from ruleSrc for ruleOut for this entry. XXX currently, this is only716 // Create source children from ruleSrc for ruleOut for this entry. Currently, this is only 545 717 // used by psphotStackReadout (sources go on allSources so that psphotChoosePSF can be called 546 // repeatedly) 718 // repeatedly). 547 719 bool psphotSourceChildrenReadout (pmConfig *config, const pmFPAview *view, const char *ruleOut, const char *ruleSrc, int index) { 548 720 … … 569 741 psAssert (readoutOut, "missing readout?"); 570 742 571 // generate a new detection structure for the output filerule 572 pmDetections *detectionsOut = psMetadataLookupPtr (&status, readoutOut->analysis, "PSPHOT.DETECTIONS"); 573 if (!detectionsOut) { 574 detectionsOut = pmDetectionsAlloc(); 575 detectionsOut->allSources = psArrayAllocEmpty (100); 576 // save detections on the readout->analysis 577 if (!psMetadataAddPtr (readoutOut->analysis, PS_LIST_TAIL, "PSPHOT.DETECTIONS", PS_META_REPLACE | PS_DATA_UNKNOWN, "psphot detections", detectionsOut)) { 578 psError (PSPHOT_ERR_CONFIG, false, "problem saving detections on readout"); 579 return false; 580 } 581 psFree(detectionsOut); // a copy remains on the analysis metadata 743 // replace any existing DETECTION container on readoutOut->analysis with the new one 744 pmDetections *detectionsOut = pmDetectionsAlloc(); 745 detectionsOut->allSources = psArrayAllocEmpty (100); 746 if (!psMetadataAddPtr (readoutOut->analysis, PS_LIST_TAIL, "PSPHOT.DETECTIONS", PS_META_REPLACE | PS_DATA_UNKNOWN, "psphot detections", detectionsOut)) { 747 psError (PSPHOT_ERR_CONFIG, false, "problem saving detections on readout"); 748 return false; 582 749 } 583 750 … … 593 760 594 761 // keep the original source flags 762 sourceOut->seq = sourceSrc->seq; 595 763 sourceOut->type = sourceSrc->type; 596 764 sourceOut->mode = sourceSrc->mode; … … 612 780 pmSourceFreePixels (sourceOut); 613 781 782 // XXX do we need to skip the Chisq image sources? 783 614 784 // allocate image, weight, mask for the new image for each peak 615 if (sourceOut->modelPSF) { 616 pmSourceRedefinePixels (sourceOut, readoutOut, sourceOut->peak->x, sourceOut->peak->y, sourceOut->modelPSF->fitRadius); 617 } 785 pmSourceRedefinePixels (sourceOut, readoutOut, sourceOut->peak->x, sourceOut->peak->y, sourceOut->windowRadius); 618 786 619 787 // child sources have not been subtracted in this image, but this flag may be raised if … … 624 792 psFree (sourceOut); 625 793 } 626 psLogMsg ("psphot", 3, "%ld known sources supplied", detectionsOut->allSources->n); 627 628 629 return true; 630 } 631 632 // create source children associated with 'filerule' from the objectsSrc. XXX currently, this 633 // is only used by psphotStackReadout (sources go on allSources so that psphotChoosePSF can be 634 // called repeatedly) 794 psLogMsg ("psphot", 3, "created %ld children", detectionsOut->allSources->n); 795 796 psFree(detectionsOut); // a copy remains on the analysis metadata 797 798 return true; 799 } 800 801 // create source children associated with 'filerule' from the objectsSrc. returns a new object 802 // array containing the child sources. XXX currently, this is only used by psphotStackReadout 803 // (sources go on allSources so that psphotChoosePSF can be called repeatedly) 635 804 psArray *psphotSourceChildrenByObject (pmConfig *config, const pmFPAview *view, const char *filerule, psArray *objectsSrc) { 636 805 … … 652 821 psAssert (readout, "missing readout?"); 653 822 823 // create DETECTIONS containers for each image, in case one lacks it 654 824 pmDetections *detections = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.DETECTIONS"); 655 825 if (!detections) { … … 665 835 psAssert (detections, "missing detections?"); 666 836 } 837 838 // we need to save the new sources on the detection arrays of the appropriate image 667 839 detArrays->data[i] = psMemIncrRefCounter(detections); 668 840 readouts->data[i] = psMemIncrRefCounter(readout); … … 695 867 696 868 pmSource *sourceOut = pmSourceCopy(sourceSrc); 869 sourceOut->parent = sourceSrc; 870 871 // save on the output object array at the same location 697 872 objectOut->sources->data[i] = sourceOut; 698 699 sourceOut->parent = sourceSrc;700 873 701 874 // keep the original source flags and sequence ID (if set) … … 720 893 pmSourceFreePixels (sourceOut); 721 894 722 // set the output reado tu895 // set the output readout 723 896 int index = sourceOut->imageID; 724 897 if (index >= readouts->n) continue; // skip the sources generated by the chisq image -
trunk/psphot/src/psphotOutput.c
r32348 r32695 407 407 return true; 408 408 } 409 410 // for now, let's store the detections on the readout->analysis for each readout 411 bool psphotDumpTest (pmConfig *config, const pmFPAview *view, const char *filerule) 412 { 413 static int npass = 0; 414 char filename[64]; 415 416 // XXX dump tests are disabled unless this is commented out: 417 return true; 418 419 bool status = true; 420 421 int num = psphotFileruleCount(config, filerule); 422 423 snprintf (filename, 64, "testdump.%02d.dat", npass); 424 FILE *f = fopen (filename, "w"); 425 426 // loop over the available readouts 427 for (int i = 0; i < num; i++) { 428 429 // find the currently selected readout 430 pmFPAfile *file = pmFPAfileSelectSingle(config->files, filerule, i); // File of interest 431 psAssert (file, "missing file?"); 432 433 pmReadout *readout = pmFPAviewThisReadout(view, file->fpa); 434 psAssert (readout, "missing readout?"); 435 436 pmDetections *detections = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.DETECTIONS"); 437 psAssert (detections, "missing detections?"); 438 439 psArray *sources = detections->newSources ? detections->newSources : detections->allSources; 440 psAssert (sources, "missing sources?"); 441 442 if (detections->newSources) { 443 fprintf (f, "## --- from new sources ---\n"); 444 } else { 445 fprintf (f, "## --- from all sources ---\n"); 446 } 447 448 for (int i = 0; i < sources->n; i++) { 449 pmSource *source = sources->data[i]; 450 if (!source) continue; 451 452 pmPeak *peak = source->peak; 453 if (!peak) continue; 454 455 // XXX only dump a given region 456 // if (peak->xf < 20) continue; 457 // if (peak->yf < 20) continue; 458 // if (peak->xf > 40) continue; 459 // if (peak->yf > 70) continue; 460 461 float Msum = source->moments ? source->moments->Sum : NAN; 462 float Mx = source->moments ? source->moments->Mx : NAN; 463 float My = source->moments ? source->moments->My : NAN; 464 // float Npix = source->moments ? source->moments->nPixels : NAN; 465 float Io = source->modelPSF ? source->modelPSF->params->data.F32[PM_PAR_I0] : NAN; 466 fprintf (f, "%d %f %f : %f %f : %f %f\n", source->imageID, peak->xf, peak->yf, Mx, My, Msum, Io); 467 } 468 } 469 fclose (f); 470 npass ++; 471 472 return true; 473 } 474 475 # if (0) 409 476 bool psphotDumpTest (pmConfig *config, const pmFPAview *view, const char *filerule, char *filename) { 410 477 … … 449 516 return true; 450 517 } 451 518 # endif -
trunk/psphot/src/psphotReadout.c
r32633 r32695 9 9 } 10 10 11 // for now, let's store the detections on the readout->analysis for each readout12 bool psphotDumpChisqs (pmConfig *config, const pmFPAview *view, const char *filerule)13 {14 static int npass = 0;15 char filename[64];16 17 return true;18 19 bool status = true;20 21 int num = psphotFileruleCount(config, filerule);22 23 snprintf (filename, 64, "chisq.%02d.dat", npass);24 FILE *f = fopen (filename, "w");25 26 // loop over the available readouts27 for (int i = 0; i < num; i++) {28 29 // find the currently selected readout30 pmFPAfile *file = pmFPAfileSelectSingle(config->files, filerule, i); // File of interest31 psAssert (file, "missing file?");32 33 pmReadout *readout = pmFPAviewThisReadout(view, file->fpa);34 psAssert (readout, "missing readout?");35 36 pmDetections *detections = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.DETECTIONS");37 psAssert (detections, "missing detections?");38 39 psArray *sources = detections->allSources;40 psAssert (sources, "missing sources?");41 42 for (int i = 0; i < sources->n; i++) {43 pmSource *source = sources->data[i];44 if (!source) continue;45 46 pmModel *model = pmSourceGetModel (NULL, source);47 if (!model) continue;48 49 if (source->mode & PM_SOURCE_MODE_NONLINEAR_FIT) {50 fprintf (f, "%f %f %f %d %d %f 1 NONLINEAR\n", model->mag, model->params->data.F32[1], model->chisq, model->nDOF, model->nPix, model->chisqNorm);51 } else {52 fprintf (f, "%f %f %f %d %d %f 0 LINEAR\n", model->mag, model->params->data.F32[1], model->chisq, model->nDOF, model->nPix, model->chisqNorm);53 }54 }55 }56 fclose (f);57 npass ++;58 59 return true;60 }61 62 11 bool psphotReadout(pmConfig *config, const pmFPAview *view, const char *filerule) { 63 12 … … 188 137 // linear PSF fit to source peaks, subtract the models from the image (in PSF mask) 189 138 psphotFitSourcesLinear (config, view, filerule, false); // pass 1 (detections->allSources) 190 psphotDumpChisqs (config, view, filerule);191 139 192 140 // measure the radial profiles to the sky … … 208 156 // replace model flux, adjust mask as needed, fit, subtract the models (full stamp) 209 157 psphotBlendFit (config, view, filerule); // pass 1 (detections->allSources) 210 psphotDumpChisqs (config, view, filerule);211 158 212 159 // replace all sources 213 psphotReplaceAllSources (config, view, filerule ); // pass 1 (detections->allSources)160 psphotReplaceAllSources (config, view, filerule, false); // pass 1 (detections->allSources) 214 161 215 162 // linear fit to include all sources (subtract again) 216 163 // NOTE : apply to ALL sources (extended + psf) 217 164 psphotFitSourcesLinear (config, view, filerule, true); // pass 2 (detections->allSources) 218 psphotDumpChisqs (config, view, filerule);219 165 220 166 // if we only do one pass, skip to extended source analysis … … 253 199 // replace all sources so fit below applies to all at once 254 200 // NOTE: apply only to OLD sources (which have been subtracted) 255 psphotReplaceAllSources (config, view, filerule ); // pass 2201 psphotReplaceAllSources (config, view, filerule, false); // pass 2 256 202 257 203 // merge the newly selected sources into the existing list … … 262 208 // NOTE: apply to ALL sources 263 209 psphotFitSourcesLinear (config, view, filerule, true); // pass 3 (detections->allSources) 264 psphotDumpChisqs (config, view, filerule);265 210 } 266 211 … … 295 240 // replace all sources so fit below applies to all at once 296 241 // NOTE: apply only to OLD sources (which have been subtracted) 297 psphotReplaceAllSources (config, view, filerule ); // pass 2242 psphotReplaceAllSources (config, view, filerule, false); // pass 2 298 243 299 244 // merge the newly selected sources into the existing list -
trunk/psphot/src/psphotReplaceUnfit.c
r31452 r32695 9 9 10 10 for (int i = 0; i < sources->n; i++) { 11 source = sources->data[i];12 13 // replace other sources?14 if (source->mode & PM_SOURCE_MODE_FAIL) goto replace;15 continue;11 source = sources->data[i]; 12 13 // replace other sources? 14 if (source->mode & PM_SOURCE_MODE_FAIL) goto replace; 15 continue; 16 16 17 17 replace: … … 23 23 24 24 // for now, let's store the detections on the readout->analysis for each readout 25 bool psphotReplaceAllSources (pmConfig *config, const pmFPAview *view, const char *filerule )25 bool psphotReplaceAllSources (pmConfig *config, const pmFPAview *view, const char *filerule, bool ignoreState) 26 26 { 27 27 bool status = true; … … 35 35 // loop over the available readouts 36 36 for (int i = 0; i < num; i++) { 37 if (!psphotReplaceAllSourcesReadout (config, view, filerule, i, recipe )) {37 if (!psphotReplaceAllSourcesReadout (config, view, filerule, i, recipe, ignoreState)) { 38 38 psError (PSPHOT_ERR_CONFIG, false, "failed to replace all sources for %s entry %d", filerule, i); 39 39 return false; … … 43 43 } 44 44 45 bool psphotReplaceAllSourcesReadout (pmConfig *config, const pmFPAview *view, const char *filename, int index, psMetadata *recipe) { 46 47 bool status; 48 pmSource *source; 45 bool psphotReplaceAllSourcesReadout (pmConfig *config, const pmFPAview *view, const char *filename, int index, psMetadata *recipe, bool ignoreState) { 46 47 bool status; 49 48 50 49 psTimerStart ("psphot.replace"); … … 75 74 76 75 for (int i = 0; i < sources->n; i++) { 77 source = sources->data[i]; 78 79 // replace other sources? 80 if (!(source->tmpFlags & PM_SOURCE_TMPF_SUBTRACTED)) continue; 81 82 pmSourceAdd (source, PM_MODEL_OP_FULL, maskVal); 76 pmSource *source = sources->data[i]; 77 78 if (ignoreState) { 79 // rely on the type of source to decide if we subtract it or not 80 81 // skip non-astronomical objects (very likely defects) 82 if (source->type == PM_SOURCE_TYPE_DEFECT) continue; 83 if (source->type == PM_SOURCE_TYPE_SATURATED) continue; 84 85 // do not include CRs in the full ensemble fit 86 if (source->mode & PM_SOURCE_MODE_CR_LIMIT) continue; 87 88 // do not include MOMENTS_FAILURES in the fit 89 if (source->mode & PM_SOURCE_MODE_MOMENTS_FAILURE) continue; 90 } else { 91 // if we respect the state, do not replace unsubtracted sources 92 if (!(source->tmpFlags & PM_SOURCE_TMPF_SUBTRACTED)) continue; 93 } 94 95 pmSourceAdd (source, PM_MODEL_OP_FULL, maskVal); 83 96 } 84 97 … … 88 101 } 89 102 90 bool psphotRemoveAllSources (const psArray *sources, const psMetadata *recipe) { 103 // for now, let's store the detections on the readout->analysis for each readout 104 bool psphotRemoveAllSources (pmConfig *config, const pmFPAview *view, const char *filerule, bool ignoreState) 105 { 106 bool status = true; 107 108 // select the appropriate recipe information 109 psMetadata *recipe = psMetadataLookupPtr (&status, config->recipes, PSPHOT_RECIPE); 110 psAssert (recipe, "missing recipe?"); 111 112 int num = psphotFileruleCount(config, filerule); 113 114 // loop over the available readouts 115 for (int i = 0; i < num; i++) { 116 if (!psphotRemoveAllSourcesReadout (config, view, filerule, i, recipe, ignoreState)) { 117 psError (PSPHOT_ERR_CONFIG, false, "failed to replace all sources for %s entry %d", filerule, i); 118 return false; 119 } 120 } 121 return true; 122 } 123 124 bool psphotRemoveAllSourcesReadout (pmConfig *config, const pmFPAview *view, const char *filename, int index, psMetadata *recipe, bool ignoreState) { 125 126 bool status; 127 128 psTimerStart ("psphot.replace"); 129 130 // find the currently selected readout 131 pmFPAfile *file = pmFPAfileSelectSingle(config->files, filename, index); // File of interest 132 psAssert (file, "missing file?"); 133 134 pmReadout *readout = pmFPAviewThisReadout(view, file->fpa); 135 psAssert (readout, "missing readout?"); 136 137 pmDetections *detections = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.DETECTIONS"); 138 psAssert (detections, "missing detections?"); 139 140 psArray *sources = detections->allSources; 141 psAssert (sources, "missing sources?"); 142 143 // user-defined masks to test for good/bad pixels (build from recipe list if not yet set) 144 psImageMaskType maskVal = psMetadataLookupImageMask(&status, recipe, "MASK.PSPHOT"); // Mask value for bad pixels 145 psAssert (maskVal, "missing mask value?"); 146 147 // bit-mask to mark pixels not used in analysis 148 psImageMaskType markVal = psMetadataLookupImageMask(&status, recipe, "MARK.PSPHOT"); 149 assert (markVal); 150 151 // maskVal is used to test for rejected pixels, and must include markVal 152 maskVal |= markVal; 153 154 for (int i = 0; i < sources->n; i++) { 155 pmSource *source = sources->data[i]; 156 157 if (ignoreState) { 158 // rely on the type of source to decide if we subtract it or not 159 160 // skip non-astronomical objects (very likely defects) 161 if (source->type == PM_SOURCE_TYPE_DEFECT) continue; 162 if (source->type == PM_SOURCE_TYPE_SATURATED) continue; 163 164 // do not include CRs in the full ensemble fit 165 if (source->mode & PM_SOURCE_MODE_CR_LIMIT) continue; 166 167 // do not include MOMENTS_FAILURES in the fit 168 if (source->mode & PM_SOURCE_MODE_MOMENTS_FAILURE) continue; 169 } else { 170 // if we respect the state, only remove unsubtracted sources 171 if ((source->tmpFlags & PM_SOURCE_TMPF_SUBTRACTED)) continue; 172 } 173 174 pmSourceSub (source, PM_MODEL_OP_FULL, maskVal); 175 } 176 177 psphotVisualShowImage(readout); 178 psLogMsg ("psphot.replace", PS_LOG_INFO, "replaced models for %ld objects: %f sec\n", sources->n, psTimerMark ("psphot.replace")); 179 return true; 180 } 181 182 bool psphotRemoveAllSourcesByArray (const psArray *sources, const psMetadata *recipe) { 91 183 92 184 bool status; … … 100 192 101 193 for (int i = 0; i < sources->n; i++) { 102 source = sources->data[i];103 104 // replace other sources?105 if (source->tmpFlags & PM_SOURCE_TMPF_SUBTRACTED) continue;106 107 pmSourceSub (source, PM_MODEL_OP_FULL, maskVal);194 source = sources->data[i]; 195 196 // replace other sources? 197 if (source->tmpFlags & PM_SOURCE_TMPF_SUBTRACTED) continue; 198 199 pmSourceSub (source, PM_MODEL_OP_FULL, maskVal); 108 200 } 109 201 psLogMsg ("psphot.replace", PS_LOG_INFO, "replaced models for %ld objects: %f sec\n", sources->n, psTimerMark ("psphot.replace")); … … 158 250 159 251 for (int i = 0; i < sources->n; i++) { 160 source = sources->data[i];161 162 // sources have not yet been subtracted in this image (but this flag may be raised)163 source->tmpFlags &= ~PM_SOURCE_TMPF_SUBTRACTED;164 if (!source->modelPSF) continue;165 166 float Xo = source->modelPSF->params->data.F32[PM_PAR_XPOS];167 float Yo = source->modelPSF->params->data.F32[PM_PAR_YPOS];168 float radius = source->modelPSF->fitRadius;169 170 // force a redefine to this image171 pmSourceFreePixels(source);172 pmSourceRedefinePixels (source, readout, Xo, Yo, radius);252 source = sources->data[i]; 253 254 // sources have not yet been subtracted in this image (but this flag may be raised) 255 source->tmpFlags &= ~PM_SOURCE_TMPF_SUBTRACTED; 256 if (!source->modelPSF) continue; 257 258 float Xo = source->modelPSF->params->data.F32[PM_PAR_XPOS]; 259 float Yo = source->modelPSF->params->data.F32[PM_PAR_YPOS]; 260 float radius = source->modelPSF->fitRadius; 261 262 // force a redefine to this image 263 pmSourceFreePixels(source); 264 pmSourceRedefinePixels (source, readout, Xo, Yo, radius); 173 265 } 174 266 return true; … … 229 321 230 322 for (int i = 0; i < sources->n; i++) { 231 source = sources->data[i];232 233 // *** we need to cache the 'best' model, and we have 3 cases:234 // 1) model is the psf model --> generate from the new psf235 // 2) model is an unconvolved extended model --> just cache the copy (not perfect)236 // 3) model is a convolved extended model --> re-generate237 238 // use the 'best' model to cache the model (PSF or EXT : EXT may point at one of modelFits239 bool isPSF = false;240 pmModel *model = pmSourceGetModel(&isPSF, source);241 if (!model) continue;242 243 float radius = model->fitRadius; // save for future use below244 245 // regenerate the PSF if the model is a PSF, or if we need the PSF for a PCM246 if (isPSF || model->isPCM) {247 // the guess central intensity comes from the peak:248 float Io = source->peak->rawFlux;249 float Xo = source->modelPSF->params->data.F32[PM_PAR_XPOS];250 float Yo = source->modelPSF->params->data.F32[PM_PAR_YPOS];251 252 // generate a model for this object with Io = 1.0253 pmModel *modelPSF = pmModelFromPSFforXY(psf, Xo, Yo, Io);254 if (modelPSF == NULL) {255 psWarning ("Failed to determine PSF model for source at (%f,%f), skipping", Xo, Yo);256 continue;257 }258 259 // set the source PSF model260 psFree (source->modelPSF);261 source->modelPSF = modelPSF;262 source->modelPSF->fitRadius = radius;263 }264 265 if (model->isPCM) {266 psAssert(false, "this section is not complete");267 268 pmSourceCachePSF (source, maskVal);269 270 psKernel *psfKernel = pmPCMkernelFromPSF(source, psfSize);271 if (!psfKernel) {272 psWarning ("no psf kernel");273 }274 275 // generate an image of the right size276 psImage *rawModelFlux = psImageCopy (NULL, source->pixels, PS_TYPE_F32);277 psImageInit (rawModelFlux, 0.0);323 source = sources->data[i]; 324 325 // *** we need to cache the 'best' model, and we have 3 cases: 326 // 1) model is the psf model --> generate from the new psf 327 // 2) model is an unconvolved extended model --> just cache the copy (not perfect) 328 // 3) model is a convolved extended model --> re-generate 329 330 // use the 'best' model to cache the model (PSF or EXT : EXT may point at one of modelFits 331 bool isPSF = false; 332 pmModel *model = pmSourceGetModel(&isPSF, source); 333 if (!model) continue; 334 335 float radius = model->fitRadius; // save for future use below 336 337 // regenerate the PSF if the model is a PSF, or if we need the PSF for a PCM 338 if (isPSF || model->isPCM) { 339 // the guess central intensity comes from the peak: 340 float Io = source->peak->rawFlux; 341 float Xo = source->modelPSF->params->data.F32[PM_PAR_XPOS]; 342 float Yo = source->modelPSF->params->data.F32[PM_PAR_YPOS]; 343 344 // generate a model for this object with Io = 1.0 345 pmModel *modelPSF = pmModelFromPSFforXY(psf, Xo, Yo, Io); 346 if (modelPSF == NULL) { 347 psWarning ("Failed to determine PSF model for source at (%f,%f), skipping", Xo, Yo); 348 continue; 349 } 350 351 // set the source PSF model 352 psFree (source->modelPSF); 353 source->modelPSF = modelPSF; 354 source->modelPSF->fitRadius = radius; 355 } 356 357 if (model->isPCM) { 358 psAssert(false, "this section is not complete"); 359 360 pmSourceCachePSF (source, maskVal); 361 362 psKernel *psfKernel = pmPCMkernelFromPSF(source, psfSize); 363 if (!psfKernel) { 364 psWarning ("no psf kernel"); 365 } 366 367 // generate an image of the right size 368 psImage *rawModelFlux = psImageCopy (NULL, source->pixels, PS_TYPE_F32); 369 psImageInit (rawModelFlux, 0.0); 278 370 279 // insert the model image normalized to 1.0280 pmModelAdd (rawModelFlux, NULL, model, PM_MODEL_OP_FULL | PM_MODEL_OP_NORM, maskVal);281 282 psImageConvolveFFT (source->modelFlux, rawModelFlux, NULL, 0, psfKernel);371 // insert the model image normalized to 1.0 372 pmModelAdd (rawModelFlux, NULL, model, PM_MODEL_OP_FULL | PM_MODEL_OP_NORM, maskVal); 373 374 psImageConvolveFFT (source->modelFlux, rawModelFlux, NULL, 0, psfKernel); 283 375 284 psFree (psfKernel);285 psFree (rawModelFlux);286 }287 288 pmSourceCacheModel (source, maskVal); // ALLOC x14 (!)376 psFree (psfKernel); 377 psFree (rawModelFlux); 378 } 379 380 pmSourceCacheModel (source, maskVal); // ALLOC x14 (!) 289 381 } 290 382 -
trunk/psphot/src/psphotSourceFits.c
r32633 r32695 257 257 okDBL = psphotEvalDBL (tmpSrc, DBL->data[0]); 258 258 okDBL &= psphotEvalDBL (tmpSrc, DBL->data[1]); 259 okDBL = false; // XXX this is failing badly... 259 260 // XXX should I keep / save the flags set in the eval functions? 260 261 -
trunk/psphot/src/psphotStackChisqImage.c
r31154 r32695 13 13 psAssert (chisqFile, "missing chisq image FPA?"); 14 14 15 // the readout containing the chisq image is generated in the first pass of this loop and 16 // used by the successive passes 15 17 pmReadout *chiReadout = NULL; 16 18 -
trunk/psphot/src/psphotStackReadout.c
r32633 r32695 82 82 } 83 83 84 // XXX I think this is not defined correctly for an array of images.85 // XXX I probably need to subtract the model (same model?) for both RAW and OUT.86 // XXX But, probably not a problem in practice since the stacks are constructed with 0.0 mean level.87 88 84 // generate a background model (median, smoothed image) 89 85 if (!psphotModelBackground (config, view, STACK_DET)) { … … 91 87 } 92 88 if (!psphotSubtractBackground (config, view, STACK_DET)) { 89 return psphotReadoutCleanup (config, view, STACK_SRC); 90 } 91 if (!psphotSubtractBackground (config, view, STACK_SRC)) { 93 92 return psphotReadoutCleanup (config, view, STACK_SRC); 94 93 } … … 114 113 } 115 114 116 // if DET and SRC are different images, copy the detections from DET to SRC 115 // If DET and SRC are different images, copy the detections from DET to SRC. This 'copy' 116 // is just a copy of the container pointer; the sources on both DET and SRC are the same 117 // memory objects 117 118 if (strcmp(STACK_SRC, STACK_DET)) { 118 119 if (!psphotCopySources (config, view, STACK_SRC, STACK_DET)) { … … 130 131 return psphotReadoutCleanup (config, view, STACK_SRC); 131 132 } 133 // psphotDumpTest (config, view, STACK_SRC); 132 134 psMemDump("sourcestats"); 133 135 … … 166 168 167 169 // linear PSF fit to source peaks, subtract the models from the image (in PSF mask) 168 // XXX why do this as a stack operation?169 // psphotFitSourcesLinearStack (config, objects, false);170 170 psphotFitSourcesLinear (config, view, STACK_SRC, false); 171 171 psphotStackVisualFilerule(config, view, STACK_SRC); … … 186 186 psphotBlendFit (config, view, STACK_SRC); // pass 1 (detections->allSources) 187 187 188 // replace all sources 189 psphotReplaceAllSources (config, view, STACK_SRC ); // pass 1 (detections->allSources)188 // replace all sources (do NOT ignore subtraction state) 189 psphotReplaceAllSources (config, view, STACK_SRC, false); // pass 1 (detections->allSources) 190 190 191 191 // if we only do one pass, skip to extended source analysis … … 194 194 // linear fit to include all sources (subtract again) 195 195 // NOTE : apply to ALL sources (extended + psf) 196 // NOTE 2 : this function subtracts the models from the given filerule (SRC), not DET 196 197 psphotFitSourcesLinear (config, view, STACK_SRC, true); // pass 2 (detections->allSources) 197 198 … … 200 201 // NOTE: this block performs the 2nd pass low-significance PSF detection stage 201 202 { 203 // if DET and SRC are different images, generate children sources for all sources in 204 // the SRC image. This operation replaces the existing DETECTION container on DET 205 // which is currently a view to the one on SRC). children sources go to 206 // det->allSources 207 if (strcmp(STACK_SRC, STACK_DET)) { 208 psphotSourceChildren (config, view, STACK_DET, STACK_SRC); 209 210 // subtract all sources from DET (this will subtract using the psf model for SRC, which 211 // will somewhat oversubtract the sources -- this is OK 212 psphotRemoveAllSources (config, view, STACK_DET, false); // ignore subtraction state for sources 213 } 214 202 215 // add noise for subtracted objects 203 216 psphotAddNoise (config, view, STACK_DET); // pass 1 (detections->allSources) … … 212 225 213 226 // if DET and SRC are different images, copy the detections from DET to SRC 227 // (this operation just ensures the metadata container has a view on SRC as well 214 228 if (strcmp(STACK_SRC, STACK_DET)) { 215 // XXX how does this handle 1st vs 2nd pass sources? 216 if (!psphotCopySources (config, view, STACK_SRC, STACK_DET)) { 229 // replace all sources in DET 230 psphotReplaceAllSources (config, view, STACK_DET, false); // ignore subtraction state for sources 231 232 // copy the newly detected peaks from DET to SRC so SourceStats below can operate on them 233 if (!psphotCopyPeaks (config, view, STACK_SRC, STACK_DET)) { 217 234 psError (PSPHOT_ERR_UNKNOWN, false, "failure in peak analysis"); 218 235 return psphotReadoutCleanup (config, view, STACK_SRC); … … 237 254 // replace all sources so fit below applies to all at once 238 255 // NOTE: apply only to OLD sources (which have been subtracted) 239 psphotReplaceAllSources (config, view, STACK_SRC ); // pass 2256 psphotReplaceAllSources (config, view, STACK_SRC, false); // pass 2 240 257 241 258 // merge the newly selected sources into the existing list … … 312 329 313 330 // replace the flux in the image so it is returned to its original state 314 psphotReplaceAllSources (config, view, STACK_OUT );331 psphotReplaceAllSources (config, view, STACK_OUT, false); 315 332 316 333 // smooth to the next FWHM, or set 'smoothAgain' to false if no more -
trunk/psvideophot
- Property svn:mergeinfo changed
/branches/eam_branches/ipp-20111110/psvideophot (added) merged: 32694
- Property svn:mergeinfo changed
Note:
See TracChangeset
for help on using the changeset viewer.
