#!/usr/bin/env perl
# Calculate occupancies, weights and their differences between
# successive iterations.
# Rok Zitko, zitko@theorie.physik.uni-goettingen, Oct 2008

use warnings;

my $iter = `getiter`;

weights("c-self", "OCCUP_C");
diff("c-self", "DIFFS_C");

sub weights {
 my $what = shift;
 my $output = shift;

 my $fn = "dmft/$iter-$what.dat";
 -e $fn or die "$fn does not exist. Stopped";

 my $weight = `integrate $fn`;
 my $occupancy = `integrateneg $fn`;
 chomp ($weight, $occupancy);
 $occupancy *= 2; # two electrons!
 print "$fn - weight=$weight occupancy=$occupancy\n";
    
 open(OUT, ">>$output") or die "Can't append to $output: $!. Stopped";
 print OUT "$iter $weight $occupancy\n";
 close OUT;
}

sub diff {
 return if ($iter == 1);
    
 my $what = shift;
 my $output = shift;
    
 my $fn1 = "dmft/$iter-$what.dat";
 my $previous = $iter-1;
 my $fn2 = "dmft/$previous-$what.dat";

 -e $fn1 or die "$fn1 does not exist. Stopped";
 -e $fn2 or die "$fn2 does not exist. Stopped";
    
 my $diff = `subtracty $fn1 $fn2 | integrateabs`;
 my $occupancydiff = `subtracty $fn1 $fn2 | integrateneg`;
 chomp ($diff, $occupancydiff);

 print "diff($fn1 - $fn2)=$diff\n";
 print "occupancy diff=$occupancydiff\n";
    
 open(OUT, ">>$output") or die "Can't append to $output: $!. Stopped";
 print OUT "$iter $diff\n";
 close OUT;
}
