#!/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) if($BaseDir);
}

use strict;
#use warnings;

use Sci::Science;
use Sci::Optimize;
use Sci::OpticalMaterial;
use Sci::MultiLayer;
use Sci::Ellipsometry;

my $e  = Sci::e();
my $me = Sci::me();


my $SiPath = "SI111025.SPE";
my $SpectraCSV = "Spectra.csv";

my $Emin  = 1.6;
my $Emax  = 5.0;
my $Estep = 0.05;
my $nE    = int(($Emax - $Emin) / $Estep + 1.01);

my $Angle = 70.0;

#=========================================================
# 積層モデルの作製
#=========================================================
my $el = new Ellipsometry();
$el->SetIncidentAngle($Angle);

my $Layers = new MultiLayer;
my $Air    = new OpticalMaterial("air");
my $aSi    = new OpticalMaterial("a-Si:H");
my $Si     = new OpticalMaterial();
$Si->SetName("Si");
my $Substrate = new OpticalMaterial();
$Substrate->SetName("SiO2");

$Layers->AddLayer($Air,       -1.0,                  0.0);
my $FilmThickness = 300.0; # nm, Film thickness
$Layers->AddLayer($Si,  $FilmThickness*1.0e-9, 1.0);
#$Layers->AddLayer($aSi, $FilmThickness*1.0e-9, 1.0);
my $SubstrateThickness = 0.5e-3; # m, Substrate thickness
#$Layers->AddLayer($Substrate, -1.0,            0.0);
#$Layers->AddLayer($Substrate, $FilmThickness*1.0e-9,   0.0);
$Layers->AddLayer($Substrate, -1.0,   0.0);
#$Layers->AddLayer($Air,       -1.0,                  0.0);

$Layers->SetIncidentAngle($Angle);

print "Layers:\n";
my $nLayer = $Layers->nLayer();
for(my $i = 0 ; $i < $nLayer ; $i++) {
	my $pLayer = $Layers->pLayer($i);
	my $name   = $pLayer->Name();
	my $d      = $Layers->LayerThickness($i) * 1.0e9; # nm
	print "$i: $name ($d nm)\n";
}

$Substrate->AddDielectricModel(
	"Constant",
	"Constant",
	"e1inf", 3.9,
	"e2inf", 0.0,
	);
$Si->AddDielectricModel(
	"Si",
	"EFile",
	"Path", $SiPath,
	);

my $E = 2.0;
my ($rs, $rp) = $Layers->CalReflectionFresnelCoefficient($E);
print "rs=$rs  rp=$rp\n";
my ($rs, $ts, $rp, $tp) = $Layers->CalFresnelCoefficient($E);
print "rs=$rs  rp=$rp\n";

if(!$Layers->SaveDielectricFunctionsCSV($SpectraCSV, $Emin, $Estep, $nE)) {
	print "Error: Can not write to [$SpectraCSV].\n";
	exit;
}

exit;

#==================================================================
# メインルーチン終了
#==================================================================


#==================================================================
# 関数
#==================================================================
