0
|
1 # $Id: Reference.pm,v 1.18 2002/09/25 18:11:33 lapp Exp $
|
|
2 #
|
|
3 # BioPerl module for Bio::Annotation::Reference
|
|
4 #
|
|
5 # Cared for by Ewan Birney <birney@ebi.ac.uk>
|
|
6 #
|
|
7 # Copyright Ewan Birney
|
|
8 #
|
|
9 # You may distribute this module under the same terms as perl itself
|
|
10
|
|
11 # POD documentation - main docs before the code
|
|
12
|
|
13 =head1 NAME
|
|
14
|
|
15 Bio::Annotation::Reference - Specialised DBLink object for Literature References
|
|
16
|
|
17 =head1 SYNOPSIS
|
|
18
|
|
19 $reg = Bio::Annotation::Reference->new( -title => 'title line',
|
|
20 -location => 'location line',
|
|
21 -authors => 'author line',
|
|
22 -medline => 998122 );
|
|
23
|
|
24 =head1 DESCRIPTION
|
|
25
|
|
26 Object which presents a literature reference. This is considered to be
|
|
27 a specialised form of database link. The additional methods provided
|
|
28 are all set/get methods to store strings commonly associated with
|
|
29 references, in particular title, location (ie, journal page) and
|
|
30 authors line.
|
|
31
|
|
32 There is no attempt to do anything more than store these things as
|
|
33 strings for processing elsewhere. This is mainly because parsing these
|
|
34 things suck and generally are specific to the specific format one is
|
|
35 using. To provide an easy route to go format --E<gt> object --E<gt> format
|
|
36 without losing data, we keep them as strings. Feel free to post the
|
|
37 list for a better solution, but in general this gets very messy very
|
|
38 fast...
|
|
39
|
|
40 =head1 CONTACT
|
|
41
|
|
42 Describe contact details here
|
|
43
|
|
44 =head1 APPENDIX
|
|
45
|
|
46 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
|
|
47
|
|
48 =cut
|
|
49
|
|
50
|
|
51 # Let the code begin...
|
|
52
|
|
53 package Bio::Annotation::Reference;
|
|
54 use vars qw(@ISA);
|
|
55 use strict;
|
|
56
|
|
57 use Bio::Annotation::DBLink;
|
|
58 use Bio::AnnotationI;
|
|
59
|
|
60 @ISA = qw(Bio::Annotation::DBLink);
|
|
61
|
|
62 =head2 new
|
|
63
|
|
64 Title : new
|
|
65 Usage : $ref = Bio::Annotation::Reference->new( -title => 'title line',
|
|
66 -authors => 'author line',
|
|
67 -location => 'location line',
|
|
68 -medline => 9988812);
|
|
69 Function:
|
|
70 Example :
|
|
71 Returns : a new Bio::Annotation::Reference object
|
|
72 Args : a hash with optional title, authors, location, medline, start and end
|
|
73 attributes
|
|
74
|
|
75
|
|
76 =cut
|
|
77
|
|
78 sub new{
|
|
79 my ($class,@args) = @_;
|
|
80
|
|
81 my $self = $class->SUPER::new(@args);
|
|
82
|
|
83 my ($start,$end,$authors,$location,$title,$medline,$tag) =
|
|
84 $self->_rearrange([qw(START
|
|
85 END
|
|
86 AUTHORS
|
|
87 LOCATION
|
|
88 TITLE
|
|
89 MEDLINE
|
|
90 TAGNAME
|
|
91 )],@args);
|
|
92
|
|
93 defined $start && $self->start($start);
|
|
94 defined $end && $self->end($end);
|
|
95 defined $authors && $self->authors($authors);
|
|
96 defined $location && $self->location($location);
|
|
97 defined $title && $self->title($title);
|
|
98 defined $medline && $self->medline($medline);
|
|
99 defined $tag && $self->tagname($tag);
|
|
100
|
|
101 return $self;
|
|
102 }
|
|
103
|
|
104
|
|
105 =head1 AnnotationI implementing functions
|
|
106
|
|
107 =cut
|
|
108
|
|
109 =head2 as_text
|
|
110
|
|
111 Title : as_text
|
|
112 Usage :
|
|
113 Function:
|
|
114 Example :
|
|
115 Returns :
|
|
116 Args :
|
|
117
|
|
118
|
|
119 =cut
|
|
120
|
|
121 sub as_text{
|
|
122 my ($self) = @_;
|
|
123
|
|
124 # this could get out of hand!
|
|
125 return "Reference: ".$self->title;
|
|
126 }
|
|
127
|
|
128
|
|
129 =head2 hash_tree
|
|
130
|
|
131 Title : hash_tree
|
|
132 Usage :
|
|
133 Function:
|
|
134 Example :
|
|
135 Returns :
|
|
136 Args :
|
|
137
|
|
138
|
|
139 =cut
|
|
140
|
|
141 sub hash_tree{
|
|
142 my ($self) = @_;
|
|
143
|
|
144 my $h = {};
|
|
145 $h->{'title'} = $self->title;
|
|
146 $h->{'authors'} = $self->authors;
|
|
147 $h->{'location'} = $self->location;
|
|
148 if( defined $self->start ) {
|
|
149 $h->{'start'} = $self->start;
|
|
150 }
|
|
151 if( defined $self->end ) {
|
|
152 $h->{'end'} = $self->end;
|
|
153 }
|
|
154 $h->{'medline'} = $self->medline;
|
|
155
|
|
156 return $h;
|
|
157 }
|
|
158
|
|
159 =head2 tagname
|
|
160
|
|
161 Title : tagname
|
|
162 Usage : $obj->tagname($newval)
|
|
163 Function: Get/set the tagname for this annotation value.
|
|
164
|
|
165 Setting this is optional. If set, it obviates the need to provide
|
|
166 a tag to Bio::AnnotationCollectionI when adding this object. When
|
|
167 obtaining an AnnotationI object from the collection, the collection
|
|
168 will set the value to the tag under which it was stored unless the
|
|
169 object has a tag stored already.
|
|
170 Example :
|
|
171 Returns : value of tagname (a scalar)
|
|
172 Args : new value (a scalar, optional)
|
|
173
|
|
174
|
|
175 =cut
|
|
176
|
|
177 sub tagname{
|
|
178 my ($self,$value) = @_;
|
|
179 if( defined $value) {
|
|
180 $self->{'tagname'} = $value;
|
|
181 }
|
|
182 return $self->{'tagname'};
|
|
183 }
|
|
184
|
|
185
|
|
186 =head1 Specific accessors for References
|
|
187
|
|
188 =cut
|
|
189
|
|
190
|
|
191 =head2 start
|
|
192
|
|
193 Title : start
|
|
194 Usage : $self->start($newval)
|
|
195 Function: Gives the reference start base
|
|
196 Example :
|
|
197 Returns : value of start
|
|
198 Args : newvalue (optional)
|
|
199
|
|
200
|
|
201 =cut
|
|
202
|
|
203 sub start {
|
|
204 my ($self,$value) = @_;
|
|
205 if( defined $value) {
|
|
206 $self->{'start'} = $value;
|
|
207 }
|
|
208 return $self->{'start'};
|
|
209
|
|
210 }
|
|
211
|
|
212 =head2 end
|
|
213
|
|
214 Title : end
|
|
215 Usage : $self->end($newval)
|
|
216 Function: Gives the reference end base
|
|
217 Example :
|
|
218 Returns : value of end
|
|
219 Args : newvalue (optional)
|
|
220
|
|
221
|
|
222 =cut
|
|
223
|
|
224 sub end {
|
|
225 my ($self,$value) = @_;
|
|
226 if( defined $value) {
|
|
227 $self->{'end'} = $value;
|
|
228 }
|
|
229 return $self->{'end'};
|
|
230 }
|
|
231
|
|
232 =head2 rp
|
|
233
|
|
234 Title : rp
|
|
235 Usage : $self->rp($newval)
|
|
236 Function: Gives the RP line. No attempt is made to parse this line.
|
|
237 Example :
|
|
238 Returns : value of rp
|
|
239 Args : newvalue (optional)
|
|
240
|
|
241
|
|
242 =cut
|
|
243
|
|
244 sub rp{
|
|
245 my ($self,$value) = @_;
|
|
246 if( defined $value) {
|
|
247 $self->{'rp'} = $value;
|
|
248 }
|
|
249 return $self->{'rp'};
|
|
250
|
|
251 }
|
|
252
|
|
253 =head2 authors
|
|
254
|
|
255 Title : authors
|
|
256 Usage : $self->authors($newval)
|
|
257 Function: Gives the author line. No attempt is made to parse the author line
|
|
258 Example :
|
|
259 Returns : value of authors
|
|
260 Args : newvalue (optional)
|
|
261
|
|
262
|
|
263 =cut
|
|
264
|
|
265 sub authors{
|
|
266 my ($self,$value) = @_;
|
|
267 if( defined $value) {
|
|
268 $self->{'authors'} = $value;
|
|
269 }
|
|
270 return $self->{'authors'};
|
|
271
|
|
272 }
|
|
273
|
|
274 =head2 location
|
|
275
|
|
276 Title : location
|
|
277 Usage : $self->location($newval)
|
|
278 Function: Gives the location line. No attempt is made to parse the location line
|
|
279 Example :
|
|
280 Returns : value of location
|
|
281 Args : newvalue (optional)
|
|
282
|
|
283
|
|
284 =cut
|
|
285
|
|
286 sub location{
|
|
287 my ($self,$value) = @_;
|
|
288 if( defined $value) {
|
|
289 $self->{'location'} = $value;
|
|
290 }
|
|
291 return $self->{'location'};
|
|
292
|
|
293 }
|
|
294
|
|
295 =head2 title
|
|
296
|
|
297 Title : title
|
|
298 Usage : $self->title($newval)
|
|
299 Function: Gives the title line (if exists)
|
|
300 Example :
|
|
301 Returns : value of title
|
|
302 Args : newvalue (optional)
|
|
303
|
|
304
|
|
305 =cut
|
|
306
|
|
307 sub title{
|
|
308 my ($self,$value) = @_;
|
|
309 if( defined $value) {
|
|
310 $self->{'title'} = $value;
|
|
311 }
|
|
312 return $self->{'title'};
|
|
313
|
|
314 }
|
|
315
|
|
316 =head2 medline
|
|
317
|
|
318 Title : medline
|
|
319 Usage : $self->medline($newval)
|
|
320 Function: Gives the medline number
|
|
321 Example :
|
|
322 Returns : value of medline
|
|
323 Args : newvalue (optional)
|
|
324
|
|
325
|
|
326 =cut
|
|
327
|
|
328 sub medline{
|
|
329 my ($self,$value) = @_;
|
|
330 if( defined $value) {
|
|
331 $self->{'medline'} = $value;
|
|
332 }
|
|
333 return $self->{'medline'};
|
|
334 }
|
|
335
|
|
336 =head2 pubmed
|
|
337
|
|
338 Title : pubmed
|
|
339 Usage : $refobj->pubmed($newval)
|
|
340 Function: Get/Set the PubMed number, if it is different from the MedLine
|
|
341 number.
|
|
342 Example :
|
|
343 Returns : value of medline
|
|
344 Args : newvalue (optional)
|
|
345
|
|
346
|
|
347 =cut
|
|
348
|
|
349 sub pubmed {
|
|
350 my ($self,$value) = @_;
|
|
351 if( defined $value) {
|
|
352 $self->{'pubmed'} = $value;
|
|
353 }
|
|
354 return $self->{'pubmed'};
|
|
355 }
|
|
356
|
|
357 =head2 database
|
|
358
|
|
359 Title : database
|
|
360 Usage :
|
|
361 Function: Overrides DBLink database to be hard coded to 'MEDLINE', unless
|
|
362 the database has been set explicitely before.
|
|
363 Example :
|
|
364 Returns :
|
|
365 Args :
|
|
366
|
|
367
|
|
368 =cut
|
|
369
|
|
370 sub database{
|
|
371 my ($self, @args) = @_;
|
|
372
|
|
373 return $self->SUPER::database(@args) || 'MEDLINE';
|
|
374 }
|
|
375
|
|
376 =head2 primary_id
|
|
377
|
|
378 Title : primary_id
|
|
379 Usage :
|
|
380 Function: Overrides DBLink primary_id to provide medline number
|
|
381 Example :
|
|
382 Returns :
|
|
383 Args :
|
|
384
|
|
385
|
|
386 =cut
|
|
387
|
|
388 sub primary_id{
|
|
389 my ($self, @args) = @_;
|
|
390
|
|
391 return $self->medline(@args);
|
|
392 }
|
|
393
|
|
394 =head2 optional_id
|
|
395
|
|
396 Title : optional_id
|
|
397 Usage :
|
|
398 Function: Overrides DBLink optional_id to provide the PubMed number.
|
|
399 Example :
|
|
400 Returns :
|
|
401 Args :
|
|
402
|
|
403
|
|
404 =cut
|
|
405
|
|
406 sub optional_id{
|
|
407 my ($self, @args) = @_;
|
|
408
|
|
409 return $self->pubmed(@args);
|
|
410 }
|
|
411
|
|
412 =head2 publisher
|
|
413
|
|
414 Title : publisher
|
|
415 Usage : $self->publisher($newval)
|
|
416 Function: Gives the publisher line. No attempt is made to parse the publisher line
|
|
417 Example :
|
|
418 Returns : value of publisher
|
|
419 Args : newvalue (optional)
|
|
420
|
|
421
|
|
422 =cut
|
|
423
|
|
424 sub publisher {
|
|
425 my ($self,$value) = @_;
|
|
426 if( defined $value) {
|
|
427 $self->{'publisher'} = $value;
|
|
428 }
|
|
429 return $self->{'publisher'};
|
|
430 }
|
|
431
|
|
432
|
|
433 =head2 editors
|
|
434
|
|
435 Title : editors
|
|
436 Usage : $self->editors($newval)
|
|
437 Function: Gives the editors line. No attempt is made to parse the editors line
|
|
438 Example :
|
|
439 Returns : value of editors
|
|
440 Args : newvalue (optional)
|
|
441
|
|
442
|
|
443 =cut
|
|
444
|
|
445 sub editors {
|
|
446 my ($self,$value) = @_;
|
|
447 if( defined $value) {
|
|
448 $self->{'editors'} = $value;
|
|
449 }
|
|
450 return $self->{'editors'};
|
|
451 }
|
|
452
|
|
453
|
|
454 =head2 encoded_ref
|
|
455
|
|
456 Title : encoded_ref
|
|
457 Usage : $self->encoded_ref($newval)
|
|
458 Function: Gives the encoded_ref line. No attempt is made to parse the encoded_ref line
|
|
459 (this is added for reading PDB records (REFN record), where this contains
|
|
460 ISBN/ISSN/ASTM code)
|
|
461 Example :
|
|
462 Returns : value of encoded_ref
|
|
463 Args : newvalue (optional)
|
|
464
|
|
465
|
|
466 =cut
|
|
467
|
|
468 sub encoded_ref {
|
|
469 my ($self,$value) = @_;
|
|
470 if( defined $value) {
|
|
471 $self->{'encoded_ref'} = $value;
|
|
472 }
|
|
473 return $self->{'encoded_ref'};
|
|
474 }
|
|
475
|
|
476
|
|
477 1;
|