update
This commit is contained in:
parent
eb9769d462
commit
87d9f47f6e
|
@ -44,7 +44,7 @@ def annotate_lsm_sky(infilename,clusterfilename,outfilename,clid=None,color='yel
|
||||||
\s+ # skip white space
|
\s+ # skip white space
|
||||||
(?P<col7>[-+]?\d+(\.\d+)?) # Dec angle - sec
|
(?P<col7>[-+]?\d+(\.\d+)?) # Dec angle - sec
|
||||||
\s+ # skip white space
|
\s+ # skip white space
|
||||||
(?P<col8>[-+]?\d+(\.\d+)?) # Stokes I - Flux
|
(?P<col8>[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?) # Stokes I - Flux
|
||||||
\s+ # skip white space
|
\s+ # skip white space
|
||||||
(?P<col9>[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?) # Stokes Q - Flux
|
(?P<col9>[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?) # Stokes Q - Flux
|
||||||
\s+ # skip white space
|
\s+ # skip white space
|
||||||
|
@ -79,7 +79,7 @@ def annotate_lsm_sky(infilename,clusterfilename,outfilename,clid=None,color='yel
|
||||||
\s+ # skip white space
|
\s+ # skip white space
|
||||||
(?P<col7>[-+]?\d+(\.\d+)?) # Dec angle - sec
|
(?P<col7>[-+]?\d+(\.\d+)?) # Dec angle - sec
|
||||||
\s+ # skip white space
|
\s+ # skip white space
|
||||||
(?P<col8>[-+]?\d+(\.\d+)?) # Stokes I - Flux
|
(?P<col8>[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?) # Stokes I - Flux
|
||||||
\s+ # skip white space
|
\s+ # skip white space
|
||||||
(?P<col9>[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?) # Stokes Q - Flux
|
(?P<col9>[-+]?(\d+(\.\d*)?|\d*\.\d+)([eE][-+]?\d+)?) # Stokes Q - Flux
|
||||||
\s+ # skip white space
|
\s+ # skip white space
|
||||||
|
@ -111,17 +111,35 @@ def annotate_lsm_sky(infilename,clusterfilename,outfilename,clid=None,color='yel
|
||||||
|
|
||||||
SR={} # sources
|
SR={} # sources
|
||||||
for eachline in all:
|
for eachline in all:
|
||||||
v=pp.search(eachline)
|
v=pp1.search(eachline)
|
||||||
if v!= None:
|
if v!= None:
|
||||||
# find RA,DEC (rad) and flux
|
# find RA,DEC (rad) and flux, with proper sign
|
||||||
mra=(float(v.group('col2'))+float(v.group('col3'))/60.0+float(v.group('col4'))/3600.0)*360.0/24.0
|
if (float(v.group('col2'))) >= 0.0:
|
||||||
mdec=(float(v.group('col5'))+float(v.group('col6'))/60.0+float(v.group('col7'))/3600.0)
|
mysign=1.0
|
||||||
|
else:
|
||||||
|
mysign=-1.0
|
||||||
|
mra=mysign*(abs(float(v.group('col2')))+float(v.group('col3'))/60.0+float(v.group('col4'))/3600.0)*360.0/24.0
|
||||||
|
if (float(v.group('col5'))) >= 0.0:
|
||||||
|
mysign=1.0
|
||||||
|
else:
|
||||||
|
mysign=-1.0
|
||||||
|
|
||||||
|
mdec=mysign*(abs(float(v.group('col5')))+float(v.group('col6'))/60.0+float(v.group('col7'))/3600.0)
|
||||||
SR[str(v.group('col1'))]=(mra,mdec,float(v.group('col8')))
|
SR[str(v.group('col1'))]=(mra,mdec,float(v.group('col8')))
|
||||||
else:
|
else:
|
||||||
v=pp1.search(eachline)
|
v=pp.search(eachline)
|
||||||
if v!= None:
|
if v!= None:
|
||||||
mra=(float(v.group('col2'))+float(v.group('col3'))/60.0+float(v.group('col4'))/3600.0)*360.0/24.0
|
if (float(v.group('col2'))) >= 0.0:
|
||||||
mdec=(float(v.group('col5'))+float(v.group('col6'))/60.0+float(v.group('col7'))/3600.0)
|
mysign=1.0
|
||||||
|
else:
|
||||||
|
mysign=-1.0
|
||||||
|
mra=mysign*(abs(float(v.group('col2')))+float(v.group('col3'))/60.0+float(v.group('col4'))/3600.0)*360.0/24.0
|
||||||
|
if (float(v.group('col5'))) >= 0.0:
|
||||||
|
mysign=1.0
|
||||||
|
else:
|
||||||
|
mysign=-1.0
|
||||||
|
|
||||||
|
mdec=mysign*(abs(float(v.group('col5')))+float(v.group('col6'))/60.0+float(v.group('col7'))/3600.0)
|
||||||
SR[str(v.group('col1'))]=(mra,mdec,float(v.group('col8')))
|
SR[str(v.group('col1'))]=(mra,mdec,float(v.group('col8')))
|
||||||
|
|
||||||
print 'Read %d sources'%len(SR)
|
print 'Read %d sources'%len(SR)
|
||||||
|
@ -140,8 +158,8 @@ def annotate_lsm_sky(infilename,clusterfilename,outfilename,clid=None,color='yel
|
||||||
for eachline in all:
|
for eachline in all:
|
||||||
v=pp.search(eachline)
|
v=pp.search(eachline)
|
||||||
if v!= None:
|
if v!= None:
|
||||||
# iterate over list of source names
|
# iterate over list of source names (names can also have a '.')
|
||||||
CL[str(v.group('col1'))]=re.split('\W+',re.sub('\n','',str(v.group('col3'))))
|
CL[str(v.group('col1'))]=re.split('[^a-zA-Z0-9_\.]+',re.sub('\n','',str(v.group('col3'))))
|
||||||
|
|
||||||
print 'Read %d clusters'%len(CL)
|
print 'Read %d clusters'%len(CL)
|
||||||
|
|
||||||
|
|
|
@ -195,9 +195,10 @@ fillup_pixel_hashtablef(long totalrows, long offset, long firstrow, long nrows,
|
||||||
bmaj (rad),bmin (rad) ,pa (rad): PSF parameters from the FITS files: Nfx1 arrays
|
bmaj (rad),bmin (rad) ,pa (rad): PSF parameters from the FITS files: Nfx1 arrays
|
||||||
minpix: footprint of MEAN psf in pixels
|
minpix: footprint of MEAN psf in pixels
|
||||||
ignlist: list of islands to ignore (integer list)
|
ignlist: list of islands to ignore (integer list)
|
||||||
|
donegative: fit -ve pixels instead of positive
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
read_fits_file_f(const char *fitsdir, const char *maskfile, GHashTable **pixtable, int *Nf, double **freqs, double **bmaj, double **bmin, double **pa, int beam_given, double *minpix, GList *ignlist) {
|
read_fits_file_f(const char *fitsdir, const char *maskfile, GHashTable **pixtable, int *Nf, double **freqs, double **bmaj, double **bmin, double **pa, int beam_given, double *minpix, GList *ignlist, int donegative) {
|
||||||
// hash table, list params
|
// hash table, list params
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
GList *li;
|
GList *li;
|
||||||
|
@ -211,12 +212,10 @@ read_fits_file_f(const char *fitsdir, const char *maskfile, GHashTable **pixtabl
|
||||||
int status;
|
int status;
|
||||||
int naxis;
|
int naxis;
|
||||||
int bitpix;
|
int bitpix;
|
||||||
long int new_naxis[4];
|
|
||||||
|
|
||||||
|
|
||||||
int ii,jj,kk;
|
int ii,jj,kk;
|
||||||
int datatype=0;
|
int datatype=0;
|
||||||
long int totalpix;
|
|
||||||
double bscale,bzero;
|
double bscale,bzero;
|
||||||
long int increment[4]={1,1,1,1};
|
long int increment[4]={1,1,1,1};
|
||||||
int null_flag=0;
|
int null_flag=0;
|
||||||
|
@ -324,16 +323,6 @@ read_fits_file_f(const char *fitsdir, const char *maskfile, GHashTable **pixtabl
|
||||||
fbuff.arr_dims.hpix[1]=fbuff.arr_dims.d[1];
|
fbuff.arr_dims.hpix[1]=fbuff.arr_dims.d[1];
|
||||||
fbuff.arr_dims.hpix[2]=1; /* freq axes */
|
fbuff.arr_dims.hpix[2]=1; /* freq axes */
|
||||||
fbuff.arr_dims.hpix[3]=1;
|
fbuff.arr_dims.hpix[3]=1;
|
||||||
/******* create new array **********/
|
|
||||||
new_naxis[0]=fbuff.arr_dims.hpix[0]-fbuff.arr_dims.lpix[0]+1;
|
|
||||||
new_naxis[1]=fbuff.arr_dims.hpix[1]-fbuff.arr_dims.lpix[1]+1;
|
|
||||||
new_naxis[2]=fbuff.arr_dims.hpix[2]-fbuff.arr_dims.lpix[2]+1;
|
|
||||||
new_naxis[3]=fbuff.arr_dims.hpix[3]-fbuff.arr_dims.lpix[3]+1;
|
|
||||||
/* calculate total number of pixels */
|
|
||||||
totalpix=((fbuff.arr_dims.hpix[0]-fbuff.arr_dims.lpix[0]+1)
|
|
||||||
*(fbuff.arr_dims.hpix[1]-fbuff.arr_dims.lpix[1]+1)
|
|
||||||
*(fbuff.arr_dims.hpix[2]-fbuff.arr_dims.lpix[2]+1)
|
|
||||||
*(fbuff.arr_dims.hpix[3]-fbuff.arr_dims.lpix[3]+1));
|
|
||||||
|
|
||||||
/* define input column structure members for the iterator function */
|
/* define input column structure members for the iterator function */
|
||||||
fits_iter_set_file(&cols[0], fbuff.fptr);
|
fits_iter_set_file(&cols[0], fbuff.fptr);
|
||||||
|
@ -654,10 +643,14 @@ printf("freq=%lf\n",(*freqs)[cnt]);
|
||||||
0, &mypix, &null_flag, &status);
|
0, &mypix, &null_flag, &status);
|
||||||
|
|
||||||
/* if pixel has -ve flux, throw it away */
|
/* if pixel has -ve flux, throw it away */
|
||||||
if (mypix<0.0) {
|
if (!donegative && mypix<0.0) {
|
||||||
|
mypix=0.0;
|
||||||
|
} else if (donegative && mypix >0.0) {
|
||||||
|
/* if pixel has +ve flux, throw it away */
|
||||||
mypix=0.0;
|
mypix=0.0;
|
||||||
}
|
}
|
||||||
ppix->sI[cnt]=mypix;
|
/* always use +ve flux for fitting */
|
||||||
|
ppix->sI[cnt]=(donegative?-mypix:mypix);
|
||||||
val->stI+=mypix;
|
val->stI+=mypix;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("[pixel (%d,%d), lm (%lf,%lf), radec (%lf,%lf), sI ( ",ppix->x,ppix->y,ppix->l,ppix->m,ppix->ra,ppix->dec);
|
printf("[pixel (%d,%d), lm (%lf,%lf), radec (%lf,%lf), sI ( ",ppix->x,ppix->y,ppix->l,ppix->m,ppix->ra,ppix->dec);
|
||||||
|
@ -904,6 +897,7 @@ add_guard_pixels_f(GList *pixlist, int Nf, double threshold, hpixelf **parr, int
|
||||||
fprintf(stderr,"%s: %d: no free memory\n",__FILE__,__LINE__);
|
fprintf(stderr,"%s: %d: no free memory\n",__FILE__,__LINE__);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
GList *pixval0=pixval;
|
||||||
ci=1;
|
ci=1;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Before x:");
|
printf("Before x:");
|
||||||
|
@ -915,6 +909,7 @@ add_guard_pixels_f(GList *pixlist, int Nf, double threshold, hpixelf **parr, int
|
||||||
printf("%u ",*xkey);
|
printf("%u ",*xkey);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
g_list_free(pixval0);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -963,6 +958,7 @@ add_guard_pixels_f(GList *pixlist, int Nf, double threshold, hpixelf **parr, int
|
||||||
fprintf(stderr,"%s: %d: no free memory\n",__FILE__,__LINE__);
|
fprintf(stderr,"%s: %d: no free memory\n",__FILE__,__LINE__);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
pixval0=pixval;
|
||||||
ci=1;
|
ci=1;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Before y:");
|
printf("Before y:");
|
||||||
|
@ -974,6 +970,7 @@ add_guard_pixels_f(GList *pixlist, int Nf, double threshold, hpixelf **parr, int
|
||||||
printf("%u ",*xkey);
|
printf("%u ",*xkey);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
g_list_free(pixval0);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -1276,7 +1273,7 @@ process_pixels_f(GHashTable *pixtable, int Nf, double *freqs, double *bmaj, doub
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
write_world_coords_f(const char *imgfile, GHashTable *pixtable, double minpix, int Nf, double *freqs, double *bmaj, double *bmin, double *bpa, double ref_freq, int outformat, double clusterratio, int nclusters, const char *unistr){
|
write_world_coords_f(const char *imgfile, GHashTable *pixtable, double minpix, int Nf, double *freqs, double *bmaj, double *bmin, double *bpa, double ref_freq, int outformat, double clusterratio, int nclusters, const char *unistr,int donegative, int scaleflux){
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
GList *li,*pli;
|
GList *li,*pli;
|
||||||
pixellistf *val;
|
pixellistf *val;
|
||||||
|
@ -1482,11 +1479,13 @@ write_world_coords_f(const char *imgfile, GHashTable *pixtable, double minpix, i
|
||||||
}
|
}
|
||||||
//printf("BEAM %lf,%lf\n",bmaj,bmin);
|
//printf("BEAM %lf,%lf\n",bmaj,bmin);
|
||||||
total_model_flux*=minpix; /* FIXME: no scale change */
|
total_model_flux*=minpix; /* FIXME: no scale change */
|
||||||
fluxscale=val->stI/(total_model_flux);
|
if (scaleflux) {
|
||||||
|
fluxscale=val->stI/(total_model_flux);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
printf("(%d) Total flux/beam=%lf model=%lf scale=%lf\n",*key_,val->stI/minpix,total_model_flux/minpix,fluxscale);
|
printf("(%d) Total flux/beam=%lf model=%lf scale=%lf\n",*key_,val->stI/minpix,total_model_flux/minpix,fluxscale);
|
||||||
/* do not scale up flux */
|
/* do not scale up flux */
|
||||||
fluxscale=1.0;
|
fluxscale=(donegative?-1.0:1.0);
|
||||||
/* try to cluster */
|
/* try to cluster */
|
||||||
cluslist=NULL;
|
cluslist=NULL;
|
||||||
if (clusterratio>0.0) {
|
if (clusterratio>0.0) {
|
||||||
|
@ -1497,7 +1496,7 @@ write_world_coords_f(const char *imgfile, GHashTable *pixtable, double minpix, i
|
||||||
printf("Choosing clustered version ");
|
printf("Choosing clustered version ");
|
||||||
li=cluslist;
|
li=cluslist;
|
||||||
/* if cluster only have 1 source, normalize by peak flux, not the sum */
|
/* if cluster only have 1 source, normalize by peak flux, not the sum */
|
||||||
if (g_list_length(cluslist)==1) {
|
if (g_list_length(cluslist)==1 && scaleflux) {
|
||||||
srcx=li->data;
|
srcx=li->data;
|
||||||
fluxscale=0.0;
|
fluxscale=0.0;
|
||||||
for (ii=0;ii<Nf;++ii) {
|
for (ii=0;ii<Nf;++ii) {
|
||||||
|
|
|
@ -559,7 +559,7 @@ read_fits_file(const char *imgfile, const char *maskfile, GHashTable **pixtable,
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
write_world_coords(const char *imgfile, GHashTable *pixtable, double minpix, double bmaj, double bmin, double bpa, int outformat, double clusterratio, int nclusters,const char *unistr){
|
write_world_coords(const char *imgfile, GHashTable *pixtable, double minpix, double bmaj, double bmin, double bpa, int outformat, double clusterratio, int nclusters,const char *unistr, int scaleflux){
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
GList *li,*pli;
|
GList *li,*pli;
|
||||||
pixellist *val;
|
pixellist *val;
|
||||||
|
@ -722,7 +722,9 @@ write_world_coords(const char *imgfile, GHashTable *pixtable, double minpix, dou
|
||||||
}
|
}
|
||||||
//printf("BEAM %lf,%lf\n",bmaj,bmin);
|
//printf("BEAM %lf,%lf\n",bmaj,bmin);
|
||||||
total_model_flux*=1.1*minpix; /* FIXME: no scale change */
|
total_model_flux*=1.1*minpix; /* FIXME: no scale change */
|
||||||
fluxscale=val->stI/(total_model_flux);
|
if (scaleflux) {
|
||||||
|
fluxscale=val->stI/(total_model_flux);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
printf("(%d) Total flux/beam=%lf model=%lf scale=%lf\n",*key_,val->stI/minpix,total_model_flux/minpix,fluxscale);
|
printf("(%d) Total flux/beam=%lf model=%lf scale=%lf\n",*key_,val->stI/minpix,total_model_flux/minpix,fluxscale);
|
||||||
/* try to cluster */
|
/* try to cluster */
|
||||||
|
@ -736,7 +738,7 @@ write_world_coords(const char *imgfile, GHashTable *pixtable, double minpix, dou
|
||||||
printf("Choosing clustered version ");
|
printf("Choosing clustered version ");
|
||||||
li=cluslist;
|
li=cluslist;
|
||||||
/* if cluster only have 1 source, normalize by peak flux, not the sum */
|
/* if cluster only have 1 source, normalize by peak flux, not the sum */
|
||||||
if (g_list_length(cluslist)==1) {
|
if (g_list_length(cluslist)==1 && scaleflux) {
|
||||||
srcx=li->data;
|
srcx=li->data;
|
||||||
/* peak absolute flux */
|
/* peak absolute flux */
|
||||||
peak_abs=-1e6;
|
peak_abs=-1e6;
|
||||||
|
@ -1077,6 +1079,7 @@ add_guard_pixels(GList *pixlist, double threshold, hpixel **parr, int *n) {
|
||||||
fprintf(stderr,"%s: %d: no free memory\n",__FILE__,__LINE__);
|
fprintf(stderr,"%s: %d: no free memory\n",__FILE__,__LINE__);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
GList *pixval0=pixval;
|
||||||
ci=1;
|
ci=1;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Before x:");
|
printf("Before x:");
|
||||||
|
@ -1088,6 +1091,7 @@ add_guard_pixels(GList *pixlist, double threshold, hpixel **parr, int *n) {
|
||||||
printf("%u ",*xkey);
|
printf("%u ",*xkey);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
g_list_free(pixval0);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -1136,6 +1140,7 @@ add_guard_pixels(GList *pixlist, double threshold, hpixel **parr, int *n) {
|
||||||
fprintf(stderr,"%s: %d: no free memory\n",__FILE__,__LINE__);
|
fprintf(stderr,"%s: %d: no free memory\n",__FILE__,__LINE__);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
pixval0=pixval;
|
||||||
ci=1;
|
ci=1;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Before y:");
|
printf("Before y:");
|
||||||
|
@ -1147,6 +1152,7 @@ add_guard_pixels(GList *pixlist, double threshold, hpixel **parr, int *n) {
|
||||||
printf("%u ",*xkey);
|
printf("%u ",*xkey);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
g_list_free(pixval0);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -285,9 +285,10 @@ filter_pixels(GHashTable *pixtable, double wcutoff);
|
||||||
clusterratio: components closer than clusteratio*(bmaj+bmin)/2 will be merged
|
clusterratio: components closer than clusteratio*(bmaj+bmin)/2 will be merged
|
||||||
nclusters: no of max clusters to cluster the sky
|
nclusters: no of max clusters to cluster the sky
|
||||||
unistr: unique string for source names
|
unistr: unique string for source names
|
||||||
|
scaleflux: if 1, scale model flux to match total flux of island
|
||||||
*/
|
*/
|
||||||
extern int
|
extern int
|
||||||
write_world_coords(const char *imgfile, GHashTable *pixtable, double minpix, double bmaj, double bmin, double bpa, int outformat, double clusterratio, int nclusters,const char *unistr);
|
write_world_coords(const char *imgfile, GHashTable *pixtable, double minpix, double bmaj, double bmin, double bpa, int outformat, double clusterratio, int nclusters,const char *unistr, int scaleflux);
|
||||||
|
|
||||||
/******************************** buildmultisky.c ****************************/
|
/******************************** buildmultisky.c ****************************/
|
||||||
/* FITS reading, multiple files
|
/* FITS reading, multiple files
|
||||||
|
@ -299,9 +300,10 @@ write_world_coords(const char *imgfile, GHashTable *pixtable, double minpix, dou
|
||||||
bmaj (rad),bmin (rad) ,pa (rad): PSF parameters from the FITS files: Nfx1 arrays
|
bmaj (rad),bmin (rad) ,pa (rad): PSF parameters from the FITS files: Nfx1 arrays
|
||||||
minpix: footprint of MEAN psf in pixels
|
minpix: footprint of MEAN psf in pixels
|
||||||
ignlist: list of islands to ignore (integer list)
|
ignlist: list of islands to ignore (integer list)
|
||||||
|
donegative: if >0, fit -ve pixels instead of +ve pixels
|
||||||
*/
|
*/
|
||||||
extern int
|
extern int
|
||||||
read_fits_file_f(const char *fitsdir, const char *maskfile, GHashTable **pixtable, int *Nf, double **freqs, double **bmaj, double **bmin, double **pa, int beam_given, double *minpix, GList *ignlist);
|
read_fits_file_f(const char *fitsdir, const char *maskfile, GHashTable **pixtable, int *Nf, double **freqs, double **bmaj, double **bmin, double **pa, int beam_given, double *minpix, GList *ignlist, int donegative);
|
||||||
|
|
||||||
|
|
||||||
/* calculates the centroids, etc
|
/* calculates the centroids, etc
|
||||||
|
@ -353,9 +355,11 @@ filter_pixels_f(GHashTable *pixtable, double wcutoff);
|
||||||
clusterratio: components closer than clusteratio*(bmaj+bmin)/2 will be merged
|
clusterratio: components closer than clusteratio*(bmaj+bmin)/2 will be merged
|
||||||
nclusters: no of max clusters to cluster the sky
|
nclusters: no of max clusters to cluster the sky
|
||||||
unistr: unique string for source names
|
unistr: unique string for source names
|
||||||
|
donegative: if >0, print -ve flux instead of +ve flux
|
||||||
|
scaleflux: if 1, scale model flux to match total flux of island
|
||||||
*/
|
*/
|
||||||
extern int
|
extern int
|
||||||
write_world_coords_f(const char *imgfile, GHashTable *pixtable, double minpix, int Nf, double *freqs, double *bmaj, double *bmin, double *bpa, double ref_freq, int outformat, double clusterratio, int nclusters, const char *unistr);
|
write_world_coords_f(const char *imgfile, GHashTable *pixtable, double minpix, int Nf, double *freqs, double *bmaj, double *bmin, double *bpa, double ref_freq, int outformat, double clusterratio, int nclusters, const char *unistr,int donegative, int scaleflux);
|
||||||
|
|
||||||
|
|
||||||
/******************************** fitpixels.c *******************************/
|
/******************************** fitpixels.c *******************************/
|
||||||
|
|
|
@ -62,7 +62,7 @@ def convert_sky_bbs_lsm(infilename,outfilename):
|
||||||
\s* # skip white space
|
\s* # skip white space
|
||||||
\, # skip comma
|
\, # skip comma
|
||||||
\s* # skip white space
|
\s* # skip white space
|
||||||
(?P<col10>[-+]?\d+(\.\d+)?) # sI
|
(?P<col10>[-+]?\d+(\.\d+)?([eE](-|\+)(\d+))?) # sI
|
||||||
\s* # skip white space
|
\s* # skip white space
|
||||||
\, # skip comma
|
\, # skip comma
|
||||||
\s* # skip white space
|
\s* # skip white space
|
||||||
|
@ -106,7 +106,7 @@ def convert_sky_bbs_lsm(infilename,outfilename):
|
||||||
\s* # skip white space
|
\s* # skip white space
|
||||||
\, # skip comma
|
\, # skip comma
|
||||||
\s* # skip white space
|
\s* # skip white space
|
||||||
(?P<col10>[-+]?\d+(\.\d+)?) # sI
|
(?P<col10>[-+]?\d+(\.\d+)?([eE](-|\+)(\d+))?) # sI
|
||||||
\s* # skip white space
|
\s* # skip white space
|
||||||
\, # skip comma
|
\, # skip comma
|
||||||
\s* # skip white space
|
\s* # skip white space
|
||||||
|
@ -274,54 +274,9 @@ def convert_sky_bbs_lsm(infilename,outfilename):
|
||||||
outfile.write("## LSM file\n")
|
outfile.write("## LSM file\n")
|
||||||
outfile.write("### Name | RA (hr,min,sec) | DEC (deg,min,sec) | I | Q | U | V | SI | RM | eX | eY | eP | freq0\n")
|
outfile.write("### Name | RA (hr,min,sec) | DEC (deg,min,sec) | I | Q | U | V | SI | RM | eX | eY | eP | freq0\n")
|
||||||
for eachline in all:
|
for eachline in all:
|
||||||
v=pp1.search(eachline)
|
v=pp3.search(eachline)
|
||||||
if v!= None:
|
if v!= None:
|
||||||
strline=str(v.group('col1'))+' '+str(v.group('col4'))+' '+str(v.group('col5'))+' '+str(v.group('col6'))
|
################################################################################
|
||||||
strline=strline+' '+str(v.group('col7'))+' '+str(v.group('col8'))+' '+str(v.group('col9'))+' '+str(v.group('col10'))
|
|
||||||
strline=strline+' '+str(v.group('col11'))+' '+str(v.group('col12'))+' '+str(v.group('col13'))+' '+str(v.group('col15'))
|
|
||||||
strline=strline+' 0 0 0 0 '+str(v.group('col14'))+'\n'
|
|
||||||
outfile.write(strline)
|
|
||||||
else:
|
|
||||||
v=pp.search(eachline)
|
|
||||||
if v!= None:
|
|
||||||
strline=str(v.group('col1'))+' '+str(v.group('col4'))+' '+str(v.group('col5'))+' '+str(v.group('col6'))
|
|
||||||
strline=strline+' '+str(v.group('col7'))+' '+str(v.group('col8'))+' '+str(v.group('col9'))+' '+str(v.group('col10'))
|
|
||||||
strline=strline+' 0 0 0 0 0 0 0 0\n'
|
|
||||||
outfile.write(strline)
|
|
||||||
else:
|
|
||||||
v=pp2.search(eachline)
|
|
||||||
if v!= None:
|
|
||||||
stype=v.group('col2')
|
|
||||||
sname=str(v.group('col1'))
|
|
||||||
bad_source=False
|
|
||||||
if stype=='GAUSSIAN':
|
|
||||||
sname='G'+sname
|
|
||||||
strline=sname+' '+str(v.group('col4'))+' '+str(v.group('col5'))+' '+str(v.group('col6'))
|
|
||||||
strline=strline+' '+str(v.group('col7'))+' '+str(v.group('col8'))+' '+str(v.group('col9'))+' '+str(v.group('col10'))
|
|
||||||
strline=strline+' '+str(v.group('col11'))+' '+str(v.group('col12'))+' '+str(v.group('col13'))+' '+str(v.group('col18'))
|
|
||||||
# need the right conversion factor for Gaussians: Bmaj,Bmin arcsec (rad) diameter, PA (deg) West-> counterclockwise, BDSM its North->counterclockwise
|
|
||||||
if stype=='GAUSSIAN':
|
|
||||||
bmaj=float(v.group('col14'))*(0.5/3600)*math.pi/180.0
|
|
||||||
bmin=float(v.group('col15'))*(0.5/3600)*math.pi/180.0
|
|
||||||
bpa=math.pi/2-(math.pi-float(v.group('col16'))/180.0*math.pi)
|
|
||||||
# also throw away bad Gaussians with zero bmaj or bmin
|
|
||||||
if bmaj<1e-6 or bmin<1e-6:
|
|
||||||
bad_source=True
|
|
||||||
else:
|
|
||||||
bmaj=0.0
|
|
||||||
bmin=0.0
|
|
||||||
bpa=0.0
|
|
||||||
|
|
||||||
strline=strline+' 0 '+str(bmaj)+' '+str(bmin)+' '+str(bpa)
|
|
||||||
strline=strline+' '+str(v.group('col17'))+'\n'
|
|
||||||
# only write good sources
|
|
||||||
if not bad_source:
|
|
||||||
outfile.write(strline)
|
|
||||||
else:
|
|
||||||
print 'Error in source '+strline
|
|
||||||
else:
|
|
||||||
v=pp3.search(eachline)
|
|
||||||
if v!= None:
|
|
||||||
stype=v.group('col2')
|
stype=v.group('col2')
|
||||||
sname=str(v.group('col1'))
|
sname=str(v.group('col1'))
|
||||||
bad_source=False
|
bad_source=False
|
||||||
|
@ -349,35 +304,72 @@ def convert_sky_bbs_lsm(infilename,outfilename):
|
||||||
if not bad_source:
|
if not bad_source:
|
||||||
outfile.write(strline)
|
outfile.write(strline)
|
||||||
else:
|
else:
|
||||||
print 'Error in source '+strline
|
pass
|
||||||
else:
|
#print 'Error in source '+strline
|
||||||
splitfields=eachline.split(',');
|
################################################################################
|
||||||
if len(splitfields)>10:
|
else:
|
||||||
# type
|
v=pp2.search(eachline)
|
||||||
if 'GAUSSIAN' in splitfields[1]:
|
if v!= None:
|
||||||
# read last 3 fields for shape
|
################################################################################
|
||||||
bpa=splitfields.pop()
|
print eachline
|
||||||
bmin=splitfields.pop()
|
stype=v.group('col2')
|
||||||
bmaj=splitfields.pop()
|
sname=str(v.group('col1'))
|
||||||
# convert to right format
|
bad_source=False
|
||||||
bmaj=float(bmaj)*(0.5/3600.0)*math.pi/180.0
|
if stype=='GAUSSIAN':
|
||||||
bmin=float(bmin)*(0.5/3600.0)*math.pi/180.0
|
sname='G'+sname
|
||||||
bpa=math.pi/2-(math.pi-float(bpa)/180.0*math.pi)
|
strline=sname+' '+str(v.group('col4'))+' '+str(v.group('col5'))+' '+str(v.group('col6'))
|
||||||
sname='G'+splitfields[0]
|
strline=strline+' '+str(v.group('col7'))+' '+str(v.group('col8'))+' '+str(v.group('col9'))+' '+str(v.group('col10'))
|
||||||
else:
|
strline=strline+' '+str(v.group('col11'))+' '+str(v.group('col12'))+' '+str(v.group('col13'))+' '+str(v.group('col18'))
|
||||||
sname='P'+splitfields[0]
|
# need the right conversion factor for Gaussians: Bmaj,Bmin arcsec (rad) diameter, PA (deg) West-> counterclockwise, BDSM its North->counterclockwise
|
||||||
bmaj=0
|
if stype=='GAUSSIAN':
|
||||||
bmin=0
|
bmaj=float(v.group('col14'))*(0.5/3600)*math.pi/180.0
|
||||||
bpa=0
|
bmin=float(v.group('col15'))*(0.5/3600)*math.pi/180.0
|
||||||
# read in 2nd,3rd field for RA,DEC
|
bpa=math.pi/2-(math.pi-float(v.group('col16'))/180.0*math.pi)
|
||||||
raline=splitfields[2].split(':')
|
# also throw away bad Gaussians with zero bmaj or bmin
|
||||||
decline=splitfields[3].split('.')
|
if bmaj<1e-6 or bmin<1e-6:
|
||||||
# finally sI
|
bad_source=True
|
||||||
sI=splitfields[4]
|
print "%f %f %f"%(bmaj,bmin,bpa)
|
||||||
strline=sname+' '+str(int(raline[0]))+' '+str(int(raline[1]))+' '+str(float(raline[2]))+' '+str(int(decline[0]))+' '+str(int(decline[1]))+' '+str(float(decline[2]+'.'+decline[3]))+' '+str(float(sI))
|
else:
|
||||||
# add missing fields (Q U V SI RM)
|
bmaj=0.0
|
||||||
strline=strline+' 0 0 0 0 0 '+str(bmaj)+' '+str(bmin)+' '+str(bpa)+' 150e6\n'
|
bmin=0.0
|
||||||
outfile.write(strline)
|
bpa=0.0
|
||||||
|
|
||||||
|
strline=strline+' 0 '+str(bmaj)+' '+str(bmin)+' '+str(bpa)
|
||||||
|
strline=strline+' '+str(v.group('col17'))+'\n'
|
||||||
|
print strline
|
||||||
|
# only write good sources
|
||||||
|
if not bad_source:
|
||||||
|
outfile.write(strline)
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
#print 'Error in source '+strline
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
else:
|
||||||
|
v=pp1.search(eachline)
|
||||||
|
if v!= None:
|
||||||
|
################################################################################
|
||||||
|
strline=str(v.group('col1'))+' '+str(v.group('col4'))+' '+str(v.group('col5'))+' '+str(v.group('col6'))
|
||||||
|
strline=strline+' '+str(v.group('col7'))+' '+str(v.group('col8'))+' '+str(v.group('col9'))+' '+str(v.group('col10'))
|
||||||
|
strline=strline+' '+str(v.group('col11'))+' '+str(v.group('col12'))+' '+str(v.group('col13'))+' '+str(v.group('col15'))
|
||||||
|
strline=strline+' 0 0 0 0 '+str(v.group('col14'))+'\n'
|
||||||
|
outfile.write(strline)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
else:
|
||||||
|
v=pp.search(eachline)
|
||||||
|
if v!= None:
|
||||||
|
################################################################################
|
||||||
|
strline=str(v.group('col1'))+' '+str(v.group('col4'))+' '+str(v.group('col5'))+' '+str(v.group('col6'))
|
||||||
|
strline=strline+' '+str(v.group('col7'))+' '+str(v.group('col8'))+' '+str(v.group('col9'))+' '+str(v.group('col10'))
|
||||||
|
strline=strline+' 0 0 0 0 0 0 0 0\n'
|
||||||
|
outfile.write(strline)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
#print eachline
|
||||||
|
|
||||||
|
|
||||||
def convert_sky_lsm_bbs(infilename,outfilename):
|
def convert_sky_lsm_bbs(infilename,outfilename):
|
||||||
# LSM format
|
# LSM format
|
||||||
|
|
|
@ -115,15 +115,34 @@ def read_lsm_sky(infilename):
|
||||||
for eachline in all:
|
for eachline in all:
|
||||||
v=pp1.search(eachline)
|
v=pp1.search(eachline)
|
||||||
if v!= None:
|
if v!= None:
|
||||||
# find RA,DEC (rad) and flux
|
# find RA,DEC (rad) and flux, with proper sign
|
||||||
mra=(float(v.group('col2'))+float(v.group('col3'))/60.0+float(v.group('col4'))/3600.0)*360.0/24.0*math.pi/180.0
|
if (float(v.group('col2'))) >= 0.0:
|
||||||
mdec=(float(v.group('col5'))+float(v.group('col6'))/60.0+float(v.group('col7'))/3600.0)*math.pi/180.0
|
mysign=1.0
|
||||||
|
else:
|
||||||
|
mysign=-1.0
|
||||||
|
mra=mysign*(abs(float(v.group('col2')))+float(v.group('col3'))/60.0+float(v.group('col4'))/3600.0)*360.0/24.0*math.pi/180.0
|
||||||
|
if (float(v.group('col5'))) >= 0.0:
|
||||||
|
mysign=1.0
|
||||||
|
else:
|
||||||
|
mysign=-1.0
|
||||||
|
mdec=mysign*(abs(float(v.group('col5')))+float(v.group('col6'))/60.0+float(v.group('col7'))/3600.0)*math.pi/180.0
|
||||||
SR[str(v.group('col1'))]=(v.group('col1'),mra,mdec,float(v.group('col8')))
|
SR[str(v.group('col1'))]=(v.group('col1'),mra,mdec,float(v.group('col8')))
|
||||||
else:
|
else:
|
||||||
v=pp.search(eachline)
|
v=pp.search(eachline)
|
||||||
if v!= None:
|
if v!= None:
|
||||||
mra=(float(v.group('col2'))+float(v.group('col3'))/60.0+float(v.group('col4'))/3600.0)*360.0/24.0*math.pi/180.0
|
if (float(v.group('col2'))) >= 0.0:
|
||||||
mdec=(float(v.group('col5'))+float(v.group('col6'))/60.0+float(v.group('col7'))/3600.0)*math.pi/180.0
|
mysign=1.0
|
||||||
|
else:
|
||||||
|
mysign=-1.0
|
||||||
|
|
||||||
|
mra=mysign*(abs(float(v.group('col2')))+float(v.group('col3'))/60.0+float(v.group('col4'))/3600.0)*360.0/24.0*math.pi/180.0
|
||||||
|
if (float(v.group('col5'))) >= 0.0:
|
||||||
|
mysign=1.0
|
||||||
|
else:
|
||||||
|
mysign=-1.0
|
||||||
|
|
||||||
|
|
||||||
|
mdec=mysign*(abs(float(v.group('col5')))+float(v.group('col6'))/60.0+float(v.group('col7'))/3600.0)*math.pi/180.0
|
||||||
SR[str(v.group('col1'))]=(v.group('col1'),mra,mdec,float(v.group('col8')))
|
SR[str(v.group('col1'))]=(v.group('col1'),mra,mdec,float(v.group('col8')))
|
||||||
|
|
||||||
print 'Read %d sources'%len(SR)
|
print 'Read %d sources'%len(SR)
|
||||||
|
|
|
@ -266,7 +266,7 @@ mylm_fit_single_pf_1d(double *p, double *x, int m, int n, void *data) {
|
||||||
|
|
||||||
double
|
double
|
||||||
fit_single_point_f(hpixelf *parr, int npix, int Nf, double *freqs, double *bmaj, double *bmin, double *bpa, double ref_freq, int maxiter, double *ll1, double *mm1, double *sI1, double *sP1){
|
fit_single_point_f(hpixelf *parr, int npix, int Nf, double *freqs, double *bmaj, double *bmin, double *bpa, double ref_freq, int maxiter, double *ll1, double *mm1, double *sI1, double *sP1){
|
||||||
int ci,cj,ret;
|
int ci,cj;
|
||||||
double *p,*p1,*p2, // params m x 1
|
double *p,*p1,*p2, // params m x 1
|
||||||
*x; // observed data n x 1, the image pixel fluxes
|
*x; // observed data n x 1, the image pixel fluxes
|
||||||
int m,n;
|
int m,n;
|
||||||
|
@ -381,12 +381,12 @@ fit_single_point_f(hpixelf *parr, int npix, int Nf, double *freqs, double *bmaj,
|
||||||
|
|
||||||
double aic1,aic2,aic3;
|
double aic1,aic2,aic3;
|
||||||
//ret=dlevmar_dif(mylm_fit_single_sipf, p, x, m, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
//ret=dlevmar_dif(mylm_fit_single_sipf, p, x, m, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_single_sipf, NULL, p, x, m, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
clevmar_der_single_nocuda(mylm_fit_single_sipf, NULL, p, x, m, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
||||||
/* penalize only 1/10 of parameters */
|
/* penalize only 1/10 of parameters */
|
||||||
aic3=0.3+log(info[1]);
|
aic3=0.3+log(info[1]);
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_single_sipf_2d, NULL, p2, x, m-1, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
clevmar_der_single_nocuda(mylm_fit_single_sipf_2d, NULL, p2, x, m-1, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
||||||
aic2=0.2+log(info[1]);
|
aic2=0.2+log(info[1]);
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_single_sipf_1d, NULL, p1, x, m-2, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
clevmar_der_single_nocuda(mylm_fit_single_sipf_1d, NULL, p1, x, m-2, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
||||||
aic1=0.1+log(info[1]);
|
aic1=0.1+log(info[1]);
|
||||||
/* choose one with minimum error */
|
/* choose one with minimum error */
|
||||||
if (aic3<aic2) {
|
if (aic3<aic2) {
|
||||||
|
@ -467,6 +467,8 @@ fit_single_point_f(hpixelf *parr, int npix, int Nf, double *freqs, double *bmaj,
|
||||||
sP1[2]=p[3];
|
sP1[2]=p[3];
|
||||||
|
|
||||||
free(p);
|
free(p);
|
||||||
|
free(p1);
|
||||||
|
free(p2);
|
||||||
free(x);
|
free(x);
|
||||||
|
|
||||||
/* AIC, 4 parms */
|
/* AIC, 4 parms */
|
||||||
|
@ -479,7 +481,7 @@ fit_single_point_f(hpixelf *parr, int npix, int Nf, double *freqs, double *bmaj,
|
||||||
double
|
double
|
||||||
fit_N_point_em_f(hpixelf *parr, int npix, int Nf, double *freqs, double *bmaj, double *bmin, double *bpa, double ref_freq, int maxiter, int max_em_iter, double *ll, double *mm, double *sI, double *sP, int N, int Nh, hpoint *hull){
|
fit_N_point_em_f(hpixelf *parr, int npix, int Nf, double *freqs, double *bmaj, double *bmin, double *bpa, double ref_freq, int maxiter, int max_em_iter, double *ll, double *mm, double *sI, double *sP, int N, int Nh, hpoint *hull){
|
||||||
|
|
||||||
int ci,ret,cj,ck;
|
int ci,cj,ck;
|
||||||
double *p,*p1,*p2, // params m x 1
|
double *p,*p1,*p2, // params m x 1
|
||||||
*x; // observed data n x 1, the image pixel fluxes
|
*x; // observed data n x 1, the image pixel fluxes
|
||||||
double *xdummy, *xsub; //extra arrays
|
double *xdummy, *xsub; //extra arrays
|
||||||
|
@ -647,12 +649,12 @@ fit_N_point_em_f(hpixelf *parr, int npix, int Nf, double *freqs, double *bmaj, d
|
||||||
p[3]=sP[cj+2*N]; p1[3]=p2[3]=0.0;
|
p[3]=sP[cj+2*N]; p1[3]=p2[3]=0.0;
|
||||||
|
|
||||||
//ret=dlevmar_dif(mylm_fit_single_pf, p, xdummy, m, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
//ret=dlevmar_dif(mylm_fit_single_pf, p, xdummy, m, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_single_pf, NULL, p, xdummy, m, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
clevmar_der_single_nocuda(mylm_fit_single_pf, NULL, p, xdummy, m, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
||||||
/* penalize only 1/10 of parameters */
|
/* penalize only 1/10 of parameters */
|
||||||
aic3=0.3+log(info[1]);
|
aic3=0.3+log(info[1]);
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_single_pf_2d, NULL, p2, xdummy, m-1, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
clevmar_der_single_nocuda(mylm_fit_single_pf_2d, NULL, p2, xdummy, m-1, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
||||||
aic2=0.2+log(info[1]);
|
aic2=0.2+log(info[1]);
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_single_pf_1d, NULL, p1, xdummy, m-2, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
clevmar_der_single_nocuda(mylm_fit_single_pf_1d, NULL, p1, xdummy, m-2, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
||||||
aic1=0.1+log(info[1]);
|
aic1=0.1+log(info[1]);
|
||||||
/* choose one with minimum error */
|
/* choose one with minimum error */
|
||||||
if (aic3<aic2) {
|
if (aic3<aic2) {
|
||||||
|
|
|
@ -293,7 +293,7 @@ mylm_fit_single(double *p, double *x, int m, int n, void *data) {
|
||||||
|
|
||||||
double
|
double
|
||||||
fit_single_point(hpixel *parr, int npix, double bmaj, double bmin, double bpa, int maxiter, double *ll1, double *mm1, double *sI1){
|
fit_single_point(hpixel *parr, int npix, double bmaj, double bmin, double bpa, int maxiter, double *ll1, double *mm1, double *sI1){
|
||||||
int ci,ret;
|
int ci;
|
||||||
double *p, // params m x 1
|
double *p, // params m x 1
|
||||||
*x; // observed data n x 1, the image pixel fluxes
|
*x; // observed data n x 1, the image pixel fluxes
|
||||||
int m,n;
|
int m,n;
|
||||||
|
@ -343,8 +343,8 @@ fit_single_point(hpixel *parr, int npix, double bmaj, double bmin, double bpa, i
|
||||||
lmdata.bmin=bmin;
|
lmdata.bmin=bmin;
|
||||||
lmdata.bpa=bpa;
|
lmdata.bpa=bpa;
|
||||||
|
|
||||||
//ret=dlevmar_dif(mylm_fit_single, p, x, 3, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
//dlevmar_dif(mylm_fit_single, p, x, 3, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_single, NULL, p, x, 3, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
clevmar_der_single_nocuda(mylm_fit_single, NULL, p, x, 3, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
print_levmar_info(info[0],info[1],(int)info[5], (int)info[6], (int)info[7], (int)info[8], (int)info[9]);
|
print_levmar_info(info[0],info[1],(int)info[5], (int)info[6], (int)info[7], (int)info[8], (int)info[9]);
|
||||||
|
@ -398,7 +398,7 @@ mylm_fit_N(double *p, double *x, int m, int n, void *data) {
|
||||||
double
|
double
|
||||||
fit_N_point_em(hpixel *parr, int npix, double bmaj, double bmin, double bpa, int maxiter, int max_em_iter, double *ll, double *mm, double *sI, int N, int Nh, hpoint *hull){
|
fit_N_point_em(hpixel *parr, int npix, double bmaj, double bmin, double bpa, int maxiter, int max_em_iter, double *ll, double *mm, double *sI, int N, int Nh, hpoint *hull){
|
||||||
|
|
||||||
int ci,ret,cj,ck;
|
int ci,cj,ck;
|
||||||
double *p, // params m x 1
|
double *p, // params m x 1
|
||||||
*x; // observed data n x 1, the image pixel fluxes
|
*x; // observed data n x 1, the image pixel fluxes
|
||||||
double *xdummy, *xsub; //extra arrays
|
double *xdummy, *xsub; //extra arrays
|
||||||
|
@ -493,17 +493,17 @@ fit_N_point_em(hpixel *parr, int npix, double bmaj, double bmin, double bpa, int
|
||||||
my_daxpy(n, xsub, -1.0, xdummy);
|
my_daxpy(n, xsub, -1.0, xdummy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//ret=dlevmar_dif(mylm_fit_single, &p[3*cj], xdummy, 3, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
//dlevmar_dif(mylm_fit_single, &p[3*cj], xdummy, 3, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
||||||
//ret=clevmar_der_single_nocuda(mylm_fit_single, NULL, &p[3*cj], xdummy, 3, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
//clevmar_der_single_nocuda(mylm_fit_single, NULL, &p[3*cj], xdummy, 3, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
||||||
// weighted least squares estimation
|
// weighted least squares estimation
|
||||||
ret=dweighted_ls_fit(&p[3*cj], xdummy, 3, n, maxiter, (void*)&lmdata);
|
dweighted_ls_fit(&p[3*cj], xdummy, 3, n, maxiter, (void*)&lmdata);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* final global fit */
|
/* final global fit */
|
||||||
//ret=dlevmar_dif(mylm_fit_N, p, x, m, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
//dlevmar_dif(mylm_fit_N, p, x, m, n, maxiter, opts, info, NULL, NULL, (void*)&lmdata); // no Jacobian
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_N, NULL, p, x, m, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
clevmar_der_single_nocuda(mylm_fit_N, NULL, p, x, m, n, maxiter, opts, info, 2, (void*)&lmdata); // no Jacobian
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
print_levmar_info(info[0],info[1],(int)info[5], (int)info[6], (int)info[7], (int)info[8], (int)info[9]);
|
print_levmar_info(info[0],info[1],(int)info[5], (int)info[6], (int)info[7], (int)info[8], (int)info[9]);
|
||||||
printf("Levenberg-Marquardt returned %d in %g iter, reason %g\nSolution: ", ret, info[5], info[6]);
|
printf("Levenberg-Marquardt returned %d in %g iter, reason %g\nSolution: ", ret, info[5], info[6]);
|
||||||
|
|
|
@ -34,7 +34,7 @@ print_help(void) {
|
||||||
fprintf(stderr,"PSF options\n-a : major axis width (arcsec): default 10\n");
|
fprintf(stderr,"PSF options\n-a : major axis width (arcsec): default 10\n");
|
||||||
fprintf(stderr,"-b : minor axis width (arcsec): default 10\n");
|
fprintf(stderr,"-b : minor axis width (arcsec): default 10\n");
|
||||||
fprintf(stderr,"-p : position angle, measured from positive y axis, counter clockwise (deg): default 0\n");
|
fprintf(stderr,"-p : position angle, measured from positive y axis, counter clockwise (deg): default 0\n");
|
||||||
fprintf(stderr,"If NO PSF is given, it will be read from the FITS file\n");
|
fprintf(stderr,"If NO PSF is given, it will be read from the FITS file\n\n");
|
||||||
fprintf(stderr,"-o format: output format (0: BBS, 1: LSM (with 3 order spec.idx) 2: (l,m) positions) default BBS\n");
|
fprintf(stderr,"-o format: output format (0: BBS, 1: LSM (with 3 order spec.idx) 2: (l,m) positions) default BBS\n");
|
||||||
fprintf(stderr,"-g ignorelist: text file of island numbers to ignore: default none\n");
|
fprintf(stderr,"-g ignorelist: text file of island numbers to ignore: default none\n");
|
||||||
fprintf(stderr,"-w cutoff: cutoff value to detect possible sidelobes: defalut 0\n");
|
fprintf(stderr,"-w cutoff: cutoff value to detect possible sidelobes: defalut 0\n");
|
||||||
|
@ -42,13 +42,15 @@ print_help(void) {
|
||||||
fprintf(stderr,"-l maxfits: limit the number of attempted fits to this value: default 10\n");
|
fprintf(stderr,"-l maxfits: limit the number of attempted fits to this value: default 10\n");
|
||||||
fprintf(stderr,"-k clusters: max no of clusters to cluster the sky\n(-ve clusters for hierarchical, 0 for no clustering)\n");
|
fprintf(stderr,"-k clusters: max no of clusters to cluster the sky\n(-ve clusters for hierarchical, 0 for no clustering)\n");
|
||||||
fprintf(stderr,"-s string: additional unique string to use with source names: default nothing\n");
|
fprintf(stderr,"-s string: additional unique string to use with source names: default nothing\n");
|
||||||
|
fprintf(stderr,"-N : if used, fit negative flux instead of positive\n");
|
||||||
|
fprintf(stderr,"-q : if 1, scale model fluxes to match the total flux of detected island: default 0\n");
|
||||||
fprintf(stderr,"Report bugs to <sarod@users.sf.net>\n");
|
fprintf(stderr,"Report bugs to <sarod@users.sf.net>\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
print_copyright(void) {
|
print_copyright(void) {
|
||||||
printf("Buildsky 0.0.9 (C) 2011-2016 Sarod Yatawatta\n");
|
printf("Buildsky 0.1.0 (C) 2011-2016 Sarod Yatawatta\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,6 +70,7 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
double threshold=0.0;
|
double threshold=0.0;
|
||||||
int use_em=1;
|
int use_em=1;
|
||||||
|
int donegative=0;
|
||||||
int maxiter=1000;
|
int maxiter=1000;
|
||||||
int maxemiter=4;
|
int maxemiter=4;
|
||||||
int outformat=0; /* 0: BBS, 1: LSM */
|
int outformat=0; /* 0: BBS, 1: LSM */
|
||||||
|
@ -85,6 +88,8 @@ int main(int argc, char **argv) {
|
||||||
int nclusters=0;
|
int nclusters=0;
|
||||||
double wcutoff=0.0;
|
double wcutoff=0.0;
|
||||||
|
|
||||||
|
int scaleflux=0; /* if 1, scale flux to match the total flux of island */
|
||||||
|
|
||||||
/* for multiple FITS files */
|
/* for multiple FITS files */
|
||||||
int Nf=0;
|
int Nf=0;
|
||||||
double *freqs,*bmajs,*bmins,*bpas;
|
double *freqs,*bmajs,*bmins,*bpas;
|
||||||
|
@ -97,7 +102,7 @@ int main(int argc, char **argv) {
|
||||||
print_help();
|
print_help();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
while ((c=getopt(argc,argv,"f:m:t:i:e:a:b:o:p:l:g:c:s:d:k:w:nh"))!=-1) {
|
while ((c=getopt(argc,argv,"a:b:c:d:e:f:g:i:k:l:m:o:p:q:s:t:w:Nnh"))!=-1) {
|
||||||
switch(c) {
|
switch(c) {
|
||||||
case 'f':
|
case 'f':
|
||||||
if (optarg) {
|
if (optarg) {
|
||||||
|
@ -190,6 +195,12 @@ int main(int argc, char **argv) {
|
||||||
if (endptr==optarg) maxemiter=1000;
|
if (endptr==optarg) maxemiter=1000;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'q':
|
||||||
|
if (optarg) {
|
||||||
|
scaleflux=(int)strtol(optarg,&endptr,base);
|
||||||
|
if (endptr==optarg) scaleflux=0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'a':
|
case 'a':
|
||||||
if (optarg) {
|
if (optarg) {
|
||||||
bmaj=strtod(optarg,0);
|
bmaj=strtod(optarg,0);
|
||||||
|
@ -226,6 +237,9 @@ int main(int argc, char **argv) {
|
||||||
case 'n':
|
case 'n':
|
||||||
use_em=0;
|
use_em=0;
|
||||||
break;
|
break;
|
||||||
|
case 'N':
|
||||||
|
donegative=1;
|
||||||
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
if (optarg) {
|
if (optarg) {
|
||||||
wcutoff=strtod(optarg,0);
|
wcutoff=strtod(optarg,0);
|
||||||
|
@ -279,7 +293,7 @@ int main(int argc, char **argv) {
|
||||||
read_fits_file(ffile,mfile, &pixtable,&bmaj,&bmin,&bpa, beam_given, &minpix, ignlist);
|
read_fits_file(ffile,mfile, &pixtable,&bmaj,&bmin,&bpa, beam_given, &minpix, ignlist);
|
||||||
} else {
|
} else {
|
||||||
freqs=bmajs=bmins=bpas=0;
|
freqs=bmajs=bmins=bpas=0;
|
||||||
read_fits_file_f(ffile,mfile, &pixtable,&Nf,&freqs,&bmajs,&bmins,&bpas, beam_given, &minpix, ignlist);
|
read_fits_file_f(ffile,mfile, &pixtable,&Nf,&freqs,&bmajs,&bmins,&bpas, beam_given, &minpix, ignlist,donegative);
|
||||||
}
|
}
|
||||||
/* dont need ignore list anymore */
|
/* dont need ignore list anymore */
|
||||||
for(ignli=ignlist; ignli!=NULL; ignli=g_list_next(ignli)) {
|
for(ignli=ignlist; ignli!=NULL; ignli=g_list_next(ignli)) {
|
||||||
|
@ -300,10 +314,10 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
if (!multifits) {
|
if (!multifits) {
|
||||||
process_pixels(pixtable,bmaj,bmin,bpa,minpix,threshold,maxiter,maxemiter,use_em,maxfits);
|
process_pixels(pixtable,bmaj,bmin,bpa,minpix,threshold,maxiter,maxemiter,use_em,maxfits);
|
||||||
write_world_coords(ffile,pixtable,minpix,bmaj,bmin,bpa,outformat,clusterratio,nclusters,unistr);
|
write_world_coords(ffile,pixtable,minpix,bmaj,bmin,bpa,outformat,clusterratio,nclusters,unistr,scaleflux);
|
||||||
} else {
|
} else {
|
||||||
process_pixels_f(pixtable,Nf,freqs,bmajs,bmins,bpas,&ref_freq,minpix,threshold,maxiter,maxemiter,use_em,maxfits);
|
process_pixels_f(pixtable,Nf,freqs,bmajs,bmins,bpas,&ref_freq,minpix,threshold,maxiter,maxemiter,use_em,maxfits);
|
||||||
write_world_coords_f(mfile,pixtable,minpix,Nf,freqs,bmajs,bmins,bpas,ref_freq,outformat,clusterratio,nclusters,unistr);
|
write_world_coords_f(mfile,pixtable,minpix,Nf,freqs,bmajs,bmins,bpas,ref_freq,outformat,clusterratio,nclusters,unistr,donegative, scaleflux);
|
||||||
free(freqs);
|
free(freqs);
|
||||||
free(bmajs);
|
free(bmajs);
|
||||||
free(bmins);
|
free(bmins);
|
||||||
|
|
|
@ -99,7 +99,7 @@ fit_two_to_one(GList *pixlist, double bmaj, double bmin, double bpa, double *lva
|
||||||
hpixel *ppix;
|
hpixel *ppix;
|
||||||
double *pixell,*pixelm,*p,*x,*x1;
|
double *pixell,*pixelm,*p,*x,*x1;
|
||||||
GList *pli;
|
GList *pli;
|
||||||
int ci,ret;
|
int ci;
|
||||||
/* setup levmar */
|
/* setup levmar */
|
||||||
double opts[CLM_OPTS_SZ], info[CLM_INFO_SZ];
|
double opts[CLM_OPTS_SZ], info[CLM_INFO_SZ];
|
||||||
opts[0]=CLM_INIT_MU; opts[1]=1E-15; opts[2]=1E-15; opts[3]=1E-15;
|
opts[0]=CLM_INIT_MU; opts[1]=1E-15; opts[2]=1E-15; opts[3]=1E-15;
|
||||||
|
@ -177,7 +177,7 @@ fit_two_to_one(GList *pixlist, double bmaj, double bmin, double bpa, double *lva
|
||||||
printf("Initial merge val (%lf)\n",p[0]);
|
printf("Initial merge val (%lf)\n",p[0]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_single_pfmult, NULL, p, x, m, n, maxiter, opts, info, 2, (void*)&lmdata);
|
clevmar_der_single_nocuda(mylm_fit_single_pfmult, NULL, p, x, m, n, maxiter, opts, info, 2, (void*)&lmdata);
|
||||||
|
|
||||||
/* output */
|
/* output */
|
||||||
*sI=p[0];
|
*sI=p[0];
|
||||||
|
@ -252,7 +252,7 @@ fit_two_to_one_f(GList *pixlist, int Nf, double *freqs, double *bmaj, double *bm
|
||||||
hpixelf *ppix;
|
hpixelf *ppix;
|
||||||
double *pixell,*pixelm,*p,*x,*x1;
|
double *pixell,*pixelm,*p,*x,*x1;
|
||||||
GList *pli;
|
GList *pli;
|
||||||
int ci,ret;
|
int ci;
|
||||||
/* setup levmar */
|
/* setup levmar */
|
||||||
double opts[CLM_OPTS_SZ], info[CLM_INFO_SZ];
|
double opts[CLM_OPTS_SZ], info[CLM_INFO_SZ];
|
||||||
opts[0]=CLM_INIT_MU; opts[1]=1E-15; opts[2]=1E-15; opts[3]=1E-15;
|
opts[0]=CLM_INIT_MU; opts[1]=1E-15; opts[2]=1E-15; opts[3]=1E-15;
|
||||||
|
@ -338,7 +338,7 @@ fit_two_to_one_f(GList *pixlist, int Nf, double *freqs, double *bmaj, double *bm
|
||||||
printf("Initial merge val (%lf,%lf)\n",p[0],p[1]);
|
printf("Initial merge val (%lf,%lf)\n",p[0],p[1]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ret=clevmar_der_single_nocuda(mylm_fit_single_sipfmult, NULL, p, x, m, n, maxiter, opts, info, 2, (void*)&lmdata);
|
clevmar_der_single_nocuda(mylm_fit_single_sipfmult, NULL, p, x, m, n, maxiter, opts, info, 2, (void*)&lmdata);
|
||||||
|
|
||||||
/* output */
|
/* output */
|
||||||
*sI=p[0];
|
*sI=p[0];
|
||||||
|
|
Loading…
Reference in New Issue