[关闭]
@zhouhuibin 2021-03-17T07:15:34.000000Z 字数 5357 阅读 1153

PPMS电输运数据处理的Python代码

Python


主程序

import matplotlib.pyplot as plt
import numpy as np
import os
from scipy.interpolate import griddata
from find_data import load_elecdata,load_fulldata

#Sample Size
thickness = 0.1e-3 # unit m
length = 0.8e-3 # unit m
width_sample = 1.35e-3 # unit m   
width_silver = 1.35e-3 # unit m   

Mag_grid = np.linspace(-8.9,8.9,1001)

HR0 = []
MR0 = []
Hsigma0 = []
Msigma0 = []
Slope = []
Hsigma_Slope = []
nc = []
Mobility = []

NORMMR = ([Mag_grid])
NORMHR = ([Mag_grid])


datafile = r'D:\zhouhuibin\20210220_Lab\data\Fe3Sn2\S1\20181019_PPMS_20191210_update\test\20181018_Fe3Sn2_CH2_MR_CH3_Hall.dat'  
T_list = ([2,10])
comment  = (['RT','2K','10K'])

axis = 'Magnetic Field,MResistivity,MResistivity,HResistivity,HResistivity'
normaxis = 'Mag_grid,MR_norm,MR_norm,HR_norm,HR_norm'
unit = 'Oe,Ohm.m,uOhm.cm,Ohm.m,uOhm.cm'

axis_RT = 'Temperature,Resistance,Resistivity,Resistivity'
unit_RT = 'K,Ohm,Ohm.m,uOhm.cm'

# resulting data output
folder = 'Norm DATA output'
maindir = r'D:\zhouhuibin\20210220_Lab\data\Fe3Sn2\S1\20181019_PPMS_20191210_update\test\%s'%folder
savepath = r'D:\zhouhuibin\20210220_Lab\data\Fe3Sn2\S1\20181019_PPMS_20191210_update\test\figs'
os.chdir(maindir) 

# data separate
row_min = [1]
row_max = []
data = np.array(load_fulldata(datafile,'[Data]'))
T = data[:,2]
Magnetic_Field = data[:,3]/1e4
num = 0
for i in range(len(T)):
    if num == 0 and (abs(Magnetic_Field[i])-abs(Magnetic_Field[i-1])) >= 2:
        print Magnetic_Field[0],Magnetic_Field[-1],
        num = num+1
        print i
        row_max.append(i)
        row_min.append(i+1)
    if abs(T[i]-T[i-1]) >= 1 and abs(Magnetic_Field[i-1]) >= 0.1 and abs(Magnetic_Field[i]) >= 0.1 and num > 0: 
        num = num+1
        row_min.append(i+1)
        row_max.append(i)     
row_max.append(len(T)) 
print row_min,row_max,len(row_min),len(row_max)

for i in range(len(row_min)):
    print str(i)
    No = i+1
    if No == 1:
        # read file
        data = np.array(load_elecdata(datafile,'[Data]',row_min[i],row_max[i]))
        Temperature = data[:,2]
        Resistance = data[:,5]
        Resistivity = Resistance*(width_sample*thickness)/length

        # file name and write
        filename = os.path.join(maindir,'001_RT.txt')
        openfile=open(filename,'w')
        openfile.write(axis_RT+'\n'+unit_RT+'\n'+('RT,')*4+'\n')

        openfile=open(filename,'a')
        for j in range(len(Temperature)):
            openfile.write(str(Temperature[j])+','+str(Resistance[j])+','+str(Resistivity[j])+','+str(1e8*Resistivity[j])+'\n')
        openfile.close()

    if No >= 2:
        # readfile
        data = np.array(load_elecdata(datafile,'[Data]',row_min[i],row_max[i]))
        Magnetic_Field = data[:,3]/1e4
        MResistance = data[:,5]
        HResistance = data[:,7]

        # Normalization
        MResistivity = MResistance*(width_sample*thickness)/length
        MR_interpolate = griddata(Magnetic_Field, MResistivity,Mag_grid, method='linear') #MR interpolate#
        MR_norm = []
        HResistivity = HResistance*thickness*(width_sample/width_silver)
        HR_interpolate = griddata(Magnetic_Field, HResistivity,Mag_grid, method='linear') #MR interpolate#
        HR_norm = []

        for j in range(len(Mag_grid)):
            # MResistivity symmetry
            mr_norm = (MR_interpolate[j]+MR_interpolate[-(j+1)])/2
            MR_norm.append(mr_norm)
            # HResistivity antisymmetry
            hr_norm = (HR_interpolate[j]-HR_interpolate[-(j+1)])/2
            HR_norm.append(hr_norm)

        #print Mag_select
         # plot HR fitting result
        plt.clf()
        plt.cla()
        plt.plot(Mag_grid,HR_norm,'b-')
        plt.savefig(os.path.join(savepath,comment[i]+'_Hall.png'))
        #plt.show()


        NORMMR = np.r_[NORMMR,[MR_norm]]
        NORMHR = np.r_[NORMHR,[HR_norm]]

NORMMR = np.transpose(NORMMR)
NORMHR = np.transpose(NORMHR)
# data processing and output

# NormMR Title 
NormMR = os.path.join(maindir,'004_NormMR.txt')
np.savetxt(NormMR, NORMMR)
openfile=open(NormMR,'r+')
content = openfile.read()  
openfile.seek(0, 0)
openfile.write('Magnetic_Field\t'+('NormMR\t')*(len(comment)-1)+'\n')
openfile.write('T\t'+('Ohm.m\t')*(len(comment)-1)+'\n')
openfile.write(comment[1]+'\t')
for i in range(len(comment)):
    if i >= 1:
        openfile.write((comment[i]+'\t'))
openfile.write('\n'+content)
openfile.close()

# NormHR Title 
NormHR = os.path.join(maindir,'005_NormHR.txt')
np.savetxt(NormHR, NORMHR)
openfile=open(NormHR,'r+')
content = openfile.read()  
openfile.seek(0, 0)
openfile.write('Magnetic_Field\t'+('NormHR\t')*(len(comment)-1)+'\n')
openfile.write('T\t'+('Ohm.m\t')*(len(comment)-1)+'\n')
openfile.write(comment[1]+'\t')
for i in range(len(comment)):
    if i >= 1:
        openfile.write((comment[i]+'\t'))
openfile.write('\n'+content)
openfile.close()

find_data子程序

def load_elecdata(infilename, key_word, row_min, row_max):
# infilename should be a string enclosed by ''
    ifile = open (infilename,'r')
    lines= ifile.readlines()
    line_no = 0
    found_string = False
    for line in lines:
        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');#sys.exit(1)
    if found_string:
        numbers = []
        for line in lines[line_no+2:]:
             row_num = lines.index(line)-(line_no+2)
             #print row_num
             if row_num >= (row_min-1) and row_num <= (row_max-1):
                 line = line.replace(',',' ')
                 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()

def load_fulldata(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()
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注