核数据处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档