[Biojava-l] SimpleModelInState problem?

Matthew Pocock matthew_pocock@yahoo.co.uk
Fri, 06 Dec 2002 09:40:44 +0000


Hi Russell,

This code is my fault, and I haven't looked at the nested model support 
in a couple of years. Hopefully we will get time to look at it over the 
weekend.

Matthew

ps I'm writing a CpG finder using the lib today, so at least I have the 
right javadocs open.

Russell Smithies wrote:
> 
> I'm trying to create a reasonably complex markov model so have split it 
> into bits to make it a little easier to handle.
> I'm then trying to re-assemble the bits into another model by creating 
> SimpleModelInState's from the sub-models.
> The problem is that I keep getting errors and not sure why.
> heres some code I did as a test, the top portion creates a sub-model 
> (which compiles correctly) but when I try to add them to create the DP 
> for, I get null pointer errors and was getting errors about null back 
> pointers?
> 
> heres some testy code :
> (sorry if HotMail munges it)  :-)
> 
> 
> 
> import java.util.*;
> 
> import org.biojava.bio.*;
> import org.biojava.bio.dist.*;
> import org.biojava.bio.dp.*;
> import org.biojava.bio.seq.*;
> import org.biojava.bio.symbol.*;
> 
> public class modelInStateTest {
>  public static void main(String[] args) throws Exception {
> 
>    // sequence to test
>    SymbolList sl  = DNATools.createDNA("actgatcgactgtacgatgagatgcgactga"+
>                                        
> "tcgactgactgctgcgtatcgatcgatcgatgactgacg");
>    int[] advance = { 1 };
> 
>    //create order n alphabet
>    Alphabet orderNAlpha = AlphabetManager.getCrossProductAlphabet(
>                                            Collections.nCopies(3, 
> DNATools.getDNA()));
> 
>    //create uniform distribution for emission states
>    Distribution uni_dist = new UniformDistribution(DNATools.getDNA());
> 
>    // create simple markov model
>    SimpleMarkovModel mm = new SimpleMarkovModel(1, DNATools.getDNA(), 
> "mm");
> 
>    //create emission states
>    EmissionState es1 = new SimpleEmissionState("1_es", 
> Annotation.EMPTY_ANNOTATION, advance, uni_dist);
>    EmissionState es2 = new SimpleEmissionState("2_es", 
> Annotation.EMPTY_ANNOTATION, advance, uni_dist);
> 
> 
>    //  add states to model
>    mm.addState(es1);
>    mm.addState(es2);
> 
>    //  create transitions between all states
>    mm.createTransition(mm.magicalState(), es1);
>    mm.createTransition(mm.magicalState(), es2);
>    mm.createTransition(es1, es1);
>    mm.createTransition(es1, es2);
>    mm.createTransition(es2, es2);
>    mm.createTransition(es2, es1);
>    mm.createTransition(es2, mm.magicalState());
>    mm.createTransition(es1, mm.magicalState());
> 
>    //set weights on transitions
>    mm.setWeights(mm.magicalState(), new 
> UniformDistribution(mm.transitionsFrom(mm.magicalState())));
>    mm.setWeights(es1, new UniformDistribution(mm.transitionsFrom(es1)));
>    mm.setWeights(es2, new UniformDistribution(mm.transitionsFrom(es2)));
> 
>    sl = SymbolListViews.orderNSymbolList(sl, 3);
> 
>    SymbolList[] sla = { sl };
> 
>    //  create the dynamic programming object
>    DP dp = DPFactory.DEFAULT.createDP(mm);
> 
>    //create statepath
>    StatePath sp = dp.viterbi(sla, ScoreType.PROBABILITY);
> 
>    /////////     TRY TO CREATE SUB MODELS AND INTEGRATE THEM  
> ///////////////////////////
> 
>    SimpleMarkovModel mm2 = new SimpleMarkovModel(1, DNATools.getDNA(), 
> "2_mm");
> 
>    //create states
>    SimpleModelInState smis1 = new SimpleModelInState(mm, "1_smis");
>    SimpleModelInState smis2 = new SimpleModelInState(mm, "2_smis");
> 
>    mm2.addState(smis1);
>    mm2.addState(smis2);
> 
>    //  create transitions between all states
>    mm2.createTransition(mm2.magicalState(), smis1);
>    mm2.createTransition(mm2.magicalState(), smis2);
>    mm2.createTransition(smis1, smis1);
>    mm2.createTransition(smis1, smis2);
>    mm2.createTransition(smis2, smis2);
>    mm2.createTransition(smis2, smis1);
>    mm2.createTransition(smis2, mm2.magicalState());
>    mm2.createTransition(smis1, mm2.magicalState());
> 
>    //set weights on transitions
>    mm2.setWeights(mm2.magicalState(), new 
> UniformDistribution(mm2.transitionsFrom(mm2.magicalState())));
>    mm2.setWeights(smis1, new 
> UniformDistribution(mm2.transitionsFrom(smis1)));
>    mm2.setWeights(smis2, new 
> UniformDistribution(mm2.transitionsFrom(smis2)));
> 
>    //  create the dynamic programming object
>    DP dp2 = DPFactory.DEFAULT.createDP(mm2);   //<<<<-----------------
> 
>    //create statepath
>    StatePath sp2 = dp2.viterbi(sla, ScoreType.PROBABILITY);
> 
>    /*
>    java.lang.NullPointerException
>        at org.biojava.bio.dp.FlatModel.<init>(FlatModel.java:229)
>        at org.biojava.bio.dp.DP.flatView(DP.java:96)
>        at 
> org.biojava.bio.dp.DPFactory$DefaultFactory.createDP(DPFactory.java:51)
>        at markov.modelInStateTest.main(modelInStateTest.java:89)
>    Exception in thread "main"
>    */
> 
>  }
> }
> 
> 
> 
> 
> _________________________________________________________________
> The new MSN 8: advanced junk mail protection and 2 months FREE* 
> http://join.msn.com/?page=features/junkmail
> 
> _______________________________________________
> Biojava-l mailing list  -  Biojava-l@biojava.org
> http://biojava.org/mailman/listinfo/biojava-l
> 


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

__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com