jabaws question - creating new web service

Hi joni.

The development branch build of Jalview that you are looking for is in my last email. The link on the website points to a different build at the moment.

Please be aware that the Jalview client for jaba2 is still in development! User interface integration is by no means complete.

Jim.

J. B. Procter Jalview/enfin Barton group

···

-----Original Message-----
From: Joni Fazo jbfazo@lbl.gov
To: Peter Troshin p.v.troshin@dundee.ac.uk
Cc: JABAWS discussion list jabaws-discuss@compbio.dundee.ac.uk, jalview-dev@jalview.org
Sent: Fri, 18 Nov 2011 0:30
Subject: Re: [Jalview-dev] jabaws question - creating new web service

Hi Peter,

I just downloaded the development version of JABAWS today. I had been working with JABAWS1.

I was able to get my JABAWS2 server working, but can’t seem to access all the web services via Jalview. I’ve tried with both Jalview 2.7 and my downloaded latest dev version of Jalview.

Do I need to include a new client jar for JABAWS2 when I build Jalview? I tried building Jalview after replacing lib/min_jaba_client.jar with lib/min_jaba_client2.jar build get the following error from ant:

[javac] C:\Documents and Settings\jfazo\My Documents\compgen_workspace\JalviewDev\src\jalview\ws\jws2\JabaWsServerQuery.java:85: incompatible types
[javac] found : compbio.data.msa.JABAService
[javac] required: compbio.data.msa.MsaWS
[javac] service = Jws2Client.connect(jwsservers, srv);
[javac]

Also - I when I run the development version of Jalview from your website
(http://www.compbio.dundee.ac.uk/~ws-dev1/jalview/latest/webstart/jalview.jnlp), I don’t see the new web services. This Jalview seems to be connecting to http://www.compbio.dundee.ac.uk/jabaws/ which is JABAWS1. Is there a version of Jalview available that works with JABAWS2? It would be nice for me to see what the new services do and how the UI works.

Thanks in advance for you help!

Joni

I am able to get Jalview to connect to my JABAWS2 server, but only

On Wed, Nov 16, 2011 at 9:50 AM, Peter Troshin <p.v.troshin@dundee.ac.uk> wrote:

Hi Joni,

I am pleased to know that you have succeeded in creating a web service in JABAWS framework!
I think that what Jim said makes a lot of sense. I just like to point out that refactoring from MsaWS to SequenceAnnotation interface should not be too painful, as both web service interfaces share the same methods with the only exception of “result returning” methods which returns ScoreManager object instead of Alignment.
Have a look at the other services that implements SequenceAnnotation interface to have a better idea what might be involved.
We assume that you work with the development version of JABAWS, as JABAWS 1 does not have SequenceAnnotation interface.

Let us know how it goes.
Regards,
Peter

On 16/11/2011 15:50, Jim Procter wrote:

Hi Joni.

I’m seconding Geoff’s email - it’s really good to hear you’re
progressing with adding services to JABAWS ! I’ve been working on
adding JABAWS2 services to Jalview for the v2.8 release - and I think we
might be able to help each other out here…

On 15/11/2011 19:48, Joni Fazo wrote:

I’m working to create a new jabaws web service for the tool gblocks
(http://molevol.cmima.csic.es/castresana/Gblocks.html). I am using
the MsaWS interface. I have the web service working - sort of :slight_smile:

My problem is that gblocks expects aligned sequence as input. My
gblocks web service works fine when given input sequence that is all
the same length, with no gaps. But otherwise it fails, reporting that
the sequences are of different lengths. All gaps seem to be stripped
off the sequence prior to the web service being called.

I see that the Jalview class MsaWSClient has an attribute “submitGaps”
with a default value of false. Is there anyway to set this to true
when calling a specific web service?

This class also has a method canSubmitGaps with a TODO that makes me
think this capability is not yet available. (see below). Any tips on
a work-around?

private boolean canSubmitGaps()
{
// TODO: query service or extract service handle props to check if
we can
// realign
return (WebServiceName.indexOf(“lustal”)> -1); // cheat!
}

There’s no straightforward workaround for version 2.7 of Jalview, I’m
afraid. If you take a close look at the execution steps leading to a job
being submitted by Jalview, you’ll see that the ‘canSubmitGaps’ method
is not actually used to decide if gaps are removed, but instead used to
decide if a ‘Realign with …’ menu entry is generated in addition to the
standard ‘align with …’ menu entries for alignment web services.
However, hopefully, you’ve developed your service with the JABAWS 2
development code that Peter Troshin sent you, in which case there’s a
definite way forward…

The real problem here is that GBlocks isn’t a multiple alignment
service, and trying to use code that expects to be talking to one kind
of program but instead does something else is simply not going to work.
The GBlocks service is a specific variant of an alignment analysis
service where you submit an alignment and get back annotation of some
kind; which, in this case, is annotation indicating which columns should
be hidden in the view. Implementing a service for GBlocks following this
pattern will ensure that it is robust and ultimately more usable, since
it does what it says on the tin.

Fortuitously, JABAWS 2 already includes a canonical alignment annotation
service model that would suit GBlocks, and I have already coded a client
in the Jalview development branch[1] that could be easily adapted to
mark the regions on the alignment annotated by the service as hidden
regions.

All that would be needed is for you to refactor your new service code to
implement the compbio.data.msa.SequenceAnnotation interface, and then
add some semantic sugar in order to inform Jalview that the annotation
should be used to mark the given regions as hidden. The semantic sugar
comes in two forms:

  1. Label the service with an appropriate service category in the JABAWS2
    discovery service. GBlocks performs a specific form of conservation
    analysis to identify conserved regions in the alignment, so it could be
    put in the ‘Conservation’ category - but this contains methods that
    produce alignment quality and conservation histograms. Instead, I’d
    suggest creating another category, such as ‘Conserved Region Detection’.
    This will mean it gets placed in its own submenu on the web services menu.

  2. Label the results in a way that makes it clear what Jalview should do
    with them. The result from an annotation service is a series of named
    sets associated with each sequence or the alignment as a whole, and each
    set consists of either a series of scores for each column of the
    reference (sequence or alignment) and a series of intervals which may
    optionally have scores associated with them. In the case of a single
    Gblocks run, you’d return the conserved regions as intervals in a single
    score set associated with the whole alignment. I’d recommend calling
    that score set something obvious like ‘CONSERVED_REGION’ … that way
    it’s quite clear what the interval refers to, and isn’t specific to
    GBlocks - in case other conserved region detection programs get added to
    JABAWS.

The point of the sugar is to allow Jalview to do something sensible with
the results. Typically, phylogenetically informative columns get marked
with a ‘’ - so Jalview could add an annotation row where a '’ is
present within each column of the conserved region. It could also
automatically hide the columns outside the regions in the alignment view
that GBlocks identified.

I’m happy to code the client that would do this, if you’d be happy to
refactor the Gblocks service !
Jim.

[1] The jalview development branch build is at
http://www.compbio.dundee.ac.uk/users/ws-dev1/jalview/develop/, and you
can see the branch history at
http://source.jalview.org/gitweb/?p=jalview.git;a=shortlog;h=refs/heads/develop


Jalview-dev mailing list
Jalview-dev@jalview.org
http://www.compbio.dundee.ac.uk/mailman/listinfo/jalview-dev


Plant and Computational Genomics Group
Joint Genome Institute - U.S. Dept. of Energy
http://www.phytozome.net

Hi Jim,

I get a “404 Not Found” when I try to go to the link in your previous email:

http://www.compbio.dundee.ac.uk/users/ws-dev1/jalview/develop/

Is that the link you are referring to?

Thanks,
Joni

···

On Fri, Nov 18, 2011 at 12:24 AM, <jprocter@compbio.dundee.ac.uk> wrote:

Hi joni.

The development branch build of Jalview that you are looking for is in my last email. The link on the website points to a different build at the moment.

Please be aware that the Jalview client for jaba2 is still in development! User interface integration is by no means complete.

Jim.

J. B. Procter Jalview/enfin Barton group

-----Original Message-----
From: Joni Fazo <jbfazo@lbl.gov>
To: Peter Troshin <p.v.troshin@dundee.ac.uk>
Cc: JABAWS discussion list <jabaws-discuss@compbio.dundee.ac.uk>, jalview-dev@jalview.org

Sent: Fri, 18 Nov 2011 0:30
Subject: Re: [Jalview-dev] jabaws question - creating new web service

Hi Peter,

I just downloaded the development version of JABAWS today. I had been working with JABAWS1.

I was able to get my JABAWS2 server working, but can’t seem to access all the web services via Jalview. I’ve tried with both Jalview 2.7 and my downloaded latest dev version of Jalview.

Do I need to include a new client jar for JABAWS2 when I build Jalview? I tried building Jalview after replacing lib/min_jaba_client.jar with lib/min_jaba_client2.jar build get the following error from ant:

[javac] C:\Documents and Settings\jfazo\My Documents\compgen_workspace\JalviewDev\src\jalview\ws\jws2\JabaWsServerQuery.java:85: incompatible types
[javac] found : compbio.data.msa.JABAService
[javac] required: compbio.data.msa.MsaWS
[javac] service = Jws2Client.connect(jwsservers, srv);
[javac]

Also - I when I run the development version of Jalview from your website
(http://www.compbio.dundee.ac.uk/~ws-dev1/jalview/latest/webstart/jalview.jnlp), I don’t see the new web services. This Jalview seems to be connecting to http://www.compbio.dundee.ac.uk/jabaws/ which is JABAWS1. Is there a version of Jalview available that works with JABAWS2? It would be nice for me to see what the new services do and how the UI works.

Thanks in advance for you help!

Joni

I am able to get Jalview to connect to my JABAWS2 server, but only

On Wed, Nov 16, 2011 at 9:50 AM, Peter Troshin <p.v.troshin@dundee.ac.uk> wrote:

Hi Joni,

I am pleased to know that you have succeeded in creating a web service in JABAWS framework!
I think that what Jim said makes a lot of sense. I just like to point out that refactoring from MsaWS to SequenceAnnotation interface should not be too painful, as both web service interfaces share the same methods with the only exception of “result returning” methods which returns ScoreManager object instead of Alignment.
Have a look at the other services that implements SequenceAnnotation interface to have a better idea what might be involved.
We assume that you work with the development version of JABAWS, as JABAWS 1 does not have SequenceAnnotation interface.

Let us know how it goes.
Regards,
Peter

On 16/11/2011 15:50, Jim Procter wrote:

Hi Joni.

I’m seconding Geoff’s email - it’s really good to hear you’re
progressing with adding services to JABAWS ! I’ve been working on
adding JABAWS2 services to Jalview for the v2.8 release - and I think we
might be able to help each other out here…

On 15/11/2011 19:48, Joni Fazo wrote:

I’m working to create a new jabaws web service for the tool gblocks
(http://molevol.cmima.csic.es/castresana/Gblocks.html). I am using
the MsaWS interface. I have the web service working - sort of :slight_smile:

My problem is that gblocks expects aligned sequence as input. My
gblocks web service works fine when given input sequence that is all
the same length, with no gaps. But otherwise it fails, reporting that
the sequences are of different lengths. All gaps seem to be stripped
off the sequence prior to the web service being called.

I see that the Jalview class MsaWSClient has an attribute “submitGaps”
with a default value of false. Is there anyway to set this to true
when calling a specific web service?

This class also has a method canSubmitGaps with a TODO that makes me
think this capability is not yet available. (see below). Any tips on
a work-around?

private boolean canSubmitGaps()
{
// TODO: query service or extract service handle props to check if
we can
// realign
return (WebServiceName.indexOf(“lustal”)> -1); // cheat!
}

There’s no straightforward workaround for version 2.7 of Jalview, I’m
afraid. If you take a close look at the execution steps leading to a job
being submitted by Jalview, you’ll see that the ‘canSubmitGaps’ method
is not actually used to decide if gaps are removed, but instead used to
decide if a ‘Realign with …’ menu entry is generated in addition to the
standard ‘align with …’ menu entries for alignment web services.
However, hopefully, you’ve developed your service with the JABAWS 2
development code that Peter Troshin sent you, in which case there’s a
definite way forward…

The real problem here is that GBlocks isn’t a multiple alignment
service, and trying to use code that expects to be talking to one kind
of program but instead does something else is simply not going to work.
The GBlocks service is a specific variant of an alignment analysis
service where you submit an alignment and get back annotation of some
kind; which, in this case, is annotation indicating which columns should
be hidden in the view. Implementing a service for GBlocks following this
pattern will ensure that it is robust and ultimately more usable, since
it does what it says on the tin.

Fortuitously, JABAWS 2 already includes a canonical alignment annotation
service model that would suit GBlocks, and I have already coded a client
in the Jalview development branch[1] that could be easily adapted to
mark the regions on the alignment annotated by the service as hidden
regions.

All that would be needed is for you to refactor your new service code to
implement the compbio.data.msa.SequenceAnnotation interface, and then
add some semantic sugar in order to inform Jalview that the annotation
should be used to mark the given regions as hidden. The semantic sugar
comes in two forms:

  1. Label the service with an appropriate service category in the JABAWS2
    discovery service. GBlocks performs a specific form of conservation
    analysis to identify conserved regions in the alignment, so it could be
    put in the ‘Conservation’ category - but this contains methods that
    produce alignment quality and conservation histograms. Instead, I’d
    suggest creating another category, such as ‘Conserved Region Detection’.
    This will mean it gets placed in its own submenu on the web services menu.

  2. Label the results in a way that makes it clear what Jalview should do
    with them. The result from an annotation service is a series of named
    sets associated with each sequence or the alignment as a whole, and each
    set consists of either a series of scores for each column of the
    reference (sequence or alignment) and a series of intervals which may
    optionally have scores associated with them. In the case of a single
    Gblocks run, you’d return the conserved regions as intervals in a single
    score set associated with the whole alignment. I’d recommend calling
    that score set something obvious like ‘CONSERVED_REGION’ … that way
    it’s quite clear what the interval refers to, and isn’t specific to
    GBlocks - in case other conserved region detection programs get added to
    JABAWS.

The point of the sugar is to allow Jalview to do something sensible with
the results. Typically, phylogenetically informative columns get marked
with a ‘’ - so Jalview could add an annotation row where a '’ is
present within each column of the conserved region. It could also
automatically hide the columns outside the regions in the alignment view
that GBlocks identified.

I’m happy to code the client that would do this, if you’d be happy to
refactor the Gblocks service !
Jim.

[1] The jalview development branch build is at
http://www.compbio.dundee.ac.uk/users/ws-dev1/jalview/develop/, and you
can see the branch history at
http://source.jalview.org/gitweb/?p=jalview.git;a=shortlog;h=refs/heads/develop


Jalview-dev mailing list
Jalview-dev@jalview.org
http://www.compbio.dundee.ac.uk/mailman/listinfo/jalview-dev


Plant and Computational Genomics Group
Joint Genome Institute - U.S. Dept. of Energy
http://www.phytozome.net


Jalview-dev mailing list
Jalview-dev@jalview.org
http://www.compbio.dundee.ac.uk/mailman/listinfo/jalview-dev


Plant and Computational Genomics Group
Joint Genome Institute - U.S. Dept. of Energy
http://www.phytozome.net

Hi Joni,

Sorry about that perhaps Jim meant this URL
http://www.compbio.dundee.ac.uk/user/ws-dev1/jalview/develop/

Peter

Thank you Peter! Can you please send me the link to where I download the version of JABAWS2 that I should use?

I want to make sure I’m working with the correct builds of both Jalview and Jabaws. I’m having trouble today with the two tools not working together. For example, the development version of Jalview includes the following code from jalview.ws.jws2.JabaWsServerQuery:
.
.
.
compbio.data.msa.RegistryWS registry = null;
Set svccategories = null;
boolean noservices = true;
// look for services
boolean jabasws2 = false;
// If we are dealing with a JABAWS2 service, then just go and ask the
// JABAWS 2 service registry
Set srv_set = new HashSet();

Set categories = Category.getCategories();
String svc_cat;

try
{
// JBPNote: why is RegistryWS in compbio.data.msa ?
registry = Jws2Client.connectToRegistry(jwsservers);
if (registry != null)
{
// System.err.println(“Test Services Output\n”
// + registry.testAllServices());
// TODO: enumerate services and test those that haven’t been tested
// in the last n-days/hours/etc.

jabasws2 = true;
srv_set = registry.getSupportedServices();
svccategories = registry.getServiceCategories();

.
.
.

The version of compbio.data.msa.RegistryWS in my jaba2 source does not have the method getServiceCategories. I’m not sure if my Jalview is out of date, or my Jabaws2…

Any help would be much appreciated. I really need to get myself working with the right versions of your codes. I am supposed to have something “working” by the end of the month.

Thanks,
Joni

···

On Fri, Nov 18, 2011 at 10:52 AM, Peter Troshin <p.v.troshin@dundee.ac.uk> wrote:

Hi Joni,

Sorry about that perhaps Jim meant this URL
http://www.compbio.dundee.ac.uk/user/ws-dev1/jalview/develop/

Peter

On 18/11/2011 18:03, Joni Fazo wrote:

Hi Jim,

I get a “404 Not Found” when I try to go to the link in your previous email:

http://www.compbio.dundee.ac.uk/users/ws-dev1/jalview/develop/

Is that the link you are referring to?

Thanks,
Joni

On Fri, Nov 18, 2011 at 12:24 AM, <jprocter@compbio.dundee.ac.uk> wrote:

Hi joni.

The development branch build of Jalview that you are looking for is in my last email. The link on the website points to a different build at the moment.

Please be aware that the Jalview client for jaba2 is still in development! User interface integration is by no means complete.

Jim.

J. B. Procter Jalview/enfin Barton group

-----Original Message-----
From: Joni Fazo <jbfazo@lbl.gov>
To: Peter Troshin <p.v.troshin@dundee.ac.uk>
Cc: JABAWS discussion list <jabaws-discuss@compbio.dundee.ac.uk>, jalview-dev@jalview.org

Sent: Fri, 18 Nov 2011 0:30
Subject: Re: [Jalview-dev] jabaws question - creating new web service

Hi Peter,

I just downloaded the development version of JABAWS today. I had been working with JABAWS1.

I was able to get my JABAWS2 server working, but can’t seem to access all the web services via Jalview. I’ve tried with both Jalview 2.7 and my downloaded latest dev version of Jalview.

Do I need to include a new client jar for JABAWS2 when I build Jalview? I tried building Jalview after replacing lib/min_jaba_client.jar with lib/min_jaba_client2.jar build get the following error from ant:

[javac] C:\Documents and Settings\jfazo\My Documents\compgen_workspace\JalviewDev\src\jalview\ws\jws2\JabaWsServerQuery.java:85: incompatible types
[javac] found : compbio.data.msa.JABAService
[javac] required: compbio.data.msa.MsaWS
[javac] service = Jws2Client.connect(jwsservers, srv);
[javac]

Also - I when I run the development version of Jalview from your website
(http://www.compbio.dundee.ac.uk/~ws-dev1/jalview/latest/webstart/jalview.jnlp), I don’t see the new web services. This Jalview seems to be connecting to http://www.compbio.dundee.ac.uk/jabaws/ which is JABAWS1. Is there a version of Jalview available that works with JABAWS2? It would be nice for me to see what the new services do and how the UI works.

Thanks in advance for you help!

Joni

I am able to get Jalview to connect to my JABAWS2 server, but only

On Wed, Nov 16, 2011 at 9:50 AM, Peter Troshin <p.v.troshin@dundee.ac.uk> wrote:

Hi Joni,

I am pleased to know that you have succeeded in creating a web service in JABAWS framework!
I think that what Jim said makes a lot of sense. I just like to point out that refactoring from MsaWS to SequenceAnnotation interface should not be too painful, as both web service interfaces share the same methods with the only exception of “result returning” methods which returns ScoreManager object instead of Alignment.
Have a look at the other services that implements SequenceAnnotation interface to have a better idea what might be involved.
We assume that you work with the development version of JABAWS, as JABAWS 1 does not have SequenceAnnotation interface.

Let us know how it goes.
Regards,
Peter

On 16/11/2011 15:50, Jim Procter wrote:

Hi Joni.

I’m seconding Geoff’s email - it’s really good to hear you’re
progressing with adding services to JABAWS ! I’ve been working on
adding JABAWS2 services to Jalview for the v2.8 release - and I think we
might be able to help each other out here…

On 15/11/2011 19:48, Joni Fazo wrote:

I’m working to create a new jabaws web service for the tool gblocks
(http://molevol.cmima.csic.es/castresana/Gblocks.html). I am using
the MsaWS interface. I have the web service working - sort of :slight_smile:

My problem is that gblocks expects aligned sequence as input. My
gblocks web service works fine when given input sequence that is all
the same length, with no gaps. But otherwise it fails, reporting that
the sequences are of different lengths. All gaps seem to be stripped
off the sequence prior to the web service being called.

I see that the Jalview class MsaWSClient has an attribute “submitGaps”
with a default value of false. Is there anyway to set this to true
when calling a specific web service?

This class also has a method canSubmitGaps with a TODO that makes me
think this capability is not yet available. (see below). Any tips on
a work-around?

private boolean canSubmitGaps()
{
// TODO: query service or extract service handle props to check if
we can
// realign
return (WebServiceName.indexOf(“lustal”)> -1); // cheat!
}

There’s no straightforward workaround for version 2.7 of Jalview, I’m
afraid. If you take a close look at the execution steps leading to a job
being submitted by Jalview, you’ll see that the ‘canSubmitGaps’ method
is not actually used to decide if gaps are removed, but instead used to
decide if a ‘Realign with …’ menu entry is generated in addition to the
standard ‘align with …’ menu entries for alignment web services.
However, hopefully, you’ve developed your service with the JABAWS 2
development code that Peter Troshin sent you, in which case there’s a
definite way forward…

The real problem here is that GBlocks isn’t a multiple alignment
service, and trying to use code that expects to be talking to one kind
of program but instead does something else is simply not going to work.
The GBlocks service is a specific variant of an alignment analysis
service where you submit an alignment and get back annotation of some
kind; which, in this case, is annotation indicating which columns should
be hidden in the view. Implementing a service for GBlocks following this
pattern will ensure that it is robust and ultimately more usable, since
it does what it says on the tin.

Fortuitously, JABAWS 2 already includes a canonical alignment annotation
service model that would suit GBlocks, and I have already coded a client
in the Jalview development branch[1] that could be easily adapted to
mark the regions on the alignment annotated by the service as hidden
regions.

All that would be needed is for you to refactor your new service code to
implement the compbio.data.msa.SequenceAnnotation interface, and then
add some semantic sugar in order to inform Jalview that the annotation
should be used to mark the given regions as hidden. The semantic sugar
comes in two forms:

  1. Label the service with an appropriate service category in the JABAWS2
    discovery service. GBlocks performs a specific form of conservation
    analysis to identify conserved regions in the alignment, so it could be
    put in the ‘Conservation’ category - but this contains methods that
    produce alignment quality and conservation histograms. Instead, I’d
    suggest creating another category, such as ‘Conserved Region Detection’.
    This will mean it gets placed in its own submenu on the web services menu.

  2. Label the results in a way that makes it clear what Jalview should do
    with them. The result from an annotation service is a series of named
    sets associated with each sequence or the alignment as a whole, and each
    set consists of either a series of scores for each column of the
    reference (sequence or alignment) and a series of intervals which may
    optionally have scores associated with them. In the case of a single
    Gblocks run, you’d return the conserved regions as intervals in a single
    score set associated with the whole alignment. I’d recommend calling
    that score set something obvious like ‘CONSERVED_REGION’ … that way
    it’s quite clear what the interval refers to, and isn’t specific to
    GBlocks - in case other conserved region detection programs get added to
    JABAWS.

The point of the sugar is to allow Jalview to do something sensible with
the results. Typically, phylogenetically informative columns get marked
with a ‘’ - so Jalview could add an annotation row where a '’ is
present within each column of the conserved region. It could also
automatically hide the columns outside the regions in the alignment view
that GBlocks identified.

I’m happy to code the client that would do this, if you’d be happy to
refactor the Gblocks service !
Jim.

[1] The jalview development branch build is at
http://www.compbio.dundee.ac.uk/users/ws-dev1/jalview/develop/, and you
can see the branch history at
http://source.jalview.org/gitweb/?p=jalview.git;a=shortlog;h=refs/heads/develop


Jalview-dev mailing list
Jalview-dev@jalview.org
http://www.compbio.dundee.ac.uk/mailman/listinfo/jalview-dev


Plant and Computational Genomics Group
Joint Genome Institute - U.S. Dept. of Energy
http://www.phytozome.net


Jalview-dev mailing list
Jalview-dev@jalview.org
http://www.compbio.dundee.ac.uk/mailman/listinfo/jalview-dev


Plant and Computational Genomics Group
Joint Genome Institute - U.S. Dept. of Energy
http://www.phytozome.net


Plant and Computational Genomics Group
Joint Genome Institute - U.S. Dept. of Energy
http://www.phytozome.net