G::Seq

Tandem

Summary Included libraries Package variables Synopsis Description General documentation Methods

Summary
G::Seq::Tandem - Perl extension for blah blah blah
Package variables top
Globals (from use vars definitions)
@EXPORT
$VERSION
@EXPORT_OK
Included modulestop
G::Messenger
GD
SubOpt
strict
Inherit top
AutoLoader Exporter
Synopsistop
  use G::Seq::Tandem;
blah blah blah
Descriptiontop
Stub documentation for G::Seq::Tandem was created by h2xs. It looks like the
author of the extension was negligent enough to leave the stub
unedited.

Blah blah blah.
Methodstop
DESTROYNo descriptionCode
_print_tandemNo descriptionCode
find_tandemNo descriptionCode
foreach_tandemNo descriptionCode
graphical_LTR_searchNo descriptionCode
newNo descriptionCode

Methods description


Methods code

DESTROYdescriptiontopprevnext
sub DESTROY {
    my $self = shift;
}
_print_tandemdescriptiontopprevnext
sub _print_tandem {
    &opt_default(print=>"n",filename=>"tandem.csv");
    my @args=opt_get(@_);

    my $Repeat=shift @args;
    my $print=opt_val("print");
    my $filename=opt_val("filename");
    my $i;


    if($print eq "f"){
	open(FILE,">>$filename");
	foreach(@$Repeat){
	    print FILE "$$Repeat[$i]{pattern},$$Repeat[$i]{patlength},$$Repeat[$i]{repnumber},$$Repeat[$i]{startpos},$$Repeat[$i]{endpos}\n";
	    $i++;
	}
	print FILE "\n\n";
	close(FILE);
    }
    else{
	foreach(@$Repeat){
	    &msg_send("$$Repeat[$i]{pattern}\t$$Repeat[$i]{patlength}\t$$Repeat[$i]{repnumber}\t$$Repeat[$i]{startpos}..$$Repeat[$i]{endpos}\n");
	    $i++;
	}
    }
}
find_tandemdescriptiontopprevnext
sub find_tandem {
    &opt_default(PatLength=>3,output=>"stdout",filename=>"tandem.csv");
    my @args=opt_get(@_);
    
##    my $gb=opt_as_gb(shift @args);
my $gb=shift @args; my $PatLen=opt_val("PatLength"); my $filename=opt_val("filename"); my $output=opt_val("output"); my $SaikiTrup=shift @args; my $ref_Genome; my $CountArrayLength; my $RepeatNumber; my $NextPattern; my $BeforePattern; my $RepeatEndPos; my $Half; my $pattern; my %PatRst; my @Repeat; my $i; if($SaikiTrup==''){ $ref_Genome=\$gb->{SEQ}; $Half=int($PatLen/2);
} else{ $ref_Genome=$gb; $Half=$PatLen-1; } if($SaikiTrup==1 && $PatLen<1){ return 0; } else{ for($CountArrayLength=0;$CountArrayLength<=length($$ref_Genome)-$PatLen;$CountArrayLength++){ $RepeatNumber=1; $pattern=substr($$ref_Genome,$CountArrayLength,$PatLen); $NextPattern=substr($$ref_Genome,$CountArrayLength+$PatLen,$PatLen); if($pattern eq $NextPattern || $SaikiTrup==1){ if($SaikiTrup==''){ if($pattern=~/n/){ $PatRst{$pattern}=1; } elsif($PatRst{$pattern}==''){ $PatRst{$pattern}=find_tandem(\$pattern,-PatLength=>$Half,1); } } else{ $PatRst{$pattern}=find_tandem($ref_Genome,-PatLength=>$Half,1); } if($PatRst{$pattern}==1 && $SaikiTrup==1){ last; } if($PatRst{$pattern}==0){ if($CountArrayLength-$PatLen>=0){ $BeforePattern=substr($$ref_Genome,$CountArrayLength-$PatLen,$PatLen); } if($pattern ne $BeforePattern){ while($pattern eq $NextPattern){ $RepeatNumber++; $NextPattern=substr($$ref_Genome,$CountArrayLength+$PatLen*$RepeatNumber,$PatLen); } } if($RepeatNumber!=1){ $RepeatEndPos=$CountArrayLength+$PatLen*$RepeatNumber; if($SaikiTrup==''){ $Repeat[$i]{pattern}=$pattern; $Repeat[$i]{patlength}=$PatLen; $Repeat[$i]{repnumber}=$RepeatNumber; $Repeat[$i]{startpos}=$CountArrayLength+1; $Repeat[$i]{endpos}=$RepeatEndPos; $i++; } $CountArrayLength=$CountArrayLength+$PatLen*$RepeatNumber-1; } } } } if($SaikiTrup==''){ if($output eq "f"){ _print_tandem(\@Repeat,-print=>"f",-filename=>$filename); } if($output eq "stdout"){ _print_tandem(\@Repeat); } return\@ Repeat; } elsif($RepeatNumber*$PatLen==length($$ref_Genome) || $PatRst{$pattern}==1){ return 1; } elsif($RepeatNumber*$PatLen!=length($$ref_Genome)){ return 0; } }
}
foreach_tandemdescriptiontopprevnext
sub foreach_tandem {
    &opt_default(MaxLength=>3,MinLength=>2,output=>"stdout",filename=>"tandem.csv");    
    my @args=opt_get(@_);

    my $gb=opt_as_gb(shift @args);
    my $MaxLen=opt_val("MaxLength");
    my $MinLen=opt_val("MinLength");
    my $output=opt_val("output");
    my $filename=opt_val("filename");
    my $d;
    my $c;
    my $q;
    my $Repeat;
    my @Result;
    my @Result_tmp;
    my $start;
    my $end;
    my $i;
    

    for($d=$MaxLen;$d>$MinLen-1;$d--){
	$Repeat=find_tandem($gb,-PatLength=>$d,-output=>"n");
	$q=0;
	$c=0;
	while(defined($$Repeat[$c])){
	    $start=$$Repeat[$c]{startpos};
	    $end=$$Repeat[$c]{endpos};
	    while(defined($Result[$q])){
		if($Result[$q]{startpos}<=$start && $Result[$q]{endpos}>=$end){
		    $$Repeat[$c]{pattern}='0';
		    last;
		}
		elsif($Result[$q]{startpos}<=$start && $Result[$q]{endpos}>=$start && $Result[$q+1]{startpos}<=$end && $Result[$q+1]{endpos}>=$end){
		    $i=0;
		    while($i*$$Repeat[$c]{patlength}+$start<$Result[$q]{endpos}){
			$i++;
		    }
		    if($$Repeat[$c]{endpos}-$$Repeat[$c]{startpos}-$i*$$Repeat[$c]{patlength}>$$Repeat[$c]{patlength}){
			$$Repeat[$c]{repnumber}=$$Repeat[$c]{repnumber}-$i;
			$$Repeat[$c]{startpos}=$$Repeat[$c]{startpos}+$i*$$Repeat[$c]{patlength};
		    }
		    else{
			$$Repeat[$c]{pattern}='0';
		    }
		    $i=0;
		    while($end-$i*$$Repeat[$c]{patlength}>$Result[$q+1]{startpos}){
			$i++;
		    }
		    if($$Repeat[$c]{endpos}-$$Repeat[$c]{startpos}-$i*$$Repeat[$c]{patlength}>$$Repeat[$c]{patlength}){
			$$Repeat[$c]{repnumber}=$$Repeat[$c]{repnumber}-$i;
			$$Repeat[$c]{endpos}=$$Repeat[$c]{endpos}-$i*$$Repeat[$c]{patlength};
		    }
		    else{
			$$Repeat[$c]{pattern}='0';
		    }
		    last;
		}
		elsif($Result[$q]{startpos}<=$start && $Result[$q]{endpos}>=$start && $Result[$q]{endpos}<$end){
		    $i=0;
		    while($i*$$Repeat[$c]{patlength}+$start<$Result[$q]{endpos}){
			$i++;
		    }
		    if($$Repeat[$c]{endpos}-$$Repeat[$c]{startpos}-$i*$$Repeat[$c]{patlength}>$$Repeat[$c]{patlength}){
			$$Repeat[$c]{repnumber}=$$Repeat[$c]{repnumber}-$i;
			$$Repeat[$c]{startpos}=$$Repeat[$c]{startpos}+$i*$$Repeat[$c]{patlength};
		    }
		    else{
			$$Repeat[$c]{pattern}='0';
		    }
		    last;
		}
		elsif($Result[$q]{startpos}<=$end && $Result[$q]{endpos}>=$end && $Result[$q]{startpos}>$start){
		    $i=0;
		    while($end-$i*$$Repeat[$c]{patlength}>$Result[$q]{startpos}){
			$i++;
		    }
		    if($$Repeat[$c]{endpos}-$$Repeat[$c]{startpos}-$i*$$Repeat[$c]{patlength}>$$Repeat[$c]{patlength}){
			$$Repeat[$c]{repnumber}=$$Repeat[$c]{repnumber}-$i;
			$$Repeat[$c]{endpos}=$$Repeat[$c]{endpos}-$i*$$Repeat[$c]{patlength};
		    }
		    else{
			$$Repeat[$c]{pattern}='0';
		    }
		    last;
		}
		elsif($Result[$q]{startpos}>$end){
		    last;
		} 
		else{
		    $q++;
		}
	    }
	    if($$Repeat[$c]{pattern} ne '0'){
		@Result=(@Result,$$Repeat[$c]);
	    } 
	    $q--;
	    $c++;
	}
        @Result_tmp=sort{$a->{startpos} <=> $b->{startpos}}@Result;
	@Result=();
        @Result=@Result_tmp;
    }

    if($output eq "f"){
	_print_tandem(\@Result,-print=>"f",-filename=>$filename);
    }
    if($output eq "stdout"){
	_print_tandem(\@Result);
    } 

    return\@ Result;
}
graphical_LTR_searchdescriptiontopprevnext
sub graphical_LTR_search {
    &opt_default(length=>64, filename=>"LTR.png", output=>"show");
    my @args = opt_get(@_);
    my $gb = opt_as_gb(shift @args);
    my $seq =\$ gb->{SEQ};
    my $width = opt_val("length");
    my $height = int((length($$seq)+1)/$width)+1;
die("\nERROR at graphical_LTR_search: sequence too long!\n\n\n") if ($height > 15000); my $output = opt_val("output"); my $filename = opt_val("filename"); my $topmargin = 50; my $sidemargin = 50; my $im = new GD::Image($width + $sidemargin * 2, $height + $topmargin + 20); my $white = $im->colorAllocate(255,255,255); my $black = $im->colorAllocate(0,0,0); my $red = $im->colorAllocate(255,0,0); my $yellow = $im->colorAllocate(255,255,0); my $green = $im->colorAllocate(0,150,0); my $blue = $im->colorAllocate(0,0,255); my ($x, $y); my $count = 0; for ($y = $topmargin; $y <= $height + $topmargin; $y ++){ for ($x = 0; $x <= $width; $x ++){ my $color=$white; $color=$red if (substr($$seq, $count, 1) eq 'a'); $color=$yellow if (substr($$seq, $count, 1) eq 'g'); $color=$green if (substr($$seq, $count, 1) eq 't'); $color=$blue if (substr($$seq, $count, 1) eq 'c'); $im->setPixel($x + $sidemargin,$y,$color); last if ($count == length($$seq)); $count ++; } } for ($y = $topmargin; $y <= $height + $topmargin; $y += $sidemargin){ my $num = ($y - $topmargin) * $width; $im->string(gdTinyFont, 6, $y, "$num", $black); } $im->string(gdSmallFont, 5, 5, "LTR search:", $black); $im->string(gdSmallFont, 20, 20, "width = $width", $black); $im->string(gdSmallFont, $sidemargin + 25 + $width, $topmargin + 10, "A", $red); $im->string(gdSmallFont, $sidemargin + 25 + $width, $topmargin + 30, "T", $yellow); $im->string(gdSmallFont, $sidemargin + 25 + $width, $topmargin + 50, "G", $green); $im->string(gdSmallFont, $sidemargin + 25 + $width, $topmargin + 70, "C", $blue); mkdir ("graph", 0777); open(OUT, '>graph/' . $filename); binmode OUT; print OUT $im->png; close(OUT); msg_gimv("gimv graph/$filename") if ($output eq 'show');
}
newdescriptiontopprevnext
sub new {
    my $pkg = shift;
    my $filename = shift;
    my $option = shift;
    my $this;

    return $this;
}

General documentation

AUTHOR top
A. U. Thor, a.u.thor@a.galaxy.far.far.away
SEE ALSO top
perl(1).