All pastes #923428 Raw Edit

Unnamed

public text v1 · immutable
#923428 ·published 2008-02-29 15:30 UTC
rendered paste body
#!/usr/bin/perl -w
## Determining frequency of nucleotides
# Get the name of the file with the DNA sequence data
print "Please type the pattern: ";
#$pattern = "l{2}|[U{2}A] s{6}|(A) l*| ~s{6}|."; #<STDIN>;
$pattern = " s+|(A) l+|(AA) ~s+";
print "Please type the filename of the DNA sequence data: ";


$dna_filename = "rna";#<STDIN>;
# Remove the newline from the DNA filename
chomp $dna_filename;
# open the file, or exit
unless ( open(DNAFILE, $dna_filename) ) {
    print "Cannot open file \"$dna_filename\"\n\n";
     exit;
}
        # Read the DNA sequence data from the file, and store it
        # into the array variable @DNA
        @DNA = <DNAFILE>;
        # Close the file
        close DNAFILE;
        # From the lines of the DNA file,
        # put the DNA sequence data into a single string.
        $DNA = join( '', @DNA);
        # Remove whitespace
        $DNA =~ s/\s//g;
open (FOLD, "echo \"$DNA\"\| RNAfold  -noLP|") ;
$pattern =~ s/\~s/\)/gi;
$pattern =~ s/l/\./g;
$pattern =~ s/s/\(/gi;

print "Pattern".$pattern."\n";
@pattern = split(" ", $pattern) ;
$secregexp="";
for ( $i=0 ; $i <= $#pattern;$i++){
 $pattern[$i] .= "|" if($pattern[$i] !~ /\|/);
print("P A T T E R N: ".$pattern[$i]."\n");
  
  $pattern[$i] =~ /(.*?)\|(.*)/;
  $secregexp .="(\\$1?)";
# if($pattern[$i] !~ /\|$/) {$pattern[$i] =".*" } else{$pattern[$i]= $2 } 
  $pattern[$i]= ($2?$2:".*") ;print $1."secregexp $secregexp \n  var2---pattern i  $pattern[$i] \n";
}
$pri="";
$it=0;
$sec="";
while (<FOLD>) {
$_ =~ /(\S*)/;
print  $1." $pattern\n";
if($it == 0 ){ $pri=$1;}
else{
$sec= $1;
while (<FOLD>) {
$_ =~ /(\S*)/;
print  $1." $pattern\n";
if($it == 0 ){ $pri=$1;}
else{
$sec= $1;
        while( $sec =~ /$secregexp/ig ) {
                print "P O S: $@".pos()."\n";
                for($i=1; $i<=$#pattern+1; $i++) {
                        print ($-[$i]."<___>".$+[$i]."matched:".$$i);
                        $str = substr($pri, $-[$i], $+[$i] - $-[$i]+1 );
                        print "$secregexp str: $str patt: $pattern[$i-1]\n";
                                if(  $str !~ /$pattern[$i-1]/){
                                print " no t  f o u n d\n";
                                        last;
                                        #redo;  
                        }else{print "ok\n";}
                        if($#pattern==$i-1){

                        print "f o u n d\n";
                        $last_pos = $+[$i];
                        }
                }

        }
}
$it++;
}

close FOLD;