[Biojava-l] Getting a part of a sequence

Gabrielle Doan gabrielle_doan at gmx.net
Tue Oct 14 11:18:20 UTC 2008


Hi Richard,
I have checked out the latest source and tried my code again. It still 
didn't work and I received following new errors:

<message>
Exception in thread "main" java.lang.RuntimeException: 
java.lang.reflect.InvocationTargetException
	at 
org.biojavax.bio.db.biosql.BioSQLRichSequenceDB.processFeatureFilter(BioSQLRichSequenceDB.java:143)
	at 
org.biojavax.bio.db.biosql.BioSQLRichSequenceDB.filter(BioSQLRichSequenceDB.java:151)
	at org.sequence_viewer.db.HBioSQLDB.filterFeature(HBioSQLDB.java:612)
	at org.sequence_viewer.db.AbfragenTest.main(AbfragenTest.java:56)
Caused by: java.lang.reflect.InvocationTargetException
	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.biojavax.bio.db.biosql.BioSQLRichSequenceDB.processFeatureFilter(BioSQLRichSequenceDB.java:138)
	... 3 more
Caused by: org.hibernate.PropertyAccessException: Exception occurred 
inside setter of org.biojavax.bio.seq.SimpleRichFeature.locationSet
	at 
org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65)
	at 
org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337)
	at 
org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200)
	at 
org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3571)
	at 
org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:133)
	at 
org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
	at org.hibernate.loader.Loader.doQuery(Loader.java:729)
	at 
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	at org.hibernate.loader.Loader.doList(Loader.java:2213)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	at org.hibernate.loader.Loader.list(Loader.java:2099)
	at 
org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
	... 8 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor18.invoke(Unknown Source)
	at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at 
org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42)
	... 21 more
Caused by: java.lang.NullPointerException
	at 
org.biojavax.bio.seq.PositionResolver$AverageResolver.getMin(PositionResolver.java:103)
	at 
org.biojavax.bio.seq.SimpleRichLocation.getMin(SimpleRichLocation.java:323)
	at 
org.biojavax.bio.seq.SimpleRichLocation.overlaps(SimpleRichLocation.java:451)
	at 
org.biojavax.bio.seq.SimpleRichLocation.union(SimpleRichLocation.java:469)
	at org.biojavax.bio.seq.RichLocation$Tools.merge(RichLocation.java:363)
	at 
org.biojavax.bio.seq.SimpleRichFeature.setLocationSet(SimpleRichFeature.java:181)
	... 25 more
<\message>

I think <code> BioSQLFeatureFilter.OverlapsRichLocation(rl) <\code> 
causes the problem I have. Can you help me to solve this problem?

I'm grateful for any hints.
cheers,

Gabrielle



Richard Holland schrieb:
> This looks like a bug in BJX. I have just committed a fix that I think will
> fix it to the head of subversion. Can you check out the latest source,
> compile it, and try your program again?
> 
> cheers,
> Richard
> 
> 2008/10/9 Gabrielle Doan <gabrielle_doan at gmx.net>
> 
>> Hi Richard,
>>
>> thanks a lot for your mail. I have successfully retrieved the subsequence
>> of a sequence as a String. And now I try to get the features for a
>> particular range with following code:
>>
>> <code>
>>        public FeatureHolder filterFeature(String name, int startpos, int
>> endpos) {
>>                RichLocation rl = new SimpleRichLocation(new
>> SimplePosition(startpos),
>>                                new SimplePosition(endpos), 0);
>>                BioSQLFeatureFilter filter = new BioSQLFeatureFilter.And(
>>                                new
>> BioSQLFeatureFilter.BySequenceName(name),
>>                                new
>> BioSQLFeatureFilter.OverlapsRichLocation(rl));
>>                return filter(filter);
>>        }
>> <\code>
>>
>> Fortunately I received these errors:
>> <message>
>> Exception in thread "main" java.lang.RuntimeException:
>> java.lang.reflect.InvocationTargetException
>>        at
>> org.biojavax.bio.db.biosql.BioSQLRichSequenceDB.processFeatureFilter(BioSQLRichSequenceDB.java:143)
>>        at
>> org.biojavax.bio.db.biosql.BioSQLRichSequenceDB.filter(BioSQLRichSequenceDB.java:151)
>>        at
>> org.sequence_viewer.db.HBioSQLDB.filterFeature(HBioSQLDB.java:599)
>>        at org.sequence_viewer.db.AbfragenTest.main(AbfragenTest.java:56)
>> Caused by: java.lang.reflect.InvocationTargetException
>>        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.biojavax.bio.db.biosql.BioSQLRichSequenceDB.processFeatureFilter(BioSQLRichSequenceDB.java:138)
>>        ... 3 more
>> Caused by: org.hibernate.PropertyAccessException: Exception occurred inside
>> setter of org.biojavax.bio.seq.SimpleRichFeature.locationSet
>>        at
>> org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65)
>>        at
>> org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337)
>>        at
>> org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200)
>>        at
>> org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3571)
>>        at
>> org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:133)
>>        at
>> org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
>>        at org.hibernate.loader.Loader.doQuery(Loader.java:729)
>>        at
>> org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
>>        at org.hibernate.loader.Loader.doList(Loader.java:2213)
>>        at
>> org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
>>        at org.hibernate.loader.Loader.list(Loader.java:2099)
>>        at
>> org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
>>        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
>>        at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
>>        ... 8 more
>> Caused by: java.lang.reflect.InvocationTargetException
>>        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.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42)
>>        ... 21 more
>> Caused by: java.lang.NullPointerException
>>        at
>> org.biojavax.bio.seq.PositionResolver$AverageResolver.getMin(PositionResolver.java:103)
>>        at
>> org.biojavax.bio.seq.SimpleRichLocation.getMin(SimpleRichLocation.java:323)
>>        at
>> org.biojavax.bio.seq.SimpleRichLocation.overlaps(SimpleRichLocation.java:451)
>>        at
>> org.biojavax.bio.seq.SimpleRichLocation.union(SimpleRichLocation.java:469)
>>        at
>> org.biojavax.bio.seq.RichLocation$Tools.merge(RichLocation.java:363)
>>        at
>> org.biojavax.bio.seq.SimpleRichFeature.setLocationSet(SimpleRichFeature.java:181)
>>        ... 26 more
>> <\message>
>>
>> Why do I get these errors?
>> BioSQLFeatureFilter.BySequenceName(name) needs a seqName as parameter. How
>> can I find out the sequence name? Is it the value "name" in the table
>> "Bioentry"? As the build-in subSequence method takes a long time I intend to
>> get the subsequence as a String by myself and add the features to it. What
>> do you think about this?
>>
>> I'm grateful for any hints.
>> cheers,
>>
>> Gabrielle
>>
>>
>>
>> Richard Holland schrieb:
>>
>>  Hello.
>>> Your code is pretty good already - but you're right, it will load the
>>> whole chromosome into memory before you can chop out the interesting
>>> bit you actually need.
>>>
>>> As you observed, by using ThinRichSequence in your query it will load
>>> only the initial shell of a sequence object to start with, but the
>>> moment you try and sub-sequence it, it will immediately load the whole
>>> sequence data into memory in order to perform the operation.
>>>
>>> If you only want the sequence data, as a string, you can do this by
>>> specifying the sequence attribute in the query and bypassing the
>>> sequence object entirely:
>>>
>>>  select rs.stringSequence from Sequence as rs where rs.description
>>> like '%hromosome :num%
>>>
>>> This will return a String instead of a RichSequence object. You can
>>> use HQL operators to perform substrings etc. on the string inside the
>>> query itself - see
>>> http://docs.huihoo.com/hibernate/hibernate-reference-3.2.1/queryhql.html
>>> , particularly section 14.9.
>>>
>>> If you only want the features, you can do this by using the
>>> BioSQLFeatureFilter technique. In particular you will want the
>>> BySequenceName filter, the And filter, and the OverlapsRichLocation
>>> filter. You construct a filter then pass it to the filter() method in
>>> BioSQLRichSequenceDB. The database will return to you all the
>>> RichFeature objects that match your criteria. Note that it searches
>>> the whole database so you really must use a BySequenceName filter at
>>> the very least in order to make the results useful!
>>>
>>> However, you can't use HQL to construct a complete slice of a sequence
>>> directly in the database before returning it to the program for use as
>>> a ready-made RichSequence object. This would require Hibernate to know
>>> what a BioJava sub-sequence object is and how it behaves in relation
>>> to an 'unsliced' one, which is beyond the scope of it's job as a
>>> persistence framework.
>>>
>>> cheers,
>>> Richard
>>>
>>>
>>>
>>> 2008/10/7 Gabrielle Doan <gabrielle_doan at gmx.net>:
>>>
>>>> Hi all,
>>>> I have a BioSQL database which contains all human chromosomes. My
>>>> intention
>>>> is to get the information about a particular gene. How can I get a part
>>>> of a
>>>> particular chromosome with all associated features? At the moment I use
>>>> following code to create my new sequence:
>>>>
>>>> <code>
>>>> RichSequence subSeq = RichSequence.Tools.subSequence(parent,
>>>>       position[0], position[1], ns, geneName, parent.getAccession(),
>>>>       parent.getIdentifier(), parent.getVersion() + 1,
>>>>       (Double) (parent.getVersion() + 1.0));
>>>> <\code>
>>>>
>>>> Here is the part how I get the parent sequence:
>>>> <code>
>>>>       public static RichSequence getChromosome(String chrNo) {
>>>>               Transaction tx = session.beginTransaction();
>>>>               RichSequence ret = null;
>>>>
>>>>               String query;
>>>>
>>>>               try {
>>>>                       if (chrNo.equals("MT")) {
>>>>                               query = "from BioEntry as be where
>>>> be.description like '%:num%'";
>>>>                               query = query.replaceAll(":num",
>>>> "mitochondrion");
>>>>                       } else {
>>>>                               query = "from BioEntry as be where
>>>> be.description like '%hromosome :num%'";
>>>>                               query = query.replaceAll(":num", chrNo);
>>>>                       }
>>>>
>>>>                       Query q = session.createQuery(query);
>>>>
>>>>                       ret = (RichSequence) q.list().get(0);
>>>>                       tx.commit();
>>>>               } catch (Exception e) {
>>>>                       tx.rollback();
>>>>                       e.printStackTrace();
>>>>               }
>>>>               return ret;
>>>>       }
>>>> <\code>
>>>>
>>>> I always have to load the whole chromsome to get a part of it, so it
>>>> takes
>>>> very long time and I get a lot of unused information (waste of memory). I
>>>> also tried to use <code>ThinRichSequence<\code> instead of
>>>> <code>RichSequence<\code>, but thereby I didn't notice any difference.
>>>> Can you give me a hint how to accelerate the code?
>>>> I am grateful for any hits.
>>>>
>>>> cheers,
>>>> Gabrielle
>>>> _______________________________________________
>>>> Biojava-l mailing list  -  Biojava-l at lists.open-bio.org
>>>> http://lists.open-bio.org/mailman/listinfo/biojava-l
>>>>
>>>>
>>>
>>>
> 
> 




More information about the Biojava-l mailing list