IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

probleme double lecture


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 133
    Par défaut probleme double lecture
    Bonjour,
    je suis nouveau en perl, mon souci cest que j'ai un premier programme qui me donne des valeurs de positions de blast(aligenement de sequence)
    Par exemple prenoms pour la premiere sequence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $seq1=24
    54
    92
    137
    235
    275
    324
     
    $seq2=65
    137
    14
    Je dois a partir de ces donnees verifier si chaque lettre est bein positionne avec l'autre, je m'explique prenons que jai une lettre qui est en position 54 est en face d'une lettre de l'autre sequence 65 donc cest bon, je dois renvoyer les deux positions.

    Voici , le fichier que je dois verfier, query etant la premiere sequence et sbjct etant la deuxieme, donc le plus plus facil cest tout dabord recuperer les deux valeurs dentree 61 car ca nous donne linformation sur la premiere de lettre de chaque sequence.
    Ensuite mon souci cest la lecture de chauqe sequence et verfier si jai la position dans $seq.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Query: 61  PVFRAQFHAMCANIGVDPLASNKGVWAQVLGFGDFYYELGVQIVEACLASRSLNGGLMDM 120
               P FRAQFH MCAN+GVDPLASNKG++AQ+LG GDFYY+LGVQI+EACLA+R+ NGG++++
    Sbjct: 61  PTFRAQFHVMCANVGVDPLASNKGMFAQLLGIGDFYYQLGVQIIEACLATRTHNGGMIEL 120
    Voici le debut de mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #!/usr/local/bin/perl
     
    use strict;
    use warnings;
     
     
     
    open my $blast_file, '<', "out.bl" or die;
     
    my $query_seq = '';
    my $sbjct_seq = '';
     
    while (my $line = <$blast_file>){
     
    	if ($line =~ m/Query: \d+ ([A-Z]+)/){
    		$query_seq .= $1
    	}
    	elsif ($line =~ m/Sbjct: \d+ ([A-Z]+)/){
    		$sbjct_seq .= $1
    	}
     
     
    }
    Merci

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    On pourrait avoir un exemple plus détaillé ?

    Essaie de te relire, également : ce n'est pas vraiment facile à lire, là.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 133
    Par défaut
    Oui, desole je reprend on pars de ceci:
    $seq1=
    24
    48
    54
    92
    137
    235
    275
    324

    $seq2=
    64
    137
    14


    Si j'ai un alignement du sorte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Query: 45  PVFRAQFHAMCANIGVDPLASNKGVWAQVLGFGDFYYELGVQIVEACLASRSLNGGLMDM 120
               P FRAQFH MCAN+GVDPLASNKG++AQ+LG GDFYY+LGVQI+EACLA+R+ NGG++++
    Sbjct: 61  PTFRAQFHVMCANVGVDPLASNKGMFAQLLGIGDFYYQLGVQIIEACLATRTHNGGMIEL 120
    La sequence 1 est Query et sequence deux est sbjct
    je recupere les index pour seq une qui est 45 ce qui signifie que P est a 45 et pour seq 2 P qui est a 61, ensuite je dois continuer la lecture des deux sequences en simultanee et je verfie si pour chaque lettre des deux sequences si ils ne sont pas alignes , par exemple dans la seq 1 jai la lettre 48 est bein aligne avec la lettre 64.
    EN fait je pense quil faut partir des valeurs des deux sequences et verifier si a chaque position ils sont bien alignes.

    Voci le code jai change en mettant dans un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #!/usr/local/bin/perl
     
    use strict;
    use warnings;
     
    open my $blast_file, '<', "out.bl" or die;
     
    my @seq1=(24,48,54,92);
     
    my @seq2=(64,137,14);
     
     
    while (<$blast_file>){
     
    	if ($_ =~ /^Query:\s(\d+)\s+(.+)\s+\d+$/){
    #	if (/Query: \d+ ([A-Z]+)/){
    		#print $1." : ".$2."\n";
    #		$query_seq .= $1;
    #		 my @tab1 = split(//,$query_seq);
     
    	}
    	elsif ($_ =~ /^Sbjct:\s(\d+)\s+(.+)\s+\d+$/){
    		#print $1." : ".$2."\n";
    		#$sbjct_seq .= $1;
    		 my @tab2 = split(//,$2);
     
    			foreach my $i(@tab2) {
     				foreach my $j(@seq2){
    					if $i==$j;
    }
    			}
     
    	}
     
    }
    J'ai modifie mon code , mais le souci cest que je recupere les qury et subjetc d'un coup or je devrais faire ca bloc par bloc , ainsi faire l'aligenemt (verifier si il existe dans la table), ensuite passer a l'autre ligne.
    Mon souci etant a chaque fois au debut de dire a la boucle de commencer par que on commence la lecture par la premiere lettre et quil commence par une position donne par l'index;


    merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 133
    Par défaut
    Bonjour,la je suis perdu, j'ai fait un petit code pour m'aider mais je n'y arrive pas
    voila je pars avec une seule donne de position:
    outblast file
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    Query= lcl|C169v2-06337 jgi|Coc_C169_1|67012|estExt_Genemark1.C_120368
             (728 letters)
     
     
     
    >lcl|Aster-03202 geneId:"fgenesh1_pg.00067_#_97" protId:"38715"
               coord:[scaffold_00067;strand="+";exons="1001085..1001276
               ,1001343..1001407,1001644..1001734,1001900..1002040,
               1002292..1002453,1002520..1002649,1002929..1003095,
               1003825..1003897,1004217..1004404,1005008..1005196,
               1005549..1005743,1006263..1006406,1006686..1006781,
               1007364..1007516,1008285..1008624,1009037..1009798,
               1010020..1010603,1011111..1011497"]
              Length = 1352
     
     Score = 62.8 bits (151), Expect = 1e-13
     Identities = 59/248 (23%), Positives = 101/248 (40%), Gaps = 20/248 (8%)
     
    Query: 160 DSVIAAMSKRGQDRLHHVIRILAEKGHVKELATAFYGNYTVQDLLDATHXXXXXXXXXXX 219
               +  I A+ ++   +L  V+ IL E G V EL T ++GNY++QDL++A             
    Sbjct: 264 EQAINALQRKSYQKLTRVVDILIESGKVPELVTHYFGNYSIQDLMEACFKLRKSFEKQGR 323
     
    Query: 220 XXXXXSQDIERMLGFSDGQDSLGRMARGIAGAMPEGAMHKQGIYVVLKLLEVGDCADILP 279
                     Q        +   D  GRM + +   +PE   H  G +V+ KLL+     +++ 
    Sbjct: 324 KADDAVQYF-----LNPDTDPFGRMFQEVLKTVPESIKHTAGAFVMQKLLQWLTPQEVVT 378
     
    Query: 280 LASKLFPGGPKLTTDLHSPEAWRGVKIMTGLVDAMSELAHQGGHMSAAAMGLLDSLCGLY 339
               L      G   +T  +      +G+  M  L       + Q     AA    L ++C  Y
    Sbjct: 379 L------GKVSVTHVMDLANDTKGLHFMLKLSQISLTNSEQDYVKDAAQQ--LHAICHQY 430
     
    Query: 340 LKDEQAVIKLAQHKNY-GPMLVDAASAGLPRPK----CKQVKSWTNQ--PSPAFGASLVW 392
               L         +   ++ G MLV+A +  +P P        +  W+++    P    S  W
    Sbjct: 431 LSSITGSALPSWATSFAGQMLVEAIAGSMPLPSSCTLANNIAGWSSKLLQLPLKDKSTPW 490
     
    Query: 393 KILQRLDD 400
                +L++L D
    Sbjct: 491 LMLEQLYD 498
     
     
     
     Score = 51.2 bits (121), Expect = 3e-10
     Identities = 34/144 (23%), Positives = 51/144 (35%), Gaps = 13/144 (9%)
     
    Query: 10  GTADAGIKCPFCRQFVEGYFPINDGAGKGNXXXXXXXXXXXXXXXXXXXXXXXXXXXXHD 69
               G A +G++CP+CR  V GY P++                                   H 
    Sbjct: 63  GQASSGVRCPWCRALVGGYEPMDPSHANDELREANRSARLSALRDIAPMQRQDPALRAH- 121
     
    Query: 70  VLPPS-----DWECAKCQNINFSARSKCNKCGQPGPKGAPAIIHGAPSGDVLKCTDKELR 124
                 PP      DW C +C+  N   R+ C +C    P             + +  T +++ 
    Sbjct: 122 -APPDHRGADDWTCPRCRFDNKPNRATCRECKAKKPDAV------RKDQNYMAATAEDVY 174
     
    Query: 125 DCALEKMHPNFQQAFQEAGTPAQT 148
                   +K+HP    AFQ AG P  T
    Sbjct: 175 TWCTQKLHPALDGAFQAAGVPITT 198
     
     
     
     Score = 40.0 bits (92), Expect = 8e-07
     Identities = 21/86 (24%), Positives = 47/86 (54%), Gaps = 3/86 (3%)
     
    Query: 393 KILQRLDDEDENSWVKSIVNELFKCLGSIQSQLKALDMLSDAL-CLKGVPDHAVASHMQM 451
               K++ RLD+++E  WV+ I+ +L   +  +     A D++ + L C+  + D ++ ++ ++
    Sbjct: 553 KLILRLDEQEEKEWVQHIMEDLTSSMQKLFKVTHARDVVLEGLTCVHSIDDDSLNTYFEV 612
     
    Query: 452 LHDVL--GDARAEEMLKNVERQRGAK 475
               +   L  GD R + ++  +   R AK
    Sbjct: 613 ITRQLGKGDMRWQSIMVKIRAARDAK 638
     
     
    Lambda     K      H
       0.318    0.135    0.417 
     
    Gapped
    Lambda     K      H
       0.267   0.0410    0.140 
     
     
    Matrix: BLOSUM62
    Gap Penalties: Existence: 11, Extension: 1
    Number of Sequences: 1
    Number of Hits to DB: 2709
    Number of extensions: 169
    Number of successful extensions: 6
    Number of sequences better than 1.0e-05: 1
    Number of HSP's better than  0.0 without gapping: 1
    Number of HSP's gapped: 4
    Number of HSP's successfully gapped: 3
    Length of query: 728
    Length of database: 1352
    Length adjustment: 44
    Effective length of query: 684
    Effective length of database: 1308
    Effective search space:   894672
    Effective search space used:   894672
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #!/usr/bin/perl
     
    #Variables
    my @positions=(24,48,54,92,137,235,275,324); #Liste des positions que tu souhaites verifier
    my @positions2=(26,65,145,189);
    my $query_seq='';
    my $sbjct_seq='';
    my ($depart_bloc,$fin_bloc)=(0,0);
    my ($query_trouve,$sbjct_trouve,$numero_bloc)=(0,0,1);
     
    open (BLAST_FILE,"<out.bl") or die ("Impossible de lire out.bl\n");
    while(<BLAST_FILE>)
    {
    	if(/Query: (\d+)\s+(.+)\s+(\d+)/)	#Ajout de \s+ pour gerer s'il y a plus d'un espacement
    	{
    		$depart_bloc=$1;  #Index de depart du bloc
    		$query_seq=$2;    #Sequence Query
    		$fin_bloc=$3;     #Index de fin du bloc
    		$query_trouve=1;  #Booleen pour indiquer qu'une sequence a ete trouvee
    	}
    	elsif(/Sbjct: \d+\s+(.+)/)
    	{
    		$sbjct_seq=$1;   #Sequence Sbjct
    		$sbjct_trouve=1; #Booleen pour indiquer qu'une sequence a ete trouvee		
    	}
            #Si les deux sequences "Query" et "Sbjct" ont ete trouvees, on a un nouveau bloc:
    	if(($query_trouve==1)&&($sbjct_trouve==1))
    	{
                    #Separation des caracteres des sequences dans un tableau
    		my @tab1 = split(//,$query_seq);
    		my @tab2 = split(//,$sbjct_seq);
     
                    #Creation des 2 tableaux contenant chacun "$depart_bloc" elements
    		my @query=(1..$depart_bloc);
    		my @sbjct=(1..$depart_bloc);
                    #Ajout de la sequence a la fin de ces tableaux 
                    #(ainsi les indices du tableau correspondent aux positions)
    		push(@query,@tab1);    
    		push(@sbjct,@tab2);
     
     
     
    		for (my $i=$depart_bloc,my $j=$depart_bloc;$i<@query,$j<@sbjct;$i++,$j++){
    		my $c=$i;
    		my $d=$j;
    		foreach my $a(@positions){
    			if($c eq $a){my $k=1};
    			else {my $k=0}
    		}
    		foreach my $b(@positions2){		
    			if($d eq $b){my $q=1};
    			else {my $q=0};
    		}
    		if(($k||$q)==0){next};
    		if(($k&&$q)==1){print $d,$c)}}
    En fait j'arrive pas a lui dire si j'ai deux couples de positions daller verfier si ils sont allignes , en plus la cest que j'ai fait cest la comparaison de lettre mais cest pas ca ce que je dois faire, cest plus verfier pour chaque position si ils sont alignes.

    Exemple:si jai pour la sequence une my @positions=(24,48,54,92,137,235,275,324);
    et sequence deux my @positions=(26,65,145,189);

    Je dois par exemple si je suis a la position 24 de la premiere sequence je verifie a quelle position je suis dans l'autre sequence si par exemple je suis a une position qui n'est pas dans la collection my @positions=(26,65,145,189); ben je passe a la position suivante pour les deux sequences jusqua ce que , si je suis a la position 65 seq 1 et qu'en face je sois a la position 145 , cest bon je renvoi les deux positions et ainsi de suite
    Je pense qu'il faut que je fasse deux foreach pour chaque table de position?
    merci

    PS: il faut que je fasse attention aux gaps, si il y en a je dois sauter

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 133
    Par défaut
    Voici un code qu'on m'avait aider mais qui repond pas a mon probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    #!/usr/bin/perl
     
    #Variables
    my @positions=(24,48,54,92,137,235,275,324); #Liste des positions que tu souhaites verifier
    my $query_seq='';
    my $sbjct_seq='';
    my ($depart_bloc,$fin_bloc)=(0,0);
    my ($query_trouve,$sbjct_trouve,$numero_bloc)=(0,0,1);
     
    open (BLAST_FILE,"<out.bl") or die ("Impossible de lire out.bl\n");
    while(<BLAST_FILE>)
    {
    	if(/Query: (\d+)\s+([A-Z]+)\s+(\d+)/)	#Ajout de \s+ pour gerer s'il y a plus d'un espacement
    	{
    		$depart_bloc=$1;  #Index de depart du bloc
    		$query_seq=$2;    #Sequence Query
    		$fin_bloc=$3;     #Index de fin du bloc
    		$query_trouve=1;  #Booleen pour indiquer qu'une sequence a ete trouvee
    	}
    	elsif(/Sbjct: \d+\s+([A-Z]+)/)
    	{
    		$sbjct_seq=$1;   #Sequence Sbjct
    		$sbjct_trouve=1; #Booleen pour indiquer qu'une sequence a ete trouvee		
    	}
            #Si les deux sequences "Query" et "Sbjct" ont ete trouvees, on a un nouveau bloc:
    	if(($query_trouve==1)&&($sbjct_trouve==1))
    	{
                    #Separation des caracteres des sequences dans un tableau
    		my @tab1 = split(//,$query_seq);
    		my @tab2 = split(//,$sbjct_seq);
     
                    #Creation des 2 tableaux contenant chacun "$depart_bloc" elements
    		my @query=(1..$depart_bloc);
    		my @sbjct=(1..$depart_bloc);
                    #Ajout de la sequence a la fin de ces tableaux 
                    #(ainsi les indices du tableau correspondent aux positions)
    		push(@query,@tab1);    
    		push(@sbjct,@tab2);
     
                    #Analyse des sequences
    		foreach my $i (@positions)
    		{
    			if(($i<=$fin_bloc)&& ($i>=$depart_bloc)){print "Verification position $i (dans bloc No $numero_bloc):\n"}
    			if(($query[$i] eq $sbjct[$i]) && ($i<=$fin_bloc)&& ($i>=$depart_bloc))
    			{
    				if($query[$i] ne 'X'){print "Les lettres sont identiques (i=$i...$query[$i])\n"}
    			}
    			elsif(($query[$i] ne $sbjct[$i]) && ($i<=$fin_bloc)&& ($i>=$depart_bloc))
    			{
    				if($query[$i] ne 'X'){print "Les lettres sont differentes ($query[$i] et $sbjct[$i])\n"}
    			}
    		}
    		$numero_bloc++;   #On peut passer au bloc suivant
    		$query_trouve=0;
    		$sbjct_trouve=0;
    	}
    }
    close BLAST_FILE;

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 133
    Par défaut
    Bonjour, voila j'aio reussi a faire une exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #!usr/bin/perl
    use strict;
    use warnings;
     
    my $query_seq = 'DSVIAAMSKRGQDRLHHVIRILAEKGHVKELATAFYGNYTVQDLLDATHXXXXXXXXXXX';
    my $sbjct_seq = 'EQAINALQRKSYQKLTRVVDILIESGKVPELVTHYFGNYSIQDLMEACFKLRKSFEKQGR';
    my $q_start = 160;
    my $s_start = 264;
    my @q_pos = (20, 125, 133, 172, 185, 255);
    my @s_pos = (20, 5, 133, 255, 276);
     
    my $length = length($query_seq);
     
    foreach my $l (@q_pos) {
        next if $l < $q_start;
        last if $l >= $q_start + $length; # ou $l > $q_end si on récupère $q_end dans le fichier
        my $c = substr($query_seq, $l - $q_start, 1); #On récupère le caractère a la position dans la chaine $query_seq
        my $d = substr($sbjct_seq, $l - $q_start, 1); #On récupère le caractère a la position dans la chaine $sbjct_seq
        next if ($c =~ m/[-X]/ or $d =~ m/[-X]/);
        my $k = $l - $q_start + $s_start;
        if (grep {$_ eq $k} @s_pos) {
        print "Found: positions ($l, $k) values ($c, $d) \n" ;
        }
     
     }
    Mais je voudrais le faire pour un grand fichier en automatisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
     
    Query= lcl|C169v2-07976
    jgi|Coc_C169_1|31081|estExt_Genewise1Plus.C_180171
             (496 letters)
     
     
     
    >lcl|Aster-02713 geneId:"fgenesh1_pm.00062_#_9" protId:"34758"
               coord:[scaffold_00062;strand="-";exons="306631..306824,
               307298..307463,308024..308124,308464..308611,
               309202..309470,309945..310082,310729..310896,
               311202..311356,313500..313555,315381..315410"]
              Length = 474
     
     Score =  439 bits (1129), Expect = e-127
     Identities = 224/319 (70%), Positives = 248/319 (77%), Gaps = 9/319 (2%)
     
    Query: 186 KRADGRIVATPYAKKLAKDLGIDLATIGGSGPNGRITASDVEALK---------NGGXXX 236
               KR DGR+VATPYAKKLAKDLG+DL  + GSGP GRITASD+EA K         NG    
    Sbjct: 155 KRTDGRVVATPYAKKLAKDLGVDLNNVAGSGPAGRITASDIEAFKKGPAAPPSTNGAAAA 214
     
    Query: 237 XXXXXXXXXXXXXXXXXXXXXXXXXXXXGTTVSELRGTTVPFTSLQSAVSRNMIESLKVP 296
                                           GTTV+ELRGTT PFTSLQSAVS+NM+ESLKVP
    Sbjct: 215 PTKPAPPPPGPSAAPASAAAPAPAAGTAGTTVAELRGTTQPFTSLQSAVSKNMVESLKVP 274
     
    Query: 297 EFRVSYTITTDKFDALYKKLKPKGVTLTALLAKACGVALASHPLLYASCTADGNGVTYNE 356
               EFRV+YT+TTD+ +AL KKLKPKGVT+TALLAKA  VAL  HPLLYA CT D  G+TYNE
    Sbjct: 275 EFRVAYTVTTDQLEALAKKLKPKGVTMTALLAKAAAVALEKHPLLYAVCTPDAKGITYNE 334
     
    Query: 357 RINVALAVAMPDGGLITPVIKDADSTDIYQISRNWADLVKRARSKQLAPDEFQSGTFTIS 416
                +NVALAV MPDGGLITPV+KDAD TDIYQ+SRNWADLVKRARSKQLAPDEF SGTFTIS
    Sbjct: 335 HVNVALAVTMPDGGLITPVLKDADKTDIYQLSRNWADLVKRARSKQLAPDEFNSGTFTIS 394
     
    Query: 417 NLGNFGADIFDAILPPGTAAILAVGGSKPTVTADKNGRIGVEKQMQVNLTCDHRIVYGAQ 476
               N+G +G D FDAILPPGTAAILAV GSKPTVTAD  GRIGVE+QM++NLTCDHRIVYG+Q
    Sbjct: 395 NMGMYGPDAFDAILPPGTAAILAVAGSKPTVTADNQGRIGVERQMRINLTCDHRIVYGSQ 454
     
    Query: 477 AAEFLVTLKQVIEDPDQLT 495
               AAEF+ TLK V+E PDQLT
    Sbjct: 455 AAEFMQTLKAVLESPDQLT 473
     
     
     
     Score =  100 bits (249), Expect = 1e-25
     Identities = 53/77 (68%), Positives = 55/77 (71%)
     
    Query: 37  NAVKEIFMPALSSTMTEGKIVSWLKGPXXXXXXXXXXXXXXXXXADMDVESFNDGILGAI 96
               NAVKEIFMPALSSTMTEGKIVSWLK                   ADMDVESF DGILGAI
    Sbjct: 30  NAVKEIFMPALSSTMTEGKIVSWLKTEGDKITKGESVVVVESDKADMDVESFQDGILGAI 89
     
    Query: 97  VIPEGGVANVGDPIAFI 113
               VI EGG ANVG+PIAF+
    Sbjct: 90  VIQEGGTANVGEPIAFV 106
     
     
    Lambda     K      H
       0.316    0.133    0.379 
     
    Gapped
    Lambda     K      H
       0.267   0.0410    0.140 
     
     
    Matrix: BLOSUM62
    Gap Penalties: Existence: 11, Extension: 1
    Number of Sequences: 1
    Number of Hits to DB: 647
    Number of extensions: 20
    Number of successful extensions: 4
    Number of sequences better than 1.0e-05: 1
    Number of HSP's better than  0.0 without gapping: 1
    Number of HSP's gapped: 3
    Number of HSP's successfully gapped: 3
    Length of query: 496
    Length of database: 474
    Length adjustment: 34
    Effective length of query: 462
    Effective length of database: 440
    Effective search space:   203280
    Effective search space used:   203280
    Neighboring words threshold: 11
    Window for multiple hits: 40
    X1: 16 ( 7.3 bits)
    X2: 38 (14.6 bits)
    X3: 64 (24.7 bits)
    S1: 41 (21.6 bits)
    S2: 77 (34.3 bits)
    Voici un debut du code mais je me suis pris dans l'algo, si vous pouvez m'aider


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
     
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
     
    #Variables
    my @positions=(24,48,54,92,137,235,275,324); #Liste des positions que tu souhaites verifier
    my @positions2=(26,65,145,189);
    my $query_seq;
    my $sbjct_seq;
    my ($depart_bloc,$fin_bloc)=(0,0);
    my ($depart_bloc2,$fin_bloc2)=(0,0);
    my $numero_bloc = 1;
     
    open (BLAST_FILE,"<out.bl") or die ("Impossible de lire blast.txt\n");
    while(<BLAST_FILE>)
    {
    	if(/Query: (\d+)\s+(.+)\s+(\d+)/)	#Ajout de \s+ pour gerer s'il y a plus d'un espacement
    	{
    		$depart_bloc=$1;  #Index de depart du bloc
    		$query_seq=$2;    #Sequence Query
    		$fin_bloc=$3;     #Index de fin du bloc
     
    	}
    	elsif(/Sbjct: \d+\s+(.+)/)
    	{		
    		$depart_bloc2=$1;
    		print $sbjct_seq=$2;   #Sequence Sbjct	
    	}
     
            #Si les deux sequences "Query" et "Sbjct" ont ete trouvees, on a un nouveau bloc:
    	if((defined $query_seq) && (defined $sbjct_seq) && ($query_seq =~ m/\w/) && ($sbjct_seq =~ m/\w/))
    	{
                    #Separation des caracteres des sequences dans un tableau
    		my @tab1 = split(//,$query_seq);
    		my @tab2 = split(//,$sbjct_seq);
     
    		my $length = length(@tab1);
     
    		 my $r = $depart_bloc;
    		 my $s = $depart_bloc2;
     
    		foreach my $l (@positions) {
       			 next if $l < $r ;
       			 last if $l >= $s  + $length; # ou $l > $q_end si on récupère $q_end dans le fichier
       			 my $c = substr($query_seq, $l - $r, 1); #On récupère le caractère a la position dans la chaine $query_seq
        			 my $d = substr($sbjct_seq, $l - $r, 1); #On récupère le caractère a la position dans la chaine $sbjct_seq
       			next if ($c =~ m/[-X]/ or $d =~ m/[-X]/);
        			my $k = $l - $r + $$s;
       			 if (grep {$_ eq $k} @positions2) {
        				print "Found: positions ($l, $k) values ($c, $d) \n" ;
       			 }
     
     }
     
    		# on vide les variables
    		$query_seq = '';
    		$sbjct_seq = '';
     
     
    	}
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Probleme de lecture de valeur nulle
    Par kenzo080 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 25/10/2010, 17h58
  2. Probleme de lecture d'image
    Par NicolasR dans le forum Java ME
    Réponses: 13
    Dernier message: 28/07/2005, 15h47
  3. [xml]probleme de lecture
    Par mavina dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 22/07/2005, 09h34
  4. Probleme de lecture de classe
    Par wkd dans le forum Composants
    Réponses: 5
    Dernier message: 21/05/2004, 16h20
  5. [LG]probleme de lecture de base de données
    Par jf dans le forum Langage
    Réponses: 14
    Dernier message: 26/06/2003, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo