#!/usr/bin/perl
use lib 'd:/Programs/Perl/lib';

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

use ProgVars;
use Utils;

use Crystal::CIF;
use Crystal::Crystal;
use Crystal::MXD;

my $LF                 = "<br>\n";
my $DirectorySeparator = "\\";
my $Program          = basename($0);
my $WebRootDir       = "d:\\MyWebs";
my $CGIPath          = Deps::MakePath($WebRootDir, "cgi-bin", 1);
my $ProgramDir       = "d:\\Programs";
my $ResearchRootURL  = "/Research";

my $ResearchDir      = Deps::MakePath($WebRootDir, "Research", 0);
my $DBDir            = Deps::MakePath($ResearchDir, "Databases", 0);
my $WorkingDir       = Deps::MakePath($ResearchDir, "Working", 0);
my $XPRDir           = Deps::MakePath($ProgramDir, "X線回折", 0);
   $XPRDir           = Deps::MakePath($XPRDir, "XPR", 0);
my $KDir             = Deps::MakePath($XPRDir, "K${DirectorySeparator}Release", 0);

my $KPath            = Deps::MakePath($KDir, "K.exe", 0);

my $PeriodicTable3DB = Deps::MakePath($DBDir, "PERIODIC.CSV", 0);
my $SpaceGroupDBPath = Deps::MakePath($DBDir, "SPGRA", 0);

my $CrystalDBDir             = Deps::MakePath($WebRootDir, "Research", 0);
$CrystalDBDir                = Deps::MakePath($CrystalDBDir, "CrystalStructure", 0);
my $DeleteCrystalDBDir       = Deps::MakePath($CrystalDBDir, "Deleted", 0);
my $CrystalDBURL             = Deps::MakePath($ResearchRootURL, "CrystalStructure", 0);
my $CrystalCommonFileDir     = Deps::MakePath($CrystalDBDir, "Common", 0);
my $CrystalRietanFileDir     = Deps::MakePath($CrystalDBDir, "Rietan", 0);
my $CrystalDVXaFileDir       = Deps::MakePath($CrystalDBDir, "DVXa", 0);
my $CrystalLDFileDir         = Deps::MakePath($CrystalDBDir, "LD", 0);
my $CrystalGULPFileDir       = Deps::MakePath($CrystalDBDir, "GULP", 0);
my $CrystalMXDOrtoFileDir    = Deps::MakePath($CrystalDBDir, "MXDOrto", 0);
#my $CrystalVASPFileDir       = "d:\\Temp";
my $CrystalVASPFileDir       = Deps::MakePath($CrystalDBDir, "VASP", 0);
my $CrystalPWSCFFileDir      = Deps::MakePath($CrystalDBDir, "PWSCF", 0);
my $CrystalTranSIESTAFileDir = Deps::MakePath($CrystalDBDir, "TranSIESTA", 0);
my $CrystalWIEN2kFileDir     = Deps::MakePath($CrystalDBDir, "WIEN2k", 0);

my $WebElementsBaseURL = "http://www.webelements.com/";
my $WebElementsURL     = "http://www.webelements.com/webelements/elements/text/{AtomName}/key.html";
my $WebElementsIEURL   = "http://www.webelements.com/webelements/elements/text/{AtomName}/ionz.html";
my $SPGDBBaseURL       = "http://www.cryst.ehu.es/";




	print "<H2>Make MXDOrto files.</H2>\n";

my $CIFFile = ($ARGV[0])? $ARGV[0] : 'file09p-final.cif';
my $SaveDir = ".";
my $MXDFunction = 'MDNPT';

	my $CIF = new CIF();
	my $Crystal = new Crystal();

	unless($CIF->Read($CIFFile)) {
		print "aError: Can not read $CIFFile.$LF$LF";
		return 0;
	}
	$Crystal = $CIF->GetCCrystal();

	$Crystal->SetOutputMode('asymmetric');

	$Crystal->FillAtomTypeData();
	$Crystal->SortAtomTypeOrder("ChargeAscend");

#ファイル名を（ベース名, ディレクトリ名, 拡張子）に分解
	my @filenames = fileparse($CIFFile, "\.[^\.]+");
	my $FilePrefix       = $filenames[0];
	my $fname05 = "$FilePrefix.f05";
	my $File05 = Deps::MakePath($SaveDir, $fname05, 0);
	my $fname07 = "$FilePrefix.f07";
	my $File07 = Deps::MakePath($SaveDir, $fname07, 0);
	my $fname10 = "$FilePrefix.f10";
	my $File10 = Deps::MakePath($SaveDir, $fname10, 0);

	print "$LF";
	print "File05: $File05$LF";
	print "File07: $File07$LF";
	print "File10: $File10$LF";

	print "[$File05] was deleted.$LF" if(unlink($File05));
	print "[$File07] was deleted.$LF" if(unlink($File07));
	print "[$File10] was deleted.$LF" if(unlink($File10));

	my $MXD = new MXD();
	if($MXDFunction =~ /XD/i) {
		$MXD->SetSampleName("$filenames[0]");
		$MXD->SetnExpandCells(1, 1, 1);
	}
	else {
		$MXD->SetSampleName("$filenames[0] (1 x 1 x 1)");
#		$MXD->SetnExpandCells(1, 1, 1);
		$MXD->SetnExpandCells(1, 1, 1);
	}

	if($MXD->MakeMXDFiles($Crystal, $MXDFunction,
		$File05, $File07, $File10, 0) <= 0) {
		print "<b>Error in Research.pl::MakeMXDORTOFiles: "
			."Can not create *.f0? files.</b>$LF";
		return -1;
	}

	print "$LF";
	print "<b>MXDOrto Files made by MXD.pm (not recommended):</b>$LF";

	print "$LF";
	print "<b>Make MXD files by MXDInput.exe</b>$LF";

	my ($FileXTALDATA, $MXDInputFile, $MXDInputOutFile,
		$MXDFile05File, $MXDFile06File, $MXDFile07File, $MXDFile10File)
		= $MXD->MakeXTALDATA($Crystal, $MXDFunction, $SaveDir, $FilePrefix);
	if($FileXTALDATA == -1) {
		print "<b>Error in Research.pl::MakeMXDORTOFiles: Can not create file [$FileXTALDATA].</b>$LF";
		exit;
	}

	print "<b>MXDOrto Files made by MXDInput.exe (recommended):</b>$LF";

exit;
