BioMart Perl API retrieve filter values

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

BioMart Perl API retrieve filter values

Patrice Dehais
Hello

I've a filter which defines a chromosomal region, thus in the marteditor
it has no field, tableConstraint, nor key but a filterList with
appropriate filter list (chr,start,end).
It works fine when I use Web interface of BioMart.
However, I need to retrieve the value of this filter in a homemade
Formatter.
I can retrieve values of all other filters (except this one) using this
script in the getDisplayNames subroutine of the formatter :

     foreach my $f (@{$query->getAllFilters}) {
         foreach my $row (@{$f->getTable->getRows}){
             printf STDERR "filter name: %s value= %s\n",$f->name,$row->[0];
         }
     }

Why doesn't it work for this special kind of filter ?

thanks

Patrice

--
Patrice Dehais : INRA - LCG - SIGENAE,
Chemin de Borde-Rouge - Auzeville - BP 52627
31326 Castanet-Tolosan cedex - FRANCE
tel:   +33(0)5.61.28.57.08 fax:   +33(0)5.61.28.53.08
http://www.sigenae.org

Reply | Threaded
Open this post in threaded view
|

Re: BioMart Perl API retrieve filter values

Syed Haider
Hey Patrice,

look at this piece of code, hope this helps:

foreach my $option(@{$filter->getAllOptions}){
        next if (!$option->filter);
        my $options = $option->filter->getAllOptions;
        my @vals;
        foreach (@$options){
                push @vals,$_->value;
        }
        my @filters = ($option->filter);
        foreach my $filt (@filters) {
                print $filt->name."\t".$filt->displayName;
        }
}




On 30/11/2010 14:26, Patrice Dehais wrote:

> Hello
>
> I've a filter which defines a chromosomal region, thus in the marteditor
> it has no field, tableConstraint, nor key but a filterList with
> appropriate filter list (chr,start,end).
> It works fine when I use Web interface of BioMart.
> However, I need to retrieve the value of this filter in a homemade
> Formatter.
> I can retrieve values of all other filters (except this one) using this
> script in the getDisplayNames subroutine of the formatter :
>
>       foreach my $f (@{$query->getAllFilters}) {
>           foreach my $row (@{$f->getTable->getRows}){
>               printf STDERR "filter name: %s value= %s\n",$f->name,$row->[0];
>           }
>       }
>
> Why doesn't it work for this special kind of filter ?
>
> thanks
>
> Patrice
>
Reply | Threaded
Open this post in threaded view
|

Re: BioMart Perl API retrieve filter values

Patrice Dehais
Thank you for the advice, I've put your piece of script into my getDisplayNames subroutine of my formatter, but unfortunately the main $option loop exists always on the first test (!$option->filter).

I've dive a little further into the BioMart code to see where my filters disappeared, and it seems that's in the execute subroutine of the QueryRunner:

    $self->executionPlan($query);
 
    my $formatterName = $query->formatter() || 'TSV';
    my $module = "BioMart::Formatter::$formatterName";
    $self->loadModule($module);
    my $formatter = $module->new();
   
    $query = $formatter->processQuery($query);
 
    $self->executionPlan($query);# call again as formatter processQuery can
                             # change plan
   
    my $rtable = $self->_getResultTable($query);

    if ($query->count){
        $self->set('count',$rtable);
    }
    else{
        $formatter->resultTable($rtable);
        $self->set('formatter',$formatter);
    }

  • they are still there when the processQuery of the formatter is called
  • still there too just after when the executionPlan is call again on the query
  • but once the _getResultTable has been called, nothing more ... I suspect something in the _processPath of the QueryRunner, but what ?
Thus, to make it works easily, I've modified my code and moved some parts into the processQuery where the filters are still well defined, and I store now values I need for the getDisplayNames into a formatter object attribute created for this purpose.

Thanks

Patrice

On 12/03/2010 10:34 PM, Syed Haider wrote:
Hey Patrice,

look at this piece of code, hope this helps:

foreach my $option(@{$filter->getAllOptions}){
    next if (!$option->filter);
    my $options = $option->filter->getAllOptions;
    my @vals;
    foreach (@$options){
        push @vals,$_->value;
    }
    my @filters = ($option->filter);
    foreach my $filt (@filters) {
        print $filt->name."\t".$filt->displayName;
    }
}




On 30/11/2010 14:26, Patrice Dehais wrote:
Hello

I've a filter which defines a chromosomal region, thus in the marteditor
it has no field, tableConstraint, nor key but a filterList with
appropriate filter list (chr,start,end).
It works fine when I use Web interface of BioMart.
However, I need to retrieve the value of this filter in a homemade
Formatter.
I can retrieve values of all other filters (except this one) using this
script in the getDisplayNames subroutine of the formatter :

      foreach my $f (@{$query->getAllFilters}) {
          foreach my $row (@{$f->getTable->getRows}){
              printf STDERR "filter name: %s value= %s\n",$f->name,$row->[0];
          }
      }

Why doesn't it work for this special kind of filter ?

thanks

Patrice




-- 
Patrice Dehais : INRA - LCG - SIGENAE, 
Chemin de Borde-Rouge - Auzeville - BP 52627
31326 Castanet-Tolosan cedex - FRANCE
tel:   +33(0)5.61.28.57.08 fax:   +33(0)5.61.28.53.08
http://www.sigenae.org