1234 N CA C O CB CG CD1 CD2 CE1 CE2 CZ OH H 2HB 3HB HD1 HD2 HE1 HE2 HH HD1 HE1 | | 1HB CD1-CE1 H-N | / \ CA-CB-CG CZ-OH-HH C | \ / O 2HB CD2-CE2 | | HD2 HE2 #### #########sort atoms into three groups######### foreach my $a (@names){ push @main, $self->{'all'}{$a} if $self->{'all'}{$a}->mainHeavy; push @heavy, $self->{'all'}{$a} if $self->{'all'}{$a}->sideHeavy; push @proton, $self->{'all'}{$a} if $self->{'all'}{$a}->proton; $names{$self->{'all'}{$a}->atomName}=$a; } ##########do main chains, single digits############ foreach my $a (@main){ if($a->atomName eq 'N'){ $main{1}=$a; }elsif($a->atomName eq 'CA'){ $main{2}=$a; }elsif($a->atomName eq 'C'){ $main{3}=$a; }elsif($a->atomName eq 'O'){ $main{4}=$a; } } #########Do side chain################ my %heavyweights = ( 'C' => 1, 'N' => 2, 'O' => 3); my %greekweights = ( 'A' => 1, 'B' => 2, 'G' => 3, 'D' => 4, 'E' => 5, 'Z' => 6, 'H' => 7 ); foreach my $a (@heavy){ $main{$heavyweights{$a->atomEl}.$greekweights{$a->atomRemote}} = $a; } ####Do protons############ #I actually used 4 digits, because of the proton quanitifier #itself foreach my $a (@proton){ print $a->atomName; my $n = '9'; $n .= $greekweights{$a->atomRemote} if $a->atomRemote; $n .= 0 unless $a->atomRemote; $n .= $a->atomBranch if $a->atomBranch; $n .= 0 unless $a->atomBranch; $n .= $a->hydNumber if $a->hydNumber; $n .= 0 unless $a->hydNumber; $main{$n} = $a; } foreach my $i ( sort{ $a<=>$b } keys %main ){ print $main{$i}->atomName." $i\n"; push @result, $main{$i}; } __END__ N 1 CA 2 C 3 O 4 CB 12 CG 13 CD 14 NE2 25 OE1 35 H 9000 HA 9100 HB 9202 HB 9203 HG 9302 HG 9303 HE2 9521 HE2 9522