|  | 
 
| 本帖最后由 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;
 运行完后:
 
 
 
 
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册  |