CompEvol / beast2

Bayesian Evolutionary Analysis by Sampling Trees
www.beast2.org
GNU Lesser General Public License v2.1
240 stars 84 forks source link

BEAUti does not set a specified Clock.rate of `ClusterTree`. #1124

Closed MordorianGuy closed 1 year ago

MordorianGuy commented 1 year ago

https://github.com/CompEvol/beast2/blob/67dd40a56650490702f2616b56bcfc27a0b6e6fa/src/beast/base/evolution/tree/ClusterTree.java#L74

I have explicitly set the rate of 0.001, but there is no input in my XML.

rbouckaert commented 1 year ago

There is the clock.rate input, so something like this should work:

<tree spec="beast.base.evolution.tree.ClusterTree" clock.rate="0.001" ...

Does this not work?

MordorianGuy commented 1 year ago

There is the clock.rate input, so something like this should work:

<tree spec="beast.base.evolution.tree.ClusterTree" clock.rate="0.001" ...

Does this not work?

I have used a RealParameter, and it works, but the issue was more like a bug report 😅 By the way, have I understood you right that I may just use a string instead of creating a tag with RealParameter spec?

rbouckaert commented 1 year ago

The impression I got was that you were looking for a way to scale a cluster tree in the XML, not programmatically.

In the XML, a RealParameter Input can be initialised as a string value, like in the example. In a program, you can use this pattern:

      tree = new ClusterTree();
      tree.initByName("clock.rate", "0.001", "taxa",...

that is, initialise all inputs through initByName, where the String constructor of the Input type is called when it is provided with a String value instead of an object.

What exactly is the bug?

MordorianGuy commented 1 year ago

The impression I got was that you were looking for a way to scale a cluster tree in the XML, not programmatically.

In the XML, a RealParameter Input can be initialised as a string value, like in the example. In a program, you can use this pattern:

      tree = new ClusterTree();
      tree.initByName("clock.rate", "0.001", "taxa",...

that is, initialise all inputs through initByName, where the String constructor of the Input type is called when it is provided with a String value instead of an object.

What exactly is the bug?

Thank you very much for the clarification.

The bug is the absence of any clock.rate input in an XML formed by BEAUti where I specified a cluster tree as initial and its clock rate.

rbouckaert commented 1 year ago

Thanks for the explanation & bug report -- I can confirm that the value does not get written into the XML even though it can be changed in the XML. It appears that the value of the RealParameter changes, but because it is the default object and defaults are not written to the XML the parameter value does not end up in the output.