Subversion Repositories wimsdev

Rev

Rev 14376 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
13403 bpr 1
#!/bin/sh
2
 
3
exec perl <<'EOF'
4
 
5
use strict "vars";
6
use warnings;
7
 
8
push (@ARGV,split(' ', $ENV{'wims_exec_parm'})) if ($ENV{'wims_exec_parm'});
9
my ($file)=shift @ARGV;
10
 
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');
13
my @valence3=('B','Al','N','P','As','Fe');
14
my @valence4=('C','Si','Ge','Sn','A','Q');
13418 bpr 15
my @other=('H');
13403 bpr 16
my ($nbatom, $nbbond);
17
my $cnt=1; my $nH=0;
18
my %hash = ();
19
my $hash = \%hash;
14689 bpr 20
my %bond=();
21
my $bond = \%bond;
13403 bpr 22
my %atom = ();
23
my $atom = \%atom;
24
my $cntmax=10000;
25
my @a=();
26
open(IN, "$file");
27
while(<IN>) {
28
  @a=split(" ", $_);
29
  if($cnt==4){
30
    $nbatom=$a[0]; $nbbond=$a[1];$cntmax=4+$nbatom;
31
  };
32
  if($cnt>4 && $cnt <= $cntmax) {
33
    $hash->{$cnt-4}{name}=$a[3];
34
    if(!$atom->{$a[3]}) { $atom->{$a[3]}=1} else { $atom->{$a[3]} ++}
13418 bpr 35
    if ( grep { $_ eq $a[3] } @valence4 ){ $hash->{$cnt-4}{hydrogen}=4}
36
    elsif ( grep { $_ eq $a[3] } @valence1 ){ $hash->{$cnt-4}{hydrogen}=1}
37
    elsif ( grep { $_ eq $a[3] } @valence2 ){ $hash->{$cnt-4}{hydrogen}=2}
38
    elsif ( grep { $_ eq $a[3] } @valence3 ){ $hash->{$cnt-4}{hydrogen}=3}
39
    elsif ( grep { $_ eq $a[3] } @other) {}
13403 bpr 40
    else {
14376 bpr 41
      #die( "$a[3]")
13403 bpr 42
    }
43
  }
14689 bpr 44
  my $tt;
13403 bpr 45
  if ($cnt > $cntmax && $cnt <= $cntmax + $nbbond) {
46
    if (!($hash->{$a[0]}{name} =~ /H\b/) && !($hash->{$a[1]}{name} =~ /H\b/)) {
14689 bpr 47
      $hash->{$a[0]}{'hydrogen'}-= $a[2];
48
      $hash->{$a[1]}{'hydrogen'}-= $a[2];
49
      $bond->{$cnt}=$a[0] . ',' . $a[1];
50
      $tt=$cnt<= $cntmax ? $cnt: $cnt-$cntmax;
51
      $bond->{$a[0]}=!$bond->{$a[0]} ? $tt: $bond->{$a[0]}.','. $tt;
52
      $bond->{$a[1]}=!$bond->{$a[1]} ? $tt: $bond->{$a[1]}.','. $tt;
13403 bpr 53
    }
14376 bpr 54
    if (!($hash->{$a[0]}{name} =~ /H\b/) && ($hash->{$a[1]}{name} =~ /H\b/)) {
14689 bpr 55
      $hash->{$a[0]}{'hydrogenfichier'}++;
14376 bpr 56
    }
57
    if (!($hash->{$a[1]}{name} =~ /H\b/) && ($hash->{$a[0]}{name} =~ /H\b/)) {
14689 bpr 58
      $hash->{$a[1]}{'hydrogenfichier'}++;
14376 bpr 59
    }
13403 bpr 60
  }
61
  if ($_ =~s /M  CHG//) {
62
    @a=split(" ", $_);
63
    my $cc=1;
64
    for my $ion (@a) {
65
      if ($cc%2==0) {
14689 bpr 66
        $hash->{$ion}{'hydrogen'} += $a[$cc];
13403 bpr 67
      }
68
      $cc++;
69
    }
70
  };
71
  $cnt ++;
72
}
73
close IN;
14144 bpr 74
my $nbhydrogen='';
75
for my $at (sort {$a<=>$b} keys %hash){
76
  $hash{$at}{'hydrogen'}=0 if (!(defined $hash{$at}{'hydrogen'}) || $hash{$at}{'hydrogen'}<0);
77
  $nH = $nH+ $hash{$at}{'hydrogen'};
14689 bpr 78
  $nbhydrogen .= "$at,$hash->{$at}{name},$hash->{$at}{'hydrogen'}\n";
13403 bpr 79
}
14376 bpr 80
my $nbhydrogenfichier='';
81
for my $at (sort {$a<=>$b} keys %hash){
82
  if(!($hash->{$at}{name} =~ /H\b/)){
83
    $hash{$at}{'hydrogenfichier'}=0 if (!(defined $hash{$at}{'hydrogenfichier'})
84
      || $hash{$at}{'hydrogenfichier'}<0);
14689 bpr 85
    $nbhydrogenfichier .= "$at,$hash->{$at}{name},$hash->{$at}{'hydrogenfichier'}\n";
14376 bpr 86
  }
87
}
88
 
13403 bpr 89
$atom{'H'}=$nH;
90
my $formula=$atom{'C'} > 0 ? 'C' : '' ;
91
$formula .= $atom{'C'} if $atom{'C'} > 1;
92
$formula .= 'H' if $atom{'H'} > 0;
93
$formula .= $atom{'H'} if $atom{'H'} > 1;
94
 
95
for my $at (sort keys %atom){
96
  next if (!(defined ($atom{$at})) || $atom{$at}==0 );
97
  next if ($at=~'C\b' || $at=~'H\b');
13418 bpr 98
  $formula .= $atom{$at}==1? $at : $at . $atom{$at};
13403 bpr 99
}
14689 bpr 100
my $bondprint="";
101
for my $bd (sort {$a<=>$b} keys %bond){
102
  next if (!(defined ($bond{$bd})));
103
  if($bd <= $nbatom){
104
    $bondprint .= "atom $bd,$bond{$bd}\n";
105
  } else {
106
    my $bd1=$bd-$nbatom-4; $bondprint .= "bond $bd1,$bond{$bd}\n";
107
  }
108
}
109
print "$formula,[$nbhydrogen],[$nbhydrogenfichier],[$bondprint]";
110
 
13403 bpr 111
EOF