核数据处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
核数据处理
一、实习目的
1、掌握图形程序的编写技能与技巧;
2、掌握文件读写函数的使用;
3、理解整个谱数据处理的流程;
4、进一步掌握对常用核数据处理的基本方法
5、掌握软件设计所需的基本动手能力,解决实际问题。
二、实习内容
1、读谱数据文件、保存光滑后的谱数据文件,文件名可选
2、显示谱数据,各算法要以函数方式实现
3、显示分析谱段范围内,寻得的各峰位道址、能量、对应的元素名称
4、显示寻峰及峰面积计算结果
5、光滑、寻峰宽度2k+1应在5、7之间可选,讨论最佳参数。
三、需求分析
1、输入、输出的内容和形式
(1)输入:
a、打开应用软件,弹出要求输入谱数据文件名对话框。
b、需要刻度谱线时,分别按e键和c键输入元素文件名和能量刻度文件名。
c、人机交互时,采用键盘按键方式将命令传给程序(具体操作:在运行程序后按h键
即可弹出操作说明对话框)。
(2)输出:
a、屏幕显示谱线;光标位置及光标处的道址、能量和计数;屏幕上方显示“Software
instructions please input 'h'”。
b、当谱线被刻度好后,按n键会弹出相应元素对应的能量、面积和净峰面积。
c、按h键弹出应用程序操作说明对话框。
2、预期功能、界面
(1)显示输入谱文件名对话框;在文件名输入正确时,能够正确读取文件中的数据。
(2)正确显示谱线以及在刻度后显示道址、能量及计数。
(3)显示相应元素对应的能量、面积和净峰面积对话框。
(4)达到谱数据光滑的效果。
(5)采用键盘输入命令,使屏幕:
a、即时显示光标的位置以及对应的道址、能量及计数。
b、即时显示不同幅度放大倍数时的谱线形状。
c、即时显示不同光滑次数处理后的谱线微细结构(只有在幅度放大倍数很大时光滑效
果才明显)。
d、即时显示谱线的点和线的切换。
3、测试数据
(1)文件读入是否正确。
(2)谱数据段的选择功能是否实现。
(3)move和curse的边界值是否设置妥当。
(5)道址和能量的换算是否正确。 (6)寻峰是否正确。
(7)最小能量差的计算是否正确。 (8)根据能量查找核素是否正确。 (9)净峰面积的计算是否有缺陷。
(10)检查谱线幅度放大时是否会出现异常。 四、概要设计
1、开发工具: Turbo C 。
2、主要算法: (1)、重心法:选取加权因子和归一化因子,使光滑后的数据成为原来数据的重心。常见的有5点和7点光滑。
5点法: )464(16
1
2112++--++++=
i i i i i i data data data data data data 7点法:
)61520156(64
1
321123+++---++++++=i i i i i i i i data data data data data data data data (2)、简单比较法(极值定峰法、IF 函数找峰法):
a 、峰的定义:满足m i i i m i data data k data data +->-<,然后在data i-m 至data i+m
中找最大值道。
b 、常用的:5点、7点极大值法。
c 、一般,用R=N 0/N b ≥R c 确定峰是否有意义。N 0为净峰幅度与基底之和,N b 为基底计数,R c 为设定值。
d 、k :找峰阈值,根据高斯统计概率分布,一般k 取值:1—1.5。
峰的左右边界道i-L 和i+R 的确定:
r
i r i m r i l i l i m l i data k data data data k data data ++++----+≥+≥)()(
(3)、线性本底法: 计算总面积:∑==
R
L
i i
data S
计算本底面积:2
)
1(*)(+-+=L R data data B R L 计算净峰面积:B S A -= 3、主程序的流程及各模块之间的关系。
主程序流程:
五、详细设计
1、函数及变量定义:
#define MAX_ELEMENT_NUM 20
#define ScreenHeight 480
#define ScreenWidth 640
#define LineHeight 370
#define LineWidth 500
#define LineLeftX ((ScreenWidth-LineWidth)/2)
#define LineRightX (LineLeftX+LineWidth)
#define LineTopY 40
#define LineBottomY (LineTopY+LineHeight)
FILE* dataFile;
int gdriver,gmode;
unsigned long dataTable[1024],maxVal;
int DisPos[500];/*实际显示的数据*/
int OriPos[500];/*未处理前的数据*/
int cursorX;
float zoom;
unsigned int cursorChannel;
unsigned char dispLine;
unsigned char energyMarked,elementLoaded,SpectrumLoaded,peakSeeked,cursorPeakseeked;
int smoothLevel = 1,peakSeekLevel = 9;
float a,b;/*能量刻度方程*/
char element[MAX_ELEMENT_NUM][2];
unsigned char numOfElement,cursorElement;
float elementEnergy[MAX_ELEMENT_NUM];
unsigned int peakBound[MAX_ELEMENT_NUM][2];
unsigned long elementArea[MAX_ELEMENT_NUM],elementNetArea[MAX_ELEMENT_NUM];
unsigned int cursorPeakBoundLeft,cursorPeakBoundRight;
unsigned long cursorPeakArea,cursorPeakNetArea;
2、程序中用到的重要数据
(1)cursorEnergy = a + b*cursorChannel;
Channel:%4d E nergy:%7.4fMev Count:%-6lu" cursorChannel,cursorEnergy,cursorCount;
(2)Channe =(energy-a)/b;
(3)cursorChannel = findPeakByChannel(cursorChannel);
cursorX = cursorChannel - 300 + LineLeftX;
cursorPeakBoundLeft = cursorLb;
cursorPeakBoundRight = cursorRb;
cursorPeakArea = cursorArea;
cursorPeakNetArea = cursorNetArea;
cursorPeakseeked = 1;
peakSeeked = 0;