Subversion Repositories wimsdev

Rev

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}{valence}=4}
33
    if ( grep { $_ eq $a[3] } @valence4 ){ $hash->{$cnt-4}{hydrogen}=4}
34
    elsif ( grep { $_ eq $a[3] } @valence1 ){ $hash->{$cnt-4}{valence}=1}
34
    elsif ( grep { $_ eq $a[3] } @valence1 ){ $hash->{$cnt-4}{hydrogen}=1}
35
    elsif ( grep { $_ eq $a[3] } @valence2 ){ $hash->{$cnt-4}{valence}=2}
35
    elsif ( grep { $_ eq $a[3] } @valence2 ){ $hash->{$cnt-4}{hydrogen}=2}
36
    elsif ( grep { $_ eq $a[3] } @valence3 ){ $hash->{$cnt-4}{valence}=3}
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
      if(!(defined $hash->{$a[0]}{hydrogen})) {
44
      $hash->{$a[0]}{hydrogen}-= $a[2];
44
        $hash->{$a[0]}{hydrogen}=$hash->{$a[0]}{valence}-$a[2];
-
 
45
    } else {
-
 
46
        $hash->{$a[0]}{hydrogen}-= $a[2]
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
   $formula .= $atom{$at}==1? $at : $at . $atom{$at} ;
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