File: CollectBrakets.pm

package info (click to toggle)
dmrgpp 6.06-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 113,900 kB
  • sloc: cpp: 80,986; perl: 14,772; ansic: 2,923; makefile: 83; sh: 17
file content (93 lines) | stat: -rw-r--r-- 1,400 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/perl

use strict;
use warnings;

package CollectBrakets;

sub main
{
	my ($filename, $foutname) = @_;
	open(FILE, "<", $filename) or die "$0: Cannot open $filename : $!\n";
	if (!open(FOUT, ">", $foutname)) {
		close(FILE);
		die "$0: Cannot write to $foutname : $!\n";
	}

	while (<FILE>) {
		next if (/^#/);
		my $line = $_;
		chomp;
		my @temp = split;
		my $n = scalar(@temp);
		next if ($n != 5);
		next unless isBraket($temp[3]);
		print FOUT almostZeroToZero($line);
	}

	close(FOUT);
	close(FILE);
}

sub almostZeroToZero
{
	my ($x) = @_;
	$_ = $x;
	my $hasEol = 0;
	if (substr($x, -1) eq "\n") {
		$hasEol = 1;
	} else {
		$_ = $x;
	}

	my @temp = split;
	my $ret = "";
	my $n = scalar(@temp);
	for (my $i = 0; $i < $n; ++$i) {
		$ret .= almost0To0($temp[$i])." ";
	}

	return ($hasEol) ? $ret."\n" : $ret;
}

sub almost0To0
{
	my ($x) = @_;
	return $x if (!isFloat($x));
	return (abs($x) < 1e-6) ? "0" : $x;
}

sub isFloat
{
	my ($x) = @_;
	$_ = $x;
	return (/^[+-]?(?=\.?\d)\d*\.?\d*(?:e[+-]?\d+)?\z/i);
}

sub isBraket
{
	my ($x) = @_;
	my ($bra, $ket);
	if ($x =~ /^\<(.+)\|.+\|(.+)\>$/) {
		$bra = $1;
		$ket = $2;
	} elsif ($x =~ /^\<(.+)\|(.+)\>$/) {
		$bra = $1;
		$ket = $2;
	} else {
		return 0;
	}

	(defined($bra) and defined($ket)) or return 0;

	return (isState($bra) and isState($ket));
}

sub isState
{
	my ($s) = @_;
	return ($s eq "gs" or $s =~ /^P\d+/);
}

1;