[Biojava-dev] Alignments.getPairwiseAlignment seems a bit choosy

Hannes Brandstätter-Müller biojava at hannes.oib.com
Thu Feb 23 20:49:44 UTC 2012


As a direct consequence (?), the following code generates a
NullPointerException:

        DNASequence target = new DNASequence("ACTGACGTGTAGCTGACTGA",
DNACompoundSet.getDNACompoundSet());
        DNASequence query = new DNASequence("ACTGACGTGTAGCTGACTGA",
AmbiguityDNACompoundSet.getDNACompoundSet());

        List<DNASequence> lst = new ArrayList<DNASequence>();
        lst.add(target);
        lst.add(query);

        Profile<DNASequence, NucleotideCompound> profile =
Alignments.getMultipleSequenceAlignment(lst);

ava.util.concurrent.ExecutionException: java.lang.NullPointerException
	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
	at java.util.concurrent.FutureTask.get(FutureTask.java:83)
	at org.biojava3.alignment.Alignments.getListFromFutures(Alignments.java:288)
	at org.biojava3.alignment.Alignments.runPairwiseScorers(Alignments.java:608)
	at org.biojava3.alignment.Alignments.getMultipleSequenceAlignment(Alignments.java:179)
	at org.biojava3.alignment.TestDNAAlignment.testDNAALignmentWithAmbiguity(TestDNAAlignment.java:87)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at junit.framework.TestCase.runTest(TestCase.java:168)
	at junit.framework.TestCase.runBare(TestCase.java:134)
	at junit.framework.TestResult$1.protect(TestResult.java:110)
	at junit.framework.TestResult.runProtected(TestResult.java:128)
	at junit.framework.TestResult.run(TestResult.java:113)
	at junit.framework.TestCase.run(TestCase.java:124)
	at junit.framework.TestSuite.runTest(TestSuite.java:232)
	at junit.framework.TestSuite.run(TestSuite.java:227)
	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115)
	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102)
	at org.apache.maven.surefire.Surefire.run(Surefire.java:180)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
	at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
Caused by: java.lang.NullPointerException
	at org.biojava3.alignment.FractionalIdentityScorer.align(FractionalIdentityScorer.java:112)
	at org.biojava3.alignment.FractionalIdentityScorer.getScore(FractionalIdentityScorer.java:105)
	at org.biojava3.alignment.template.CallablePairwiseSequenceScorer.call(CallablePairwiseSequenceScorer.java:53)
	at org.biojava3.alignment.template.CallablePairwiseSequenceScorer.call(CallablePairwiseSequenceScorer.java:38)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)

* How should this be handled? Custom Exception? Simply Set the
DNACompoundSet one to AmbiguityDNACompoundset? Could that cause
problems?

Hannes

On Wed, Feb 22, 2012 at 15:38, Hannes Brandstätter-Müller
<biojava at hannes.oib.com> wrote:
> On Tue, Feb 21, 2012 at 19:58, Andreas Prlic <andreas at sdsc.edu> wrote:
>> Hi Hannes,
>>
>>> I recently ran into a bit of an annoyance when using
>>> Alignments.getPairwiseAlignment with DNASequences
>>>
>>> If the DNASequences do not have the same CompoundSet, the alignment
>>> fails (but silently, which is the annoying part) - you just get 0 as
>>> Similars or Identicals.
>>
>> what gap penalties are you using?
>
>      SubstitutionMatrix<NucleotideCompound> matrix =
> SubstitutionMatrixHelper.getNuc4_4();
>      SimpleGapPenalty gapP = new SimpleGapPenalty();
>      gapP.setOpenPenalty((short) 5);
>      gapP.setExtensionPenalty((short) 2);
>      SequencePair<DNASequence, NucleotideCompound> psa =
>              Alignments.getPairwiseAlignment(query, target,
>              PairwiseSequenceAlignerType.LOCAL, gapP, matrix);
>
>>
>> I don't have had enough time to look at the
>>> code in detail, but there should be something done here, at least
>>> check and throw an exception or something if it can't be made to work
>>> regardless.
>>
>> Can you provide an example to reproduce this?
>
> use the above code, make:
>
> query = new DNASequence("ATCGTAGCTAGTCGTGC",
> AmbiguityDNACompoundSet.getDNACompoundSet()));
> target = new DNASequence("ATCGTAGCTAGTCGTGT",
> DNACompoundSet.getDNACompoundSet()));
>
> This should (with 3.0.2) fail silently. I.e. psa.getSimilars() == 0
>
>
> Hannes
>
> ps: sorry for the triplepost, Andreas, I'm still not used to the
> mailinglist not defaulting to "reply-to-list" and managed to get the
> sender wrong in the second try.




More information about the biojava-dev mailing list