[Biojava-dev] Problems with parameter change event notification in profile HMM (2)

Matthew Pocock matthew_pocock at yahoo.co.uk
Wed Jul 16 18:26:22 EDT 2003


I'm writing a unit test for this now - hopefully we can then fix the 
code so the test passes :)

Matthew

hlr02 at doc.ic.ac.uk wrote:
> Contrary to what I wrote, using setWeights(state,distribution) doesn't fire a 
> change event either, i.e. any changes in transition distributions do not seem 
> to be picked up by change events.
> 
> Henry
> 
> Quoting hlr02 at doc.ic.ac.uk:
> 
> 
>>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
>>_______________________________________________
>>biojava-dev mailing list
>>biojava-dev at biojava.org
>>http://biojava.org/mailman/listinfo/biojava-dev
>>
> 
> 
> 
> 
> ----- End forwarded message -----
> 
> 
> _______________________________________________
> biojava-dev mailing list
> biojava-dev at biojava.org
> http://biojava.org/mailman/listinfo/biojava-dev
> 


-- 
BioJava Consulting LTD - Support and training for BioJava
http://www.biojava.co.uk



More information about the biojava-dev mailing list