Alignment.psm1
Function Get-ConvolvedPotential{ [CmdletBinding()] Param( [Parameter(Position=0)][switch]$X_Dir, [Parameter(Position=0)][switch]$Y_Dir, [Parameter(Position=0)][switch]$Z_Dir, [Parameter(Position=1)][switch]$V_av, [Parameter(Position=1)][switch]$V_min, [Parameter(Position=1)][switch]$V_max, [Parameter(Mandatory="True",Position=2)][array]$Interval=(1,30) ) if($X_Dir.IsPresent){[string]$InputFile='xDir_Pot.txt'} if($Y_Dir.IsPresent){[string]$InputFile='yDir_Pot.txt'} if($Z_Dir.IsPresent){[string]$InputFile='zDir_Pot.txt'} if($V_av.IsPresent){$col=1;$ylabel='V<sub>av</sub>'} if($V_min.IsPresent){$col=2;$ylabel='V<sub>min</sub>'} if($V_max.IsPresent){$col=3;$ylabel='V<sub>max</sub>'} $Interval=@($Interval) if($($Interval[1]-$Interval[0]) -gt 1){$shift='div'}Else{$shift=0} if(-not $(Test-Path $InputFile)){ Write-Host "$InputFile not found. It may take a while generating it ..." -ForegroundColor Green; Export-LOCPOT;} if($(Test-Path $InputFile)){ #checks if file generated. Write-Host "$InputFile exists. Plotting convolved potential ..." -ForegroundColor Yellow; $sys=(Get-Content $InputFile)[0].Split('_')[0].Trim('#') $fileString=@" import numpy as np import plotly.graph_objects as go filename='$($InputFile)' data=np.loadtxt(filename) data2=data[:,$($col)] fig = go.Figure() fig.add_trace(go.Scatter(x=data[:,0],y=data[:,$($col)],mode='lines',name='$($ylabel)')) for div in range($($Interval[0]),$($Interval[1])): array=$($shift)+data2[:] y=np.convolve(array, np.ones((div,))/div, mode='valid') x=np.max(data[:,0])*np.linspace(0,1,np.shape(y)[0]) h_text=['Position << '+str(np.round(fraction,3)) for fraction in np.linspace(0,1,np.shape(y)[0])] #fraction will appaer in text fig.add_trace(go.Scatter(x=x,y=y,hovertext=h_text,mode='lines',name='V<sub>con</sub> '+str(div))) title=(r"Band Alignment in [%s]"%('$($sys)')) fig.update_layout(title=title,autosize=False, width=400,height=320, margin=go.layout.Margin(l=60,r=50,b=40,t=75,pad=0),paper_bgcolor="whitesmoke", yaxis=go.layout.YAxis(title_text='$($ylabel)'), xaxis=go.layout.XAxis(title_text=filename.split('Dir')[0]+'('+u'\u212B'+')'),font=dict(family="stix, serif",size=14)) fig.update_xaxes(showgrid=True, zeroline=False,showline=True, linewidth=0.1, linecolor='gray', mirror=True) fig.update_yaxes(showgrid=False, zeroline=True,showline=True, linewidth=0.1, linecolor='gray', mirror=True) fig.write_html(filename.split('.')[0]+".html") "@ $fileString|Set-Content ./ConvolvedPlotly.py python ./ConvolvedPlotly.py & ./"$($InputFile.Split('.')[0]).html" } #This block executed only if file found. } Function Get-AlignedPotential{ [CmdletBinding()] Param( [Parameter(Position=0)][switch]$X_Dir, [Parameter(Position=0)][switch]$Y_Dir, [Parameter(Position=0)][switch]$Z_Dir, [Parameter(Position=1)][switch]$V_av, [Parameter(Position=1)][switch]$V_min, [Parameter(Position=1)][switch]$V_max, [Parameter(Mandatory="True",Position=2)][array]$LeftRightPositions=(0.25,0.75), [Parameter(Mandatory="True",Position=3)][int]$Periodicity=28, [Parameter(Position=4)][array]$LeftRightNames=('GaAs','GaAsBi') ) if($X_Dir.IsPresent){[string]$InputFile='xDir_Pot.txt'} if($Y_Dir.IsPresent){[string]$InputFile='yDir_Pot.txt'} if($Z_Dir.IsPresent){[string]$InputFile='zDir_Pot.txt'} if($V_av.IsPresent){$col=1;$ylabel='$V_{av}$(eV)'} if($V_min.IsPresent){$col=2;$ylabel='$V_{min}$(eV)'} if($V_max.IsPresent){$col=3;$ylabel='$V_{max}$(eV)'} $LeftRightPositions=@($LeftRightPositions) $LeftRightNames=@($LeftRightNames) if(-not $(Test-Path $InputFile)){ Write-Host "$InputFile not found. It may take a while generating it ..." -ForegroundColor Green; Export-LOCPOT;} if($(Test-Path $InputFile)){ #checks if file generated. Write-Host "$InputFile exists. Plotting aligned potential ..." -ForegroundColor Yellow; $fileString=@" import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['axes.linewidth'] = 0.4 #set the value globally mpl.rcParams['font.serif'] = "STIXGeneral" mpl.rcParams['font.family'] = "serif" mpl.rcParams['mathtext.fontset'] = "stix" data=np.loadtxt('$($InputFile)') plt.figure(figsize=(3.8,2.5)) data2=data[:,$($col)] x_data=data[-1,0]*np.linspace(0,1,np.shape(data2)[0]) plt.plot(x_data,data2[:],lw=0.7) left=np.max(data[:,0])*$($LeftRightPositions[0]);right=np.max(data[:,0])*$($LeftRightPositions[1]); div=$($Periodicity) #periodicity of original potential new_half_div=int((np.shape(data2)[0]-div+1)/(np.shape(data2)[0]/div)/2) #periodicity of convolved potential arr_con=np.convolve(data2[:], np.ones((div,))/div, mode='valid') x_con=np.max(data[:,0])*np.linspace(0,1,np.shape(arr_con)[0]) x1=np.where(x_con <= left);x2=np.where(x_con >= right); index_1=np.max(x1[:]);index_2=np.min(x2[:]); v1=np.mean(arr_con[index_1-new_half_div:index_1+new_half_div+1]) v2=np.mean(arr_con[index_2-new_half_div:index_2+new_half_div+1]) print(v2-v1) plt.plot(x_con,arr_con,linestyle='dashed',lw=0.7,color=((0.9,0,0))) middle=int((index_1+index_2)/2) plt.plot([x_con[index_1],x_con[middle],x_con[middle], x_con[index_2]],[v1,v1,v2,v2],'m',lw=0.4) plt.plot([x_con[index_1-new_half_div],x_con[index_1+new_half_div]],[v1,v1],'m') plt.plot([x_con[index_2-new_half_div],x_con[index_2+new_half_div]],[v2,v2],'m') plt.annotate(r'$\Delta V = %9.6f$'%(np.round(v2-v1,6)),ha="center", va="center", bbox=dict(edgecolor='white',facecolor='white', alpha=0.7), xy=(x_con[middle],(v2+v1)/2), xycoords="data",xytext=(0.3, 0.1), textcoords="axes fraction",arrowprops=dict(arrowstyle="simple,tail_width=0.05,head_width=0.2", fc=(0.2, 0.2, 0.2), ec="none",connectionstyle="arc3,rad=0.5")) plt.tick_params(direction='in', top=True,bottom=True,left=True,right=True,length=4, width=0.3, colors='k', grid_color='k', grid_alpha=0.8) plt.title('$($LeftRightNames[0]) --- $($LeftRightNames[1])') xlabel= `'$([string]$InputFile.Split('Dir')[0]) `'+'('+u'\u212B'+')' plt.xlabel(xlabel); plt.ylabel(r'$($ylabel)'); plt.xlim([data[0,0],data[-1,0]]) plt.subplots_adjust(left=0.17,bottom=0.16) filename=`'$([string]$InputFile.Trim('Dir')[0])`'+'Pot.pdf' plt.savefig(filename,transparent=True) "@ $fileString|Set-Content ./Pot_av.py python ./Pot_av.py & ./"$($InputFile.Split('Dir')[0])Pot.pdf" } #This block executed only if file found. } Export-ModuleMember -Function "Get-ConvolvedPotential" Export-ModuleMember -Function "Get-AlignedPotential" |