shadow19c | La cest trop complique , je veux juste savoir si je peux pas incorporer ce programme
Code :
- #!/usr/bin/perl
- use strict;
- use warnings;
- #use autodie qw(open close); # open/close succeed or die
-
- # modifiable si le format du fichier change
- my $Query_string = '^Query:\s(\d+)\s+(.+)\s(\d+)\s*$';
- my $Sbjct_string = '^Sbjct:\s(\d+)\s+(.+)\s(\d+)\s*$';
- # peut être passé en parametre au script, etc
- my @Query_positions = (24,48,54,92,137,235,275,324);
- my @Sbjct_positions = (26,65,145,189);
- # fichier de données
- my $filename = "out.bl";
-
- # On fait tout dans une subroutine histoire d'avoir le tout bien modulaire
- # et les parametres importants comme parametres de la subroutine, ce qui
- # facilitera l'écriture avec passage des parametres sur la ligne de commande
- # du script (l'extension logique de ce script)
- processFile(\$filename, \$Query_string, \@Query_positions, \$Sbjct_string, \@Sbjct_positions);
-
- sub processFile {
- my ($filename, $Query_string, $Query_positions, $Sbjct_string, $Sbjct_positions) = @_;
- # creation des structures associées a une ligne utile
- my $Query = initStructure($Query_string, $Query_positions);
- my $Sbjct = initStructure($Sbjct_string, $Sbjct_positions);
-
- open my $fh, "<$$filename" or die "error opening $$filename $!.\n";
- my ($linenum, $bloc, $part) = (0, 0, 0);
- use constant {
- STATE_START => 0,
- STATE_SCORE => 1,
- STATE_QUERY => 2,
- STATE_SBJCT => 3,
- };
- my $state = STATE_START;
- while (<$fh> ) {
- ++$linenum;
- if (/^Score\s+=/) {
- ++$bloc;
- $part = 0;
- if (($state != STATE_START) && ($state != STATE_SBJCT)) {
- print "Warning: Unexpected Score at line $linenum\n";
- }
- $state = STATE_SCORE;
- }
- if (/${$Query->{pattern}}/o) {
- ++$part;
- adjustData($Query->{data}, $1, $2, $3);
- if (($state != STATE_SCORE) && ($state != STATE_SBJCT)) {
- print "Warning: Unexpected Query at line $linenum\n";
- }
- $state = STATE_QUERY;
- }
- if (/${$Sbjct->{pattern}}/o) {
- adjustData($Sbjct->{data}, $1, $2, $3);
- if ($state != STATE_QUERY) {
- ++$part;
- print "Warning: Unexpected Sbjct at line $linenum\n";
- }
- else {
- processBlocPart($bloc, $part, $Query, $Sbjct);
- }
- $state = STATE_SBJCT;
- }
- }
- close $fh;
- if ($state != STATE_SBJCT) {
- print "Warning: Unexpected end of file\n";
- }
- }
-
- # cree la structure associee a une ligne de donnees interessantes
- sub initStructure {
- my ($pattern, $position) = @_;
- my $hashref = {
- pattern => $pattern, #reference sur la chaine de pattern
- positions => $position, #reference sur l'array des positions
- data => { #reference sur un hash des infos de la ligne
- start => 0,
- end => 0,
- line => "",
- },
- };
- return $hashref;
- }
-
- # remplit les champs d'un hash data passée par reference
- sub adjustData {
- my $dataref = shift;
- $dataref->{start} = shift;
- $dataref->{line} = shift;
- $dataref->{end} = shift;
- }
-
- # on a une portion de bloc, on regarde si on a des matches pour les positions cherchees
- sub processBlocPart {
- my ($bloc, $part, $Query, $Sbjct) = @_;
- foreach my $l (@{$Query->{positions}}) {
- next if ($l < $Query->{data}->{start});
- last if ($l > $Query->{data}->{end});
- my $c = substr($Query->{data}->{line}, $l - $Query->{data}->{start}, 1);
- my $d = substr($Sbjct->{data}->{line}, $l - $Query->{data}->{start}, 1);
- next if ($c =~ m/[-X]/ or $d =~ m/[-X]/);
- my $k = $l - $Query->{data}->{start} + $Sbjct->{data}->{start};
- print "Testing in bloc $bloc, part $part: positions ($l, $k) values ($c, $d): " ;
- if (grep {$_ eq $k} @{$Sbjct->{positions}} ) {
- print "Found a match!\n" ;
- } else {
- print "no match.\n" ;
- }
- }
- }
|
Dans celui la
Code :
- #!/usr/local/bin/perl
- use strict;
- use warnings;
-
- do_something("coco_cds" );
- do_something("aster_cds" );
-
- open my $desc, '<', "RBH.txt";
- while (my $ligne1 = <$desc> ) {
- my ($id1, $id2) = split(/\t/, $ligne1);
- system("formatdb -o -pT -i DB.pep" );
- system("fastacmd -d DB.pep -s $id1>cv" );
- system("fastacmd -d DB.pep -s $id2>ast" );
- system("bl2seq -i cv -j ast -p blastp -o out.bl -e 1.e-5" );
- }
- close $desc;
-
-
-
- sub do_something {
- my $filename = shift;
- open my $desc, '<', $filename;
- while (my $line = <$desc> ) {
- next if ($line =~ m/^\#/);
- chomp $line;
- my ( $id, $strand, $coord) = $line =~ m/[\w-]+\t([\w-]+)\t\d+\t([-+])\tORIGINAL JGI\t\d+\t[\#\w\.]+\t([,\d\.]+)/;
- my @exon = split (/,/, $coord);
- my @intron = ($coord =~ m/(\d+,\d+)/g);
- if ($strand eq '-') {
- @exon = reverse(@exon);
- @intron = reverse(@intron);
- }
-
- my $cds;
- my %hash;
- # 3777..3857,4046..4192,4443..4561,4940..5234,5406..5540,5734..5847,6009..6098,6421..6492
- # 324
-
- for my $i (0..$#intron) {
- my ($s, $e) = split(/,/, $intron[$i]);
- my $taille = abs($e-$s+1);
- my ($s2, $e2) = split(/\.\./, $exon[$i]);
- my $taille2 = abs($e2-$s2+1);
- $cds += $taille2;
- my $aa = int($cds/3);
- $hash{$id}{$aa}=$taille;
- }
- }
- close $desc;
- }
|
en sachant que je dois enlever dans le premier programme les positions et recuperer les positions pour Query chez Cv-/*** et subject chez Aster-*** |