Vasp2Visual.psm1

<#
.SYNOPSIS
  <Vasp2Visual>
.DESCRIPTION
  <Post processing of Vasp output by Powershell+Python>
.INPUTS
  <vasprun.xml>
.OUTPUTS
  <Projection.txt, Bands.txt,pDOS.txt,tDOS.txt>
.NOTES
  Version: 1.0
  Author: Abdul Saboor
  Creation Date: 2019/09/14
  Change: Initial script development
  #>

Function Export-VaspRun {
if(-not $(Test-Path -Path ./vasprun.xml)){
Write-Host "The file 'vasprun.xml' not found" -ForegroundColor Red; 
}Else{
  Write-Host "Try new command 'Export-VR' with multiple options." -ForegroundColor Green
. $PSScriptRoot/vasprunProjectedBands.ps1
}
}

Function Out-Path ($Path=$(Get-Location)){ #cahnges paths
  $winpath=(Get-Item $Path) #chnage string to path
  $drive=$winpath.FullName.Split(':')[0].ToLower()
  $path=Split-Path $winpath -NoQualifier
  $linuxPath = (-Join('/mnt/',-Join($drive,(($path -replace "\\","/") -replace ":","")))).TrimEnd("/")
  $latexPath = ($winpath -replace "\\","/").Trim("/")
  Set-Clipboard  "$linuxPath";
  [ordered]@{WslPath=$linuxPath;LatexPath=$latexPath;PythonPath=$latexPath;OnClipboard=$linuxPath}
}
Function Close-Writers { #closes opened writers
Foreach($stwr in $Writers){$stwr.Close()}
Write-Host "All opened StreamWriters are now closed." -ForegroundColor Green
}
Function Get-PlotArgs{ 
  <#
  Creates an ordered hashtable to use in plot arguments
  in plot, interactive plot and density plot.
  Defualt return is for Get-Plot, others by switches.
  #>

  Param(
    [Parameter()][switch]$DOS, 
    [Parameter()][switch]$Plotly
  )
  # With no switch, default plot arguments
    $plotargs=[ordered]@{JoinPathAt="[]";tickIndices="[0,-1]"; ticklabels="['L',r'$\Gamma$']";
      E_Limit="[10,-10]"; DOS_Limit="[0.0,1.2]"; textLocation="[0.05,0.9]";FigureHeight=3;
      ProLabels="['Element0','s','p','d']"; ProIndices="[(range(0,1,1)),(0,),(1,2,3,),(4,5,6,7,8,)]";}
  if($DOS.IsPresent){
    $plotargs=[ordered]@{textLocation ="[0.05,0.9]"; DOS_Limit ="[0.0,0.6]"; FigureHeight =2.5;
      E_Limit="[5,-5]"; ProLabels="['Element0','s','p','d']";ProIndices="[(range(0,1,1)),(0,),(1,2,3,),(4,5,6,7,8,)]";}
  }
  if($Plotly.IsPresent){
    $plotargs=[ordered]@{JoinPathAt="[]";tickIndices="[0,-1]"; ticklabels="[u'\u0393','M'] ";
      E_Limit="[5,-5]"; ProLabels="['Element0','s','p','d']"; ProIndices="[(range(0,1,1)),(0,),(1,2,3,),(4,5,6,7,8,)]";}
  }
  return $plotargs
}
Function Get-Plot{ #Plots of different types
[CmdletBinding()]
Param([Parameter()][switch]$HalfColumnWide,
[Parameter()][switch]$ProjectedBandsDOS, 
[Parameter()][switch]$ProjectedBands, #[Parameter()][switch]$ProjectedDOS,
[Parameter()][switch]$BandsDOS,#[Parameter()][switch]$DOS,
[Parameter()][switch]$Bands,
[hashtable]$PlotArguments)  #Get Hashtable from function Get-PlotArguments
Write-Host "Try 'New-Figure [-sRGB] -*'" -ForegroundColor Green
if(-not (Test-Path ./Bands.txt)){Write-Host "Required files not found. Generating using 'Export-VaspRun' ..." -ForegroundColor Green;
    Export-VaspRun;}
    if($(Test-Path ./Bands.txt)){ #checks if file generated.
    Write-Host "Files now exist. Plotting ..." -ForegroundColor Yellow;
#making a plot file in order
$variablesList=$PlotArguments.GetEnumerator()| 
    Sort-Object -Descending|
    ForEach-Object{"{0,-12} = {1};" -f $_.key,$_.value}|Out-String
$consoleInput=@"
$variablesList
"@

. $PSScriptRoot/BDPlotFile.ps1
if($HalfColumnWide.IsPresent){$WidthToColumnRatio=0.5}Else{$WidthToColumnRatio=1.0}
if($ProjectedBandsDOS.IsPresent){$FileInput=$FileString}
if($BandsDOS.IsPresent){$FileInput=$SimpleFileString}
if($ProjectedBands.IsPresent){$FileInput=$ProjectedBandsFileString}
if($Bands.IsPresent){$FileInput=$BandsFileString}
$pythonFileContent=@"
#=================Input Variables=====================
$($consoleInput)
WidthToColumnRatio=$($WidthToColumnRatio);
$($FileInput)
"@

$pythonFileContent|Set-Content ./Plot.py
python ./Plot.py #strat plotting
} #if block ends
}
Function Export-LOCPOT{
  if(-not $(Test-Path -Path ./LOCPOT)){
    Write-Host "'LOCPOT' not found" -ForegroundColor Red; 
    }Else{
. $PSScriptRoot/LOCPOT.ps1}
}
Export-ModuleMember -Function 'Export-VaspRun'
Export-ModuleMember -Function 'Out-Path'
Export-ModuleMember -Function 'Close-Writers'
Export-ModuleMember -Function 'Get-PlotArguments'
Export-ModuleMember -Function 'Get-Plot'
Export-ModuleMember -Function 'Export-LOCPOT'
Export-ModuleMember -Function 'Get-PlotArgs'