123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- package HHpredConfig;
- use lib $ENV{"HHLIB"}."/scripts";
- use HHPaths;
- use strict;
- use vars qw($AUTOLOAD);
- use Carp;
- use base 'Class::Singleton';
- {
- ## default values
- my %_attr_data = (
- _cpus => [4, 'read/write'],
- _hhsearch_mact => [0.05, 'read/write'],
- _hhblits_mact => [0.5, 'read/write'],
- _hhblits_rounds => [3, 'read/write'],
- _numberOfGeneratedModels => [3, 'read/write'],
- _maxNumOfTemplates => [8, 'read/write'],
- _doFiltering => [1, 'read/write'],
- _parallelFiltering => [0, 'read/write'],
- _replaceDistanceRestraints => [1, 'read/write'],
- _multiTemplate => [1, 'read/write'],
- _templateWeightStrategy => [1, 'read/write'],
- _preselectTemplates => [1, 'read/write'],
- _rankTemplates => [1, 'read/write'],
- _realignProbcons => [0, 'read/write'],
- _assessModel => [1, 'read/write'],
- _doParallelModeller => [0, 'read/write'],
-
- _hhlib => ["$hhlib", 'read'],
- _hhalign => ["$hhbin/hhalign", 'read'],
- _hhsearch => ["$hhbin/hhsearch", 'read'],
- _hhblits => ["$hhbin/hhblits", 'read'],
- _hhmake => ["$hhbin/hhmake", 'read'],
- _hhfilter => ["$hhbin/hhfilter", 'read'],
- _hhmakemodel => ["$hhlib/scripts/hhpred/dependencies/hhmakemodel.pl", 'read'],
- _addss => ["$hhscripts/addss.pl", 'read'],
- _multithread => ["$hhscripts/multithread.pl", 'read'],
- _TMscore => ["$hhlib/scripts/hhpred/bin/TMscore", 'read'],
- _TMalign => ["$hhlib/scripts/hhpred/bin/TMalign", 'read'],
- _repairPDB => ["$hhlib/scripts/hhpred/bin/repair_pdb.pl", 'read'],
- _modellerParallel => ["$hhlib/scripts/hhpred/bin/modeller9.13/bin/modpy.sh python2.7 ", 'read'],
- _modeller => ["$hhlib/scripts/hhpred/bin/modeller9.13/bin/modpy.sh python2.7", 'read'],
-
- _pdbdir => ["XXXXX", 'read'],
- _uniprot20 => ["XXXXX", 'read'],
-
- _MDNWeightsLayer1CACA => ["$hhlib/scripts/hhpred/share/neural-net/MDNWeightsLayer1CACAminP.dat", 'read'],
- _MDNWeightsLayer2CACA => ["$hhlib/scripts/hhpred/share/neural-net/MDNWeightsLayer2CACAminP.dat", 'read'],
- _MDNWeightsLayer1NO => ["$hhlib/scripts/hhpred/share/neural-net/MDNWeightsLayer1NOminP.dat", 'read'],
- _MDNWeightsLayer2NO => ["$hhlib/scripts/hhpred/share/neural-net/MDNWeightsLayer2NOminP.dat", 'read'],
- _MDNWeightsLayer1SCMC => ["$hhlib/scripts/hhpred/share/neural-net/MDNWeightsLayer1SCMCminP.dat", 'read'],
- _MDNWeightsLayer2SCMC => ["$hhlib/scripts/hhpred/share/neural-net/MDNWeightsLayer2SCMCminP.dat", 'read'],
- _MDNWeightsLayer1SCSC => ["$hhlib/scripts/hhpred/share/neural-net/MDNWeightsLayer1SCSCminP.dat", 'read'],
- _MDNWeightsLayer2SCSC => ["$hhlib/scripts/hhpred/share/neural-net/MDNWeightsLayer2SCSCminP.dat", 'read'],
- );
- sub _accessible {
- my ($self, $attr, $mode) = @_;
- $_attr_data{$attr}[1] =~ /$mode/;
- }
- sub _default_for {
- my ($self, $attr) = @_;
- $_attr_data{$attr}[0];
- }
- sub _standard_keys {
- keys %_attr_data;
- }
- }
- my $matchKeyValue = qr/^\s*(\S+)\s*=\s*(.+?)\s*$/;
- ## configFile is contains entries of the form
- ## key = value
- sub _new_instance {
- my ($caller) = @_;
- my $caller_is_obj = ref($caller);
- my $class = $caller_is_obj || $caller;
- my $self = bless {}, $class;
-
- my %argsInFile;
- my $configFile = $ENV{'HHPRED_CONFIG'};
- if (defined($configFile) && $configFile ne "") {
- open(CH, "< $configFile") or die("Cant open $configFile: $!\n");
- while(my $line = <CH>) {
- next if ($line =~ /^\s*#/); ## skip comments
- if ($line =~ /$matchKeyValue/) {
- my $key = $1;
- my $value = $2;
- $argsInFile{$key} = $value;
- }
- }
- close(CH);
- }
- foreach my $attrname ( $self->_standard_keys() ) {
- my ($argname) = ($attrname =~ /^_(.*)/);
- ## take value from file (if available)
- if (exists $argsInFile{$argname}) {
- $self->{$attrname} = $argsInFile{$argname};
- } elsif ($caller_is_obj) { ## copy values
- $self->{$attrname} = $caller->{$attrname};
- } else { ## take default values
- $self->{$attrname} = $self->_default_for($attrname)
- }
- }
- return $self;
- }
- sub read_from_file {
- my ($self, $configFile) = @_;
- my %argsInFile;
- open(CH, "< $configFile") or die("Cant open $configFile: $!\n");
- while(my $line = <CH>) {
- next if ($line =~ /^\s*#/); ## skip comments
- if ($line =~ /$matchKeyValue/) {
- my $key = $1;
- my $value = $2;
- $argsInFile{$key} = $value;
- }
- }
- close(CH);
- foreach my $attrname ( $self->_standard_keys() ) {
- my ($argname) = ($attrname =~ /^_(.*)/);
- if (exists $argsInFile{$argname}) {
- $self->{$attrname} = $argsInFile{$argname};
- }
- }
- }
- sub write_to_file {
- my ($self, $outFile) = @_;
- open(OH, "> $outFile") or die("Cant write to $outFile: $!\n");
- my $out = $self->to_string();
- print(OH $out);
- close(OH);
- }
- sub print {
- my $self = shift;
- my $out = $self->to_string();
- print $out;
- }
- sub to_string {
- my $self = shift;
- ## find longest key and value
- my $maxKeyLen = -99999;
- my $maxValLen = -99999;
- foreach my $attrname ( $self->_standard_keys() ) {
- $maxKeyLen = length($attrname) if (length($attrname) > $maxKeyLen);
- $maxValLen = length($self->{$attrname}) if (length($self->{$attrname}) > $maxValLen);
- }
- my $out = "";
- $out .= "-" x ($maxKeyLen + $maxValLen + 4) . "\n";
- $out .= "HHpred configuration parameters:\n";
- $out .= "-" x ($maxKeyLen + $maxValLen + 4) . "\n";
- foreach my $attrname ( sort $self->_standard_keys() ) {
- my ($argname) = ($attrname =~ /^_(.*)/);
- my $entry = sprintf("%-*s => %-s\n", $maxKeyLen, $argname, $self->{$attrname});
- $out .= $entry;
- }
- $out .= "-" x ($maxKeyLen + $maxValLen + 4) . "\n";
- return $out;
- }
- ## automatically generated getters and setters:
- ## $AUTOLOAD contains full name of a routine and is checked for name/accessiblity
- ## then an anonymous routine (names e.g. get_name) is created and stored
- ## in table for future use
- sub AUTOLOAD {
- no strict "refs";
- my ($self, $newval) = @_;
- if ($AUTOLOAD =~ /.*::get(_\w+)/ && $self->_accessible($1, 'read')) {
- my $attr_name = $1;
- *{$AUTOLOAD} = sub { return $_[0]->{$attr_name} };
- return $self->{$attr_name}
- }
- if ($AUTOLOAD =~ /.*::set(_\w+)/ && $self->_accessible($1, 'write')) {
- my $attr_name = $1;
- *{$AUTOLOAD} = sub { $_[0]->{$attr_name} = $_[1]; return };
- $self->{$1} = $newval;
- return
- }
- ## mistaken?
- croak("No such method: $AUTOLOAD");
- }
- sub DESTROY {
- }
- 1;
|