[Biojava-dev] Problems with parameter change event notification in
profile HMM
hlr02 at doc.ic.ac.uk
hlr02 at doc.ic.ac.uk
Wed Jul 16 15:07:40 EDT 2003
Hi,
I tested the change event notification for changes in profile HMM transition
and emission probabilities, which should result in firing of a
MarkovModel.PARAMETER change event. This doesn't always work:
1. Changing emission distributions by using setDistribution(distribution)
results in no PARAMETER change events being fired at all, i.e.
for (Iterator i = profile.stateAlphabet().iterator(); i.hasNext(); ) {
State s = (State) i.next();
// this should generate parameter change events
if (s instanceof EmissionState && ! (s instanceof MagicalState)) {
EmissionState es = (EmissionState) s;
// this doesn't generate change events
es.setDistribution(
new UniformDistribution((FiniteAlphabet)profile.emissionAlphabet())
);
}
}
However, changing the emission distribution by stepping through the
distribution and changing probabilities one by one using setWeight(symbol,
weight) works fine and does result in change events.
2. Changing transition probabilities one by one in the transition alphabet
returned by transitionFrom(state) doesn't result in any change events, i.e.
for (Iterator i = profile.stateAlphabet().iterator(); i.hasNext(); ) {
State s = (State) i.next();
double length = ( (FiniteAlphabet) profile.transitionsFrom(s)).size();
FiniteAlphabet fromStates = profile.transitionsFrom(s);
Distribution dist = profile.getWeights(s);
// this doesn't result in change events
for (Iterator j = fromStates.iterator(); j.hasNext(); ) {
State t = (State) j.next();
dist.setWeight(t, (1/length) );
}
}
However, changing the transition probability from a state in one go by using
setWeights(state,distribution) does result in firing a PARAMETER change event.
I used two change listeners, a change forwarder and ChangeListener.LOG_TO_OUT
to test the above.
Since the above may allow changes in the model without any change notification,
this could create serious problems when for example a Change Listener in a GUI
relies on change events to update its state.
Any ideas how to fix this?
Regards,
Henry
More information about the biojava-dev
mailing list