class Bio::Reference

DESCRIPTION

A class for journal reference information.

USAGE

hash = {'authors' => [ "Hoge, J.P.", "Fuga, F.B." ], 
        'title' => "Title of the study.",
        'journal' => "Theor. J. Hoge", 
        'volume' => 12, 
        'issue' => 3, 
        'pages' => "123-145",
        'year' => 2001, 
        'pubmed' => 12345678, 
        'medline' => 98765432, 
        'abstract' => "Hoge fuga. ...",
        'url' => "http://example.com", 
        'mesh' => [], 
        'affiliations' => []}
ref = Bio::Reference.new(hash)

# Formats in the BiBTeX style.
ref.format("bibtex")

# Short-cut for Bio::Reference#format("bibtex")
ref.bibtex

Attributes

abstract[R]

Abstract text in String.

affiliations[R]

Affiliations in an Array.

authors[R]

Author names in an Array, [ “Hoge, J.P.”, “Fuga, F.B.” ].

comments[R]

Comments for the reference (typically Array of String, or nil)

doi[R]

DOI identifier (typically String, e.g. “10.1126/science.1110418”)

embl_gb_record_number[R]

Sequence number in EMBL/GenBank records

issue[R]

issue number (typically Fixnum)

journal[R]

String with journal name

medline[R]

medline identifier (typically Fixnum)

mesh[R]

MeSH terms in an Array.

pages[R]

page range (typically String, e.g. “123-145”)

pubmed[R]

pubmed identifier (typically Fixnum)

sequence_position[R]

Position in a sequence that this reference refers to

title[R]

String with title of the study

url[R]

An URL String.

volume[R]

volume number (typically Fixnum)

year[R]

year of publication (typically Fixnum)

Public Class Methods

new(hash) click to toggle source

Create a new Bio::Reference object from a Hash of values. Data is extracted from the values for keys:

  • authors - expected value: Array of Strings

  • title - expected value: String

  • journal - expected value: String

  • volume - expected value: Fixnum or String

  • issue - expected value: Fixnum or String

  • pages - expected value: String

  • year - expected value: Fixnum or String

  • pubmed - expected value: Fixnum or String

  • medline - expected value: Fixnum or String

  • abstract - expected value: String

  • url - expected value: String

  • mesh - expected value: Array of Strings

  • affiliations - expected value: Array of Strings

    hash = {'authors' => [ "Hoge, J.P.", "Fuga, F.B." ], 
            'title' => "Title of the study.",
            'journal' => "Theor. J. Hoge", 
            'volume' => 12, 
            'issue' => 3, 
            'pages' => "123-145",
            'year' => 2001, 
            'pubmed' => 12345678, 
            'medline' => 98765432, 
            'abstract' => "Hoge fuga. ...",
            'url' => "http://example.com", 
            'mesh' => [], 
            'affiliations' => []}
    ref = Bio::Reference.new(hash)
    

Arguments:

  • (required) hash: Hash

Returns

Bio::Reference object

    # File lib/bio/reference.rb
133 def initialize(hash)
134   @authors  = hash['authors'] || [] # [ "Hoge, J.P.", "Fuga, F.B." ]
135   @title    = hash['title']   || '' # "Title of the study."
136   @journal  = hash['journal'] || '' # "Theor. J. Hoge"
137   @volume   = hash['volume']  || '' # 12
138   @issue    = hash['issue']   || '' # 3
139   @pages    = hash['pages']   || '' # 123-145
140   @year     = hash['year']    || '' # 2001
141   @pubmed   = hash['pubmed']  || '' # 12345678
142   @medline  = hash['medline'] || '' # 98765432
143   @doi      = hash['doi']
144   @abstract = hash['abstract'] || '' 
145   @url      = hash['url']
146   @mesh     = hash['mesh'] || []
147   @embl_gb_record_number = hash['embl_gb_record_number'] || nil
148   @sequence_position = hash['sequence_position'] || nil
149   @comments  = hash['comments']
150   @affiliations = hash['affiliations'] || []
151 end

Public Instance Methods

==(other) click to toggle source

If other is equal with the self, returns true. Otherwise, returns false.


Arguments:

  • (required) other: any object

Returns

true or false

Calls superclass method
    # File lib/bio/reference.rb
159 def ==(other)
160   return true if super(other)
161   return false unless other.instance_of?(self.class)
162   flag = false
163   [ :authors, :title, :journal, :volume, :issue, :pages,
164     :year, :pubmed, :medline, :doi, :abstract,
165     :url, :mesh, :embl_gb_record_number,
166     :sequence_position, :comments, :affiliations ].each do |m|
167     begin
168       flag = (self.__send__(m) == other.__send__(m))
169     rescue NoMethodError, ArgumentError, NameError
170       flag = false
171     end
172     break unless flag
173   end
174   flag
175 end
bibitem(item = nil) click to toggle source

Returns reference formatted in the bibitem style

# ref is a Bio::Reference object
puts ref.bibitem

  \bibitem{PMID:12345678}
  Hoge, J.P., Fuga, F.B.
  Title of the study.,
  {\em Theor. J. Hoge}, 12(3):123--145, 2001.

Arguments:

  • (optional) item: label string (default: "PMID:#{pubmed}").

Returns

String

    # File lib/bio/reference.rb
316     def bibitem(item = nil)
317       item  = "PMID:#{@pubmed}" unless item
318       pages = @pages.sub('-', '--')
319       return <<-"END".enum_for(:each_line).collect {|line| line.strip}.join("\n")
320         \\bibitem{#{item}}
321         #{@authors.join(', ')}
322         #{@title},
323         {\\em #{@journal}}, #{@volume}(#{@issue}):#{pages}, #{@year}.
324       END
325     end
bibtex(section = nil, label = nil, keywords = {}) click to toggle source

Returns reference formatted in the BiBTeX style.

# ref is a Bio::Reference object
puts ref.bibtex

  @article{PMID:12345678,
    author  = {Hoge, J.P. and Fuga, F.B.},
    title   = {Title of the study.},
    journal = {Theor. J. Hoge},
    year    = {2001},
    volume  = {12},
    number  = {3},
    pages   = {123--145},
  }

# using a different section (e.g. "book")
# (but not really configured for anything other than articles)
puts ref.bibtex("book")

  @book{PMID:12345678,
    author  = {Hoge, J.P. and Fuga, F.B.},
    title   = {Title of the study.},
    journal = {Theor. J. Hoge},
    year    = {2001},
    volume  = {12},
    number  = {3},
    pages   = {123--145},
  }

Arguments:

  • (optional) section: BiBTeX section as String

  • (optional) label: Label string cited by LaTeX documents.

    Default is <tt>"PMID:#{pubmed}"</tt>.
  • (optional) keywords: Hash of additional keywords,

    e.g. { 'abstract' => 'This is abstract.' }.
    You can also override default keywords.
    To disable default keywords, specify false as
    value, e.g. { 'url' => false, 'year' => false }.
Returns

String

    # File lib/bio/reference.rb
366 def bibtex(section = nil, label = nil, keywords = {})
367   section = "article" unless section
368   authors = authors_join(' and ', ' and ')
369   thepages = pages.to_s.empty? ? nil : pages.sub(/\-/, '--')
370   unless label then
371     label = "PMID:#{pubmed}"
372   end
373   theurl = if !(url.to_s.empty?) then
374              url
375            elsif pmurl = pubmed_url and !(pmurl.to_s.empty?) then
376              pmurl
377            else
378              nil
379            end
380   hash = {
381     'author'  => authors.empty?    ? nil : authors,
382     'title'   => title.to_s.empty? ? nil : title,
383     'number'  => issue.to_s.empty? ? nil : issue,
384     'pages'   => thepages,
385     'url'     => theurl
386   }
387   keys = %w( author title journal year volume number pages url )
388   keys.each do |k|
389     hash[k] = self.__send__(k.intern) unless hash.has_key?(k)
390   end
391   hash.merge!(keywords) { |k, v1, v2| v2.nil? ? v1 : v2 }
392   bib = [ "@#{section}{#{label}," ]
393   keys.concat((hash.keys - keys).sort)
394   keys.each do |kw|
395     ref = hash[kw]
396     bib.push "  #{kw.ljust(12)} = {#{ref}}," if ref
397   end
398   bib.push "}\n"
399   return bib.join("\n")
400 end
cell() click to toggle source

Returns reference formatted in the CELL Press style.

# ref is a Bio::Reference object
puts ref.cell

  Hoge, J.P. and Fuga, F.B. (2001). Title of the study. Theor. J. Hoge 12, 123-145.

Returns

String

    # File lib/bio/reference.rb
560 def cell
561   authors = authors_join(' and ')
562   "#{authors} (#{@year}). #{@title} #{@journal} #{@volume}, #{pages}."
563 end
current() click to toggle source

Returns reference formatted in the Current Biology (current-biology.com) style. (Same as the Genome Biology style)

# ref is a Bio::Reference object
puts ref.current

  Hoge JP, Fuga FB: Title of the study. Theor J Hoge 2001, 12:123-145.

Returns

String

    # File lib/bio/reference.rb
518 def current 
519   self.genome_biol
520 end
embl() click to toggle source

Returns reference formatted in the EMBL style.

# ref is a Bio::Reference object
puts ref.embl

  RP   1-1859
  RX   PUBMED; 1907511.
  RA   Oxtoby E., Dunn M.A., Pancoro A., Hughes M.A.;
  RT   "Nucleotide and derived amino acid sequence of the cyanogenic
  RT   beta-glucosidase (linamarase) from white clover (Trifolium repens L.)";
  RL   Plant Mol. Biol. 17(2):209-219(1991).
    # File lib/bio/reference.rb
296 def embl
297   r = self
298   Bio::Sequence::Format::NucFormatter::Embl.new('').instance_eval {
299     reference_format_embl(r)
300   }
301 end
endnote() click to toggle source

Returns reference formatted in the Endnote style.

# ref is a Bio::Reference object
puts ref.endnote

  %0 Journal Article
  %A Hoge, J.P.
  %A Fuga, F.B.
  %D 2001
  %T Title of the study.
  %J Theor. J. Hoge
  %V 12
  %N 3
  %P 123-145
  %M 12345678
  %U http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&dopt=Citation&list_uids=12345678
  %X Hoge fuga. ...

Returns

String

    # File lib/bio/reference.rb
262 def endnote
263   lines = []
264   lines << "%0 Journal Article"
265   @authors.each do |author|
266     lines << "%A #{author}"
267   end
268   lines << "%D #{@year}" unless @year.to_s.empty?
269   lines << "%T #{@title}" unless @title.empty?
270   lines << "%J #{@journal}" unless @journal.empty?
271   lines << "%V #{@volume}" unless @volume.to_s.empty?
272   lines << "%N #{@issue}" unless @issue.to_s.empty?
273   lines << "%P #{@pages}" unless @pages.empty?
274   lines << "%M #{@pubmed}" unless @pubmed.to_s.empty?
275   u = @url.to_s.empty? ? pubmed_url : @url
276   lines << "%U #{u}" unless u.empty?
277   lines << "%X #{@abstract}" unless @abstract.empty?
278   @mesh.each do |term|
279     lines << "%K #{term}"
280   end
281   lines << "%+ #{@affiliations.join(' ')}" unless @affiliations.empty?
282   return lines.join("\n")
283 end
format(style = nil, *options) click to toggle source

Formats the reference in a given style.

Styles:

  1. nil - general

  2. endnote - Endnote

  3. bibitem - Bibitem (option available)

  4. bibtex - BiBTeX (option available)

  5. rd - rd (option available)

  6. nature - Nature (option available)

  7. science - Science

  8. genome_biol - Genome Biology

  9. genome_res - Genome Research

  10. nar - Nucleic Acids Research

  11. current - Current Biology

  12. trends - Trends in *

  13. cell - Cell Press

See individual methods for details. Basic usage is:

# ref is Bio::Reference object
# using simplest possible call (for general style)
puts ref.format

# output in Nature style
puts ref.format("nature")      # alternatively, puts ref.nature

# output in Nature short style (see Bio::Reference#nature)
puts ref.format("nature",true) # alternatively, puts ref.nature(true)

Arguments:

  • (optional) style: String with style identifier

  • (optional) options: Options for styles accepting one

Returns

String

    # File lib/bio/reference.rb
210 def format(style = nil, *options)
211   case style
212   when 'embl'
213     return embl
214   when 'endnote'
215     return endnote
216   when 'bibitem'
217     return bibitem(*options)
218   when 'bibtex'
219     return bibtex(*options)
220   when 'rd'
221     return rd(*options)
222   when /^nature$/i
223     return nature(*options)
224   when /^science$/i
225     return science
226   when /^genome\s*_*biol/i
227     return genome_biol
228   when /^genome\s*_*res/i
229     return genome_res
230   when /^nar$/i
231     return nar
232   when /^current/i
233     return current
234   when /^trends/i
235     return trends
236   when /^cell$/i
237     return cell
238   else
239     return general
240   end
241 end
general() click to toggle source

Returns reference formatted in a general/generic style.

# ref is a Bio::Reference object
puts ref.general

  Hoge, J.P., Fuga, F.B. (2001). "Title of the study." Theor. J. Hoge 12:123-145.

Returns

String

    # File lib/bio/reference.rb
410 def general
411   authors = @authors.join(', ')
412   "#{authors} (#{@year}). \"#{@title}\" #{@journal} #{@volume}:#{@pages}."
413 end
genome_biol() click to toggle source

Returns reference formatted in the Genome Biology (genomebiology.com) style.

# ref is a Bio::Reference object
puts ref.genome_biol

  Hoge JP, Fuga FB: Title of the study. Theor J Hoge 2001, 12:123-145.

Returns

String

    # File lib/bio/reference.rb
503 def genome_biol
504   authors = @authors.collect {|name| strip_dots(name)}.join(', ')
505   journal = strip_dots(@journal)
506   "#{authors}: #{@title} #{journal} #{@year}, #{@volume}:#{@pages}."
507 end
genome_res() click to toggle source

Returns reference formatted in the Genome Research (genome.org) style.

# ref is a Bio::Reference object
puts ref.genome_res

  Hoge, J.P. and Fuga, F.B. 2001.
    Title of the study. Theor. J. Hoge 12: 123-145.

Returns

String

    # File lib/bio/reference.rb
532 def genome_res
533   authors = authors_join(' and ')
534   "#{authors} #{@year}.\n  #{@title} #{@journal} #{@volume}: #{@pages}."
535 end
nar() click to toggle source

Returns reference formatted in the Nucleic Acids Reseach (nar.oxfordjournals.org) style.

# ref is a Bio::Reference object
puts ref.nar

  Hoge, J.P. and Fuga, F.B. (2001) Title of the study. Theor. J. Hoge, 12, 123-145.

Returns

String

    # File lib/bio/reference.rb
546 def nar
547   authors = authors_join(' and ')
548   "#{authors} (#{@year}) #{@title} #{@journal}, #{@volume}, #{@pages}."
549 end
nature(short = false) click to toggle source

Formats in the Nature Publishing Group (www.nature.com) style.

# ref is a Bio::Reference object
puts ref.nature

  Hoge, J.P. & Fuga, F.B. Title of the study. Theor. J. Hoge 12, 123-145 (2001).

# optionally, output short version
puts ref.nature(true)  # or puts ref.nature(short=true)

  Hoge, J.P. & Fuga, F.B. Theor. J. Hoge 12, 123-145 (2001).

Arguments:

  • (optional) short: Boolean (default false)

Returns

String

    # File lib/bio/reference.rb
459 def nature(short = false)
460   if short
461     if @authors.size > 4
462       authors = "#{@authors[0]} et al."
463     elsif @authors.size == 1
464       authors = "#{@authors[0]}"
465     else
466       authors = authors_join(' & ')
467     end
468     "#{authors} #{@journal} #{@volume}, #{@pages} (#{@year})."
469   else
470     authors = authors_join(' & ')
471     "#{authors} #{@title} #{@journal} #{@volume}, #{@pages} (#{@year})."
472   end
473 end
pubmed_url() click to toggle source

Returns a valid URL for pubmed records

Returns

String

    # File lib/bio/reference.rb
588 def pubmed_url
589   unless @pubmed.to_s.empty?
590     head = "http://www.ncbi.nlm.nih.gov/pubmed"
591     return "#{head}/#{@pubmed}"
592   end
593   ''
594 end
rd(str = nil) click to toggle source

Return reference formatted in the RD style.

# ref is a Bio::Reference object
puts ref.rd

  == Title of the study.

  * Hoge, J.P. and Fuga, F.B.

  * Theor. J. Hoge 2001 12:123-145 [PMID:12345678]

  Hoge fuga. ...

An optional string argument can be supplied, but does nothing.


Arguments:

  • (optional) str: String (default nil)

Returns

String

    # File lib/bio/reference.rb
433 def rd(str = nil)
434   @abstract ||= str
435   lines = []
436   lines << "== " + @title
437   lines << "* " + authors_join(' and ')
438   lines << "* #{@journal} #{@year} #{@volume}:#{@pages} [PMID:#{@pubmed}]"
439   lines << @abstract
440   return lines.join("\n\n")
441 end
science() click to toggle source

Returns reference formatted in the Science style.

# ref is a Bio::Reference object
puts ref.science

  J.P. Hoge, F.B. Fuga, Theor. J. Hoge 12 123 (2001).

Returns

String

    # File lib/bio/reference.rb
484 def science
485   if @authors.size > 4
486     authors = rev_name(@authors[0]) + " et al."
487   else
488     authors = @authors.collect {|name| rev_name(name)}.join(', ')
489   end
490   page_from, = @pages.split('-')
491   "#{authors}, #{@journal} #{@volume} #{page_from} (#{@year})."
492 end