|
本帖最后由 casjxm 于 2025-4-5 23:22 编辑
单晶衍射测试的获得的数据精度较高,一些有缺陷或无序的的晶体也会产生明显的散射信息,这些散射信息可用于缺陷结构的解析,但与一维散射数据(如PDF等)不同的是,单晶衍射测试获得的数据为二维照片或重构出来的三维ewald倒空间数据,下面介绍如何从理学CrysAlisPro(CAP)软件产生的三维ewa文件中读取散射数据。
CAP有个功能是Ewald3D,包含有完整的3D bragg与散射信息,保存在Ewald3D文件夹中ewa格式的文件中,ewa文件为非标准的三维格点数据文件,而且是二进制文件,因此有必要理解该文件的文件头与数据格式。ewa文件中的数据是直角坐标系表示的强度信息,因此需要通过取向矩阵转换成倒格子晶体学坐标系下的强度数据。
晶体学坐标与直角坐标的转换参考:https://www.matstr.com/forum.php ... 1&extra=#pid880
Ewald3D显示:
ewa文件头部字节说明:
每个Voxel数据占9个字节,前4个xyz, 接着一个浮点数(4个字节)和nruns/8字节的整数
4个字节表示的xyz坐标结构:
struct _EWACOOR
{
unsigned long x : 10;
unsigned long y : 10;
unsigned long z : 10;
unsigned long ex : 2;
};
根据如上信息把ewa数据读入倒ewa-data.txt文件中。
散射数据读出来后,发现坐标轴与倒格子基矢不重合,这是因为ewa数据是在直角坐标系中表示的缘故。
function ewa = read_ewa_data(filename)
% 打开文件并检查是否成功
fid = fopen(filename, 'r');
if fid == -1
error('无法打开文件: %s', filename);
end
% 定义数据格式模板(前三列整数,第四列浮点)
formatSpec = '%d %d %d %f';
% 读取所有数据(自动处理多行)
data = textscan(fid, formatSpec, 'Delimiter', ' ', 'CollectOutput', true);
% 关闭文件句柄
fclose(fid);
% 提取数据并转换类型
raw_data = data{1}; % 提取数值矩阵
intensity=data{2};
ewa=[raw_data,intensity];
end
使用方法:
a=read_ewa_data('ewa-data.txt');
c=[];
for i=1:4600538
if(a(i,1)==430)
c=[c;a(i,:)];
end
end
x = c(:,2);
y = c(:,3);
intensity = c(:,4);
% 创建图形窗口
figure('Position',[100,100,800,600]);
% 绘制散点图(颜色映射强度值)
scatter(x, y, 50, intensity, 'filled', 'MarkerFaceAlpha', 0.7);
% 颜色映射配置
colormap(jet);
colorbar('Ticks',[min(intensity), max(intensity)],...
'TickLabels',{'Min Intensity','Max Intensity'});
% 图形修饰
xlabel('X Coordinate (μm)','FontSize',12);
ylabel('Y Coordinate (μm)','FontSize',12);
title('2D Intensity Distribution','FontSize',14);
grid on;
axis equal;
运行完后:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|