#!/usr/bin/perl

BEGIN {
#use lib 'd:/Programs/Perl/lib';
#use lib '/home/tkamiya/bin/lib';
my $BaseDir = $ENV{'TkPerlDir'};
#print "\nBaseDir: $BaseDir\n";
@INC = ("$BaseDir/lib", "$BaseDir/VNL", "d:/Programs/Perl/lib", @INC);
}

use strict;
#use warnings;

use Deps;
use Utils;
use JFile;

use Crystal::VASP;
use Sci::Optics;

my $InFile = "OUTCAR";
my $OutFile = "OPTICS.csv";

my $in = new JFile;
if(!$in->Open($InFile, "r")) {
	print "Error: Can not read [$InFile].\n";
	exit;
}

$in->SkipTo("IMAGINARY DIELECTRIC FUNCTION");
$in->SkipTo("-----");
my (@E, @eixx, @eiyy, @eizz, @eixy, @eixy, @eiyz, @eizx);
my $i = 0;
while(1) {
	my $line = $in->ReadLine();
	last if(!defined $line);
	my ($e, $xx, $yy, $zz, $xy, $yz, $zx) = Utils::Split("\\s+", $line);
	last if(!defined $zx);

	$E[$i] = $e;
	$eixx[$i] = $xx;
	$eiyy[$i] = $yy;
	$eizz[$i] = $zz;
	$eixy[$i] = $xy;
	$eiyz[$i] = $yz;
	$eizx[$i] = $zx;
	$i++;
}

$in->SkipTo("REAL DIELECTRIC FUNCTION");
$in->SkipTo("-----");
my (@erxx, @eryy, @erzz, @erxy, @erxy, @eryz, @erzx);
my $i = 0;
while(1) {
	my $line = $in->ReadLine();
	last if(!defined $line);
	my ($e, $xx, $yy, $zz, $xy, $yz, $zx) = Utils::Split("\\s+", $line);
	last if(!defined $zx);

	$erxx[$i] = $xx;
	$eryy[$i] = $yy;
	$erzz[$i] = $zz;
	$erxy[$i] = $xy;
	$eryz[$i] = $yz;
	$erzx[$i] = $zx;
	$i++;
}
my $nData = $i;
$in->Close();

print "nData=$nData\n";

my $out = new JFile;
if(!$out->Open($OutFile, "w")) {
	print "Error: Can not write to [$OutFile].\n";
	exit;
}

$out->print("E(eV),wl(nm),erxx,eixx,nxx,kxx,alphaxx(cm-1),eryy,eiyy,erzz,eizz\n");
for(my $i = 0 ; $i < $nData ; $i++) {
	my $E  = $E[$i];
	my $wl = Optics::eVTonm($E);
	my ($nxx, $kxx) = Optics::EpsToNK($erxx[$i],$eixx[$i]);
	my $alphaxx = ($wl > 0.0)? Optics::KToAlpha($wl, $kxx) : 0.0;
	$out->print("$E,$wl,$erxx[$i],$eixx[$i],$nxx,$kxx,$alphaxx,$eryy[$i],$eiyy[$i],$erzz[$i],$eizz[$i]\n");
}

$out->Close();