CRYSDEN: Difference between revisions

From Wiki
Jump to navigation Jump to search
Dkarhanek (talk | contribs)
No edit summary
 
Line 7: Line 7:
=== How to Intall XCrysden v1.5 and works with Poscar2xcrysden.pl script ===
=== How to Intall XCrysden v1.5 and works with Poscar2xcrysden.pl script ===


[http://aliga.iciq.es/wiki/images/3/3a/Xcrysden_installation.pdf Ubuntu_Xcrysden_Installation]
[[Image:Xcrysden_installation.pdf]]





Latest revision as of 15:26, 16 May 2013

go back to Main Page, Computational Resources, GUIS


XCrySDen is a crystalline and molecular structure visualisation program, which aims at display of isosurfaces and contours, which can be superimposed on crystalline structures and interactively rotated and manipulated.

How to Intall XCrysden v1.5 and works with Poscar2xcrysden.pl script[edit]

File:Xcrysden installation.pdf


Link[edit]

X-window CRYstalline Structures and DENsities website

XCRYSDEN INPUT[edit]

#! /usr/bin/perl

#----------------------------------------------------------------
# PROGRAM FOR  GENERATE XCRYSDEN INPUTS    

# OF VASP POSCAR/CONTCAR FILES   
#
# UTILIZATION:

# perl Poscar2xcrysden.pl file1 file2 .... fileN
#
# By Javier Carrasco (carrasco@qf.ub.es)
# Modified By Monica Garcia  (mgarcia@iciq.es)
#----------------------------------------------------------------

#READ LABELS


open(IN,$ARGV[0]);

while (<IN>) {
if ($.==6){

 @at=split(' ');
};                                                                                                                                                                    };
close(IN);


for ($p=0;$p<@at;$p++){

  $k=$p+1;

  print "Label $k, $at[$p] atom/s of:\n";

  $label[$p]=<STDIN>;chomp($label[$p]);

};
                          

#READ poscar/contcar FILES 


for ($r=0; $r<@ARGV;$r++) {

#for ($r=0;$r<$#ARGV+1;$r++) { #$numArgs = $#ARGV + 1; 

#print "$ARGV[$r] : $ENV{$ARGV[$r]}\n";

open (IN,$ARGV[$r]);

	 $i=0;
        
       @at=();               

	 while (<IN>) {

 		if ($. ==1){ $name=$_;chomp($name);};
 		if ($. ==2) { $escala=$_;chomp($escala);};
 		if ($. ==3) {

     			@fields=split(' ');

     			$ax=$fields[0];
     			$ay=$fields[1];
     			$az=$fields[2];

 		};

  		if ($.==4){

     			@fields=split(' ');

     			$bx=$fields[0];
      			$by=$fields[1];
     			$bz=$fields[2];

 		};

  		if ($.==5){

     			@fields=split(' ');

     			$cx=$fields[0];
      			$cy=$fields[1];
     			$cz=$fields[2];

		 };

 		if ($.==6){

     			@at=split(' ');
                       #print "@at";
                       $NAT=0;
      			$suma=0;
      			$sum=0;

      			for ($j=0;$j<@at;$j++){

         			$at[$j]=$at[$j];
         			$sum=$sum+1;
         			$NAT=$NAT+$at[$j];

      			};

                       #print "$NAT";

 		};

 		if (($.>8)&&($.<$NAT+9)){

     			@fields=split (' ');

     			$x[$i]=$fields[0];$y[$i]=$fields[1];$z[$i]=$fields[2];

     			$optx[$i]=$fields[3];$opty[$i]=$fields[4];$optz[$i]=$fields[5];


     			$i++;

 		};

};

close (IN);

# DATA PROCESSING

# Convert fractional coordinates to positive values 

for ($p=0;$p<$NAT;$p++){

  if ($x[$p]<0.0) {

     $x[$p]=$x[$p]+1;

  };

  if ($y[$p]<0.0) {

     $y[$p]=$y[$p]+1;

  };

  if ($z[$p]<0.0) {

     $z[$p]=$z[$p]+1;

  };

};

# 1.Transformation to cartesian coordinates  

for ($i=0;$i<$NAT;$i++){

  $xc[$i]=($escala)*($x[$i]*$ax+$y[$i]*$bx+$z[$i]*$cx);
  #print "$xc[$i]";

  $yc[$i]=($escala)*($x[$i]*$ay+$y[$i]*$by+$z[$i]*$cy);
  #print "$yc[$i]";

  $zc[$i]=($escala)*($x[$i]*$az+$y[$i]*$bz+$z[$i]*$cz);
  #print "$zc[$i]";

};

# 2.Write results in suitable format 

@output=<$ARGV[$r].xcrysden>; chomp(@output);


open (OUT1, ">@output"); 


print OUT1 "set xsfStructure {\n";

print OUT1 " DIM-GROUP\n";

print OUT1 " 3 1\n";

print OUT1 " PRIMVEC\n";

$eax=$escala*$ax;$eay=$escala*$ay;$eaz=$escala*$az;

printf OUT1 "%3.10f %3.10f %3.10f\n",$eax,$eay,$eaz;

$ebx=$escala*$bx;$eby=$escala*$by;$ebz=$escala*$bz;

printf OUT1 "%3.10f %3.10f %3.10f\n",$ebx,$eby,$ebz;

$ecx=$escala*$cx;$ecy=$escala*$cy;$ecz=$escala*$cz;

printf OUT1 "%3.10f %3.10f %3.10f\n",$ecx,$ecy,$ecz;

print OUT1 " PRIMCOORD\n";

printf OUT1 "%5.0f 1\n",$NAT;


#Initialization  $index


 $index=0;

 for ($p=0;$p<@at;$p++){
 
  for ($i=$index;$i<$index+$at[$p];$i++){

  printf OUT1 "$label[$p] %2.8f %2.8f %2.8f\n",$xc[$i],$yc[$i],$zc[$i];

  };

  $index=$index+$at[$p];

 };



print OUT1 "}\n";

print OUT1 "WriteFile   \$system(SCRDIR)/xc_tmp.\$system(PID) \$xsfStructure w\n";

print OUT1 "catch {exec \$system(BINDIR)/xsf2xsf \$system(SCRDIR)/xc_tmp.\$system(PID) \$system(SCRDIR)/xc_struc.\$system(PID)}\n";

print OUT1 "xc_openstr xcr \$system(SCRDIR)/xc_struc.\$system(PID) .mesa PL\n";

print OUT1 "UpdateWMTitle  tempest.xcrysden\n";

print OUT1 "set working_XSF_file \$system(SCRDIR)/xc_struc.\$system(PID)\n";

print OUT1 "Get_sInfoArray\n";

print OUT1 "DisplayDefaultMode\n";

print OUT1 " xcAppendState render\n";

print OUT1 " xcUpdateState\n";

print OUT1 "SetWatchCursor\n";

print OUT1 " set xcCursor(dont_update) 1\n";

print OUT1 "set nxdir 1\n";

print OUT1 "set nydir 1\n";

print OUT1 "set nzdir 1\n";

print OUT1 "array set radio {space {SpaceFill based on covalent radii} .mesa,bg #000000 cellmode prim frames rods unitrep cell hexamode parapipedal ball      {Balls based on covalent radii}}\n";

print OUT1 "CellMode 1\n";

print OUT1 "DispFramesAs\n";

print OUT1 "xc_newvalue .mesa 2\n";

print OUT1 "xc_newvalue .mesa 0\n";

print OUT1 "set xcCursor(dont_update) 0\n";

print OUT1 "ResetCursor\n";

close (OUT1);

print "\n";

print "Result in @output\n";

print "\n";

print "                                      J.C.R\n";
};