rubabel 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -2
- data/lib/rubabel.rb +14 -1
- data/lib/rubabel/molecule.rb +39 -0
- data/lib/rubabel/version.rb +1 -1
- data/rubabel.gemspec +0 -1
- data/spec/rubabel/molecule_spec.rb +44 -4
- metadata +3 -19
- data/VERSION +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77fb1221a3d565301bacfe578f1840d1cfa429f6
|
4
|
+
data.tar.gz: 451550b29cf66ac52eed7ded68e12f4861c323f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1314697e1606dc64c98d61a7e9e04b58b7644fc48fb9f41387f961640383962473a57bf8d837b4a6ea946d073fd76c919ca1cc68adeeeee2adfb1c3b5a44b9c5
|
7
|
+
data.tar.gz: c57d7f5c444885ac58956642eb05306168ba68741a6861bc54d596f703f755484c54663069b6781600862eec507b2e598f359c72414f97429c9e06291f0334b7
|
data/README.md
CHANGED
@@ -4,6 +4,8 @@ Ruby interface to the OpenBabel ruby bindings (or the openbabel gem). The
|
|
4
4
|
interface attempts to be a ruby-ish analogue of
|
5
5
|
[pybel](http://openbabel.org/docs/current/UseTheLibrary/Python_PybelAPI.html). Works with ruby 1.9 and 2.0.
|
6
6
|
|
7
|
+
**NOTE: Lipid fragmentation code has been moved to the [msplinter](https://github.com/princelab/msplinter).**
|
8
|
+
|
7
9
|
## Examples
|
8
10
|
|
9
11
|
The [Chemistry Toolkit Rosetta Wiki](http://ctr.wikia.com/wiki/Chemistry_Toolkit_Rosetta_Wiki) has a lot of examples you can check out.
|
@@ -23,13 +25,14 @@ serine = Rubabel::Molecule.from_string("C(C(C(=O)O)N)O")
|
|
23
25
|
# also any other format openbabel supports, for example inchi
|
24
26
|
serine = Rubabel["InChI=1S/C3H7NO3/c4-2(1-5)3(6)7/h2,5H,1,4H2,(H,6,7)", :inchi]
|
25
27
|
|
26
|
-
# from
|
27
|
-
|
28
|
+
# from an InChI Key or other id (such as LipidMaps ID) [requires internet]
|
29
|
+
serine = Rubabel["MTCFGRXMJLQNBG-REOHCLBHSA-N", :inchikey]
|
28
30
|
|
29
31
|
Find out all the formats Rubabel supports (hash is format key pointing to the description):
|
30
32
|
|
31
33
|
hash = Rubabel.in_formats
|
32
34
|
hash = Rubabel.out_formats
|
35
|
+
hash = Rubabel.id_formats # molecule retrieved by web-lookup
|
33
36
|
```
|
34
37
|
|
35
38
|
#### From a file
|
data/lib/rubabel.rb
CHANGED
@@ -25,8 +25,16 @@ module Rubabel
|
|
25
25
|
|
26
26
|
class << self
|
27
27
|
|
28
|
+
# accepts a string specifying the molecule (calling Rubabel::Molecule.from_string)
|
29
|
+
# or an id (calls Rubabel::Molecule.from_id)
|
28
30
|
def [](string, type=Rubabel::Molecule::DEFAULT_IN_TYPE)
|
29
|
-
|
31
|
+
methd =
|
32
|
+
if type && Rubabel::Molecule::ID_TYPE_KEYS.include?(type)
|
33
|
+
:from_id
|
34
|
+
else
|
35
|
+
:from_string
|
36
|
+
end
|
37
|
+
Rubabel::Molecule.send(methd, string, type)
|
30
38
|
end
|
31
39
|
|
32
40
|
def force_field(type=DEFAULT_FORCEFIELD)
|
@@ -45,6 +53,11 @@ module Rubabel
|
|
45
53
|
@out_formats ||= formats_to_hash(OpenBabel::OBConversion.new.get_supported_output_format)
|
46
54
|
end
|
47
55
|
|
56
|
+
# returns the formats retrievable by url lookup of the id or key
|
57
|
+
def id_formats
|
58
|
+
Rubabel::Molecule::ID_TYPES
|
59
|
+
end
|
60
|
+
|
48
61
|
# returns the format Symbol that can be used for conversion, or nil if
|
49
62
|
# the extension is not recognized.
|
50
63
|
def format_from_ext(filename)
|
data/lib/rubabel/molecule.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'rexml/document'
|
1
3
|
require 'openbabel'
|
2
4
|
require 'rubabel'
|
3
5
|
require 'rubabel/atom'
|
@@ -76,6 +78,12 @@ module Rubabel
|
|
76
78
|
DEFAULT_FINGERPRINT = "FP2"
|
77
79
|
DEFAULT_OUT_TYPE = :can
|
78
80
|
DEFAULT_IN_TYPE = :smi
|
81
|
+
DEFAULT_ID_TYPE = :pubchem
|
82
|
+
ID_TYPES = {
|
83
|
+
inchikey: "InChI key",
|
84
|
+
lmid: "LipidMaps ID"
|
85
|
+
}
|
86
|
+
ID_TYPE_KEYS = ID_TYPES.keys
|
79
87
|
|
80
88
|
# the OpenBabel::OBmol object
|
81
89
|
attr_accessor :ob
|
@@ -92,6 +100,9 @@ module Rubabel
|
|
92
100
|
end
|
93
101
|
|
94
102
|
def from_string(string, type=DEFAULT_IN_TYPE)
|
103
|
+
if type == :inchi
|
104
|
+
string.prepend("InChI=") unless string[/^InChI=/]
|
105
|
+
end
|
95
106
|
obmol = OpenBabel::OBMol.new
|
96
107
|
obconv = OpenBabel::OBConversion.new
|
97
108
|
obconv.set_in_format(type.to_s) || raise(ArgumentError, "invalid format #{type}")
|
@@ -99,6 +110,34 @@ module Rubabel
|
|
99
110
|
self.new(obmol)
|
100
111
|
end
|
101
112
|
|
113
|
+
def retrieve_info_from_url(url)
|
114
|
+
begin
|
115
|
+
info = open(url) {|io| io.read }
|
116
|
+
rescue => e
|
117
|
+
puts "Some kind of internet connectivity error. Check your connection!"
|
118
|
+
raise e
|
119
|
+
end
|
120
|
+
info
|
121
|
+
end
|
122
|
+
|
123
|
+
# requires an internet connection
|
124
|
+
def from_id(id, type=DEFAULT_ID_TYPE)
|
125
|
+
case type
|
126
|
+
when :inchikey
|
127
|
+
url = "http://www.chemspider.com/InChI.asmx/InChIKeyToInChI?inchi_key=" + URI::encode(id)
|
128
|
+
doc_string = retrieve_info_from_url(url)
|
129
|
+
doc = REXML::Document.new( doc_string )
|
130
|
+
inchi_string = doc.root.children.first.to_s
|
131
|
+
raise(ArgumentError, "did not retrieve a valid inchi string") unless inchi_string[/^InChI=/]
|
132
|
+
from_string(inchi_string, :inchi)
|
133
|
+
when :lmid # lipidmaps id
|
134
|
+
url = "http://www.lipidmaps.org/data/LMSDRecord.php?OutputType=SDF&Mode=File&LMID=" + id
|
135
|
+
doc_string = retrieve_info_from_url(url)
|
136
|
+
from_string(doc_string, :sdf)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
alias_method :from_key, :from_id
|
140
|
+
|
102
141
|
def from_atoms_and_bonds(atoms=[], bonds=[])
|
103
142
|
obj = self.new( OpenBabel::OBMol.new )
|
104
143
|
atoms.each {|atom| obj.add_atom(atom) }
|
data/lib/rubabel/version.rb
CHANGED
data/rubabel.gemspec
CHANGED
@@ -4,6 +4,12 @@ require 'rubabel/molecule'
|
|
4
4
|
|
5
5
|
describe Rubabel::Molecule do
|
6
6
|
describe 'creation' do
|
7
|
+
it 'can be made from scratch' do
|
8
|
+
mol = Rubabel::Molecule.new
|
9
|
+
mol.atoms.size == 0
|
10
|
+
mol.title.should == ''
|
11
|
+
end
|
12
|
+
|
7
13
|
it 'can be made with Rubabel[]' do
|
8
14
|
mol = Rubabel["CC(O)O"]
|
9
15
|
mol.csmiles.should == "CC(O)O"
|
@@ -14,11 +20,45 @@ describe Rubabel::Molecule do
|
|
14
20
|
mol_dup = Rubabel::Molecule.new(mol.ob)
|
15
21
|
end
|
16
22
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
23
|
+
describe 'creation from different input strings' do
|
24
|
+
before(:all) do
|
25
|
+
@exp = Rubabel["CC(=O)O"]
|
26
|
+
end
|
27
|
+
|
28
|
+
# same as Rubabel::Molecule.from_string *args
|
29
|
+
specify 'smiles' do
|
30
|
+
Rubabel["CC(=O)O"].should == @exp
|
31
|
+
end
|
32
|
+
|
33
|
+
specify 'inchi' do
|
34
|
+
Rubabel["InChI=1S/C2H4O2/c1-2(3)4/h1H3,(H,3,4)", :inchi].should == @exp
|
35
|
+
end
|
36
|
+
|
37
|
+
specify 'inchi with no InChI= leader okay!' do
|
38
|
+
Rubabel["1S/C2H4O2/c1-2(3)4/h1H3,(H,3,4)", :inchi].should == @exp
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'creation with web lookup of ID or keys' do
|
42
|
+
before(:all) do
|
43
|
+
@exp = Rubabel["CC(=O)O"]
|
44
|
+
end
|
45
|
+
|
46
|
+
specify 'inchi key' do
|
47
|
+
Rubabel::Molecule.from_id( 'QTBSBXVTEAMEQO-UHFFFAOYSA-N', :inchikey ).should == @exp
|
48
|
+
Rubabel['QTBSBXVTEAMEQO-UHFFFAOYSA-N', :inchikey].should == @exp
|
49
|
+
end
|
50
|
+
|
51
|
+
specify 'lipidmaps id' do
|
52
|
+
Rubabel::Molecule.from_id( 'LMFA01010002', :lmid ).should == @exp
|
53
|
+
Rubabel['LMFA01010002', :lmid].should == @exp
|
54
|
+
end
|
55
|
+
|
56
|
+
specify 'pubchem id'
|
57
|
+
|
58
|
+
end
|
59
|
+
|
21
60
|
end
|
61
|
+
|
22
62
|
end
|
23
63
|
|
24
64
|
#xit 'can add a hydrogen to the formula' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubabel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John T. Prince
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: openbabel
|
@@ -94,20 +94,6 @@ dependencies:
|
|
94
94
|
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '3.12'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: jeweler
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ~>
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 1.8.3
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ~>
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 1.8.3
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: simplecov
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,7 +136,6 @@ files:
|
|
150
136
|
- LICENSE
|
151
137
|
- README.md
|
152
138
|
- Rakefile
|
153
|
-
- VERSION
|
154
139
|
- lib/rubabel.rb
|
155
140
|
- lib/rubabel/atom.rb
|
156
141
|
- lib/rubabel/bond.rb
|
@@ -214,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
199
|
version: '0'
|
215
200
|
requirements: []
|
216
201
|
rubyforge_project:
|
217
|
-
rubygems_version: 2.0.
|
202
|
+
rubygems_version: 2.0.3
|
218
203
|
signing_key:
|
219
204
|
specification_version: 4
|
220
205
|
summary: Ruby interface to the openbabel ruby bindings (or the openbabel gem). The
|
@@ -243,4 +228,3 @@ test_files:
|
|
243
228
|
- spec/testfiles/cholesterol.mol
|
244
229
|
- spec/testfiles/cholesterol.sdf
|
245
230
|
- spec/testfiles/two.sdf
|
246
|
-
has_rdoc:
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.3.1
|