Generate figures

From Wiki
Jump to navigation Jump to search

go back to Main Page, Computational Resources, Scripts or VASP, Scripts for VASP

To map several molecules at once, put together the CONTCAR files (CONT*). Then use the attached scrip with xcrysden.

The script has three parts.

1. Convert POSCAR/CONTCAR to *.xsf

In order to use this tool, you will need the program v2xsf. Find attached here File:Xcrysden.tgz or here [[1]]. First, put v2xsf in your /home/bin/ folder and make it executable (chmod +x v2xsf). Then, put all your CONTCAR/POSCAR in the same folder with the extension *.vasp and execute the following command in a terminal:

for j in `ls *.vasp` ; do v2xsf $j ; done

2. Script preparation

XCrysDen can work with a *.tcl script as input file. This utility will build that script for you:

#!/bin/bash

# # # # # # # # # # # # # # # # # # # # # # # # #
# Created by Rodrigo García-Muelas            #
#                                           #
# Suitable for VASP 5.x                  #   
# First review:  July 10, 2012.             #
# Second review: April 30, 2013.              #
# # # # # # # # # # # # # # # # # # # # # # # # # 
#
# Notes:
# 1. The input files should be *.vasp
# 2. Requires v2xsf conversor <--- Available on VASP webpage.
# 3. Inspired by a similar creation from David Karhanek.
# 4. Remember to write in the terminal: for j in `ls *.vasp` ; do v2xsf $j ; done
#
# remove old tcl scripts (this section needs to be fix)
if [ -e epsprinting.tcl ] ; then rm epsprinting.tcl ; fi
#
# comprobates if you have *.xsf.gz files
#if [ -e *.xsf.gz ] ; then
echo "Preparing TCL script for EPS export..."
#else
#echo 
#echo "Please execute:  for j in \`ls *.vasp\` ; do v2xsf \$j ; done" 
#echo "bye"
#echo 
#exit
#fi

for i in `ls *.xsf.gz`
do                              # resize 640 480
 cat >>epsprinting.tcl<<!
scripting::open --xsf $i
scripting::displayWindow resize 3200 4000
xc_newvalue .mesa 8  0 1.000000 1.000000 1.000000
xc_newvalue .mesa 8  1 1.000000 1.000000 1.000000
xc_newvalue .mesa 8  3 1.000000 1.000000 0.500000
xc_newvalue .mesa 8  5 0.670000 0.330000 0.000000
xc_newvalue .mesa 8  6 0.250000 0.250000 0.250000
xc_newvalue .mesa 8  7 0.000000 0.000000 1.000000
xc_newvalue .mesa 8  8 1.000000 0.000000 0.000000
xc_newvalue .mesa 8  9 0.000000 1.000000 0.000000
xc_newvalue .mesa 8 26 1.000000 0.930000 0.870000
xc_newvalue .mesa 8 27 0.870000 0.930000 1.000000
xc_newvalue .mesa 8 28 0.800000 1.000000 1.000000
xc_newvalue .mesa 8 29 1.000000 0.930000 0.870000
xc_newvalue .mesa 8 44 1.000000 0.900000 0.900000
xc_newvalue .mesa 8 45 1.000000 0.800000 1.000000
xc_newvalue .mesa 8 46 0.900000 0.900000 1.000000
xc_newvalue .mesa 8 47 0.933333 0.933333 0.933333
xc_newvalue .mesa 8 78 0.900000 1.000000 0.900000
xc_newvalue .mesa 8 79 1.000000 1.000000 0.800000
xc_newvalue .mesa 4  1 0.90000
xc_newvalue .mesa 4  3 0.90000
xc_newvalue .mesa 4  5 1.50000
xc_newvalue .mesa 4  6 2.05000
xc_newvalue .mesa 4  7 1.90000
xc_newvalue .mesa 4  8 1.80000
xc_newvalue .mesa 4  9 1.70000
xc_newvalue .mesa 4 26 3.10000
xc_newvalue .mesa 4 27 3.05000
xc_newvalue .mesa 4 28 2.95000
xc_newvalue .mesa 4 29 2.95000
xc_newvalue .mesa 4 44 3.55000
xc_newvalue .mesa 4 45 3.47000
xc_newvalue .mesa 4 46 3.40000
xc_newvalue .mesa 4 47 3.40000
xc_newvalue .mesa 4 78 3.55000
xc_newvalue .mesa 4 79 3.55000
scripting::displayMode3D BallStick
set myParam(COV_SCALE)        1.25
set myParam(FRAMECOL)         {0.00 0.00 0.00} 
set myParam(BACKGROUND)       {1.00 1.00 1.00}
scripting::load_myParam
scripting::display on crystal-cells 
scripting::displayMode3D BallStick
scripting::display as cell-unit asymm
scripting::buildCrystal 1 1 1
xc_translparam set 0 0 1 
scripting::rotate x 90
scripting::zoom 2
scripting::printToFile ${i%\.vasp.xsf.gz}.png

!
done

echo "Now run XCrySDen in script mode: xcrysden -s epsprinting.tcl"

Explanation:

You can set the size of the window with the command below. Notice that a bigger window size imply a larger and heavier image.

scripting::displayWindow resize 800 1000

You can change the colors of your atoms. The example shows H, C, O and Pt (Z=1,6,8,78) and colors white (1.00 1.00 1.00 RGB), gray, red and light green:

xc_newvalue .mesa 8  1 1.000000 1.000000 1.000000
xc_newvalue .mesa 8  6 0.250000 0.250000 0.250000
xc_newvalue .mesa 8  8 1.000000 0.000000 0.000000
xc_newvalue .mesa 8 78 0.800000 1.000000 0.800000

To change the size of the ball for each element, you have this part:

xc_newvalue .mesa 4  1 0.90000
xc_newvalue .mesa 4  6 2.05000
xc_newvalue .mesa 4  8 1.80000
xc_newvalue .mesa 4 78 3.55000

To colour the borders of the supercell in black:

set myParam(FRAMECOL)         {0.00 0.00 0.00}

Set the background color as white to be printer-friendly.

set myParam(BACKGROUND)       {1.00 1.00 1.00}

Build a 1×1×1 supercell

scripting::buildCrystal 1 1 1 


Play with these parameters in order to focus your cell at your wish:

scripting::rotate x 90
scripting::zoom 2

Do NOT put comments in the epsprinting.tcl file.

3. Printing and post-processing

Run XCrysDen in scripting mode by typing:

$ xcrysden -s epsprinting.tcl

Tips:

  • If you want to convert the background of an image from white to transparent, write in the command line:
convert -transparent white <input_file> <output_file>
  • If you want to crop transparent spaces, write in the command line:
convert -trim <input_file> <output_file>
  • If you want to crop the side view images, do:
convert -gravity Center -crop 120x30%+0+100\! <input_file> <output_file>
  • In batch mode:
for j in *.png ; do convert -transparent white $j $j ; done
for j in *.png ; do convert -trim $j $j ; done
for j in *.png ; do convert -gravity Center -crop 120x30%+0+100\! $j $j ; done
  • It would also work:
for j in `ls *.png` ; do convert -transparent white $j $j ; done
for j in `ls *.png` ; do convert -trim $j $j ; done
for j in `ls *.png` ; do convert -gravity Center -crop 120x30%+0+100\! $j $j ; done
  • If you generated your figures in other formats (i.e. *.eps), and you want to convert them into png:
 for j in *eps ; do convert $j ${j%%.eps}.png ; done

For aditional commands, see [[2]]

--Rgarcia 19:23, 12 December 2012 (CET)