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