#! /usr/local/bin/perl
#######################################################################
# This software has been created by Genome Research Limited (GRL).    # 
# GRL hereby grants permission to use, copy, modify and distribute    # 
# this software and its documentation for non-commercial purposes     # 
# without fee at the user's own risk on the basis set out below.      #
# GRL neither undertakes nor accepts any duty whether contractual or  # 
# otherwise in connection with the software, its use or the use of    # 
# any derivative, and makes no representations or warranties, express #
# or implied, concerning the software, its suitability, fitness for   #
# a particular purpose or non-infringement.                           #
# In no event shall the authors of the software or GRL be responsible # 
# or liable for any loss or damage whatsoever arising in any way      # 
# directly or indirectly out of the use of this software or its       # 
# derivatives, even if advised of the possibility of such damage.     #
# Our software can be freely distributed under the conditions set out # 
# above, and must contain this copyright notice.                      #
#######################################################################

#
# Miscellaneous tools
#
# 21-Mar-1995 Created -- SD
# 28-Mar-1995 Fixed bug regarding tag line parsing -- SD
# 11-May-1995 Add on information about source clone -- SD
# 06-Oct-1995 Extract template, strands, and primer info -- SD
# 09-Oct-1995 Detecting tag strand seems paradoxical of type "b" -- SD
# 09-Oct-1995 Parsing of TC lines was a crock (repeat of 28-Mar-1995)-- SD
# 11-Oct-1995 Reverse Universal Primer is PR 2 not PR 1 -- SD
# 10-Jan-1996 Added CHemistry field interpretation -- SD
#

push(@INC,"$ENV{BADGER}/bin");
require "acetools.pl" ;
require "exptools.pl" ;


############################################################
# &readExp2Ace($read);
# Modifies ace structures with information from experiment file.
# Assumes you have read in experiment file using &readExpFile().
#
############################################################

sub readExp2Ace {			# 

    local($read) = @_;

    local($ln,$cs,$sl,$sr,$on,$sq,$tn,$pr,$dr,$ch);
    local($tagNo,$tag,$tagType,$tagDir,$tagStart,$tagEnd,$tagComment);
    local($vector);
    local($pos,$len,$from,$to);
    local($sqlen);

    if (defined($sq = &getEntry("SQ"))) {
	$sqlen = length($sq);
    } else {
	warn "No original sequence data for '$read'\n";
	return;
    }
    

    ############################################################
    # Trace
    ############################################################
    if (defined($ln = &getEntry("LN"))) {
	chop($ln);
	$Sequence{$read} .= "SCF_File $ln\n";
    }


    ############################################################
    # Template
    ############################################################
    if (defined($tn = &getEntry("TN"))) {
	chop($tn);
	$Sequence{$read} .= "Template $tn\n";
    }


    ############################################################
    # Primer
    ############################################################
    if (defined($pr = &getEntry("PR"))) {
	chop($pr);
	if ($pr == 1 || $pr == 2) {
	    $Sequence{$read} .= "Primer Universal\n";
	} else {
	    $Sequence{$read} .= "Primer Custom\n";
	}
    }

    ############################################################
    # Strand
    ############################################################
    if (defined($dr = &getEntry("DR"))) {
	chop($dr);
	if ($dr eq "+") {
	    $Sequence{$read} .= "Strand Forward\n";
	} else {
	    $Sequence{$read} .= "Strand Reverse\n";
	}
    }

    ############################################################
    # Dye
    ############################################################
    if (defined($ch = &getEntry("CH"))) {
	chop($ch);
    } else {
	if ($read =~ /[a-h]\d{1,2}\...t/) {
	    $ch = 1;
	} else {
	    $ch = 0;
	}
    }
    if ($ch == 1) {
	$Sequence{$read} .= "Dye Terminator\n";
    } else {
	$Sequence{$read} .= "Dye Primer\n";
    }

    
    ############################################################
    # Tags
    ############################################################
    for ($tagNo = 0; $tagNo < $expNentries{"TG"}; $tagNo++) {
	$tag = $expEntry{"TG"}[$tagNo];
	$tag =~ s/[\n\"]//g;

	# Eg of TG line:
	# TG ALUS + 123..456
	# TG      Alu found by hmmfs

	( $tagType, $tagDir, $tagStart, $tagEnd, $tagComment ) = $tag =~ /^(\S\S\S\S)\s+(\S)\s+(\d+)..(\d+)\s*(.*)$/;

	if ( $tagDir eq "-" ) { ($tagStart, $tagEnd) = ($tagEnd, $tagStart); }
	$Sequence{$read} .= "Tag $tagType $tagStart $tagEnd \"$tagComment\"\n";
    }

    ############################################################
    # Cosmid Vector
    ############################################################
    if (defined($cs = &getEntry("CS"))) {
	( $tagStart , $tagEnd ) = $cs =~ /(\d+)..(\d+)/;
	$vector = &getEntry("CV"); chop($vector);
	$Sequence{$read} .= "Tag CVEC $tagStart $tagEnd $vector\n";
	# $Sequence{$read} .= "Vector $tagStart $tagEnd $vector\n";
    }

    ############################################################
    # Clone Name
    ############################################################
    if (defined($cn = &getEntry("CN"))) {
	chop($cn);
	# Add on information about source clone -- SD
	$Sequence{$read} .= "Clone $cn\n";
    }

    ############################################################
    # Sequencing Vector -- LEFT END
    ############################################################
    if (defined($sl = &getEntry("SL"))) {
	chop($sl);
	if ($sl > 0) {
	    $vector = &getEntry("SV"); chop($vector);
	    $Sequence{$read} .= "Tag SVEC 1 $sl $vector\n";
	    # $Sequence{$read} .= "Vector 1 $sl $vector\n";
	}
    }

    ############################################################
    # Sequencing Vector -- RIGHT END
    ############################################################
    if (defined($sr = &getEntry("SR"))) {
	chop($sr);
	if ($sr <= $sqlen) {
	    $vector = &getEntry("SV"); chop($vector);
	    $Sequence{$read} .= "Tag SVEC $sr $sqlen $vector\n";
	    # $Sequence{$read} .= "Vector $sr $sqlen $vector\n";
	}
    }

    ############################################################
    # Original numbering
    ############################################################
    if (defined($on = &getEntry("ON"))) {
	$pos = 1;
	foreach ( split(/\s+/,$on) ) {
	    if ($_ == 0) {
		$pos++;
	    } elsif( ($from,$to) = /^(\d+)\.\.(\d+)/) {
		$len = $to - $from + 1;
		$end = $pos + $len - 1;
		$Sequence{$read} .= "Assembled_from $read~ $pos $end $from $to\n";
		$pos += $len;
	    } else {
		$Sequence{$read} .= "Assembled_from $read~ $pos $pos $_ $_\n";
		$pos++;
	    }
	}
    } else {
	$Sequence{$read} .= "Assembled_from $read~ 1 $sqlen 1 $sqlen\n";
    }


}






############################################################
# &contigExp2Ace($read);
# Modifies ace structures with information from experiment file.
# Assumes you have read in experiment file using &readExpFile().
#
# Contig version (Save consensus tags option in Gap)
#
############################################################

sub contigExp2Ace {			# 

    local($read) = @_;

    local($tagNo,$tag,$tagType,$tagDir,$tagStart,$tagEnd,$tagComment);

    if (defined($sq = &getEntry("SQ"))) {
	$sqlen = length($sq);
    } else {
	warn "No original sequence data for $read\n";
	return;
    }
    

    ############################################################
    # Tags
    ############################################################
    for ($tagNo = 0; $tagNo < $expNentries{"TC"}; $tagNo++) {
	$tag = $expEntry{"TC"}[$tagNo];
	$tag =~ s/[\n\"]//g;
	( $tagType, $tagDir, $tagStart, $tagEnd, $tagComment ) = $tag =~ /(\S\S\S\S)\s+(\S)\s+(\d+)..(\d+)\s*(.*)$/;
	if ( $tagDir eq "-" ) { ($tagStart, $tagEnd) = ($tagEnd, $tagStart); }
	$Sequence{$read} .= "Tag $tagType $tagStart $tagEnd \"$tagComment\"\n";
    }

}



############# end of file ###############
# Local Variables:
# mode:perl
# End:
############# end of file ###############
