用CUPID里的FINDCLIMPS拟合分子云中的团块的时候发现拟合出了很多虚假的团块,在光谱里看的时候并没有相应的高斯成分。所以决定看看源代码,做点笔记。CUPID乃至整个Starlink的源代码都可以在此获得:
http://starlink.jach.hawaii.edu/git/?p=starlink.git;a=tree;f=applications/cupid/cupidsub;h=b3b3e373563171513790271b656ad6ecb64ed679;hb=HEAD 我主要用到的是Gaussclump的方法。
首先需要明确的是拟合函数为何,虽然高斯函数的性质大同小异,
但是一些系数还是会很大程度地影响拟合的结果以及最后的参数,
因为我需要的是团块尺度之类的值,系数差一倍,
最终的结果就差不少了。
从cupidgcmodel.c(cupid就是CUPID,
GC指的是Gaussclump)中可以看到以下语句(
这里以倒序查看)返回值是ret
return ret;
之前一句提到ret是
m = peak*expv + par[ 1 ];
……
ret=m;
其中expv因子是指数函数,也就是高斯函数的主要部分。
程序的前部提过
expv = exp( -K*em );这里的K在最前面定义过
/* 4*ln( 2.0 ) */
#define K 2.772588722239781
表明这里的宽度是半高全宽(FWHM),
而em就是通常的那个平方项,程序中有几种选项,以一维为例
if( ndim == 1 ) {
em = x0_off*x0_off/dx0_sq;
……
其中x0_off = x[ 0 ] - par[ 2 ];要说这par数组,还是看一下程序说明
* par[0]: Intrinsic peak intensity of clump ("a0" in Stutski & Gusten)
* par[1]: Constant intensity offset ("b0" in Stutski & Gusten)
* par[2]: Model centre on axis 0 ("x1_0" in Stutski & Gusten)
* par[3]: Intrinsic FWHM on axis 0 ("D_xi_1" in Stutski & Gusten)
* par[4]: Model centre on axis 1 ("x2_0" in Stutski & Gusten)
* par[5]: Intrinsic FWHM on axis 1 ("D_xi_2" in Stutski & Gusten)
* par[6]: Spatial orientation angle ("phi" in Stutski & Gusten)
* In rads, positive from +ve GRID1 axis to +ve GRID2 axis.
* par[7]: Model centre on velocity axis ("v_0" in Stutski & Gusten)
* par[8]: Intrinsic FWHM on velocity axis ("D_xi_v" in Stutski &
*
Gusten)
* par[9]: Axis 0 of internal velocity gradient vector ("alpha_0"
* in Stutski & Gusten), in vel. pixels per spatial pixel.
* par[10]: Axis 1 of internal velocity gradient vector ("alpha_1"
* in Stutski & Gusten), in vel. pixels per spatial pixel.
也就是说par[2]就是通常高斯函数里的x0。这里的dx0_
sq可在前面找到,就是高斯函数的宽度的平方,
这里把波束宽度和本征宽度都考虑上了,
最后的宽度为二者的平方和。
t = par[ 3 ]*par[ 3 ];
dx0_sq = cupidGC.beam_sq + t;
现在分析 ret = ret*peak*expv;中的peak,程序前半有
peak = par[ 0 ]*peakfactor;
大致意思是团块本征的峰值亮度由于仪器的波束的平滑会变小,
这个衰减因子可以从以下语句看出来,
就是本征宽度和总宽度的比值(
如果是多维的就是每一维上这个因子的积)。
peakfactor = sqrt( peakfactor_sq );
……
peakfactor_sq = t/dx0_sq;
至此函数形式分析得差不多,这个函数还有其它分支,
是计算这个模型函数的导数的,这里不提。所以函数形式应该为(
一维为例)
注意,这里的宽度
是半高全宽(FWHM),
和通常高斯函数中宽度
的关系为
除此之外需要注意的是作为拟合参数的峰值par[0]在写成函数的时候是被降低的,所以拟合出来的团块的峰值可能比数据中的峰值高。本征的宽度par[3]、par[5]和par[8]是被展宽的,所以拟合结果可能比数据中的宽度小。这些都需要看输出程序中相应的选项。