/*--------------------------------------------------------*/ int main(int argc, char *argv[]) { char **newheader, *imffname, *parfname, *psffname, *reffname, *instrname, *fieldname, *outfname, *coofname, **diffiles, **imfiles, **kerfiles; int nx0, ny0, k, *sector, nim, iim, npsf, ipsf, hsize, isec_x, isec_y, *cx, *cy, psfn, kern, irad, // ofs, *vnum, i; float *im, *difim, *refim; double **wxy, *x, *y, *xs, *ys, **psfs, *psfim, *kerim, ratio; STAR **obj, *objp; PSF_STRUCT psf; KER_STRUCT ker; PAR_STRUCT par; /*** IO stuff ***/ if (argc != 7) { printf("\n\tUSAGE: phot parameter_file instrument_file"); printf(" ref_image psf_fit_file image_data_list field_name\n"); exit(1); } parfname= argv[1]; instrname=argv[2]; reffname= argv[3]; psffname= argv[4]; imffname= argv[5]; fieldname=argv[6]; get_params(parfname, instrname, &par); if (par.verbose) printf("\n\n*** Profile photometry with variable PSF and kernel ***\n\n"); if (!(outfname=(char *)calloc(strlen(fieldname)+5, sizeof(char)))) errmess("calloc(outfname)"); strcpy(outfname, fieldname); strcat(outfname, ".db"); if (!(coofname=(char *)calloc(strlen(fieldname)+5, sizeof(char)))) errmess("calloc(coofname)"); strcpy(coofname, fieldname); strcat(coofname, ".coo"); /*** read filenames for difference images, images and kernel fits ***/ nim=readfnames(imffname, &diffiles, &imfiles, &kerfiles); if (par.verbose) printf("%d images to process\n", nim); /*** read coordinates of variables ***/ npsf=readcoo(coofname, &vnum, &x, &y); if (par.verbose) printf("%d variables to measure\n\n", npsf); /*** read in psf fit and get a sample kernel from the first image ***/ read_psf(psffname, &psf); read_kernel(kerfiles[0], &ker, 1, par.verbose); psf.normrad = par.normrad; psf.hw += ker.hw; psfn = 2*psf.hw + 1; kern = 2*ker.hw + 1; /*** get memory ***/ if (!(ker.vecs = (double **)malloc(ker.nvecs*sizeof(double *)))) errmess("malloc(ker.vecs)"); for (k=0; k<ker.nvecs; k++) if (!(ker.vecs[k] = (double *)malloc(kern*kern*sizeof(double)))) errmess("malloc(ker.vecs[k])"); if (!(sector=(int *)malloc(npsf*sizeof(int)))) errmess("malloc(sector)"); if (!(cx= (int *)malloc(npsf*sizeof(int)))) errmess("malloc(cx)"); if (!(cy= (int *)malloc(npsf*sizeof(int)))) errmess("malloc(cy)"); if (!(xs= (double *)malloc(npsf*sizeof(double)))) errmess("malloc(xs)"); if (!(ys= (double *)malloc(npsf*sizeof(double)))) errmess("malloc(ys)"); if (!(wxy=(double **)malloc(npsf*sizeof(double *)))) errmess("malloc(wxy)"); if (!(psfs=(double **)malloc(npsf*sizeof(double *)))) errmess("malloc(psfs)"); if (!(kerim=(double *)malloc(kern*kern*sizeof(double)))) errmess("malloc(kerim)"); if (!(psfim=(double *)malloc(psfn*psfn*sizeof(double)))) errmess("malloc(psfim)"); if (!(obj=(STAR **)malloc(npsf*sizeof(STAR *)))) errmess("malloc(obj)"); /***********************************************************************/ /** get things that can be done once for all: spatial coeffs and psfs **/ /***********************************************************************/ for (ipsf=0; ipsf<npsf; ipsf++) { if (!(obj[ipsf]=(STAR *)malloc(nim*sizeof(STAR)))) errmess("malloc(obj[ipsf])"); if (!(wxy[ipsf]=(double *)malloc(ker.nwxy*sizeof(double)))) errmess("malloc(wxy[ipsf])"); if (!(psfs[ipsf]=(double *)malloc(psfn*psfn*sizeof(double)))) errmess("malloc(psfs[ipsf])"); /* offsets for image sectors from kernel fit */ cx[ipsf]=(int)floor(x[ipsf]+0.5); cy[ipsf]=(int)floor(y[ipsf]+0.5); isec_x=(cx[ipsf] - ker.hw)/(ker.nx - 2*ker.hw); isec_y=(cy[ipsf] - ker.hw)/(ker.ny - 2*ker.hw); xs[ipsf]=x[ipsf] - isec_x*(ker.nx - 2*ker.hw); ys[ipsf]=y[ipsf] - isec_y*(ker.ny - 2*ker.hw); sector[ipsf]=isec_y + ker.nsec_y*isec_x; spatial_coeffs(&ker, xs[ipsf], ys[ipsf], wxy[ipsf]); init_psf(&psf, x[ipsf], y[ipsf]); make_psf(&psf, x[ipsf], y[ipsf], cx[ipsf], cy[ipsf], psfs[ipsf]); } refim=read_FITS_2D1file(reffname, 's', &hsize, &newheader, &nx0, &ny0); for (i=0; i<hsize; i++) free(newheader[i]); free(newheader); make_vectors(&ker); par.nx0=nx0; par.ny0=ny0; par.psfhw=psf.hw; par.psfn=psfn; irad=(int)par.anrad2 + 2; /*******************************/ /*** main loop over images ***/ /*******************************/ for (iim=0; iim<nim; iim++) { if (par.verbose > 2) printf("%d: %s\n", iim, diffiles[iim]); difim=read_FITS_2D1file(diffiles[iim], 's', &hsize, &newheader, &nx0, &ny0); for (i=0; i<hsize; i++) free(newheader[i]); free(newheader); if ((nx0 != par.nx0) || (ny0 != par.ny0)) { printf("ERROR! phot: wrong size of the image %s\n", diffiles[iim]); exit(2); } im=read_FITS_2D1file(imfiles[iim], 's', &hsize, &newheader, &nx0, &ny0); for (i=0; i<hsize; i++) free(newheader[i]); free(newheader); if ((nx0 != par.nx0) || (ny0 != par.ny0)) { printf("ERROR! phot: wrong size of the image %s\n", imfiles[iim]); exit(3); } /* read kernel into tables allocated before */ read_kernel(kerfiles[iim], &ker, 0, par.verbose); /*** loop over stars ***/ for (ipsf=0; ipsf<npsf; ipsf++) { objp = &obj[ipsf][iim]; if ((cx[ipsf] < irad) || (cy[ipsf] < irad) || (cx[ipsf] >= nx0-irad) || (cy[ipsf] >= ny0-irad)) { if (par.verbose) printf("%s warning: object %4d too close to edge: ignored!\n", diffiles[iim], ipsf); objp->a_flux = par.bad_value; objp->a_err = par.bad_value; objp->p_flux = par.bad_value; objp->p_err = par.bad_value; objp->chi2_n = par.bad_value; objp->ker_chi2 = par.bad_value; objp->corr = par.bad_value; objp->nbad = -1; continue; } /*** prepare local psf ***/ make_kernel(&ker, wxy[ipsf], kerim, sector[ipsf]); im_convolve(psfs[ipsf], psfim, psfn, psfn, kerim, ker.hw); objp->ker_chi2=(float)ker.chi2_n[sector[ipsf]]; objp->fwhm=(float)get_fwhm(psfim, x[ipsf], y[ipsf], cx[ipsf], cy[ipsf], &par, &ratio); if (par.bkg_mode) objp->bg = bkg(difim, cx[ipsf], cy[ipsf], &par); else objp->bg = 0.0; /*** actual profile and aperture photometry ***/ get_phot(difim, im, refim, x[ipsf], y[ipsf], cx[ipsf], cy[ipsf], psfim, objp, &par); if (par.verbose > 1) printf("%s star: %5d flux= %9g +- %8g nbad: %d\n", diffiles[iim], ipsf, objp->p_flux, objp->p_err, objp->nbad); } free(difim); free(im); } /*** write photometry to the output file ***/ if (par.verbose) printf("\nWriting photometry to: %s\n", outfname); if (par.dbf == 'A') writedba(outfname, diffiles, nim, npsf, vnum, obj); else writedbb(outfname, diffiles, nim, npsf, vnum, obj); if (par.verbose) printf("\nPhotometry done!\n"); return(0); }
void mexFunction(int nlhs, /* No. of output arguments */ mxArray *plhs[], /* Output arguments. */ int nrhs, /* No. of input arguments. */ const mxArray *prhs[]) /* Input arguments. */ { int ndim, pm_ndim; int n, i; const int *cdim = NULL, *pm_cdim = NULL; unsigned int dim[3]; unsigned int nnz = 0; double *rima = NULL; double *pm = NULL; double *ii = NULL, *jj = NULL; double *nn = NULL, *pp = NULL; double *tmp = NULL; if (nrhs == 0) mexErrMsgTxt("usage: [i,j,n,p]=pm_create_connectogram_dtj(rima,pm)"); if (nrhs != 2) mexErrMsgTxt("pm_create_connectogram_dtj: 2 input arguments required"); if (nlhs != 4) mexErrMsgTxt("pm_create_connectogram_dtj: 4 output argument required"); /* Get connected components map. */ if (!mxIsNumeric(prhs[0]) || mxIsComplex(prhs[0]) || mxIsSparse(prhs[0]) || !mxIsDouble(prhs[0])) { mexErrMsgTxt("pm_bwlabel_dtj: rima must be numeric, real, full and double"); } ndim = mxGetNumberOfDimensions(prhs[0]); if ((ndim < 2) | (ndim > 3)) { mexErrMsgTxt("pm_bwlabel_dtj: rima must be 2 or 3-dimensional"); } cdim = mxGetDimensions(prhs[0]); rima = mxGetPr(prhs[0]); /* Get phase-map. */ if (!mxIsNumeric(prhs[1]) || mxIsComplex(prhs[1]) || mxIsSparse(prhs[1]) || !mxIsDouble(prhs[1])) { mexErrMsgTxt("pm_bwlabel_dtj: pm must be numeric, real, full and double"); } pm_ndim = mxGetNumberOfDimensions(prhs[1]); if (pm_ndim != ndim) { mexErrMsgTxt("pm_bwlabel_dtj: rima and pm must have same dimensionality"); } pm_cdim = mxGetDimensions(prhs[1]); for (i=0; i<ndim; i++) { if (cdim[i] != pm_cdim[i]) { mexErrMsgTxt("pm_bwlabel_dtj: rima and pm must have same size"); } } pm = mxGetPr(prhs[1]); /* Fix dimensions to allow for 2D and 3D data. */ dim[0]=cdim[0]; dim[1]=cdim[1]; if (ndim==2) {dim[2]=1; ndim=3;} else {dim[2]=cdim[2];} for (i=0, n=1; i<ndim; i++) { n *= dim[i]; } /* Create ii, jj, and nn and pp vectors for subsequent use by the matlab sparse function such that N = sparse(ii,jj,nn,nnz) generates a matrix where each non-zero entry signifies the no. of voxels along the border of the corresponding regions. */ nnz = make_vectors(rima,pm,dim,&ii,&jj,&nn,&pp); /* Allocate memory for output. */ plhs[0] = mxCreateDoubleMatrix(nnz,1,mxREAL); tmp = mxGetPr(plhs[0]); memcpy(tmp,ii,nnz*sizeof(double)); plhs[1] = mxCreateDoubleMatrix(nnz,1,mxREAL); tmp = mxGetPr(plhs[1]); memcpy(tmp,jj,nnz*sizeof(double)); plhs[2] = mxCreateDoubleMatrix(nnz,1,mxREAL); tmp = mxGetPr(plhs[2]); memcpy(tmp,nn,nnz*sizeof(double)); plhs[3] = mxCreateDoubleMatrix(nnz,1,mxREAL); tmp = mxGetPr(plhs[3]); memcpy(tmp,pp,nnz*sizeof(double)); /* Clean up a bit. */ mxFree(ii); mxFree(jj); mxFree(nn); mxFree(pp); return; }
/*--------------------------------------------------------*/ int main(int argc, char *argv[]) { char **header, *imffname, *parfname, *psffname, *reffname, *instrname, *fieldname, *catname, *coofname, record[RECORD_LEN], **diffiles, **imfiles, **kerfiles; int nx0, ny0, k, nim, iim, hsize, cx, cy, psfn, kern, irad, ofs, nobj1, nobj1_max, nobj2, nobj2_max, i, j, flag, *index, nvar; float x0_off, y0_off, x_tmp, y_tmp, fwhm_limit, *fwhm, **im, **difim, *refim, *varim1, *varim2, *corrim, *tmpim; double *wxy, x, y, *psfs, *psfim, *kerim, ratio; FILE *outfcat, *outfcoo; STAR *obj1, *obj2, *objp; PSF_STRUCT psf; KER_STRUCT ker; PAR_STRUCT par; /*** IO stuff ***/ if (argc != 9) usage(); parfname = argv[1]; instrname= argv[2]; reffname = argv[3]; psffname = argv[4]; imffname = argv[5]; fieldname = argv[6]; x0_off = atof(argv[7]); y0_off = atof(argv[8]); puts("sssssss"); get_params(parfname, instrname, &par); puts("sssssss"); if (!(catname=(char *)calloc(strlen(fieldname)+5, sizeof(char)))) errmess("calloc(catname)"); strcpy(catname, fieldname); strcat(catname, ".cat"); if (!(coofname=(char *)calloc(strlen(fieldname)+5, sizeof(char)))) errmess("calloc(coofname)"); strcpy(coofname, fieldname); strcat(coofname, ".coo"); if (par.verbose > 2) { printf("parfname = %s\n", parfname); printf("instrname= %s\n", instrname); printf("reffname = %s\n", reffname); printf("psffname = %s\n", psffname); printf("imffname = %s\n", imffname); printf("fieldname= %s\n", fieldname); printf("x0_off = %g\n", x0_off); printf("y0_off = %g\n", y0_off); printf("--------\n"); printf("catname = %s\n", catname); printf("coofname = %s\n", coofname); printf("--------\n"); } nim=read_inp_list(imffname, &diffiles, &imfiles, &kerfiles); if (par.verbose) printf("%s: %d images\n", imffname, nim); // printf("%s %s %s\n", diffiles[0],imfiles[0],kerfiles[0]); // printf("%s %s %s\n", diffiles[1],imfiles[1],kerfiles[1]); //getchar(); /**********************************************************************/ /*** read in psf fit and get a sample kernel from the first image ***/ /**********************************************************************/ read_psf(psffname, &psf, par.verbose); printf("%f %f %f\n",psf.ax, psf.ay, psf.vec[0]); read_kernel(kerfiles[0], &ker, 1, par.verbose); printf("%f %d %f\n",*ker.sig, *ker.deg, *ker.vec[0]); //getchar(); psf.normrad = par.normrad; psf.hw += ker.hw; psfn = 2*psf.hw + 1; kern = 2*ker.hw + 1; /*** get memory ***/ if (!(ker.vecs = (double **)malloc(ker.nvecs*sizeof(double *)))) errmess("malloc(ker.vecs)"); for (k=0; k<ker.nvecs; k++) if (!(ker.vecs[k] = (double *)malloc(kern*kern*sizeof(double)))) errmess("malloc(ker.vecs[k])"); if (!(kerim=(double *)malloc(kern*kern*sizeof(double)))) errmess("malloc(kerim)"); if (!(psfim=(double *)malloc(psfn*psfn*sizeof(double)))) errmess("malloc(psfim)"); if (!(fwhm = (float *)malloc(nim*sizeof(float)))) errmess("malloc(fwhm)"); if (!(index = (int *)malloc(nim*sizeof(int)))) errmess("malloc(index)"); /***********************************************************************/ /** get things that can be done once for all: spatial coeffs and psfs **/ /***********************************************************************/ refim=read_FITS_2D1file(reffname, 's', &hsize, &header, &nx0, &ny0); for (i=0; i<hsize; i++) free(header[i]); free(header); par.nx0 = nx0; par.ny0 = ny0; par.psfhw = psf.hw; par.psfn = psfn; printf("nx0: %d %d %d %d\n",nx0,ny0,psf.hw,psfn); irad = (int)par.anrad2 + 2; /*** get even more memory ***/ if (!(psfs=(double *)malloc(psfn*psfn*sizeof(double)))) errmess("malloc(psfs)"); if (!(wxy=(double *)malloc(ker.nwxy*sizeof(double)))) errmess("malloc(wxy)"); if (!(im =(float **)malloc(nim*sizeof(float *)))) errmess("malloc(im)"); if (!(difim=(float **)malloc(nim*sizeof(float *)))) errmess("malloc(difim)"); if (!(varim1=(float *)malloc(nx0*ny0*sizeof(float)))) errmess("malloc(varim1)"); if (!(varim2=(float *)malloc(nx0*ny0*sizeof(float)))) errmess("malloc(varim2)"); if (!(corrim=(float *)malloc(nx0*ny0*sizeof(float)))) errmess("malloc(corrim)"); for (i=0; i<nx0*ny0; i++) varim1[i] = varim2[i] = 0.0; /*** make reference psf and spatial coeffs for kernel ***/ init_psf(&psf, (double)(nx0/2), (double)(ny0/2)); make_psf(&psf, (double)(nx0/2), (double)(ny0/2), nx0/2, ny0/2, psfs); make_vectors(&ker); spatial_coeffs(&ker, (double)(ker.nx/2), (double)(ker.ny/2), wxy); /*******************************/ /*** main loop over images ***/ /*******************************/ printf("MAIN:\n"); for (iim=0; iim<nim; iim++) { read_kernel(kerfiles[iim], &ker, 0, par.verbose); make_kernel(&ker, wxy, kerim, 0); im_convolve(psfs, psfim, psfn, psfn, kerim, ker.hw); fwhm[iim] = get_fwhm(psfim, 0.0, 0.0, 0, 0, &par, &ratio); } /*** reject bad seeing frames ***/ quick_sort(fwhm, index, nim); printf("fwhm = %f\n",fwhm[0]); printf("fwhm = %f\n",fwhm[1]); fwhm_limit = fwhm[index[(int)(nim*par.fwhm_frac)]]; printf("fwhmlim = %f\n",fwhm_limit); j = 0; for (iim=0; iim<nim; iim++) { if (fwhm[iim] <= fwhm_limit) { if (j != iim) { strcpy(diffiles[j], diffiles[iim]); strcpy( imfiles[j], imfiles[iim]); strcpy(kerfiles[j], kerfiles[iim]); } j++; } } nim = j; if (nim == 0) { printf("no images left ! (exit)\n"); exit(2); } /*** get all variability data at once ***/ for (iim=0; iim<nim; iim++) { difim[iim]=read_FITS_2D1file(diffiles[iim], 's', &hsize, &header, &nx0, &ny0); //printf("difim = %f\n",difim[iim]); for (i=0; i<hsize; i++) free(header[i]); free(header); if ((nx0 != par.nx0) || (ny0 != par.ny0)) { printf("ERROR! getvar: image %s has wrong size\n", diffiles[iim]); exit(3); } im[iim]=read_FITS_2D1file(imfiles[iim], 's', &hsize, &header, &nx0, &ny0); for (i=0; i<hsize; i++) free(header[i]); free(header); if ((nx0 != par.nx0) || (ny0 != par.ny0)) { printf("ERROR! getvar: image %s has wrong size\n", imfiles[iim]); exit(4); } } /*** prepare variability likelihood image ***/ get_repeaters(difim, im, varim1, varim2, &par, nim); /*** save variability images ***/ if (!(tmpim=(float *)malloc(nx0*ny0*sizeof(float)))) errmess("malloc(tmpim)"); memcpy(tmpim, varim1, nx0*ny0*sizeof(float)); writevar2fits("var1.fits", nx0, ny0, tmpim); memcpy(tmpim, varim2, nx0*ny0*sizeof(float)); writevar2fits("var2.fits", nx0, ny0, tmpim); free(tmpim); /*** find stellar looking things ***/ covar_sig(varim1, corrim, nx0, ny0, 0.0, par.mohw, psfs, par.psfhw); obj1 = find_stars(corrim, nx0, ny0, &nobj1, &nobj1_max, &par); if (par.verbose > 1) printf("find_stars -> %d variables of type 1\n", nobj1); center_stars(obj1, nobj1, difim, im, &par, nim); /***/ covar_sig(varim2, corrim, nx0, ny0, 0.0, par.mohw, psfs, par.psfhw); obj2 = find_stars(corrim, nx0, ny0, &nobj2, &nobj2_max, &par); if (par.verbose > 1) printf("find_stars -> %d variables of type 2\n", nobj2); center_stars(obj2, nobj2, difim, im, &par, nim); /*** some stars may be found in both: take only one type and flag ***/ cross_id(obj1, nobj1, obj2, nobj2, par.id_rad); if (par.verbose) printf("\nFound %d and %d candidates for variables of both types\n\n", nobj1, nobj2); /*********************************************************************/ /*** write results to a binary file and x,y to a temporary file ***/ /*********************************************************************/ if (!(outfcoo = fopen(coofname, "w"))) errmess(coofname); if (!(outfcat = fopen(catname, "w"))) errmess(catname); free(coofname); free(catname); fseek(outfcat, 0, SEEK_END); ofs = sizeof(float); /*** get sinusoidal variables out ***/ if (par.verbose) printf("var1:\n num X Y flux flag\n"); nvar=0; for (i=0; i<nobj1; i++) { if (par.verbose > 1) printf("i= %d\n", i); objp = &(obj1[i]); x = (double)(objp->x); y = (double)(objp->y); if (par.verbose > 1) printf("x= %g y= %g\n", x, y); if ((x < par.bad_margin) || (x >= par.nx0 - par.bad_margin)) continue; if ((y < par.bad_margin) || (y >= par.ny0 - par.bad_margin)) continue; cx = objp->cx; cy = objp->cy; if (par.verbose > 1) printf("cx= %d cy= %d\n", cx, cy); /*** append to a binary file ***/ if (objp->nframes > 0) { fprintf(outfcoo, "%5d %11.5f %11.5f\n", nvar, x, y); nvar++; /*** get template photometry ***/ init_psf(&psf, x, y); make_psf(&psf, x, y, cx, cy, psfs); objp->bg = bkg(refim, cx, cy, &par); get_phot(refim, refim, refim, x, y, cx, cy, psfs, objp, &par); flag = neighbor(refim, (int)x, (int)y, &par, objp->bg); if (par.verbose) printf("%4d %9.3f %9.3f %9.1f %5d\n", i, x, y, objp->p_flux, flag); x_tmp = (float)(x + x0_off); y_tmp = (float)(y + y0_off); if (par.verbose > 2) { printf("x_tmp= %g y_tmp= %g\n", x_tmp, y_tmp); printf("ofs= %d 13*ofs= %d\n", ofs, 13*ofs); } memcpy(&record[ 0*ofs], &x_tmp , ofs); memcpy(&record[ 1*ofs], &y_tmp , ofs); memcpy(&record[ 2*ofs], &objp->p_flux , ofs); memcpy(&record[ 3*ofs], &objp->p_err , ofs); memcpy(&record[ 4*ofs], &objp->a_flux , ofs); memcpy(&record[ 5*ofs], &objp->a_err , ofs); memcpy(&record[ 6*ofs], &objp->bg , ofs); memcpy(&record[ 7*ofs], &objp->chi2_n , ofs); memcpy(&record[ 8*ofs], &objp->corr , ofs); memcpy(&record[ 9*ofs], &objp->nbad , sizeof(int)); memcpy(&record[10*ofs], &objp->vtype , sizeof(int)); memcpy(&record[11*ofs], &objp->nframes, sizeof(int)); memcpy(&record[12*ofs], &flag , sizeof(int)); if (par.verbose > 2) printf("record prepared - writting...\n"); fwrite(record, 1, sizeof(record), outfcat); } } /*** the same for transients ***/ if (par.verbose) printf("var2:\n num X Y flux flag\n"); for (i=0; i<nobj2; i++) { if (par.verbose > 1) printf("i= %d\n", i); objp = &obj2[i]; x = (double)(objp->x); y = (double)(objp->y); if (par.verbose > 1) printf("x= %g y= %g\n", x, y); if ((x < par.bad_margin) || (x >= par.nx0 - par.bad_margin)) continue; if ((y < par.bad_margin) || (y >= par.ny0 - par.bad_margin)) continue; cx = objp->cx; cy = objp->cy; if (par.verbose > 1) printf("cx= %d cy= %d\n", cx, cy); /*** append to a binary file ***/ if (objp->nframes > 0) { fprintf(outfcoo, "%5d %11.5f %11.5f\n", nvar, x, y); nvar++; /*** get template photometry ***/ init_psf(&psf, x, y); make_psf(&psf, x, y, cx, cy, psfs); obj2[i].bg = bkg(refim, cx, cy, &par); get_phot(refim, refim, refim, x, y, cx, cy, psfs, objp, &par); flag = neighbor(refim, (int)x, (int)y, &par, objp->bg); if (par.verbose) printf("%4d %9.3f %9.3f %9.1f %5d\n", i+nobj1, x, y, objp->p_flux, flag); x_tmp = (float)(x + x0_off); y_tmp = (float)(y + y0_off); if (par.verbose > 2) { printf("x_tmp= %g y_tmp= %g\n", x_tmp, y_tmp); printf("ofs= %d 13*ofs= %d\n", ofs, 13*ofs); } memcpy(&record[ 0*ofs], &x_tmp , ofs); memcpy(&record[ 1*ofs], &y_tmp , ofs); memcpy(&record[ 2*ofs], &objp->p_flux , ofs); memcpy(&record[ 3*ofs], &objp->p_err , ofs); memcpy(&record[ 4*ofs], &objp->a_flux , ofs); memcpy(&record[ 5*ofs], &objp->a_err , ofs); memcpy(&record[ 6*ofs], &objp->bg , ofs); memcpy(&record[ 7*ofs], &objp->chi2_n , ofs); memcpy(&record[ 8*ofs], &objp->corr , ofs); memcpy(&record[ 9*ofs], &objp->nbad , sizeof(int)); memcpy(&record[10*ofs], &objp->vtype , sizeof(int)); memcpy(&record[11*ofs], &objp->nframes, sizeof(int)); memcpy(&record[12*ofs], &flag , sizeof(int)); if (par.verbose > 2) printf("record prepared - writting...\n"); fwrite(record, 1, sizeof(record), outfcat); } } fclose(outfcoo); fclose(outfcat); if (par.verbose) printf("\nVariability seach fihished!\n"); return(0); }