Rev 13403 | Rev 14144 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 13403 | Rev 13418 | ||
---|---|---|---|
Line 10... | Line 10... | ||
10 | 10 | ||
11 | my @valence1=('Li','Na','K','F','Cl','Br','I','At'); |
11 | my @valence1=('Li','Na','K','F','Cl','Br','I','At'); |
12 | my @valence2=('Be','Mg','Ca','Sr','Ba','O','Se','Te','Mn','Hg','Zn','Cu','S'); |
12 | my @valence2=('Be','Mg','Ca','Sr','Ba','O','Se','Te','Mn','Hg','Zn','Cu','S'); |
13 | my @valence3=('B','Al','N','P','As','Fe'); |
13 | my @valence3=('B','Al','N','P','As','Fe'); |
14 | my @valence4=('C','Si','Ge','Sn','A','Q'); |
14 | my @valence4=('C','Si','Ge','Sn','A','Q'); |
15 | - | ||
- | 15 | my @other=('H'); |
|
16 | my ($nbatom, $nbbond); |
16 | my ($nbatom, $nbbond); |
17 | my $cnt=1; my $nH=0; |
17 | my $cnt=1; my $nH=0; |
18 | my %hash = (); |
18 | my %hash = (); |
19 | my $hash = \%hash; |
19 | my $hash = \%hash; |
20 | my %atom = (); |
20 | my %atom = (); |
Line 28... | Line 28... | ||
28 | $nbatom=$a[0]; $nbbond=$a[1];$cntmax=4+$nbatom; |
28 | $nbatom=$a[0]; $nbbond=$a[1];$cntmax=4+$nbatom; |
29 | }; |
29 | }; |
30 | if($cnt>4 && $cnt <= $cntmax) { |
30 | if($cnt>4 && $cnt <= $cntmax) { |
31 | $hash->{$cnt-4}{name}=$a[3]; |
31 | $hash->{$cnt-4}{name}=$a[3]; |
32 | if(!$atom->{$a[3]}) { $atom->{$a[3]}=1} else { $atom->{$a[3]} ++} |
32 | if(!$atom->{$a[3]}) { $atom->{$a[3]}=1} else { $atom->{$a[3]} ++} |
33 | if ( grep { $_ eq $a[3] } @valence4 ){ $hash->{$cnt-4}{ |
33 | if ( grep { $_ eq $a[3] } @valence4 ){ $hash->{$cnt-4}{hydrogen}=4} |
34 | elsif ( grep { $_ eq $a[3] } @valence1 ){ $hash->{$cnt-4}{ |
34 | elsif ( grep { $_ eq $a[3] } @valence1 ){ $hash->{$cnt-4}{hydrogen}=1} |
35 | elsif ( grep { $_ eq $a[3] } @valence2 ){ $hash->{$cnt-4}{ |
35 | elsif ( grep { $_ eq $a[3] } @valence2 ){ $hash->{$cnt-4}{hydrogen}=2} |
36 | elsif ( grep { $_ eq $a[3] } @valence3 ){ $hash->{$cnt-4}{ |
36 | elsif ( grep { $_ eq $a[3] } @valence3 ){ $hash->{$cnt-4}{hydrogen}=3} |
- | 37 | elsif ( grep { $_ eq $a[3] } @other) {} |
|
37 | else { |
38 | else { |
38 | #die( "$a[3]") |
39 | #die( "$a[3]") |
39 | } |
40 | } |
40 | } |
41 | } |
41 | if ($cnt > $cntmax && $cnt <= $cntmax + $nbbond) { |
42 | if ($cnt > $cntmax && $cnt <= $cntmax + $nbbond) { |
42 | if (!($hash->{$a[0]}{name} =~ /H\b/) && !($hash->{$a[1]}{name} =~ /H\b/)) { |
43 | if (!($hash->{$a[0]}{name} =~ /H\b/) && !($hash->{$a[1]}{name} =~ /H\b/)) { |
43 |
|
44 | $hash->{$a[0]}{hydrogen}-= $a[2]; |
44 | $hash->{$a[0]}{hydrogen}=$hash->{$a[0]}{valence}-$a[2]; |
- | |
45 | } else { |
- | |
46 |
|
45 | $hash->{$a[1]}{hydrogen}-= $a[2] |
47 | } |
46 | } |
48 | if(!(defined $hash->{$a[1]}{hydrogen})) { |
- | |
49 | $hash->{$a[1]}{hydrogen}=$hash->{$a[1]}{valence}-$a[2] |
- | |
50 | } else { |
- | |
51 | $hash->{$a[1]}{hydrogen} -= $a[2] |
- | |
52 | } |
- | |
53 | } |
- | |
54 | } |
47 | } |
55 | if ($_ =~s /M CHG//) { |
48 | if ($_ =~s /M CHG//) { |
56 | @a=split(" ", $_); |
49 | @a=split(" ", $_); |
57 | my $cc=1; |
50 | my $cc=1; |
58 | for my $ion (@a) { |
51 | for my $ion (@a) { |
59 | if ($cc%2==0) { |
52 | if ($cc%2==0) { |
60 | $hash->{$ion}{hydrogen} += $a[$cc] |
53 | $hash->{$ion}{hydrogen} += $a[$cc]; |
61 | } |
54 | } |
62 | $cc++; |
55 | $cc++; |
63 | } |
56 | } |
64 | }; |
57 | }; |
65 | $cnt ++; |
58 | $cnt ++; |
Line 76... | Line 69... | ||
76 | $formula .= $atom{'H'} if $atom{'H'} > 1; |
69 | $formula .= $atom{'H'} if $atom{'H'} > 1; |
77 | 70 | ||
78 | for my $at (sort keys %atom){ |
71 | for my $at (sort keys %atom){ |
79 | next if (!(defined ($atom{$at})) || $atom{$at}==0 ); |
72 | next if (!(defined ($atom{$at})) || $atom{$at}==0 ); |
80 | next if ($at=~'C\b' || $at=~'H\b'); |
73 | next if ($at=~'C\b' || $at=~'H\b'); |
81 |
|
74 | $formula .= $atom{$at}==1? $at : $at . $atom{$at}; |
82 | } |
75 | } |
83 | print $formula . "\n"; |
76 | print $formula . "\n"; |
84 | 77 | ||
85 | EOF |
78 | EOF |