Raw content of SeqStoreConverter::MusMusculus
use strict;
use warnings;
use SeqStoreConverter::BasicConverter;
package SeqStoreConverter::MusMusculus;
use vars qw(@ISA);
@ISA = qw(SeqStoreConverter::BasicConverter);
sub create_coord_systems {
my $self = shift;
$self->debug("MusMusculus Specific: loading assembly data");
my $target = $self->target();
my $dbh = $self->dbh();
my $ass_def = $self->get_default_assembly();
my @coords =
(["chromosome" , $ass_def, "default_version" ,1 ],
["supercontig", undef , "default_version" ,2 ],
['clone' , undef , 'default_version' ,3 ],
["contig" , undef , "default_version,sequence_level",4]);
my @assembly_mappings = ("chromosome:$ass_def|contig",
"supercontig|contig",
"clone|contig",
"chromosome:$ass_def|contig|clone",
"chromosome:$ass_def|contig|supercontig",
"supercontig|contig|clone");
$self->debug("Building coord_system table");
my $sth = $dbh->prepare("INSERT INTO $target.coord_system " .
"(name, version, attrib, rank) VALUES (?,?,?,?)");
my %coord_system_ids;
foreach my $cs (@coords) {
$sth->execute(@$cs);
$coord_system_ids{$cs->[0]} = $sth->{'mysql_insertid'};
}
$sth->finish();
$self->debug("Adding assembly.mapping entries to meta table");
$sth = $dbh->prepare("INSERT INTO $target.meta(meta_key, meta_value) " .
"VALUES ('assembly.mapping', ?)");
foreach my $mapping (@assembly_mappings) {
$sth->execute($mapping);
}
$sth->finish();
return;
}
sub create_seq_regions {
my $self = shift;
$self->debug("MusMusculus Specific: creating contig, " .
"clone, chromosome and supercontig seq_regions");
$self->contig_to_seq_region();
$self->clone_to_seq_region();
$self->chromosome_to_seq_region();
$self->supercontig_to_seq_region();
}
sub create_assembly {
my $self = shift;
$self->debug("MusMusculus Specific: loading assembly data");
$self->assembly_contig_chromosome();
$self->assembly_contig_clone();
$self->assembly_contig_supercontig();
}
#
# Override contig_to_seq_region and clone_to_seq_region to provide
# mouse specific behaviour
#
# sub contig_to_seq_region {
# my $self = shift;
# my $target_cs_name = shift;
# my $target = $self->target();
# my $source = $self->source();
# my $dbh = $self->dbh();
# $target_cs_name ||= 'contig';
# $self->debug("MusMusculus Specific: Transforming contigs into " .
# "$target_cs_name seq_regions");
# my $cs_id = $self->get_coord_system_id($target_cs_name);
# #There are two types of contigs in mouse:
# #
# # Contigs which form BAC clones
# #
# my $sth = $dbh->prepare
# ("INSERT INTO $target.seq_region " .
# "SELECT contig_id, name, $cs_id, length " .
# "FROM $source.contig " .
# "WHERE name not like 'C%'");
# $sth->execute();
# $sth->finish();
# #
# # Contigs which were created from whole genome shotgun
# #
# $sth = $dbh->prepare
# ("INSERT INTO $target.seq_region " .
# "SELECT ctg.contig_id, cln.name, $cs_id, length " .
# "FROM $source.contig ctg, $source.clone cln " .
# "WHERE ctg.clone_id = cln.clone_id " .
# "AND ctg.name like 'C%'");
# $sth->execute();
# $sth->finish();
# return;
# }
sub clone_to_seq_region {
my $self = shift;
my $target_cs_name = shift;
my $target = $self->target();
my $source = $self->source();
my $dbh = $self->dbh();
# target coord_system will have a different ID
$target_cs_name ||= "clone";
my $cs_id = $self->get_coord_system_id($target_cs_name);
$self->debug("MusMusculus Specific:Transforming clones " .
"into $target_cs_name seq_regions");
#
# We don't want to make clones out of the WGS contigs, only out of
# the actual BACs with proper embl accessions
#
my $select_sth = $dbh->prepare
("SELECT cl.clone_id,
CONCAT(cl.embl_acc, '.', cl.embl_version),
MAX(ctg.embl_offset+ctg.length-1)
FROM $source.clone cl, $source.contig ctg
WHERE cl.clone_id = ctg.clone_id
AND cl.embl_acc not like 'C%'
GROUP BY ctg.clone_id");
$select_sth->execute();
my ($clone_id, $embl_acc, $length);
$select_sth->bind_columns(\$clone_id, \$embl_acc, \$length);
my $insert_sth = $dbh->prepare
("INSERT INTO $target.seq_region (name, coord_system_id, length) " .
"VALUES(?,?,?)");
my $tmp_insert_sth = $dbh->prepare
("INSERT INTO $target.tmp_cln_map (old_id, new_id) VALUES (?, ?)");
while ($select_sth->fetch()) {
$insert_sth->execute("$embl_acc", $cs_id, $length);
#store mapping of old -> new ids in temp table
$tmp_insert_sth->execute($clone_id, $insert_sth->{'mysql_insertid'});
}
$select_sth->finish();
$insert_sth->finish();
$tmp_insert_sth->finish();
return;
}
1;