#!/usr/bin/perl

use lib 'd:/Programs/Perl/lib';

BEGIN {
#use lib 'd:/Programs/Perl/lib';
#use lib '/home/tkamiya/bin/lib';
my $BaseDir = $ENV{'PerlDir'};
$BaseDir = $ENV{'TkPerlDir'} unless(defined $BaseDir);
print "BaseDir: $BaseDir\n";
@INC = ("$BaseDir/lib", "$BaseDir/VNL", @INC);
}

use strict;
#use warnings;

use Math::Complex;

use Sci::Science;
use Sci::Optics;

my $pi   = Sci::pi();
my $e0   = Sci::e0();
my $e    = Sci::e();
my $c    = Sci::c();
my $h    = Sci::h();
my $hbar = Sci::hbar();
my $me   = Sci::me();
my $kB   = Sci::kB();

my $e1inf = 1.15;
my $A     = 122;
my $Eg    = 1.20; # eV
my $En0   = 3.45; # eV
my $C     = 2.54; # eV

my $fa = 1.0;
my $Ne = 1.0e21; # cm-3
my $E0 = 2.0; # eV
my $gamma  = 0.2; # eV

#my $ExtraporateLow  = "Drude";
my $ExtraporateLow  = "None";

my $ExtraporateHigh = "Constant";
#my $ExtraporateHigh = "e2~1/E^3";
#my $ExtraporateHigh = "e2~1/E^4";
#my $ExtraporateHigh = "None";

#my $Integrator = "Rectangular";
my $Integrator = "Simpson";

my $OutputFile = "KK.csv";
my $EStart =  0.001; # V
my $EEnd   = 10.0; # V
my $nE     = 1001;
my $EStep  = ($EEnd-$EStart) / ($nE-1);

#==========================================
# メイン関数スタート
#==========================================

&Execute();

exit;

#===============================================
# スクリプト終了
#===============================================

#==========================================
# &Subroutines
#==========================================
sub Execute
{
	print("  Output file    : $OutputFile\n");
	print("  ExtraporateLow : $ExtraporateLow\n");
	print("  ExtraporateHigh: $ExtraporateHigh\n");
	print("  Integrator     : $Integrator\n");

	my $Optics = new Optics;
	my @E;
	my @ec;
	my @Eps1;
	my @Eps2;
	my $const = $e1inf;
	for(my $i = 0 ; $i < $nE ; $i++) {
		$E[$i]  = $EStart + $i * $EStep;
		$ec[$i] = $Optics->TaucLorentz($E[$i], $e1inf, 0.0, $A, $Eg, $En0, $C);
#		$ec[$i] = $Optics->Lorentz($E[$i], $e1inf, 0.0, $fa, $Ne, $E0, $gamma);
		$Eps1[$i] =  Re($ec[$i]);
		$Eps2[$i] = -Im($ec[$i]);
	}

#	my ($pe1) = $Optics->KKConversionFromEps2toEps1(\@E, \@Eps2, $const,
#					$ExtraporateLow, $ExtraporateHigh, $Integrator);
	my ($pe1) = $Optics->KKConversionFromEps1toEps2(\@E, \@Eps1, $const,
					$ExtraporateLow, $ExtraporateHigh, $Integrator);

	open(OUT, ">$OutputFile") or die "$!\n";
	print OUT "E(eV),e1(TL),e2(TL),f(KK)\n";
	for(my $i = 0 ; $i < $nE ; $i++) {
		print OUT "$E[$i],", Re($ec[$i]), ",", -Im($ec[$i]), ",$pe1->[$i]\n";
	}

}
