FR 2954322 A1 20110624 FR 0906328 A 20091223 PUCE A ADN POUR LA DETECTION DE POLYMORPHISMES AUX SITES D'INSERTION D'ELEMENTS TRANSPOSABLES La présente invention est relative à de 5 nouveaux outils de génotypage, utilisables notamment pour le génotypage du blé. Chez les plantes à génome complexe, telles que le blé, la sélection assistée par marqueurs est limitée à l'heure actuelle par l'absence de techniques 10 permettant un génotypage à haut-débit à coût restreint, notamment par l'utilisation de puces à ADN. Jusqu'à récemment, le génotypage sur blé était essentiellement effectué à l'aide de marqueurs microsatellites. Cependant l'utilité de ces marqueurs en sélection est 15 limitée par leur débit restreint et leur coût relativement élevé. D'autres techniques de génotypage à haut-débit sont apparues plus récemment. Il s'agit notamment de l'utilisation de marqueurs DArT (pour « Diversity Array Technology »), basés sur l'hybridation 20 d'ADN génomique sur des puces portant des fragments d'ADN à copie unique. La limitation des DArT vient de leur distribution non homogène dans le génome. L'utilisation de marqueurs SNP (pour « Single Nucleotide Polymorphism ») a également été proposée. Mais 25 l'obtention de SNP chez le blé reste extrêmement difficile et leur génotypage rendu problématique par la présence des 3 copies homéologues. Les éléments transposables représentent plus de 70% du génome de blé. Ils sont ubiquitaires, en grand 30 nombre de copies, distribués à travers tout le génome, dans l'hétéro- et l'euchromatine et présentent un polymorphisme d'insertion inter- et intraspécifique. Les éléments transposables ont été classés en deux catégories, selon leur mode de réplication et de 35 transposition. La classe I regroupe les rétrotransposons, dont la réplication fait intervenir une étape de rétrotranscription en ARN. Leur transposition s'effectue ainsi par un mécanisme de « copier/coller » : le transposon initial demeure intact au site donneur, tandis qu'une copie s'insère au site accepteur. La classe II regroupe les transposons à ADN, dont la transposition s'effectue par un mécanisme de « couper/coller » : le transposon est excisé du site donneur, et s'insère au site accepteur. Parmi les éléments transposables de classe I, on distingue deux sous-classes principales : les rétrotransposons dits « à LTR » (pour Long Terminal Repeats), qui sont encadrés par de longues répétitions terminales, et les rétrotransposons « sans LTR », qui n'en possèdent pas. Les rétrotransposons à LTR sont divisés en plusieurs familles, comprenant notamment les familles copia, gypsy, et TRIM (pour Terminal-repeat Retrotransposons In Miniature) ; parmi les rétrotransposons sans LTR on distingue notamment les rétrotransposons LINE (pour : Long Interspersed Nuclear Elements) et SINE (pour : Short interspersed Nuclear Elements). Les transposons à ADN comprennent également plusieurs familles, parmi lesquelles, on citera notamment les familles CACTA, Mutator, MITE (pour : Miniature inverted-repeat transposable elements), et LITE (pour : Large inverted-repeat transposable elements). Quel que soit le type d'élément transposable concerné, la plupart des événements de transposition génèrent au site d'insertion un polymorphisme exploitable pour développer des marqueurs génétiques. Différents systèmes de marqueurs basés sur la détection par PCR de la présence ou de l'absence d'éléments transposables ont ainsi été développés (pour revue, cf. GRZEBELUS, J. Fruit Ornam. Plant Res. 14 Suppl. 1), 21-29, 2006). Parmi ces systèmes, on citera notamment le système RBIP (pour : Retrotransposon-based Insertion Polymorphism), basé sur l'utilisation d'amorces dérivées des régions génomiques flanquant le site d'insertion d'un rétrotransposon, et d'une amorce dérivée de la séquence du transposon pour détecter sa présence ou son absence à ce site (FLAVELL et al., Plant J. 16, 643-650, 1998). Plus récemment, un système de marqueurs dénommé ISBP (pour : Insertion Site Based Polymorphism) a été décrit (PAUX et al. Plant J., 48, 463-474, 2006). Ce système est basé sur l'amplification PCR d'une séquence couvrant la jonction entre un élément transposable et l'une ou l'autre de ses régions flanquantes, en utilisant des amorces situées de part et d'autre de cette jonction. Le produit d'amplification (généralement entre 100 et 300 pb) peut être utilisé comme marqueur génome-spécifique. Lors d'études ultérieures utilisant différentes méthodes de détection de ces marqueurs ISBP, sur différentes variétés de blé ou d'espèces apparentées, les Inventeurs ont observé un très fort taux de polymorphisme de ces marqueurs, concernant non seulement des polymorphismes du type présence/absence de l'élément transposable, mais également des polymorphismes du type SNP. La fréquence des SNP dans les éléments transposables peut être estimée à 1 toutes les 98 pb, ce qui est 2 à 10 fois supérieur à la fréquence observée dans les gènes. Ce fort taux de polymorphisme inter- et intraspécifique, combiné à leur distribution non biaisée le long des chromosomes, fait des ISBP des outils de cartographie très puissants, dont l'utilisation présente un intérêt tout particulier chez des organismes à génome complexe, notamment des plantes telles que le blé. Considérant que les éléments transposables couvrent l'ensemble du génome, les ISBP représentent une source presque infinie de marqueurs. En effet, l'analyse de régions séquencées de plusieurs mégabases a révélé une densité d'environ un marqueur par 5 kb, soit environ 3 millions de marqueurs dans l'ensemble de génome. En outre, parce qu'ils sont aisément dérivés de séquences génomiques, les ISBP présentent un coût d'obtention très réduit. Cependant, leur utilisation est limitée par le fait qu'ils sont basés sur la PCR. En effet, la caractéristique des ISBP est la présence de séquences répétées d'au moins un côté, et dans la plupart des cas, des deux côtés de la jonction, ce qui risque d'entraîner une hybridation aspécifique importante en cas d'utilisation sur puce à ADN de sondes dérivées de ces marqueurs. On rappellera qu'une puce à ADN est un support solide de petite taille, à la surface duquel sont fixés de manière ordonnée (classiquement sous forme de matrice à 2 dimensions) des « sondes », correspondant dans le cas présent à une multitude d'oligonucléotides (on parle d' "oligochip"), chaque sonde étant fixée à une position prédéterminée sur la surface dudit support. La puce est mise en contact avec un échantillon biologique comprenant un mélange complexe de séquences d'ADN différentes à analyser (dénommées cibles), par exemple, pour une utilisation dans un but de génotypage, un mélange de fragments d'ADN génomique d'un individu. Les ADN cibles sont marqués afin de pouvoir être détectés après leur fixation sur la puce, à l'aide de marqueurs optiques (notamment fluorescents) ou le cas échéant par un marquage radioactif. L'hybridation spécifique de chaque sonde avec sa cible, si celle-ci est présente dans le mélange, est visualisée par le signal émis par le marqueur. Les Inventeurs ont maintenant constaté que, de manière surprenante, il était possible de dériver de marqueurs ISBP des sondes oligonucléotidiques de petite taille utilisables sur puces à ADN, correspondant à la région génomique couvrant la jonction entre un élément transposable et une séquence flanquante, et permettant d'obtenir des signaux d'hybridation spécifique reflétant la présence du marqueur correspondant. La présente invention a en conséquence pour objet une puce à ADN portant un assortiment de sondes 5 oligonucléotidiques de 26 à 74 nucléotides (nt) de séquences différentes entre elles. Chacune desdites sondes a la séquence de l'un ou l'autre brin d'un segment d'ADN génomique d'un organisme d'une espèce donnée. Ce segment d'ADN génomique est centré sur la jonction entre un élément transposable inséré dans le génome dudit organisme et une séquence flanquant ledit élément. Selon un mode de réalisation préféré de la présente invention, lesdites sondes ont un pourcentage en GC compris entre 40 et 60%, et une température de fusion comprise entre 65 et 75°C. De manière particulièrement avantageuse, lesdites sondes ont une taille d'au moins 42 nt (21 nt de chaque coté de la jonction). Les sondes oligonucléotidiques utilisables sur les puces à ADN conformes à l'invention peuvent être dérivées de la jonction entre n'importe quel type d'élément transposable, qu'il s'agisse d'un rétrotransposon ou d'un transposon à ADN, et une séquence flanquant cet élément. Cette séquence flanquante peut être soit une séquence d'ADN répétitif d'un autre élément transposable, soit une séquence d'ADN non-répétitif, à faible nombre de copies. Du fait qu'elles soient dérivées de marqueurs ISBP, une très grande variété de sondes oligonucléotidiques reflétant la variété de ces marqueurs, peut être obtenue pour un organisme donné. Des marqueurs ISBP peuvent être identifiés facilement par l'homme du métier, à partir de la séquence de n'importe quel fragment d'ADN génomique, et notamment à partir de séquences BAC (Bacterial Artificiel Chromosome). En effet, pour identifier des marqueurs ISBP dans une séquence d'ADN génomique d'un organisme donné, il suffit d'utiliser cette séquence pour interroger une ou plusieurs base(s) de données d'éléments transposables. Il peut s'agir de bases de données généralistes, telle par exemple que « Repbase Update » (JURKA et al., Cytogenetic and Genome Research 110, 462-467, 2005), ou de bases de données plus spécifiques, par exemple la base : « TIGR Plant Repeat Database » (OUYANG et BUELL., Nucleic Acids Res. 32(Database issue), D360-363, 2004) qui recense des éléments transposables de plantes, ou la base TREPtotal (http://wheat.pw.usda.gov/ITMI/Repeats/index.shtml), spécifique des éléments transposables de Triticeae. Cette interrogation peut se faire très simplement à l'aide de programmes informatiques appropriés. A titre d'illustration, le code d'un programme utilisable pour identifier automatiquement des marqueurs ISBP, dénommé « IsbpFinder » est reproduit dans son intégralité ci- après, dans la partie « Exemples ». Pour chaque marqueur ISBP identifié, la portion de 26 à 74 nucléotides de ce marqueur centrée sur la jonction entre l'élément transposable et sa séquence flanquante constitue une sonde oligonucléotidique pouvant être utilisée dans le cadre de la présente invention. Des sondes ainsi obtenues à partir de marqueurs ISBP peuvent être fixées, de manière connue en elle-même, sur un support solide approprié, pour obtenir une puce à ADN conforme à l'invention. Les puces à ADN conformes à l'invention peuvent être utilisées pour le génotypage d'individus de l'espèce à partir de laquelle ont été obtenues les sondes oligonucléotidiques qu'elles portent. Elles peuvent avantageusement être utilisées pour le génotypage de plantes, en particulier de plantes d'intérêt agronomique, par exemple des céréales, et notamment de céréales de la famille des Triticeae, et en particulier du genre Triticum. La présente invention sera mieux comprise à l'aide du complément de description qui va suivre, qui se réfère à des exemples non-limitatifs, illustrant la préparation et l'utilisation de puces à ADN conformes à l'invention. EXEMPLE 1 : IDENTIFICATION DE MARQUEURS ISBP A L'AIDE DU 10 PROGRAMME ISBPFINDER Des marqueurs ISBP peuvent être localisés sur une séquence d'ADN génomique, à l'aide du programme IsbpFinder. Ce programme est écrit en langage PERL, et son script est reproduit ci-après. 15 #!/usr/local/bin/perl #--- copyright ---# # CHOULET Frederic # INRA Clermont-Ferrand # INRA-UBP UMR 1095 Genetique, Diversite et Ecophysiologie des Cereales # 234, avenue du Brezet # 63100 Clermont-Ferrand # FRANCE # # AUTHOR: Frederic Choulet # PURPOSE: This script is used to design ISBP markers from RepeatMasker results # CREATED: 2007 June llth # MODIF01: 2007 July 2nd # small elements entirely included in the PCR product => fixed # MODIF02 2007 July 3rd # analysis is done in the order of the ISBP start position on the sequence # instead of their order of apparition in the RepeatMasker file # MODIF-vl.4 # 2009 April 29th # Add the sequence and GC% of the amplicons in the tab output # MODIF-vl.5 2009 June 24th # Fix bug in version 1.4 concerning extraction of subseq accroding to positions # of flanking features when parsing %haste rm # -> Now compare the query names and not only positions because # $hash_rm{$key} and $haste rm{$key+1} can refer to 2 différent queries # MODIF-vl.6 # 2009 July 1st # - change the "yes no" extremity tag into HIGH/MEDIUM/LOW Cofidence Index (CI) # - "-do" option change to "-lib" (to fit the RepeatMasker -lib option) # - %haste rm structure changed -> do not browse the complete hash for each query # - %haste rm structure changed -> do not browse the complete hash for each query # 2009 July 1st # - primera temporary files not removed -> fixed use strict , use warnings , use Getopt::Long ; #use lib "/usr/local/ap/fc scripts/lib/bioperl-1.5.2102" ; # Put here your PATH to bioperl > 1.5 if not appear in your @INC use Bio::SegIO ; use Bio::SeqFeature::Generic ; use File::Basename ; use vars qw($help $outfile $do repm Sprint version) ; my $VERSION = "1.6.1" ; my $lastmodif = "2009-07-6" ; ################### ##### OPTIONS ##### ################### my $format = "tab" ; my $dist_fromextr = 50 ; my $repdb = "/my/path/to/repdb" ; my $repmfile = "/my/path/to/result.out.xm" ; &GetOptions ( "h" \$help, "V" => \$print_version, "f:s" \$format, "o:s" \$outfile, "lib:s" \$repdb, "e:i" \$dist_fromextr, "dorm" \$do repm, "rm:s" \$repmfile ) , $help and &help ; Sprint version and die "$VERSION - $lastmodif\n" ; 30 @ARGV or &help ; $format =-/^embl$I^csv$/ or $format = "tab" ; # The field delimiter for output 35 my $fd = "\t" ; $format =-/^csv$/ and $fd = "•" 40 ############################ ##### PATH TO PROGRAMS ##### ############################ my %hash_path ; my $conf ; 45 # put here the list of path to check for configuration file my @configpath = $ENV{HOME}."/.isbpfinder.conf", dirname($0)."/isbpfinder.conf", "/etc/genome/isbpfinder.conf", 50 "/etc/isbpfinder.conf", "./isbpfinder.conf" foreach (@configpath) { if (-e $ ) { $conf = $ ; last ; } } if ($conf) { unless (open (CONF, " ) { chomp $ ; $_ =-/^#/ and next ; my ($progname,$progpath) = split(/=/, $ ) ; next unless(defined$progname and defined$progpath) , $progname =--s/\s//g $progpath =-s/^\s*I\s*$//g ; $haste path{lc$progname} = $progpath ; } # END OF WHILE conf close CONF ; } # END OF IF $conf else { print STDERR "*** No configuration file specified\n\n" ; } my $primer3 = "primera" ; # Default: in your PATH 15 $hash path{primer3} and $primer3 = $hash patte{primer3} ; my $repeatmasker = "RepeatMasker" ; # Default: in your PATH $repeatmasker = $hash patte{repeatmasker} # RepeatMasker not obligatory (IsbpFinder can use repeatmasker outfiles instead of running it 20 if ($do_repm) { - e $repeatmasker or die "*** Could not find repeatmasker at: $repeatmasker => check config ***\n" ; - e $repdb or die "*** Could not find database file for 25 RepeatMasker [-lib filename]: \"$repdb\" ***\n" ; } else { unless(-e $repmfile) { print STDERR "*** Could not find RepeatMasker outfile [-rm option]: \"$repmfile\" ***\n" ; exit(1) , 30 } } ########################## 35 ##### HASH of REP_DB ##### ########################## my %hash_repdb ; if (-e $repdb) { my $rep seglo obj = Bio::SeqIO->new( '-file' " next_seq() ) { my $rep id = $rep seq obj->display id ; my $rep_des = $rep seq_obj->description ; $rep_des =-s/\;/ /g 45 $rep des =-s/\t/ /g $hash repdb{$rep id} = $rep_des ; } # END OF if -e $repdb ################ ##### MAIN ##### ################ 55 # print HEADER for "tab" format select STDOUT ; if ($outfile) { if (-e $outfile) 1 10 50 print "*** $outfile already exists, overwrite it? [yin] : [n] " ; my $ans = ; $ans =-/^y/i or exit(1) ; } open (OUTFILE, ">$outfile") ; select OUTFILE ; } my %hash rm ; # The hash containing the repeatmasker results ## Print HEADER for TABICSV OUTPUTS ## print join("$fd", (gw(seq id F primer F primer Tm R_primer R _primer Tm amplicon seq ampliconsize ampliconGC% junction type confidence junction position left element extremity left right element extremity right))), "\n" ; # Start by parsing repeatmasker output IF given as argument if (-e $repmfile) { %hash rm = &get Nash from rm($repmfile) ; } foreach my $fasta file ( @ARGV ) { unless ( -e $fasta file ) { print STDERR "*** Could not find FASTA file \"$fasta file\" ***\n" ; next ; } my $in segio obj ; eval { $in segio obj = Bio::SeglO ->new ( '-file' $fasta file , '-format' 'FASTA' ) ; } ; if ($@) { print STDERR "*** Could not find FASTA file \"$fasta file\" ***\n" ; next ; } # RUN and PARSE REPEATMASKER if $do rm => create %hash rm ---------------------------------------------------------- if ($do repm and not -e $repmfile) { print STDERR "-> Run RepeatMasker on basename($fasta_file) " system ("$repeatmasker -pa 12 -lib $repdb -xsmall - nolow -xm $fasta file 2>isbp.err.tmp 1>isbp.out.tmp") ; print STDERR "=>done\n" ; unlink "isbp.err.tmp", "isbp.out.tmp" ; unless (-e "$fasta file.out.xm") { print STDERR "*** Could not find \"$fasta file.out.xm\" _> skip ***\n" ; next ; } %hash rm = &get hash from rm("$fasta file.out.xm") ; } # END OF if $do repm # # RUN PRIMER3 for each sequence of the FASTA files WHILE:while ( my $seq obj = $in seqio obj->next seq ) { my $query narre = $seq obj->display_id ; my $seq = $seq obj->seq ; ######################################## ### temporary file names for primer3 ### ######################################## my $pr3_file = $query narre ; $pr3_file =«s/[I-]/ /g ; remove special characters from filename my $in pr3 file = "$pr3 file\ in pr3.tmp" ; my $out pr3 file = "$pr3 file\ out pr3.tmp" ; my @feats ; my @per feats ; my @rep feats ; my %tab primers ; # STORE THE PRIMERS FOR tab FORMAT my $rep_cnt = 0 ; my $target cnt = 0 ; my %per_region ; # STORE THE PCR PRODUCTS -> TO REDUCE REDUNDANCY my $target included = 0 ; foreach my $key ( sort {$hash rm{$query narre}{$a}->{startq} $hash rm{$query narre}{$b}->{startq}} keys %{$hash rm{$query narre}} ) { my $startq 25 $hash rm{$query name}{$key}->{startq} ; my $endq $hash_rm{$query_name}{$key}->{endq} ; my $unmasked $hash rm{$query narre}{$key}->{unmasked} ; 30 my $strand $hash rm{$query narre}{$key}->{strand} ; my $rep narre $hash_rm{$query_name}{$key}->{rep narre} ; my $start rep 35 $hash_rm{$query name}{$key}->{start rep} ; my $end rep $hash_rm{$query name}{$key}->{end rep} ; my $rep length $hash rm{$query narre}{$key}->{rep length} ; 40 my $unmasked rep $hash rm{$query_name}{$key}->{unmasked rep} ; my $start extremity $hash rm{$query narre}{$key}->{start extremity} ; my $end extremity 45 $hash rm{$query narre}{$key}->{end extremity} ; ### 1 ### Get Repeat Description my $rep descr = $hash repdb{$rep_name} ; $rep descr or $rep_descr = "no description" ; 50 my $str descr = $rep name ; if ( $rep descr =-/copia/ig ) $str_descr = "copia" ; } elsif ( $rep_descr =-/athila/ig ) 55 $str descr = "athila" ; } elsif ( $rep_descr =-/gypsy/ig ) $str descr = "gypsy" ; } 10 15 20 -{ { elsif ( $rep_descr =-/TRIM/ig ) $str_descr = "TRIM" } elsif ( $rep_descr =-/LARD/ig ) $str descr = "LARD" • } elsif ( $rep_descr =-/LINE/ig ) $strdescr = "LINE" } elsif ( $rep descr =-/SINE/ig ) $str_descr = "SINE" } elsif ( $rep descr =-/CACTA/ig ) $str_descr = "CACTA" ; } elsif ( $rep descr =-/mutator/ig ) $str_descr = "Mutator" ; } elsif ( $rep descr =-/MITE/ig ) $str descr = "MITE" } elsif ( $rep descr =-/unclassified/ig $str_descr = "Unclassified" ; } elsif ( $rep_descr =-/LITE/ig ) $str descr = "LITE" 1 else $str descr = "Unknown" ; } ############################################### ### Create FEATURE for each detected repeat ### ############################################### my $rep_feat = new Bio::SeqFeature::Generic ( - => "repeat region", - "repeatmasker", - $startq, - $endq, strand => $strand ) ; if ($start extremity == 1 or $end extremity == 1) { $rep feat -> add tag value("color", 5) ; 40 } $rep_feat -> add_tag value("note", "$rep narre $rep_descr $start_rep..$end rep ($rep_length)") ; $rep_feat -> add tag value("label", "$str descr") 45 push @rep feats, $rep feat ; ##################################################### ### GET THE POSITIONS OF THE PREVIOUS/NEXT REPEAT ### ##################################################### my $startq_next ; my $endq next ; if ( $haste rm{$query narre}{$key+l} ) { { { { { { 20 25 primary 30 source tag start end 35 50 55 $startq_next $hashrm{$query_name}{$key+l}->{startq} ; $endq next $hash_rm{$queryname}{$key+l}->{endq} } my $startq_previous my $endq_previous ; if ( $hash rm{$query name}{$key-l} ) { $startq_previous $hash rm{$query name}{$key-l}->{startq} ; $endq previous $hash rm{$query name}{$key-l}->{endq} } ### 2 ### Keep clones for which it will be possible to design a primer (avoid junctions too close from the ends of the sequence) if ( $startq = -30 ) { print STDERR "*** $query name fully masked by $rep_name -> no ISBP ***\n" unlink ($in pr3 file, $out pr3 file) if (-e $in_pr3_file and -e $out_pr3file) ; goto WHILE ; } $rep cnt += 1 ; ### 3 ### Primer analysis my $targetl my $target2 if ($startq 30 and $unmasked >= -30) { $targetl = $startq-10 ; $target2 = "none" } elsif ($startq > 30 and $unmasked my $forward my $forward_pos ; my $forward tm ; my $reverse my $reverse_pos , my $reverse tm ; my $perseq ; my $product_size ; my $gc ; foreach my $target ( $targetl, $target2 ) { $target eq "none" and next ; my $junction = $target+l0 ; ------------------------------------------------------ # CHECK IF PRIMERS ARE ALREADY DESIGNED FOR THIS TARGET my $i , for ( $i = 0 ; $i ( $per feats[$i]->start ) or next ; 45 50 55 $junction end or next ; $target_included = 1 ; last ; } if ( $target included == 1 ) { $target included = 0 ; $per feats[$i]->add tag value ( "note" 1 0 , "$junction" ) , ## 1 ## Get the junction tag and remove it 15 >remove tag ( "junction" ) , my @old junctions = $per feats[$i]- ## 2 ## Modify the junction tag my $new junction = $oldjunctions[O] ; if ( $new junction $target eq $new junction = "$str descr\ $1" ; 25 } elsif _-/^(.*) LowCopyDNA$/ ) { $target $new_junction = "$l\ $str descr" 30 1 20 # only 1 junction tag =-/^LowCopyDNA (.*)$/ ) { $target2 and $new junction $targetl and >has tag("right element")) { 35 $per feats[$i]->add tag_value $rep descr" , 40 >has tag("left element")) { $per_feats[$i]->add_tag_value $rep descr" ) ; unless ($per feats[$i]- $target eq $targetl and ( "right element" "$rep narre 1 unless ($per feats[$i]- $target eq $target2 and ( "left element , "$rep narre 45 ## 3 ## Add the new junction tag $per feats[$i]->add tag value 50 "junction" , "$new junction" ) , ####################################### 55 ## Define the score: high/medium/low ## ####################################### my $extremity L = ( $per feats[$i]->has_tag("extremityL") ? ($per feats[$i]->get_tagvalues("extremity_L"))[0] : "" ) ; my $extremity_R = ( $per feats[$i]- >has tag("extremity R") ? ($per feats[$i]- >get tag values("extremity R"))[O] : "" ) , next if ($extremity L and $extremity R) ; if ( $target eq $targetl ) { if « $strand == 1 and $start extremity == 1) or ($strand =_ -1 and $end extremity == 1) ) $per_feats[$i]- >add tag value ( "extremity R" , "yes" ) ; else { $per feats[$i]- >add tag value ( "extremity R" , "no" ) , } } elsif ( $target eq $target2 ) { if ( ($strand == 1 and $end extremity == 1) or ($strand -1 and $start extremity == 1) ) $per_feats[$i]- >add tag value ( "extremity L" , "yes" ) , else { $per feats[$i]->add tag value ( "extremity L" , "no" ) } } 3 5 next ; # GO TO NEXT TARGET IF' TARGET ALREADY INCLUDED IN A PREVIOUS PCR PRODUCT } # END OF IF $target included == 1 # 40 ------------ ################################################################### ### Evaluate the coordinates of the subsequence that will be 45 extracted considering the flanking features ### ################################################################### ######################################### my $subseq_start = $target-500 ; my $subseq stop = $target+500+20 ; 50 $subseq start $seq obj->length() and $subseq_stop = $seq obj->length() , if ( $target eq $targetl ) { 55 $subseq stop > $endq and $subseq stop $endq ; if ( $startq previous ) { if ( $startq_previous $subseq_start and $startq_previous $endq+50 ) { $subseq stop = $endq next } 20 ########################### ### Extract SubSequence ### ########################### my $subseq = $seq_obj ->subseq( 25 $subseq start, $subseq stop ) , my $target string = ($target- $subseq start+l) , ################### ### RUN primer3 ### ################### open (PRIM IN, ">$in pr3 file") ; print PRIM IN "PRIMER SEQUENCE ID=$query name\n" . "SEQUENCE=$subseq\n" . "TARGET=$target string,20\n" "PRODUCT SIZE=100-300\n" . "PRIMER NUM RETURN=1\n" . "=\n" , close (PRIM IN) ; ### 5 ### run PRIMER3 system ( "$primer3 45 $out pr3 file" ) ; ### 6 ### Parse PRIMER3 ($forward, $forward pos, $forward tm, $reverse, $reverse pos, $reverse tm, 50 $perseq, $product_size, $gc) parse primer3("$out pr3 file") ; if ( $forward eq "NO PRIMER" ) { print STDERR "*** No primer designed 55 for ISBP junction $rep_name at position $target ***\n" ; next ; } # IF no primer design 15 } } 30 35 40 $forward pos = ($forwardpos+$subseqstart-$reverse pos = ($reverse pos+$subseq start- my $forward len = length($forward) ; my $reverse len = length($reverse) ; $target cnt += 1 ; ### PRIMER F ### my $primerl feat = Bio::SeqFeature::Generic -> new ( -seq id => $query narre, - primary tag => "primer", -start => $forward pos+l, -end => ($forward pos+$forward len), 20 -strand => 1 ) $primerl feat >addtag_value ( "note" "seq:$forward Tm:$forward_tm" ) ; $primerl feat ->add_tagvalue ( "parent" "$target_cnt" ) 15 1) ; 1) , 10 "2" ) $primerl_feat ->add tag value "color" 25 ### PRIMER R ### my $primer2_feat = Bio::SeqFeature::Generic 30 -> new ( -seq id => $query narre, - primary tag => "primer", -start => ($reverse pos-$reverse len+2), 35 - end $reverse pos+l, - strand => -1 ) ; $primerl feat ->addtag_value ( "note" 40 "seq:$reverse Tm:$reverse_tm" ) ; $primerl feat ->add tag value ( "parent" "$target ont" ) $primer2 feat ->add tag value ( "color" ,12" , ### PCR PRODUCT ### my $per_feat = Bio::SeqFeature::Generic -> new ( -seq_id => $query name, 50 -primary tag => "amplicon", - start => $forward pos+l, -end => $reverse_pos+l, 55 - strand => 1 ) ; $per feat ->add tag value ( "id" "$target cnt" ) 45 $per_feat ->add tag value ( "color" , "3" ) $per_feat >add_tag_value "F primer:$forward Rprimer:$reverse" ) , $per feat ->add tag value "$junction" ) ; # EXTREMITY tag and JONCTION tag if ( $target eq $targetl ) { $per feat ->add tag value ( "junction" , "LowCopyDNA $str descr" ) , $per_feat ->add tag value "right element" , "$rep narre $rep_descr" ) , if ( ($strand == 1 and $start extremity == 1) or ($strand -1 and $end extremity == 1) ) { $per feat ->add tag value "extremity R", "yes" ) , } else { $per feat ->add tag value "extremity R", "no" ) ; } } elsif ( $target eq $target2 ) { $per_feat ->add tag value ( "junction" , "$str descr\ LowCopyDNA" ) ; $per feat ->add tag value "left element" , "$rep_name $rep_descr" ; if ( ($strand == 1 and $end extremity _= 1) or ($strand -1 and $start extremity == 1) ) { $per_feat ->add tag value "extremity L" , "yes" ) , } else { $per feat ->add tag value "extremity L" , "no" ) ; } push (@feats, $primerlfeat) , push (@feats, $primer2_feat) , push (@per feats, $per feat) ; ### FOR TAB FORMAT ### my $tab primer = join("$fd", ($forward, $forward tm, $reverse, $reverse tm, $perseq, $product_size, $gc)) ; $tab primers{$target ont} = $tab primer ; } # END OF FOREACH $target } # END OF FOREACH $key %haste rm START OF PRINT "primer" "note" 25 30 35 40 45 50 55 } if ( $rep cnt > 0 ) { if ( @rep_feats ) { $format =-/^embl$/ and &writeembl("$queryname.repm.embl", $seq, @rep feats) ; } # push @feats, @per feats ; # ADD THE @PCR FEATS TO THE @PRIMER FEATS if ( @feats ) { @feats = sort { $a->start() $b- >start() } @feats ; @per feats = sort { $a->start() $b->start() } @per feats ; Print Results in TAB FORMAT ## &write_tab(\%tab_primers, @per_feats) ; ## Print Results in EMBL FORMAT $format -/^embl$/ &writeembl("$queryname.primers.embl", $seq, @feats) , $format =-/^embl$/ &writeembl("$queryname.amplicons.embl", $seq, @per feats) , undef @feats ; undef @per feats ; } else { print STDERR "*** No results for $query narre ***\n" ; } else { print STDERR No results for $queryname ***\n" } # END OF PRINT unlink ($in_pr3_file, $out_pr3_file) , print STDERR "$query narre => done\n" ; 40 } # END OF WHILE ->next seq unlink ("$fasta file.cat", "$fasta file.out", "$fasta file.log") if ($do repm) , 45 } # END OF FOREACH $fasta file close OUTFILE ; exit (0) , 50 ########################################################### ####################### SUBROUTINES ####################### ########################################################### 55 # This method is used to get a haste from the cross match output of RepeatMasker # @ = RepeatMasker file and and 30 35 sub get Nash from rm { my ($file) = ; my $k = 0 ; my %hash_rm , open ( REPLIST, " ) { $rep =-/^#I^\s*$/ and next ; $rep =-s/\t/ /g ; # PArsing RepeatMasker results --------------------------------------------- my @col = split (' ', $rep) , ( $col[6]-$col[5] ) my $rep_name = $col[9] ; $rep name =-/#Simple/i and next ; # SKIP WHEN repeat is "SimpleRepeat" $rep_name =-/#Low/i and next ; # SKIP WHEN repeat is "LowComplexity" $repname =-/(.*)#Unknown/i and $rep_name = $1 ; $rep_name =-/(TREP\d+)$/ and $rep_name = $1 ; my $unmasked = $col[7] , $unmasked ='s/\(/-/g ; # in case of RepeatMasker different output $unmasked =-s/\)//g ; my $strand = 1 $col[8] eq "C" and $strand = -1 ; my $start rep ; my $end_rep ; my $unmasked rep ; if ( $col[10] _~/\(.*\)/ ) { $start_rep = $col[12] , $end_rep = $col[11] , $unmasked rep = $col[10] } else { $start rep = $col[10] $end_rep = $col[11] , $unmasked_rep = $col[12] } $unmasked_rep =-s/\(I\)//g ; $unmasked_rep =-s/\-//g ; my $rep_length = $endrep+$unmasked rep ; # This is used to know if the match corresponds to at least one of the extremity of the element my $start_extremity = 0 ; my $end extremity = 0 ; if ( $start rep my $query narre = $col[4] ; $hashrm{$queryname}{++$k} = { 'startq' $col[5], $col [6] , $unmasked, $strand, $rep narre, $start rep, $end rep, $rep length, $unmasked rep, $start extremity, $end extremity } ; } # END OF WHILE $file close (REPLIST) ; return %haste rm , } END OF SUB get haste from rm 35 # This method is used to parse PRIMER3 results # @ = PRIMER3 file 40 sub parse primer3 { my ($out pr3 file) = , => endq' unmasked' 'strand' rep narre' start rep' 'end rep' 'rep length' 'unmasked rep' => 'start extremity' 'end extremity' => => => => _> => => my ($subseq, $perseq, $gc) ; 45 my ($forward, $forward pos, $forward tm, $reverse, $reversepos, $reverse tm, $product site) , open (PRIME, $out pr3 file) , while ( ) { $ =-/^SÉQUENCE=(.*)$/ and $subseq 50 $1 $ $1 $ $1 55 $ $1 $ $1 =-/^PRIMER LEFT SEQUENCE=(.*)$/ and $forward ù/^PRIMER LEFT=(.*),.*$/ and $forward pos =-/^PRIMER LEFT TM=(.*)$/ and $forward tm =-/^PRIMER RIGHT SEQUENCE=(.*)$/ and $reverse $ ==/^PRIMER RIGHT=(.*),.*$/ $ =-/^PRIMER RIGHT TM=(.*)$/ and $reverse pos and $reverse tm $1 $ -/''PRIMER PRODUCTSIZE=(.*)$/ and $product_size =- $1 } if ($forward) { $perseq = substr($subseq, $forward_pos, $reverse pos-$forward_pos+l) , if (length($perseq) != $product_size) { print STDERR "*** Error: product_size != sequence length in \"$out pr3 file\"\n\n" ; exit(l) ; } ; $gc = &gc counter($perseq) , } else { $forward = "NO PRIMER" ; } return ($forward, $forward_pos, $forward tm, $reverse, 20 $reverse_pos, $reverse_tm, $perseq, $productsize, $gc) ; } # END OF parse primera 25 # This method is used to write the SEQUENCE and the FEATURES in EMBL format # @ = file_extension, fasta file, FT1, FT2, FT3... 30 #========== ===========ù===ù======================= sub write embl { my $out embl file = shift ; $out embl file =-s/[I]/ /g ; 35 my $seq_string = shift ; my @feats = @ ; # Bio::Seq OBJECT with features my $embl seq obj = Bio::Seq->new ( '-format' 'EMBL' , 40 id' => substr($out emblfile, 0, 10) , '-seq' $seq string ) ; $emblseq obj->add_SegFeature(@feats) ; # Bio::SegIO OBJECT my $emblseglO_obj = Bio::SeqIO->new ( '-file' 45 ">$out embl file" , '-format' => 'EMBU) , $embl segl0 obj->write seq ( $embl seq obj ) , } # END OF write embl 50 # This method is used to write the SEQUENCE and the FEATURES in TAB or CSV format 55 # = an array of FEATURES sub write tab { 15 my $ref tab primers = shift ; my @per_feats = ; # LIST OF PRIMERS foreach my $feat ( @per_feats my @ids = $feat->get_tagvalues('id') , my $id = $ids[0] ; my $junction = ($feat->get tag values('junction'))[0] ; my $target = join (',', $feat- >get tag values('note')) ; my $extremity R = ($feat->has tag('extremity R') ? ($feat->get tag values('extremity_R'))[0] : ".") ; my $extremity L ($feat->hastag('extremity_L') ? ($feat->get tag values('extremity L'))[0] : ".") , my $left element = ($feat->has tag('left element') ? ($feat->get tag values('left element'))[0] : ".") ; my $right element = ($feat->has tag('right element') ? ($feat->get tag values('right element'))[O] : ".") , ################################################################### ### Confidence Index = CI ==> "high" - "medium" - "low" ### It represents the probability for an ISBP to be locus-specific ################################################################### my $CI = "medium" ; # default if ($extremity R eq "yes" or $extremity_L eq "yes") { $CI = "high" ; }# HIGH probability for else { $junction =-/(\S+) (\S+)/ ; $CI = "low" if ($1 eq $2) } ############## # TAB FORMAT # seq_id $forward $forward tm 35 $reverse $reverse tm $product_size junction targe t descr left TE descr right TE ############## print $feat->seq id . " $id" .$fd. ${$ref tab primers}{$id} .$fd. 40 $junction .$fd. $CI .$fd. $target .$fd. $left element .$fd. $extremity_L .$fd. 45 $right element .$fd. $extremity R ."\n" ; } # END OF FOREACH $feat 50 } # END OF write_tab 55 # This method is used to calculate the GC% of features # @ = (sequence) sub gc counter { 25 30 my ($seq) = ; my $len = length($seq) ; my $gc = 0.00 ; my $gc counter = 0 ; my $er counter = 0 ; foreach ( 0 .. Sien-1 ) { my $base = substr($seq, $ , 1) ; $base=-/[acgt]/i or $er counter += 1 ; $base=-/[cg]/i and $gc counter += 1 ; } $gc = sprintf("%.2f" ( ($gc counter)/($len- $er_counter)*100) ) if ($len!=$er counter) ; return ($gc) ; 1 ################################################################# #=====================================================-========= # HELP sub help() { my $prog = basename($0); print STDERR « EOF ; ### $prog ### # CREATED: 2007-06-11 # LAST MODIF: $lastmodif # AUTHOR: Frederic CHOULET (INRA Clermont-Ferrand) # VERSION: $VERSION # This script is used to design primers for amplification of ISBP markers. # It can run and/or parse RepeatMasker results and design primers with "Primer3" program. # IMPORTANT remarks * 1. If you use -rm option (provide an already existing RepeatMasker file instead of running it) be aware that the IDs of the FASTA file and that of the RepeatMasker file MUST be the same. * 2. The RepeatMasker outfile MUST be in ".out.xm" (cross match) format: 14760 5.48 0.06 0.17 my BAC id 2503 4256 (177878) C gnlUTREPITREPl439#Unknown (5) 8617 6866 # USAGE: $prog [-dorm I -rm RepeatMasker_ file] [-lib Repeat library] [OPTIONS] fasta filel fasta file2 ... EXAMPLES: $prog -dorm -lib /usr/local/db/TREP.fas -f EMBL MyFastaFile.fas $prog -rm MyRmFile.out.xm -lib /usr/local/db/TREP.fas -f tab MyFastaFile.fas ### OPTIONS ### -dorm run RepeatMasker for each FASTA sequence before primer design - rm repeatMasker result file - lib PATH to repeatmasker lib in FASTA format - f string output format: tabIcsviembl [tab] -> format with 1 line per couple of primers with field separator = "tab" [default] [csv] -> format with 1 line per couple of primers with field separator = ";" [embl] -> print results as EMBL features (to be read under ARTEMIS) - o output file (for tabicsv outputs) [default: STDOUT] -e integer distance from the extrimity of the element [default:50 nt] - V: print version - h: print this help EOF } 30 # END OF SCRIPT EXEMPLE 2: PREPARATION DE PUCES A ADN CONFORMES A L'INVENTION Un ensemble de 2646 fragments génomiques a 35 été sélectionné correspondant à : - 707 ISBP connus ayant déjà été utilisés pour la construction de la carte intégrée du chromosome 3B du blé (Paux et al., Science, 322, 101-104, 2008) ; 40 - 1884 ISBP identifiés dans des séquences de BAC ou d'extrémités de BAC de blé, à l'aide du programme IsbpFinder décrit à l'exemple 1 ci-dessus ; - 40 témoins positifs correspondant à des 45 fragments internes d'éléments transposables de blé ; - 15 témoins négatifs correspondant à des éléments répétés de riz, d'Arabidopsis thaliana ou d'humain. 10 15 20 25 Des sondes oligonucléotidiques ont été établies à partir de chacun de ces fragments avec une taille croissante, de 13 à 37 nucléotides de part et d'autre de la jonction. Pour les contrôles négatifs, les sondes ont été générées en choisissant de manière arbitraire une position dans la séquence et en dérivant des oligonucléotides de 26 à 72 nt centrés autour de cette position A titre d'illustration, les séquences de 10 quelques unes des sondes dérivées d'ISBP de blé sont indiquées dans les Tableaux I et II ci-après. Tableau I Numér SEQUENCE Tm Longue ode la ur (nt) sonde (SEQ 1 DNO:) 1 CGTGGTGAGTACCCCCTAGTCCAGGACACCGTCAATGCCACTG 76,4 70 TTGGGGAACGTAGCAGAAATTCAAAAT 2 GCCAGGGCCGAACGGTATCCCTATTTTCTACTAGTGAGGCAAT 74,0 70 ATGTGGTGCATGTCAAAAGTATACTAC 3 CGTGACAGATGGCAAAGTAGATGATTCCTGTAGTGGGCTCCGG 79,9 70 TCGCCCGCGGACGCGTACGAGATCGTC 4 GCGGCCAGATAT T TCCT TGT TAAAAAAAGAGAAACTAT TGAAT 69,4 70 TTGTTCATGATTTTGTATGCTTGGTCG T TATATGTATGAAT TGAGGGAT TAT T TAAAAAGTAGCTAT TAA 62,9 70 TAAAAAC T TAAAAAGACAAAT CAAAAA 6 AAT TAATACACCATATAT T T TAAAATAGAGTGAGTAAAGAAAT 64,1 70 TTAAGAATCTCAACATTATCAACAACA 7 CTTGAAGCTTGAAGATGGTCTCCCCAATGACCTTGTGTTGGCA 76,4 70 TTTTGGGAACGGGGGTACCCAGACTTG 8 TAGGAATTTTTTTGAAATTACTACGTTCCCCAACAATTCTCTC 71,7 70 TCTCCTACAGCATGCTATTGAGTGGGG 9 CACCCCCCCTCTAGTCAACCATATCGATCCTTTCAATTGGTAT 74,0 70 CAGAGCCTCGTCTCTTTATTAAGGACT TAGATAAAT G TAGAAT TAACAAAATGGT TATGAAGT T TCGGAT 67,6 70 TGCTCATGTAAGTACTTGTTGTCATGT 11 CCTATGCTTTTGATAAGTCCAACTTATAAGTGCAAAAACTTGT 69,4 70 TGTGGGATCTTTGATACATCCATTTTG 12 CCAAAATGTCATGGATGTGCCTTTTTTTGTAGTGAAGGCCCAT 71,1 70 CCGTTAGCTTAGCATAATGATCATTAA 13 TGTAGTCCATTTGAAATGTGTAGAAAGACTTATATCGAGTGCA 71,1 70 GTGCTTTGATGTGTCGCATCAAATCGT 14 CCCCTACCCGAGATCTGCCGGTTTTGACACCGACAGTTGCCTA 76,4 70 CTTCACCAGAGTGTTGAACATGAACTT AATGCAAAGTCTTTGTGTTTTCTCGAAAAAAGAGATGTACCAT 71,1 70 TAGGTATATCAAGGTGGGGGAGGAGAA 16 GACTGCGCACTGGTATGGTCGTGCTCGTGCACTGGTGTGATAG 76,4 70 CCTGGCTTATTAGGGATAATAGACTAC 17 GGGACACACCTAAGGGCACCAAAT TAAT TATCCCATGAATAT T 74,6 70 GGAGCAAATAACTACCAGAGGGGGCCC 18 AATATAGGGCGATATTGGCGCGTCCGGACGCGTCCGGTATGTT 75,8 70 GTACTGATGATAGGGAACGAAGCAAAA 19 AGTCAAGGTCACAAGTTGACATATTTCTTGTAGTGTTAAAAAG 71,7 70 ACGAAAATCCCGAAAGCCAACACCTCC TAGCACCACCAGTGTAATTGACTCTTCATACAATAATAGACCA 69,4 70 ACATTTATGCTCTCATATTAGTAGCAT Tableau II Numér COTE GAUCHE DE LA JONCTION COTE DROIT DE LA JONCTION o de la sonde 1 TREP1416 Retrotransposon, LTR, TREP1439 Retrotransposon, LTR, unknown, "RLX_Gujog_AY494981-1" Copia, "RLC_WIS_AY368673-1" 2 TREP770 DNA transposon, TIR, TREP747 DNA transposon, TIR, CACTA, "DTC_Clifford_TREP770-1" CACTA, "DTC_Jude_AF446141-1" 3 TREP797 DNA transposon, TIR, Low co' pDNA CACTA, "DTC_Balduin_AY146588-2" 4 TREP832 Retrotransposon, LINE, Low co DNA unknown, "RIX_Karin_AY146587-1" copy TREP1200 DNA transposon, TIR, TREP1154 DNA transposon, TIR, Mariner, "DTT_Oleus_AF490468-1"; Mariner, "DTT_Thalos_BQ160341-1"; Stowaway MITE Stowaway MITE 6 TREP242 DNA transposon, TIR, Low copy DNA Mariner, "DTT_Jason_AF325196-1"; Stowaway MITE 7 TREP821 Retrotransposon, LTR, TREP2318 Retrotransposon, LTR, Gypsy, "RLG_Wilma_AY146588-3" Gypsy, "RLG_Nusif_AY494981-1" 8 TREP25 Retrotransposon, LTR, Copia, TREP831 DNA transposon, TIR, "RLC_Angela_464G14-1" Mutator, "DTM_Joseph_AY146587-1" 9 TREP1527 Retrotransposon, LTR, Low copy DNA Copia, "RLC_Inga_AY661558-2" TREP766 DNA transposon, TIR, TREP1097 DNA transposon, TIR, CACTA, "DTC_Jorge_231A16-1" Mariner, "DTT_Icarus_BQ166812-1"; Stowaway MITE 11 TREP214 Retrotransposon, LINE, TREP842 Retrotransposon, LTR, unknown, "RIX_Mara_AB012296-1" Gypsy, "RLG_Wilma_AY146587-1" 12 TREP765 DNA transposon, TIR, TREP1602 Retrotransposon, LTR, CACTA, "DTC_Jorge_AF326781-1" Copia, "RLC_Angela_109N23-1" 13 TREP2368 Retrotransposon, LTR, TREP1146 DNA transposon, TIR, "RLG_Wilma EF067844-3" Mariner, "DTT_Thalos_BJ274652-1"; Gypsy, û Stowaway MITE 14 TREP1415 Retrotransposon, LTR, Low co DNA Gypsy, "RLG_Fatima_AY494981-2" copy TREP2315 Retrotransposon, LINE, TREP256 Retrotransposon, UNE, unknown, "RIX_Nala_643D12-1" unknown, "RIX_Miuse_115G1-1" 16 TREP1812 DNA transposon, TIR, TREP1400 Retrotransposon, LTR, CACTA, "DTC Isaac 294D11 3" unknown, "RLX_Cassandra_AY164585- û û 1" 17 TREP795 DNA transposon, TIR, TREP842 Retrotransposon, LTR, Mutator, "DTM_Apollo_AY146588-1" Gypsy, "RLG_Wilma_AY146587-1" 18 TREP1643 Retrotransposon, LINE, TREP1325 Retrotransposon, LTR, unknown, "RIX_Morpheus_AY643843- Copia, " RLC ûWISûAF459088 1" 1" 19 TREP1543 DNA transposon, TIR, TREP214 Retrotransposon, LINE, CACTA, "DTC_Sherlock_AY661558-4" unknown, "RIX_Mara_AB012296-1" TREP831 DNA transposon, TIR, TREP2292 DNA transposon, TIR, Mutator, "DTM_Joseph_AY146587-1" Mariner, "DTT_Jason_643D12 1"; Stowaway MITE Toutes les sondes dérivées des marqueurs ISBP et des témoins ont été déposées sur des puces NimbleGen HD2 (Roche NimbleGen, Inc., Madison, WI USA); chaque sonde a été déposée en double de façon aléatoire afin d'éviter les biais qui pourraient résulter du fait que les réplicats soient placés côte à côte ; la position des dépôts correspondant à chaque sonde est reportée sur une grille de positionnement. Chaque puce HD2 a été divisée en 12 régions similaires permettant l'hybridation simultanée de 12 échantillons différents. EXEMPLE 3 : UTILISATION DE PUCES A ADN CONFORMES A L'INVENTION POUR LE GENOTYPAGE DU BLE Les hybridations ont été faites avec deux lignées différentes de blé tendre : Chinese Spring (CS), la variété de référence à partir de laquelle les séquences ont été obtenues ; Une lignée nullisomique 3B - tétrasomique 3A (N3B), où les chromosomes 3B ont été substitués par des chromosomes 3A. L'ADN génomique issu de chacune de ces deux lignées a été marqué à la Cy3 ou à la Cy5, en utilisant le « DNA labelling kit » commercialisé par NimbleGen, selon le protocole préconisé par le fabricant. Plusieurs expériences ont été réalisées : CS marqué à la Cy3 seul CS marqué à la Cy5 seul - N3B marqué à la Cy3 seul ; N3B marqué à la Cy5 seul ; CS marqué à la Cy3 et N3B marqué à la Cy5 ; CS marqué à la Cy5 et N3B marqué à la Cy3. 4Ng d'ADN marqué sont utilisés pour chaque 30 hybridation. L'hybridation des échantillons sur les puces décrites à l'exemple 2 ci-dessus est effectuée en utilisant le kit d'hybridation « NimbleGen Hybridization 31 Kit » commercialisé par NimbleGen, selon le protocole préconisé par le fabricant. Lorsque l'hybridation est terminée la lame est lavée quatre fois en utilisant le kit de lavage « NimbleGen Wash Buffer Kit », selon le protocole préconisé par le fabricant. Puis la lame est séchée, préalablement à la lecture par scanner InnoScan 900AL (Innopsys, Toulouse, France). L'intensité de l'hybridation des échantillons marqués par la Cy3 et par la Cy5 est quantifiée pour chacun des points de dépôt localisés par rapport à la grille de positionnement. Les données brutes ainsi obtenues sont nettoyées (filtrage sur les intensités : spot dont l'intensité est trop proche du bruit de fond, spot dont l'intensité n'est pas uniforme, et élimination des réplicats non équivalent), transformées (logarithme de base 2) et normalisées par l'utilisation d'un rapport R : R = médiane du log2 de l'intensité en Cy5 des contrôles positifs/ médiane du log2 de l'intensité en Cy3 des contrôles positifs. Les données normalisées seront utilisées 25 pour le génotypage. Les résultats suivants ont été obtenus à partir de ces expériences : une taille minimale de 21 nu de par et d'autre de la jonction est préférable pour obtenir un 30 signal d'intensité suffisante ; - le pourcentage en GC de la sonde doit être compris entre 40 et 60% ; la température de fusion de la sonde doit être comprise entre 65 et 75°C ; 35 - le signal est linéaire pour des sondes de taille comprise entre 26 et 74 nu ; REVENDICATIONS1) Puce à ADN portant un assortiment de sondes oligonucléotidiques de 26 à 74 nucléotides (nt) de séquences différentes entre elles, chacune desdites sondes ayant la séquence de l'un ou l'autre brin d'un segment d'ADN génomique d'un organisme d'une espèce donnée, ledit segment d'ADN génomique étant centré sur la jonction entre un élément transposable inséré dans le génome dudit organisme et une séquence flanquant ledit élément. 2) Puce à ADN selon la revendication 1, caractérisée en ce que lesdites sondes ont un pourcentage en GC compris entre 40 et 60%, et une température de fusion comprise entre 65 et 75°C. 3) Puce à ADN selon une quelconque des revendications 1 ou 2, caractérisée en ce que lesdites sondes ont une taille d'au moins 42 nt. 4) Utilisation d'une puce à ADN selon une quelconque des revendications 1 à 3 pour le génotypage d'individus de l'espèce dont sont dérivées les sondes portées par ladite puce. 5) Utilisation selon la revendication 4, caractérisée en ce que ladite espèce est une espèce végétale. 6) Utilisation selon la revendication 5, caractérisée en ce que ladite espèce végétale appartient à la famille des Triticeae. 7) Utilisation selon la revendication 6, caractérisée en ce que ladite espèce végétale appartient 30 au genre Triticum.