#!/usr/bin/perl

use strict;

use lib 'd:/Programs/Perl/lib';

use CSV;
use Sci qw($e $kB);

my $T = 7000.0; # K

my $EnergyFile = "TotalEnergy.csv";
my $OutCSV = "SumDOS.csv";

my $eng = new CSV;
$eng->Read($EnergyFile);
my $pLabelArray = $eng->LabelArray();
my $pDataArray  = $eng->DataArray();
my $nData = $eng->nData();
my $pName  = $eng->GetXData("Name.*");
my $pEForm = $eng->GetYData("Eform.*");

print "nData=$nData\n";
#print "p: $pName, $pEForm\n";
#exit;
for(my $i = 0 ; $i <= 48 ; $i++) {
	print "$i: $pName->[$i]: $pEForm->[$i] eV\n";
}

my $out = new JFile;
$out->Open($OutCSV, "w") or die "Error: can not write to [$OutCSV].\n";
$out->print("E(eV),DOS\n");
my (@E, @Total);
for(my $im = 0 ; $im <= 48 ; $im++) {
	my $InFile = "Stochiometry-smoothened.csv";
	if($im > 0) {
		$InFile = sprintf("VO%02d-smoothened.csv", $im);
	}
	my $csv = new CSV;
	$csv->Read($InFile) or die "Erorr: can not read [$InFile].\n";
	my $nData = $csv->nData();
	my $pE    = $csv->GetXData("E.*");
	my $pDOS  = $csv->GetYData("TDOS.smoo.*");
	if(!defined $pE or !defined $pDOS) {
		die "Error: can not get pE or pDOS for [$InFile].\n";
	}
	my $k = exp(- $pEForm->[$im] * $e / $kB / $T);
print "$im: $pEForm->[$im] eV: k=$k\n";
	for(my $i = 0 ; $i < $nData ; $i++) {
		$E[$i]     = $pE->[$i];
		$Total[$i] += $pDOS->[$i] * $k;
	}
}
for(my $i = 0 ; $i < @E ; $i++) {
	$out->print("$E[$i],$Total[$i]\n");
}

$out->Close();