Я написал программу на Perl для анализа моих исследований.
Одна функция моих Perl-скриптов используется для подсчета числа атомов в разных группах (я использовал два массива @former_lists
и @modifier_lists
для идентификации двух групп).
Если имя атома находится в group1 (@former_lists
), то переменная $cnt_former_intf++
;
если он находится в группе 2 (@modifier_lists
), то переменная $cnt_modf_intf++
;
если это атом кислорода, то $cnt_oxyg_intf++
;
еще {$cnt_other_intf++
}.
Ниже приведена часть моих кодов.
......
my $flg_interface;
my @former_lists;
my $cnt_former_intf=0;
my $cnt_former_exbox=0;
my $cnt_modf_intf=0;
my $cnt_modf_exbox=0;
my $cnt_oxyg_intf=0;
my $cnt_oxyg_exbox=0;
my $cnt_other_intf=0;
my $cnt_other_exbox=0;
$former_lists[0]='SI';$former_lists[1]='AL';
my @modifier_lists;
$modifier_lists[0]='CA';$modifier_lists[1]='NA';
my $hash_key;
my %hash_type_spc;
$hash_type_spc{1}='SI';
$hash_type_spc{2}='AL';
$hash_type_spc{3}='CA';
$hash_type_spc{4}='O';
$hash_type_spc{5}='H';
$hash_type_spc{6}='NA';
my @atom_type;
$atom_type[1]=1;
$atom_type[2]=2;
$atom_type[3]=3;
$atom_type[4]=4;
$atom_type[5]=5;
$atom_type[6]=6;
my $atom_id;
for($atom_id=1;$atom_id<=17587;$atom_id++)
{ $hash_key=$atom_type[$atom_id];
$_=uc($hash_type_spc{$hash_key});chomp($_);
if ($flg_interface ==1) #atom is in interface box
{
if($_ eq 'O'){$cnt_oxyg_intf++;}
elsif($_ eq 'H'){$cnt_hydg_intf++;}
elsif(grep(/$_/,@former_lists) eq 1){$cnt_former_intf++;}
#elsif(grep(/$_/,@modifier_lists) == 1){$cnt_modf_intf++;}
elsif(grep(/$_/,@modifier_lists) eq 1){$cnt_modf_intf++;}
else{$cnt_other_intf++;}
}
else #atom is in extended box
{
if($_ eq "O"){$cnt_oxyg_exbox++;}
elsif($_ eq "H"){$cnt_hydg_exbox++;}
elsif(grep(/$_/,@former_lists) eq 1){$cnt_former_exbox++;}
elsif(grep(/$_/,@modifier_lists) eq 1){$cnt_modf_exbox++;}
else{$cnt_other_exbox++;}
}
}#end for
print "1021 $_$atom_id \t\$flg_interface=$flg_interface \t\$cnt_former_intf=$cnt_former_intf \t\$cnt_modf_intf=$cnt_modf_intf \t\$cnt_modf_intf=$cnt_modf_intf\t\$cnt_former_exbox=$cnt_former_exbox\t\$cnt_modf_exbox=$cnt_modf_exbox\n";
$tmp=<STDIN>;
....
Результат показан ниже.
1021 SI6090 $flg_interface=0 $cnt_former_intf=0 $cnt_modf_intf=0 $cnt_former_exbox=0 $cnt_modf_exbox=1
1021 AL7235 $flg_interface=0 $cnt_former_intf=0 $cnt_modf_intf=0 $cnt_former_exbox=0 $cnt_modf_exbox=2
1021 CA8029 $flg_interface=0 $cnt_former_intf=0 $cnt_modf_intf=0 $cnt_former_exbox=0 $cnt_modf_exbox=3
где 1021 - метка. Здесь
1-й выход SI6090 должен иметь $cnt_former_exbox=1
вместо 0
;
2-й выход AL7235 должен иметь $cnt_former_exbox=2
вместо 0
;
3-й выход CA8029 должен иметь $cnt_modf_exbox=1
вместо 3
.
Любые предложения и помощь будут высоко оценены.
Я высоко ценю, если вы можете поделиться более эффективным способом.
ПРИМЕЧАНИЕ. Мои данные - тяжелые данные. Я должен рассмотреть эффективность бега.