#!/usr/bin/perl

use lib 'd:/Programs/Perl/lib';
#use lib 'd:/MyWebs/cgi-bin/lib';

use lib '/home/tkamiya/bin/lib';
use lib '/home/tkamiya/bin';

use JFile;
use Crystal::CIF;
use Crystal::Crystal;
use Sci::ChemicalReaction;

use strict;
#use warnings;

my $CIFFile = "FeAs.cif";
my $R = new ChemicalReaction;

my $in = new JFile;
$in->Open($CIFFile, "r") or die "$!\n";

while(1) {
	my $cif = new CIF;
	last if(!$cif->ReadByJFile($in));

	my $Crystal = $cif->GetCCrystal();
	$Crystal->ExpandCoordinates();

#	my $CrystalName = $Crystal->CrystalName();
	my ($a,$b,$c,$alpha,$beta,$gamma) = $Crystal->LatticeParameters();
	my $vol = $Crystal->Volume();
	my $Density = $Crystal->Density();
	my $SPG = $Crystal->GetCSpaceGroup();
	my $SPGName = $SPG->SPGName();
	$SPGName =~ s/[abczhr]$//i;
	$SPGName =~ s/\//\-/g;
	$SPGName =~ s/\s//g;
	my @AtomTypeList = $Crystal->GetCAtomTypeList();
	my @ExpandedAtomSiteList = $Crystal->GetCExpandedAtomSiteList();
	my $nAtomType = scalar @AtomTypeList;
	my $nAtomSite = scalar @ExpandedAtomSiteList;
#	$cif->{_chemical_formula_structural} =~ s/['\s]//g;
	my ($DBNum) = ($cif->{header} =~ /(\d+)/);

	my %nAtomType;
	for(my $i = 0 ; $i < $nAtomSite ; $i++) {
		my $site = $ExpandedAtomSiteList[$i];
		my $name = $site->AtomNameOnly();
		$nAtomType{$name}++;
	}
#	my $FormulaSum = $R->SortChemicalFormula($cif->{_chemical_formula_sum});
	my $FormulaSum = '';
	foreach my $name (sort keys %nAtomType) {
		$nAtomType{$name} = '' if($nAtomType{$name} == 1);
		$FormulaSum .= "$name$nAtomType{$name}";
	}

	print "header: $cif->{header}\n";
	print "DBNum: $DBNum\n";
#	print "Formula: $cif->{_chemical_formula_structural}\n";
	print "Formula: $FormulaSum\n";
#	print "CrystalName: $CrystalName\n";
	print "SPGName: $SPGName\n";
	print "nAtomType: $nAtomType\n";
	print "nAtomSite: $nAtomSite\n";
	print "cell: $a $b $c  $alpha $beta $gamma\n";
	print "Density: $Density g/cm^3\n";

	my $OutFile = sprintf("%s_%05d_%s_%d_%d_%d.cif", 
			$FormulaSum,
			int($Density*1000), $SPGName, 
			$nAtomType, $nAtomSite, $DBNum);
	print "OutFile: $OutFile\n";

	$Crystal->SetOutputMode('choose');
	$cif->CreateCIFFileFromCCrystal($Crystal, $OutFile, 1);
	print "\n";
	
}

$in->Close();