@zhouhuibin
2021-03-17T16:08:27.000000Z
字数 4457
阅读 968
Python
import matplotlib.pyplot as plt
import numpy as np
import os
from find_data import load_magdata
from scipy.interpolate import griddata
from pymodelfit.builtins import LinearModel
#physical constant
e = 1.6e-19 #unit is C
k = 1.38e-23
# sample information
mass = 1.37e-3 #unit is mg
m1 = 55.845
n1 = 3
m2 = 118.71
n2 = 2
molmass = m1*n1+m2*n2
mol = mass/molmass
field = 10000 #unit Oe
datafile = r'D:\Zhouhuibin\Lab\data\Fe3Sn2\S1\20181028_Fe3Sn2_MPMS\raw data\MT.dat'
# data normalization
data = np.array(load_magdata(datafile,'[Data]'))
T = data[:,1]
moment = data[:,3] # unit is emu
molmoment = moment/mol #unit is emu/mol
normmoment = molmoment/5585 # unit is \miu_B/f.u.
# resulting data output
folder = 'Norm DATA output'
subdir = r'D:\Zhouhuibin\Lab\data\Fe3Sn2\S1\20181028_Fe3Sn2_MPMS'#set os.path into the subdir before run the code
maindir = r'D:\Zhouhuibin\Lab\data\Fe3Sn2\S1\20181028_Fe3Sn2_MPMS\%s'%folder
savepath = r'D:\Zhouhuibin\Lab\data\Fe3Sn2\S1\20181028_Fe3Sn2_MPMS\figs'
#if os.path.isdir(folder):
# shutil.rmtree(folder) #判断目录是否存在,如果存在则删除目录及目录内部的文件.由于存在权限问题,该路径只能是本地路径
#os.mkdir(folder) # 创建目录,refer to http://www.xuebuyuan.com/2025595.html?mobile=1
os.chdir(maindir) #用于改变当前工作目录到指定的路径
momentfile='%s\MT.txt'%maindir
openmoment=open(momentfile,'w')
openmoment.write('Temperature,Moment,Molmoment,Normmoment\n K,emu,emu/mol,mu_B/formula unit\n')
openmoment=open(momentfile,'a')
for i in range(len(T)):
openmoment.write(str(T[i])+','+str(moment[i])+','+str(molmoment[i])+','+str(normmoment[i])+'\n')# 参见python格式化输出说明文档:http://blog.csdn.net/wchoclate/article/details/42297173
openmoment.close()
# MH Series
path = r'D:\Zhouhuibin\Lab\data\Fe3Sn2\S1\20181028_Fe3Sn2_MPMS\raw data\MH series'
T_list = (['2K','10K','50K','100K','150K','200K','250K','300K'])
number = (['001','002','003','004','005','006','007','008','009','010','011','012','013'])
T_array = ([2,10,50,100,150,200,250,300])
namelist=os.listdir(path)
MH0 = []
for i in range(len(namelist)):
print namelist[i]
data = np.array(load_magdata(os.path.join(path,namelist[i]),'[Data]'))
Magnetic_Field = data[:,2]
moment = data[:,3] # unit is emu
molmoment = moment/mol #unit is emu/mol
massmoment = moment/mass
normmoment = molmoment/5585 # unit is \miu_B/f.u.
Mag_select = []
MH_select = []
Mag_grid = np.linspace(-60000,60000,1001)
MH_interpolate = griddata(Magnetic_Field, moment,Mag_grid, method='linear')
Normmoment = MH_interpolate/mol/5585
for j in range(len(Mag_grid)):
if Mag_grid[j] >= 20000: #select the range of Magnetic Field.
Mag_select.append(float(Mag_grid[j]))
MH_select.append(float(Normmoment[j]))
Mag_select = np.array(Mag_select)
MH_select = np.array(MH_select)
a = LinearModel.fitBasic(Mag_select,MH_select) #原始数据中包含空字符串或None值时会导致无法拟合出结果,所以研究范围要变成(-8.9T,8.9T)
MH_fitting = a[0][0]*Mag_grid+a[0][1]
mh0 = a[0][1]
print mh0
MH0.append(mh0)
plt.clf()
plt.cla()
plt.plot(Mag_grid,Normmoment,'b-',Mag_grid,MH_fitting,'r-')
plt.savefig(os.path.join(savepath,number[i]+'_'+T_list[i]+'_HR_fitting.png'))
# resulting data output
MHfile = os.path.join(maindir,T_list[i]+'_MH.txt')
#MHfile=str(T_list[i])+'%s\_MH.txt'%maindir
openMH=open(MHfile,'w')
openMH.write('Magnetic Field,Moment,Molmoment,massmoment,Normmoment\n Oe,emu,emu/mol,emu/g,mu_B/formula unit\n'+(str(T_list[i])+',')*5+'\n')
openMH=open(MHfile,'a')
for j in range(len(Magnetic_Field)):
openMH.write(str(Magnetic_Field[j])+','+str(moment[j])+','+str(molmoment[j])+','+str(massmoment[j])+','+str(normmoment[j])+'\n')# 参见python格式化输出说明文档:http://blog.csdn.net/wchoclate/article/details/42297173
openMH.close()
plt.cla()
plt.clf()
plt.plot(T_array,MH0,'ro')
plt.savefig(os.path.join(savepath,'MH0 vs T.png'))
plt.show()
# HR0 vs MR0
filename = os.path.join(maindir,'MH0 vs T.txt')
openfile=open(filename,'w')
openfile.write('T,MH0'+'\n'+'K,miu_B/f.u.'+'\n'+('MH0vsT,')*2+'\n')
openfile=open(filename,'a')
for k in range(len(T_array)):
openfile.write(str(T_array[k])+','+str(MH0[k])+'\n')# 参见python格式化输出说明文档:http://blog.csdn.net/wchoclate/article/details/42297173
openfile.close()
def load_magdata(infilename, key_word):
# infilename should be a string enclosed by ''
ifile = open (infilename,'r') # open datafile
lines= ifile.readlines() #read data
line_no = 0 # define line number
found_string = False
for line in lines: # search for starting mark of data
if key_word in line:
#if 'Tableau' in line:
print ('found in line '+ str(line_no))
found_string = True
break
line_no += 1
if not found_string:
print ('string not found');
if found_string:
numbers = [] # define empty data matrix
for line in lines[line_no+2:]: # iterate and check line from second row after starting mark
line = line.replace(',',' ') # replace ',' with 'tab' key
words = line.split()
numbers_row = []
for i1 in range(len(words)):
number = float(words[i1])
numbers_row.append(number)
numbers.append(numbers_row)
return numbers
ifile.close()