#!/usr/bin/perl

use lib 'd:/Programs/Perl/lib';
use lib 'd:\Working/lib';

BEGIN {
my $BaseDir = $ENV{'PerlDir'};
$BaseDir = $ENV{'TkPerlDir'} unless(defined $BaseDir);
@INC = ("$BaseDir/lib", "$BaseDir/VNL", @INC);
}

use strict;
#use warnings;
#use Math::Complex;

use CSV;
use JFile;
use Sci::Science;
#use Sci::Optimize;
#use Optimize;
#use Sci::Optics;
use Sci::Optics;
use Sci::OpticalMaterial;
use Sci::MultiLayer;

#=========================================================
# ϐ
#=========================================================
my $SubstrateCSV = "quartzTransparent-glass-PointByPoint.csv";
my $SubstrateThickness = 0.5e-3; # m

#my $FilmThickness = 80.6629e-9; # m, Film thickness
#my $SampleHeader  = "1023As-siguma2E-4";
#my $FilmThickness = 60.3337e-9; # m, Film thickness
#my $SampleHeader  = "1106sam9-siguma1E-3";
#$my $FilmThickness = 78.7298e-9; # m, Film thickness
#my $SampleHeader  = "102364-siguma5E-3";
#my $FilmThickness = 57.8308e-9; # m, Film thickness
#my $SampleHeader  = "dry";
my $FilmThickness = 59.3759e-9; # m, Film thickness
my $SampleHeader  = "wet60";

my $SampleCSV     ="${SampleHeader}-ExtendedDielectricFunction.csv";

my $OutputCSV = "${SampleHeader}-CalculatedSpectrum.csv";
my ($EStart, $EEnd, $EStep) = (0.5, 5.0, 0.05);

#=========================================================
# Object쐻
#=========================================================
my $optics = new Optics;

my $Layers = new MultiLayer;
my $Air       = new OpticalMaterial("air");
my $Substrate = new OpticalMaterial();
my $Film      = new OpticalMaterial();
$Layers->AddLayer($Air,       -1.0,                  0.0);
$Layers->AddLayer($Film,      $FilmThickness       , 1.0);
$Layers->AddLayer($Substrate, $SubstrateThickness,   0.0);
$Layers->AddLayer($Air,       -1.0,                  0.0);
$Layers->SetIncidentAngle(0.0);

$Substrate->SetThickness($SubstrateThickness);
my $ret = $Substrate->AddDielectricModel(
	"Substrate",
	"EFile",
	"Path", $SubstrateCSV,
	); #or die "$!: Error in reading [$SubstrateCSV]\n";
#print "ret=$ret\n";
$Film->SetThickness($FilmThickness);
$Film->AddDielectricModel(
	"Substrate",
	"EFile",
	"Path", $SampleCSV,
	) or die "$!: Error in reading [$SampleCSV]\n";

print "File e\n";
for(my $E = 0.4 ; $E < 4.0 ; $E += 0.2) {
	my ($e1, $e2) = $Film->CalEps($E);
	printf("%6.4g eV: e=(%8.4g, %8.4g)\n", $E, $e1, $e2);
}


my $out = new JFile;
$out->Open($OutputCSV, "w") or die "$!: Can not write to [$OutputCSV].\n";
my $nE = int(($EEnd - $EStart) / $EStep + 1.01);
$out->print("E(eV),R,T,A\n");
for(my $i = 0 ; $i < $nE ; $i++) {
	my $E = $EStart + $i * $EStep;
	my ($rs23, $rp23, $ts23, $tp23, $Rs, $Rp, $Ts, $Tp) = $Layers->CalFresnelCoefficient($E);
	my $A = 1.0 - $Rs - $Ts;
	print("$E,$Rs,$Ts,$A\n");
	$out->print("$E,$Rs,$Ts,$A\n");
}

$out->Close();
exit;
