add smid dump script.
[SMMID.git] / lib / SMMIDDb.pm
blob9e547cc71d6f11dbf91625545c4823db4852c12f
1 use strict;
3 package SMMIDDb;
5 use Tie::UrlEncoder;
7 our %urlencode;
8 our $PARSED;
9 our %SMMID;
11 sub new {
12 my $class = shift;
13 my $file = shift;
14 my $smmid = shift;
15 my $self = bless {}, $class;
17 $self->set_smmid($smmid);
19 print STDERR "SMMID FILE = $file\n";
20 $self->{smmid_file} = $file;
22 $self->fetch();
24 return $self;
27 =head2 accessors get_smmid, set_smmid
29 Usage:
30 Desc:
31 Property
32 Side Effects:
33 Example:
35 =cut
37 sub get_smmid {
38 my $self = shift;
39 return $self->{smmid};
42 sub set_smmid {
43 my $self = shift;
44 $self->{smmid} = shift;
47 sub fetch {
48 my $self = shift;
50 if (!$PARSED) {
51 open (my $F, "<".$self->{smmid_file}) || die "Can't open the SMMID definition file $self->{smmid_file}.";
52 my $current = "";
53 my $section = "";
54 while (<$F>) {
55 chomp;
56 next() if !$_;
57 if (/^SMMID\:\s*(.*)/) {
58 $current = $1;
59 $SMMID{$current}->{SMMID}=$current;
62 else {
63 my ($key, $value) = split /\s*\:\s*/;
64 if ($key=~/^http/) {
65 print STDERR "Adding reference to $section: $value.\n";
66 push @{$SMMID{$current}->{link_url}->{$section}}, $value;
68 elsif ($key=~/^\(/) {
69 print STDERR "Adding link to $section: $key\n";
70 push @{$SMMID{$current}->{link_text}->{$section}}, $key;
72 else {
73 $SMMID{$current}->{$key}=$value;
74 $section = $key;
78 $PARSED = "TRUE!";
84 =head2 accessors get_name, set_name
86 Usage:
87 Desc:
88 Property
89 Side Effects:
90 Example:
92 =cut
94 sub get_name {
95 my $self = shift;
96 #if (!exists $SMMID{$self->get_smmid()}) {
97 # die "Need to set smmid first with set_smmid()";
99 my $name = $SMMID{$self->get_smmid()}->{"CHEMICAL NAME"};
100 print STDERR "Chemical name is $name\n";
101 return $name;
104 sub set_name {
105 my $self = shift;
106 $SMMID{$self->get_smmid()}->{NAME}=shift;
109 =head2 accessors get_synonyms, set_synonyms
111 Usage:
112 Desc:
113 Property
114 Side Effects:
115 Example:
117 =cut
119 sub get_synonyms {
120 my $self = shift;
121 return $SMMID{$self->get_smmid()}->{SYNONYMS};
124 sub set_synonyms {
125 my $self = shift;
126 $SMMID{$self->get_smmid()}->{SYNONYMS}=shift;
129 =head2 accessors get_molecular_formula, set_molecular_formula
131 Usage:
132 Desc:
133 Property
134 Side Effects:
135 Example:
137 =cut
139 sub get_molecular_formula {
140 my $self = shift;
141 return $SMMID{$self->get_smmid()}->{"MOLECULAR FORMULA"};
144 sub set_molecular_formula {
145 my $self = shift;
146 $SMMID{$self->get_smmid()}->{"MOLCULAR FORMULA"}=shift;
150 =head2 accessors get_molecular_weight, set_molecular_weight
152 Usage:
153 Desc:
154 Property
155 Side Effects:
156 Example:
158 =cut
160 sub get_molecular_weight {
161 my $self = shift;
162 return $SMMID{$self->get_smmid()}->{"MOLECULAR WEIGHT"};
165 sub set_molecular_weight {
166 my $self = shift;
167 $SMMID{$self->get_smmid()}->{"MOLECULAR WEIGHT"}=shift;
170 =head2 get_structure_file
172 Usage:
173 Desc:
174 Ret:
175 Args:
176 Side Effects:
177 Example:
179 =cut
181 sub get_structure_file {
182 my $self = shift;
183 my $file = $self->get_smmid();
184 $file =~ s/\#/\%23/g;
185 return $file;
189 =head2 get_smmid_for_link
191 Usage:
192 Desc:
193 Ret:
194 Args:
195 Side Effects:
196 Example:
198 =cut
200 sub get_smmid_for_link {
201 my $self = shift;
202 return $urlencode{$self->get_smmid()};
206 =head2 get_links
208 Usage:
209 Desc:
210 Ret:
211 Args:
212 Side Effects:
213 Example:
215 =cut
217 sub get_links {
218 my $self =shift;
219 my $section = shift;
220 print STDERR "getting links for section $section\n";
221 my @links = ();
222 if (!defined($SMMID{$self->get_smmid()}->{link_text}->{$section})) { return; }
223 print STDERR scalar(@{$SMMID{$self->get_smmid()}->{link_text}->{$section}})." entries\n";
224 for (my $i=0; $i<@{$SMMID{$self->get_smmid()}->{link_text}->{$section}}; $i++) {
225 push @links, [ ${$SMMID{$self->get_smmid()}->{link_text}->{$section}}[$i], ${$SMMID{$self->get_smmid()}->{link_url}->{$section}}[$i] ];
227 return @links;
232 =head2 get_cas
234 Usage:
235 Desc:
236 Ret:
237 Args:
238 Side Effects:
239 Example:
241 =cut
243 sub get_cas {
244 my $self = shift;
245 return $SMMID{$self->get_smmid()}->{CAS};
248 =head2 get_concise_summary
250 Usage:
251 Desc:
252 Ret:
253 Args:
254 Side Effects:
255 Example:
257 =cut
259 sub get_concise_summary {
260 my $self = shift;
261 return $SMMID{$self->get_smmid()}->{"CONCISE SUMMARY"};
264 =head2 get_biosynthesis
266 Usage:
267 Desc:
268 Ret:
269 Args:
270 Side Effects:
271 Example:
273 =cut
275 sub get_biosynthesis {
276 my $self = shift;
277 return $SMMID{$self->get_smmid()}->{BIOSYNTHESIS};
280 =head2 get_receptors
282 Usage:
283 Desc:
284 Ret:
285 Args:
286 Side Effects:
287 Example:
289 =cut
291 sub get_receptors {
292 my $self = shift;
293 return $SMMID{$self->get_smmid()}->{RECEPTORS};
301 =head2 all_smmids
303 Usage:
304 Desc:
305 Ret:
306 Args:
307 Side Effects:
308 Example:
310 =cut
312 sub all_smmids {
313 my $class = shift;
314 my $path = shift;
316 my $self = $class->new($path);
318 $self->fetch();
320 my @all_smmids = ();
322 foreach my $s (sort keys(%SMMID)) {
323 my $smmid = SMMIDDb->new($path, $s);
325 push @all_smmids, $smmid;
327 return @all_smmids;
335 return 1;