#!/usr/bin/perl -w

######################################################################################################################################
# fugue_filter.pl
######################################################################################################################################
#
#  Written by Osvaldo Graña, January 2001
#  
#  This program filters data from "Fugue profile lib search" to use it under THREADLIZE
#  ("http://www.cnb.uam.es/~pazos/threadlize" Pazos, Rost & Valencia (1999) Bioinformatics 15(12):1062-1063)
# 
#
#  HOW TO USE IT:
#
#  Once you get your results within an email from fugue server (read in the web page what options you have to
#  check in the fugue cgi), save the email content in a ".txt" file (for example "1aaf.txt") and filter it
#  as follows:
#
#		fugue_filter.pl  1aaf.txt >  results
#
#  "results" will contain filtered data, it can be used as an input for THREADLIZE:
#
#		threadlize  results  &
#
#
# LICENSE TERMS:
#
# This program is free licensed for academic and non-profit users. Private users, please, contact Osvaldo Graña (osvaldog@cnb.uam.es).
# 
# Please, do not modify the code.  
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY.
#
# 
#
#							Osvaldo Graña
#							Protein Design Group (CNB-CSIC)
#							Campus Universidad Autonoma.
#							Cantoblanco. 28049 Madrid.
#							Tlf: +34-91-5854570. Fax: +34-91-5854506.
#							osvaldog@cnb.uam.es
#							http://www.pdg.cnb.uam.es/
#									
#
######################################################################################################################################



 
use strict;

my (
	@in,
	@linea,
	@score,
	$dimension,
	$i,
	$j,
	$actual,
	$copiar,
	$target,
	@secuencia_target,
	@pdbcode,
	@secuencia_structure,
	$aux,
	@prov_target,
	@prov_model,
	$copiar2,
	$long,
	$contador,
	$aux2,
	$espacios

);


open (FUGUE,$ARGV[0]) || die "fugue_pilter.pl: Cannot open $ARGV[0]\n\n";
@in=<FUGUE>;
close FUGUE;

@score=();
$dimension=@in;
$copiar=0;

@secuencia_target=();

for ($i=0;$i<$dimension;$i++)
{
	if (($in[$i]=~ />P1/) && ($in[$i+1]=~ /sequence/))
	{
		$copiar=1;
		$i=$i+2;
	}
		
	if ($copiar==1)
	{
		$_=$in[$i];
		$_=~ s/\-|\*| //g;
		$_=uc($_);
		push @secuencia_target,$_;	
		if ((defined $in[$i+1]) && ($in[$i+1]=~ /^\n/))
		{
			last;
		}
	}
}	

$copiar=0;

for ($i=0;$i<$dimension;$i++)
{
	if ($copiar==1)
	{
		push @score,$in[$i];
		
		if ((defined $in[$i+1]) && ($in[$i+1]=~ /^\n/))
		{
			last;
		}
	}
	
	if ($in[$i]=~ /\*\*\*\*\*\*/)
	{
		push @score,$in[$i-1];
		$i++;
		$copiar=1;
	}
}

print"3D-PSSM\n\n";
foreach	(@secuencia_target)
{
	print"Conf: ";
	chomp;
	$espacios="";
	for ($i=0;$i<length($_);$i++)
	{
		print "0";
		$espacios="$espacios ";
	}
	print"\nPred: $espacios\n";
	print"  AA: ";
	print"$_\n\n\n";
} 

@secuencia_target=();
@pdbcode=();
@secuencia_structure=();

for ($i=0;$i<$dimension;$i++)
{
	if ($in[$i]=~ /###    ALIGNMENT:   MASTER SEQUENCE vs MOST SIMILAR/)
	{
		$_=$in[$i+1];
		$_=substr($_,4,length($_));
		push @pdbcode,$_;
		
		$i=$i+3;
		do
		{
			$aux=$in[$i];
			$aux=~ s/\-/\./g;
			$aux=~ s/\*//g;
			$aux=uc($aux);
			push @secuencia_structure,$aux;
			$i++;
		} until ($in[$i]=~ />P1/);
		
		push @secuencia_structure,"#\n";

		$i=$i+2;
		do
		{
			$aux=$in[$i];
			$aux=~ s/\-/\./g;
			$aux=~ s/\*//g;
			$aux=uc($aux);
			push @secuencia_target,$aux;
			$i++;
		} until ($in[$i]=~ /^\n/);
		push @secuencia_target,"#\n";
		
	}
}

for ($i=0;$i<@pdbcode;$i++)
{
	$_=$pdbcode[$i];
	for ($j=0;$j<length($_);$j++)
	{
		if ((substr($_,$j,1))=~ /[0-9]/)
		{
			last;
		}
	} 
	$pdbcode[$i]=substr($_,$j,5);
}

$_=$score[0];
chomp;
$_=~ s/\#//g;
@linea=split;
print "SeqID	 $linea[4]  $linea[1]  $linea[2]  $linea[3]  $linea[5]	   $linea[6]   $linea[7]      $linea[8]      $linea[9]	/domaincoreclass/\n\n";
for ($i=1; $i<@score;$i++)
{
	$_=$score[$i];
	chomp;
	@linea=split;
	$aux=$pdbcode[$i-1];
	chomp $aux;

	if (length($aux)==4)
	{
		$aux=$aux."-";
	}
	else 
	{
		$aux2=substr($aux,0,4).uc(substr($aux,4,1));
		$aux=$aux2;
	}

	printf (": %s  %6s  %4s  %4s  %3s  %7s  %5s  %s  %s  %s\n",$aux,$linea[4],$linea[1],$linea[2],$linea[3],$linea[5],$linea[6],$linea[7],$linea[8],$linea[9]);
}

print"\n\n";
@prov_model=();
@prov_target=();
$copiar=1;
$copiar2=1;
$contador=0;

for ($i=0;$i<@secuencia_structure;$i++)
{
	if ($copiar==1)
	{
		push @prov_model,$secuencia_structure[$i];
		if ($secuencia_structure[$i+1]=~ /\#/)
		{
			$copiar=0;
		}
	}
	
	if ($copiar2==1)
	{
		push @prov_target,$secuencia_target[$i];
		if ($secuencia_target[$i+1]=~ /\#/)
		{
			$copiar2=0;
		}
	}

	if ($copiar==0 && $copiar2==0)
	{
		$aux="";
		for ($j=0;$j<@prov_target;$j++)
		{
			$aux=$aux.$prov_target[$j];
			chomp $aux;
		}
		$aux=~ s/\.//g;
		$long=length($aux);
		print"   MSF:    Type:\n";
		print"Name:   xxxxx__Seq    Len:   $long\n";
			
		$aux="";
		for ($j=0;$j<@prov_model;$j++)
		{
			$aux=$aux.$prov_model[$j];
			chomp $aux;
		}
		$aux=~ s/\.//g;
		$long=length($aux);
		$aux=$pdbcode[$contador];
		chomp $aux;

		if (length($aux)==4)
		{
			$aux=$aux."-";
		}
		# si es 5, entonces la última letra (la de la cadena) he de ponerla en mayúculas, necesario para threadlize
		else 
		{
			$aux2=substr($aux,0,4).uc(substr($aux,4,1));
			$aux=$aux2;
		}
		
		$aux=$aux."__Seq";
		print"Name:   $aux    Len:   $long\n";
		print"\n//\n\n";
		for ($j=0;$j<@prov_target;$j++)
		{
		
			print" xxxxx__Seq   $prov_target[$j]";
			print" ------------\n";
			print" $aux   $prov_model[$j]";
			print"\n\n";
		}
		$contador++;
		@prov_model=();
		@prov_target=();
		$copiar=1;
		$copiar2=1;
		$i++;
		$aux=@secuencia_structure;
		if ($i>=@secuencia_structure)
		{
			last;
		}
	} 
}






