MaterialStudio是一款强大的第一性原理计算软件,可以模拟计算很多物质的性质。其中的Caste主要用来计算电子结构,如能带,态密度,光学性质等。但是MS自带的图像管理器功能较少,不能很好的进行标记,调节画幅。下面介绍如何用Matlab来处理MS的数据。
工具/原料
Material Studio 8.0 及以上
Matlab R2014a 及以上
导出数据
1、首先把数据从MS中导出,可以选则“File|Export”,也可以直接在图像上右键,点击Copy,再在记事本或文档中Paste粘贴
数据格式
1、观察从MS中导出的数据格式,一般是.csv文件,可以用记事本或者其它的文本编辑器打开。本文中所举的例子是能带图。有两列数据,第一列是周期性重复的娱浣嫁装k值,第二列是能量值。为了方便作图,首先对数据作预处理。参考代码见后文。去掉MS对数据分段用的无意义巨大数值1E308将周期性的一列数据“折叠”成几列的格式,方便调用MatLab的plot函数作图。
2、可以利用导入函数importdata导入csv文件,同时指定数据的分隔符,如“,”“。”“ ”等。还可以指定从第几行开始导入数据,参考代码见后文。注意这一步进行时,要先把数据文件所在文件夹加入预设路径方法是在主页选项卡上点击“预设路径”,按提示加入。
3、然后就可以调用plot作图了。做好图后可以指定标题title,图例legend,轴标记Label,刻度tick等等。特别的,这里可以自定义轴标记,所以可以很方便的做出能带图。
4、做好图后,同样可以方便的用saveas函数指定"文件名.格式"导出,会将文件保存在当前目录中。更改当前目录的命令是:cd('路径名') 如cd('C:\Users\') 记得加引号。
代码示例
1、%调用画图函数的脚本cd('\Documents\MATLAB\Ba艘绒庳焰ndStructure')%指定当前文件夹即保存位置global MainPositiongap=[4.058,5.659]MainPosition=[0.169 0.169 0.260 0.260 0.428 ... 0.428 0.520 0.520 0.714 0.714 0.805 0.805];% 指定带隙、主标记位置以划画竖线去掉了0和1--去掉了首末位置Position=[0 0.0845 0.169 0.2145 0.260 0.3440 0.428... 0.4740 0.520 0.6170 0.714 0.7595 0.805 0.9025 1]; %x轴刻度位置Label={'A' 'R' 'L' 'U' 'M' 'Σ' 'Γ' 'Δ' 'A' 'S'... 'H' 'P' 'K' 'T' 'Γ'}; %刻度名称savefilename={'BandStr_GGA'}% 指定画图文件名称h(1)=figure(1);BandStrucPlotFun(savefilename{1},gap(1),Position,Label) %调用画图函数% 能带作图结束
2、%画图函数% 参考调用% plot(x,y,'--gs',... 线型 与 数据点记号% 'LineWidth',2,... 线宽% 泌驾台佐39;MarkerSize',10,... 记号大小% 'MarkerEdgeColor','b',... 记号边缘颜色% 'MarkerFaceColor',[0.5,0.5,0.5]) 记号内部颜色% set(get(gca,'Title'),'Color','k','FontSize',13) 指定标题 及颜色字号%anotation 指定说明文字(带隙宽度) 四坐标为左下角xywh 以figure归一化%参考结束function []=BandStrucPlotFun(savefilename,gap,Position,Label)global MainPosition%声明全局变量,这个变量标记X轴标记主要位置filename=[savefilename, '.csv'];delimiterIn = ',';headerlinesIn = 0;%指定导入数据格式BandStr = importdata(filename,delimiterIn,headerlinesIn);BandStr2=[];BandStr1=[0 200;BandStr]; %使导入的数据周期性完整,便于处理[row,col]=find(BandStr1>100); %去掉无意义巨大值row1=[row;row(end)];for i=1:size(row)-1 BandStr2(:,i)=BandStr1((row1(i)+1):(row1(i+1)-1),2);endBandStr2=[BandStr1(2:row(2)-1,1),BandStr2];%折叠第2列数据%导入数据,并做预处理。plot(BandStr2(:,1),BandStr2(:,2:end),'h-','LineWidth',1,'MarkerSize',2)axis([0 1 -15 15])%作图并指定 线型 线宽 坐标轴限度hold on;plot([0,1],[0,0],'Color','k','LineStyle','-') %画出0能线for i=1:2:11 plot(MainPosition(1,i:i+1),[-15,15],... 'Color','k','LineStyle','--','LineWidth',1) endset(gca,'Title',text('String',savefilename,'Interpreter','none',... 'FontName','Times new roman','FontWeight','bold',... 'Color','k','FontSize',25))%指定标题格式% ,'Units','normalized','Position',[0.5 1.2] 这个是标题位置的附加考虑% 指定标题 标题格式 位置 以坐标轴大小为归一化set(get(gca,'YLabel'),'String','Energy/eV','FontSize',15.... ,'FontName','Times new roman','FontWeight','bold')set(gca,'Xtick',Position,'XTickLabel',Label,... 'FontName','Times new roman','FontSize',15,'XGrid','off')%以上指定标题 y轴标记位置及名称 不画出x轴网格线/画出是on% 字体 Calibri/Times new roman等等% annotation('textbox', [0.2,0.4,0.1,0.1],...% 'String', 'Straight Line Plot 1 to 10',...% 'LineStyle','none','FitBoxToText','on',...% 'HorizontalAlignment','center');% title的调用格式(title 属于text)% text(x,y,z,'string','PropertyName',PropertyValue....)% text的位置以axes归一化set(gca,'Units','normalized','Position',[0.10 0.10 0.80 0.80],... 'TickLength',[0 0.001])% 设定坐标轴的大小,以figure为归一化%并令x tick的长度为0,即不显示小短线。text('String',['Bandgap is ' num2str(gap) ' eV'],... 'HorizontalAlignment','right',... 'FontName','Times new roman','FontWeight','bold','Color','k',... 'FontSize',15,'Units','normalized','Position',[1 1.03])text('String','AlN',... 'HorizontalAlignment','left',... 'FontName','Times new roman','Color','k',... 'FontSize',15,'Units','normalized','Position',[0.03 0.52])% 以上指定说明文字,指定带隙和物质名称set(gcf, 'PaperUnits', 'centimeters');set(gcf, 'PaperSize', [27 15]);set(gcf, 'PaperPositionMode', 'manual');set(gcf, 'PaperUnits', 'normalized');set(gcf, 'PaperPosition', [0.03 0.05 0.94 0.9]);saveas(gcf,savefilename,'png')% 以上格式化并输出图像,保存在\MATLAB\BandStructure文件夹end