数据处理与能谱分析
maxi=j;
}
m_e3=maxi;
UpdateData(false);
}
}
}
newx=maxi*rect1.Width()/2048;
CDC *pDC =pWnd->GetDC();
CPen lpen(PS_SOLID,1,RGB(0,0,255));
CPen* pOldPen = pDC->SelectObject(&lpen);
制作EXE软件来对数据进行图谱显示:
在相应的操作界面放置相应的显示框图和对应的按钮,如下图
然后给框图和按钮赋地址,并添加相应的变量和相应函数。最后组建编译运行。软件运行后先点击数据读写按钮在点击原始图谱按钮最后点击五点平滑按钮就得到了该物质数据图谱。如下图所示:
注:横坐标为道址、纵坐标为计数率
添加相应的数据输出框和按钮如:峰值、道值、面积。最后再添加相应的响应函数,再编译运行。得到如下图所示的图谱:
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
max=data_ph[0];
for(int i=1;i<2048;i++)
{if (data_ph[i]>max )
max=data_ph[i];
}
for ( i = 0;i<2048;i++)
}
fclose(fp);
}
原始图谱响应函数:
void CShiyanDlg::OnYuantu()
{
// TODO: Add your control notification handler code here
double xViewport,yViewport;
int max;
CWnd *pWnd=GetDlgItem(IDC_P1);
}
void CShiyanDlg::OnZuodaozhi()
{
// TODO: Add your control notification handler code here
CRect rect1;
int chx;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
至此我们利用C语言对数据处理和能谱分析已经结束,最后我们在根据图谱的形状、峰值、道值以及各个部分的面积来确定物质衰变的性质和物质本身的性质,最终来确定放射性物质的用途。
附件:部分响应函数
数据读写程序:
void CShiyanDlg::OnReadfile()
{
// TODO: Add your control notification handler code here
{
// TODO: Add your message handler code here and/or call default
CRect rect1;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
ScreenToClient(&rect1);
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
数据处理与能谱分析
随着计算机技术的发展,利用计算机处理实验数据也越来越常见,随之如来就产生了许多的软件如:Matlab、Excel、CAD等等,但一般这些软件在处理物质放射性衰变时都比较繁琐,因此在处理放射性物质衰变时的数据时,就必须自己依照其规律制作数据处理软件来探究该物质的各种性质,从而来确定该物质的类型以及其运用。
lpen.DeleteObject();
x_old=point.x;
y_old=point.y;}
else
LButton_Clicked=0;
x_old=point.x;
y_old=point.y;
}
CDialog::OnLButtonUp(nFlags, point);
}
void CShiyanDlg::OnButton1()
printf("%d %f\n",i+1,data_ph[i]);
}
fclose(fp);
if((fp=fopen("out.txt","w"))==NULL)
{
printf("file open error.\n");
exit(0);
}
for(i=0;i<2048;i++)
{
fprintf(fp,"%d %f\n",i+1,data_ph[i]);
ScreenToClient(&rect1);
chx=2048*(x_old-rect1.left)/rect1.Width();
//scale=25.4*10/pDC->GetDeviceCaps(LOGPIXELSX);
pDC->MoveTo(newx,0);
pDC->LineTo(newx,rect1.Height());
lpen.DeleteObject();
}
RButton_Clicked=0;
LButton_Clicked=0;
FILE *fp;
int datanum=0;
int i;
int data1,data2;
if((fp=fopen("090623.txt","r"))==NULL)
{ printf("Cannot open the file.\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%d %d",&data1,&data2);
CDC *pDC =pWnd->GetDC();
if (rect1.PtInRect(point))
{pDC->MoveTo(point.x-rect1.left,0);
pDC->LineTo(point.x-rect1.left,rect1.Height());
if(LButton_Clicked==0)
pDC->SetPixel(xViewport,rect.Height()-yViewport-1,RGB(255,0,0));
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
}
MemBitmap.DeleteObject();
CDC *pDC =pWnd->GetDC();
pDC->SetMapMode(MM_ANISOTROPIC);
CRect rect;
double scale;
GetDlgItem(IDC_P1)->GetWindowRect(&rect);
scale=25.4*10/pDC->GetDeviceCaps(LOGPIXELSX);
MemDC.DeleteDC();
pDC->DeleteDC();
}
五点平滑图谱响应函数:
void CShiyanDlg::OnWudianpinghua()
{
// TODO: Add your control notification handler code here
double xViewport,yViewport;
{
// TODO: Add your control notification handler code here
LButton_Clicked=1;
left_flag=1;
Left_x=x_old;
Left_y=y_old;
}
void CShiyanDlg::OnButton2()
{
// TODO: Add your control notification handler code here
data[datanum++]=data2;
fscanf(fp,"\n");
}
for(i=0;i<2048;i++)
{
if( i<2||i>2045)
data_ph[i]=data[i];
else
data_ph[i]=(data[i-2]+4*data[i-1]+6*data[i]+4*data[i+1]+data[i+2])*1.0/16.0;
}
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
pDC->DeleteDC();
}
道值寻峰函数:
void CShiyanDlg::OnLButtonUp(UINT nFlags, CPoint point)
for(i=xl+2;i<xr-1;i++)