#!/usr/bin/perl

#require "Util.pl";
#require "MyCGI.pl";
use Cwd;

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

use strict;
#use warnings;
use File::Basename;

use ProgVars;
use Crystal::AtomType;
use Utils;
use Crystal::Rietan;
use Crystal::CIF;

#===============================================
# スクリプト大域変数
#===============================================

my $CIFDir = "D:\\MyWebs\\Research\\CrystalStructure\\";

print "Compound>>";
my $CIFFile = <>;
$CIFFile = Utils::DelSpace($CIFFile);
my $CIFPath = "$CIFDir$CIFFile.cif";

my $DVXaDir              = ProgVars::DVXaDir(); #"d:\\Programs\\Quantum\\DVXa97";
my $DVXaExecDir          = Deps::MakePath($DVXaDir, "exec", 0);
my $NonrelInputPath      = Deps::MakePath($DVXaDir, "nonrel", 0);
my $PeriodicTableDir     = ProgVars::PeriodicTableDir();
my $IonRadius1DBPath     = Deps::MakePath($PeriodicTableDir, "IonRadius1.html", 0);
my $IonRadius2DBPath     = Deps::MakePath($PeriodicTableDir, "IonRadius2.html", 0);
my $PeriodicTable1DBPath = Deps::MakePath($PeriodicTableDir, "PeriodicTable1.html", 0);
my $PeriodicTable2DBDir  = Deps::MakePath($PeriodicTableDir, "PeriodicTable2",       0);
my $BinDir               = ProgVars::BinDir();
my $SpaceGroupDBPath     = Deps::MakePath($BinDir, "SPGRA", 0);

#==========================================
# メイン関数スタート
#==========================================

my $Rietan = new Rietan;
my %BravaisLattice;

my $CIF = new CIF();
unless($CIF->Read($CIFPath)) {
	print "<H2>Error: Can not read $CIFPath.</H2>\n";
	exit;
}

my $Crystal = $CIF->GetCCrystal();
my $BravaisLattice = $Crystal->GetBravaisLattice();
print "BravaisLattice: $BravaisLattice\n";

my @ExpandedAtomSiteList   = $Crystal->GetCExpandedAtomSiteList();
my $nTotalExpandedAtomSite = $Crystal->nTotalExpandedAtomSite();
print "# of sites: $nTotalExpandedAtomSite => ";

my @AtomSite = $Crystal->GetCBravaisLatticeAsymmetricAtomSiteList();
my $nAS = @AtomSite;
print "$nAS\n";
for(my $i = 0 ; $i < $nAS ; $i++) {
	my $atom      = $AtomSite[$i];
	my $label     = $atom->Label();
	my $atomname  = $atom->AtomNameOnly();
	my $charge    = $atom->Charge();
	my ($x,$y,$z) = $atom->Position();
	my $occ       = $atom->Occupancy();
	print "$i: $atomname $charge [$label]: ($x, $y, $z) [occ=$occ]\n";
}

#exit;


for(my $ispg = 1 ; ; $ispg++) {
#print "ispg=$ispg ";
	my $SPG;
	my $iset = 1;
	for( ; ; $iset++) {
		$SPG = $Rietan->ReadSpaceGroup($ispg, $iset);
		last if($SPG == 0);
		last if($iset > 1);

		my $SPGName   = $SPG->SPGName();
		my $LaueGroup = $SPG->LaueGroup();
		my $BravaisLattice = $SPG->GetBravaisLattice();
		$BravaisLattice{$BravaisLattice}++;
print "SPG #$ispg [set $iset]: $SPGName [$LaueGroup] [$BravaisLattice]\n";
	}
	last if($iset == 1 and $SPG == 0);
}

foreach my $b (sort keys %BravaisLattice) {
	print "$b: $BravaisLattice{$b}\n";
}

exit;
