Hi all,

I continued debugging and as far as I see, the biomart.pm module is now
working fine.  I copy-pasted the changes I made to the build_features
method below.  There seemed to be an issue with the attributes given to
the 'new' method of the BioMart::Query and to the 'getResultTable'
method of BioMart::QueryPlanner but that should be fixed now.

Have fun!
Regards,
ELS


sub build_features
{
    my ($self, $opts) = @_;

    my $segment         = $opts->{'segment'}    || return ( );
    my $segment_start   = $opts->{'start'};
    my $segment_end     = $opts->{'end'};

    # Use $segment and, if they are defined, $segment_start and
    # $segment_end, to fetch the appropriate data from the mart.

    my $virtual_schema_name;
    if (defined($self->{'BioMart'}->{'virtualSchema'})) {
                $virtual_schema_name =
($self->{'BioMart'}->{'virtualSchema'});
                }else {
                $virtual_schema_name = DEFAULTVSCHEMA;
                }
   
    ### modified by EV ###      
    my $query = BioMart::Query->new( 'registry' =>
$self->{'BioMart'}->{'registry'},
'virtualSchemaName'=>$virtual_schema_name);

    my $atts = $self->{'BioMart'}->{'attributes'};
    foreach my $att (@{$atts}) {
      $query->addAttribute($att);      
    }
    my $segFilter = $self->{'BioMart'}->{'filters'}->[0]->new();#clone
    my $segTable = BioMart::AttributeTable->new();
    $segTable->addRow( [ $segment ] );
    $segFilter->setTable($segTable);
    $query->addFilter($segFilter);

    if ($segment_start && $segment_end) {
      my $startFilter =
$self->{'BioMart'}->{'filters'}->[1]->new();#clone
      my $startTable = BioMart::AttributeTable->new();
      $startTable->addRow( [ $segment_start ] );
      $startFilter->setTable($startTable);
      $query->addFilter($startFilter);

      my $endFilter = $self->{'BioMart'}->{'filters'}->[2]->new();#clone
      my $endTable = BioMart::AttributeTable->new();
      $endTable->addRow( [ $segment_end ] );
      $endFilter->setTable($endTable);
      $query->addFilter($endFilter);
    }

    my $reqKeys = REQUIREDKEYS;
    my $defaults = DEFAULTS;
    my @features = ( );

my $query_planner = BioMart::QueryPlanner->new();
    
    ### modified by EV ###
    my $rtable = $query_planner->getResultTable($query);
                                                #,
 
#$self->{'BioMart'}->{'registry'},
                                                #undef,
                                                #INIT_BATCHSIZE);
    

         ROW: while ($rtable->hasMoreRows) {
        my $row = $rtable->nextRow;

        my $href = {};
        
        #skip this feature unless all keys in REQUIREDKEYS are defined
        my $good = 0;
        KEY: foreach my $reqKey (@{$reqKeys}) {
          my $pos = $self->{'BioMart'}->{'required_keys'}->{$reqKey};
          next KEY unless ($row->[$pos]);
          $good++;
        }
        next ROW unless($good);

        my $i = 0;
        while ($i < @{$row}) {
          my $key = $self->{'BioMart'}->{'feature_keys'}->[$i];
          $href->{$key} = $row->[$i] || $defaults->{$key}; #may be
either default, or undef
          $i++;
        }

        push @features, $href;
    }
    return @features;
}

-----Original Message-----
From: Arek Kasprzyk [mailto:[EMAIL PROTECTED] 
Sent: dinsdag 11 juli 2006 12:12
To: Els Vanbleu
Cc: [email protected]
Subject: Re: Biomart as DAS server


On 11 Jul 2006, at 08:28, Els Vanbleu wrote:

> Dear all,
>
> We are trying to implement BioMart as DAS server.  Therefore we  
> followed
> the instructions as mentioned in the README file of the /das folder,
> i.e. install ProServer, make an Importable/Exportable in the mart and
> write a biomart.ini file.  All dependencies were correctly established
> and the ProServer was successfully launched using our biomart.ini file
> (we get a pid.file and output is directed to a log.file).
>
> With the url (pidserver/das/dsn/) we retrieve the available data  
> sources
> but when trying to catch some features (e.g.
> pidserver/das/mymart1/features?segment=B0222.1), the system failed
> (giving a source error).
>
> After intensive debugging, we already think we solved a few bugs,  
> namely
> in the das/biomart.pm module
>
> use constant DEFAULTVSCHEMA => "defaultSchema";
>
> should be
>
> use constant DEFAULTVSCHEMA => "default";
>
> in order to have compliant virtualSchemas when no virtualSchema is
> specifically set in the mart (and so the mart uses the 'default'
> virtualSchema).
>
> Secondly, it turned out to us that the Location->getDatasetByName  
> method
> was case sensitive (BioMart::Configuration::Location), so for our
> purposes we made it case insensitive.
>
> sub getDatasetByName {
>     my ($self,$dataSetName) = @_;
>     $dataSetName = uc $dataSetName;
>     my $dataSetHash = $self->get('datasets');
>     my $dataSetEntry = $dataSetHash->{$dataSetName};
>     return $dataSetEntry;
> }
>
> But still, no luck.  The remaining error message now is:
>

Hi Els,
DAS server functionality clearly slipped through
our release testing procedure - apologies. You identified all the  
problems correctly.
Let us investigate and we'll get back to you with the advice on this   
soon

a.



>
> -------------------- EXCEPTION --------------------
>
> DATE: 10-JUL-2006
>
> MSG: You need to define virtual schema name in order to create a Query
> object
>
> STACK BioMart::Query::_new
> /var/www/biomart-web/biomart-plib//BioMart/Query.pm:92
> STACK BioMart::RootI::new
> /var/www/biomart-web/biomart-plib//BioMart/RootI.pm:54
> STACK Bio::Das::ProServer::SourceAdaptor::biomart::build_features
> ../lib/Bio/Das/ProServer/SourceAdaptor/biomart.pm:146
> STACK (eval) ./proserver:467
> STACK poeserver::client_got_request ./proserver:459
> STACK (eval) ./proserver:357
> STACK poeserver::__ANON__ ./proserver:357
> STACK POE::Session::_invoke_state
> /usr/lib/perl5/site_perl/5.8.0/POE/Session.pm:484
> STACK POE::Kernel::call
> /usr/lib/perl5/site_perl/5.8.0/POE/Kernel.pm:1656
> STACK POE::Wheel::ReadWrite::__ANON__
> /usr/lib/perl5/site_perl/5.8.0/POE/Wheel/ReadWrite.pm:309
> STACK POE::Session::_invoke_state
> /usr/lib/perl5/site_perl/5.8.0/POE/Session.pm:484
> STACK (eval) /usr/lib/perl5/site_perl/5.8.0/POE/Kernel.pm:983
> STACK POE::Kernel::_dispatch_event
> /usr/lib/perl5/site_perl/5.8.0/POE/Kernel.pm:969
> STACK POE::Kernel::_data_ev_dispatch_due
> /usr/lib/perl5/site_perl/5.8.0/POE/Resource/Events.pm:256
> STACK POE::Kernel::loop_do_timeslice
> /usr/lib/perl5/site_perl/5.8.0/POE/Loop/Select.pm:315
> STACK POE::Kernel::loop_run
> /usr/lib/perl5/site_perl/5.8.0/POE/Loop/Select.pm:323
> STACK POE::Kernel::run  
> /usr/lib/perl5/site_perl/5.8.0/POE/Kernel.pm:1218
> STACK toplevel ./proserver:185
>
> -------------------------------------------
>
>  at ../lib/Bio/Das/ProServer/SourceAdaptor/biomart.pm line 146
>
> It seems to us that the ProServer got stuck when applying the
> das_features method from the Bio/Das/ProServer/SourceAdaptor.pm
module.
>
> Can anyone still follow?  Any ideas how to proceed?
> Thanks in advance.
>
> Els Vanbleu
>
>


------------------------------------------------------------------------

-------
Arek Kasprzyk
EMBL-European Bioinformatics Institute.
Wellcome Trust Genome Campus, Hinxton,
Cambridge CB10 1SD, UK.
Tel: +44-(0)1223-494606
Fax: +44-(0)1223-494468
------------------------------------------------------------------------

-------



Reply via email to