package DSSPManager;

use lib qw(Core);

my $manager;

sub new {
  my ($class) = @_;
  if (defined($manager)){
    return $manager;
  }
  $manager = {};
  bless $manager, $class;
  return $manager;
}

sub get_HEC_hash{
   my ($self, $param) = @_;
   if (defined( $param->{_target})){
	my $dssp_file =  sprintf("/local/CASP13/RESULTS/DSSP/%s.dssp", $param->{_target});
	print "$dssp_file\n";
	my %hash;
	# parse dssp output file
	if (open I, "< $dssp_file"){
          my $flag = 0;
          while(defined (my $l = <I>)){
             if ($l =~ m/^\s*#\s+RESIDUE\s+AA\s+STRUCTURE/) {
                $flag = 1;
                next;
             }
             if ($flag == 0) {
                next;
             }
             my $res = substr($l, 5, 5); $res =~ s/\s//g;
             if ($res =~ m/^\s*$/){
                next;
             }
             my $ss = substr($l, 16, 1); $ss =~ s/\s//g;
	     $ss = uc($ss);
             if ($ss =~ m/^(G|H|I)$/) {
                $ss = 'H';
             } elsif ($ss =~ m/^(E|B)$/) {
                $ss = 'E';
             } else {
                $ss = 'C';
             }
             $hash{$res} = $ss;
          }
	  close(I);
	}
	return %hash;
   } else {
	return undef;
   }
};

sub get_hash{
   my ($self, $param) = @_;
   if (defined( $param->{_target})){
        my $dssp_file =  sprintf("/local/CASP13/RESULTS/DSSP/%s.dssp", $param->{_target});
        my %hash;
        # parse dssp output file
        if (open I, "< $dssp_file"){
          my $flag = 0;
          while(defined (my $l = <I>)){
             if ($l =~ m/^\s*#\s+RESIDUE\s+AA\s+STRUCTURE/) {
                $flag = 1;
                next;
             }
             if ($flag == 0) {
                next;
             }
             my $res = substr($l, 5, 5); $res =~ s/\s//g;
             if ($res =~ m/^\s*$/){
                next;
             }
             my $ss = substr($l, 16, 1); $ss =~ s/\s//g;
	     if ($ss =~ m/^$/){
		$ss = 'C';
	     }
             $ss = uc($ss);
             if ($ss =~ m/^(G|H|I|E|B|T|S|C)$/) {
             	$hash{$res}{_8code} = $ss;
		if ($ss =~ m/^(G|H|I)$/) {
			$hash{$res}{_HEC} = 'H';
		} elsif ($ss =~ m/^(E|B)$/) {
                	$hash{$res}{_HEC} = 'E';
             	} else { 
                	$hash{$res}{_HEC} = 'C';
             	}
	     }
          }
	  close(I);
	}
	return %hash;
   } else {
        return undef;
   }
}

1;
