Class: Bio::Reference

Inherits:
Object show all
Defined in:
lib/bio/reference.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash) ⇒ Reference

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



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/bio/reference.rb', line 133

def initialize(hash)
  @authors  = hash['authors'] || [] # [ "Hoge, J.P.", "Fuga, F.B." ]
  @title    = hash['title']   || '' # "Title of the study."
  @journal  = hash['journal'] || '' # "Theor. J. Hoge"
  @volume   = hash['volume']  || '' # 12
  @issue    = hash['issue']   || '' # 3
  @pages    = hash['pages']   || '' # 123-145
  @year     = hash['year']    || '' # 2001
  @pubmed   = hash['pubmed']  || '' # 12345678
  @medline  = hash['medline'] || '' # 98765432
  @doi      = hash['doi']
  @abstract = hash['abstract'] || '' 
  @url      = hash['url']
  @mesh     = hash['mesh'] || []
  @embl_gb_record_number = hash['embl_gb_record_number'] || nil
  @sequence_position = hash['sequence_position'] || nil
  @comments  = hash['comments']
  @affiliations = hash['affiliations'] || []
end

Instance Attribute Details

#abstractObject (readonly)

Abstract text in String.



77
78
79
# File 'lib/bio/reference.rb', line 77

def abstract
  @abstract
end

#affiliationsObject (readonly)

Affiliations in an Array.



86
87
88
# File 'lib/bio/reference.rb', line 86

def affiliations
  @affiliations
end

#authorsObject (readonly)

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



47
48
49
# File 'lib/bio/reference.rb', line 47

def authors
  @authors
end

#commentsObject (readonly)

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



95
96
97
# File 'lib/bio/reference.rb', line 95

def comments
  @comments
end

#doiObject (readonly)

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



74
75
76
# File 'lib/bio/reference.rb', line 74

def doi
  @doi
end

#embl_gb_record_numberObject (readonly)

Sequence number in EMBL/GenBank records



89
90
91
# File 'lib/bio/reference.rb', line 89

def embl_gb_record_number
  @embl_gb_record_number
end

#issueObject (readonly)

issue number (typically Fixnum)



59
60
61
# File 'lib/bio/reference.rb', line 59

def issue
  @issue
end

#journalObject (readonly)

String with journal name



53
54
55
# File 'lib/bio/reference.rb', line 53

def journal
  @journal
end

#medlineObject (readonly)

medline identifier (typically Fixnum)



71
72
73
# File 'lib/bio/reference.rb', line 71

def medline
  @medline
end

#meshObject (readonly)

MeSH terms in an Array.



83
84
85
# File 'lib/bio/reference.rb', line 83

def mesh
  @mesh
end

#pagesObject (readonly)

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



62
63
64
# File 'lib/bio/reference.rb', line 62

def pages
  @pages
end

#pubmedObject (readonly)

pubmed identifier (typically Fixnum)



68
69
70
# File 'lib/bio/reference.rb', line 68

def pubmed
  @pubmed
end

#sequence_positionObject (readonly)

Position in a sequence that this reference refers to



92
93
94
# File 'lib/bio/reference.rb', line 92

def sequence_position
  @sequence_position
end

#titleObject (readonly)

String with title of the study



50
51
52
# File 'lib/bio/reference.rb', line 50

def title
  @title
end

#urlObject (readonly)

An URL String.



80
81
82
# File 'lib/bio/reference.rb', line 80

def url
  @url
end

#volumeObject (readonly)

volume number (typically Fixnum)



56
57
58
# File 'lib/bio/reference.rb', line 56

def volume
  @volume
end

#yearObject (readonly)

year of publication (typically Fixnum)



65
66
67
# File 'lib/bio/reference.rb', line 65

def year
  @year
end

Instance Method Details

#bibitem(item = nil) ⇒ Object

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



292
293
294
295
296
297
298
299
300
301
# File 'lib/bio/reference.rb', line 292

def bibitem(item = nil)
  item  = "PMID:#{@pubmed}" unless item
  pages = @pages.sub('-', '--')
  return <<-"END".enum_for(:each_line).collect {|line| line.strip}.join("\n")
    \\bibitem{#{item}}
    #{@authors.join(', ')}
    #{@title},
    {\\em #{@journal}}, #{@volume}(#{@issue}):#{pages}, #{@year}.
  END
end

#bibtex(section = nil, label = nil, keywords = {}) ⇒ Object

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



342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
# File 'lib/bio/reference.rb', line 342

def bibtex(section = nil, label = nil, keywords = {})
  section = "article" unless section
  authors = authors_join(' and ', ' and ')
  thepages = pages.to_s.empty? ? nil : pages.sub(/\-/, '--')
  unless label then
    label = "PMID:#{pubmed}"
  end
  theurl = if !(url.to_s.empty?) then
             url
           elsif pmurl = pubmed_url and !(pmurl.to_s.empty?) then
             pmurl
           else
             nil
           end
  hash = {
    'author'  => authors.empty?    ? nil : authors,
    'title'   => title.to_s.empty? ? nil : title,
    'number'  => issue.to_s.empty? ? nil : issue,
    'pages'   => thepages,
    'url'     => theurl
  }
  keys = %w( author title journal year volume number pages url )
  keys.each do |k|
    hash[k] = self.__send__(k.intern) unless hash.has_key?(k)
  end
  hash.merge!(keywords) { |k, v1, v2| v2.nil? ? v1 : v2 }
  bib = [ "@#{section}{#{label}," ]
  keys.concat((hash.keys - keys).sort)
  keys.each do |kw|
    ref = hash[kw]
    bib.push "  #{kw.ljust(12)} = {#{ref}}," if ref
  end
  bib.push "}\n"
  return bib.join("\n")
end

#cellObject

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



536
537
538
539
# File 'lib/bio/reference.rb', line 536

def cell
  authors = authors_join(' and ')
  "#{authors} (#{@year}). #{@title} #{@journal} #{@volume}, #{pages}."
end

#currentObject

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



494
495
496
# File 'lib/bio/reference.rb', line 494

def current 
  self.genome_biol
end

#emblObject

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).


272
273
274
275
276
277
# File 'lib/bio/reference.rb', line 272

def embl
  r = self
  Bio::Sequence::Format::NucFormatter::Embl.new('').instance_eval {
    reference_format_embl(r)
  }
end

#endnoteObject

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



238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/bio/reference.rb', line 238

def endnote
  lines = []
  lines << "%0 Journal Article"
  @authors.each do |author|
    lines << "%A #{author}"
  end
  lines << "%D #{@year}" unless @year.to_s.empty?
  lines << "%T #{@title}" unless @title.empty?
  lines << "%J #{@journal}" unless @journal.empty?
  lines << "%V #{@volume}" unless @volume.to_s.empty?
  lines << "%N #{@issue}" unless @issue.to_s.empty?
  lines << "%P #{@pages}" unless @pages.empty?
  lines << "%M #{@pubmed}" unless @pubmed.to_s.empty?
  u = @url.empty? ? pubmed_url : @url
  lines << "%U #{u}" unless u.empty?
  lines << "%X #{@abstract}" unless @abstract.empty?
  @mesh.each do |term|
    lines << "%K #{term}"
  end
  lines << "%+ #{@affiliations.join(' ')}" unless @affiliations.empty?
  return lines.join("\n")
end

#format(style = nil, *options) ⇒ Object

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



186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
# File 'lib/bio/reference.rb', line 186

def format(style = nil, *options)
  case style
  when 'embl'
    return embl
  when 'endnote'
    return endnote
  when 'bibitem'
    return bibitem(*options)
  when 'bibtex'
    return bibtex(*options)
  when 'rd'
    return rd(*options)
  when /^nature$/i
    return nature(*options)
  when /^science$/i
    return science
  when /^genome\s*_*biol/i
    return genome_biol
  when /^genome\s*_*res/i
    return genome_res
  when /^nar$/i
    return nar
  when /^current/i
    return current
  when /^trends/i
    return trends
  when /^cell$/i
    return cell
  else
    return general
  end
end

#generalObject

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



386
387
388
389
# File 'lib/bio/reference.rb', line 386

def general
  authors = @authors.join(', ')
  "#{authors} (#{@year}). \"#{@title}\" #{@journal} #{@volume}:#{@pages}."
end

#genome_biolObject

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



479
480
481
482
483
# File 'lib/bio/reference.rb', line 479

def genome_biol
  authors = @authors.collect {|name| strip_dots(name)}.join(', ')
  journal = strip_dots(@journal)
  "#{authors}: #{@title} #{journal} #{@year}, #{@volume}:#{@pages}."
end

#genome_resObject

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



508
509
510
511
# File 'lib/bio/reference.rb', line 508

def genome_res
  authors = authors_join(' and ')
  "#{authors} #{@year}.\n  #{@title} #{@journal} #{@volume}: #{@pages}."
end

#narObject

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



522
523
524
525
# File 'lib/bio/reference.rb', line 522

def nar
  authors = authors_join(' and ')
  "#{authors} (#{@year}) #{@title} #{@journal}, #{@volume}, #{@pages}."
end

#nature(short = false) ⇒ Object

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



435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
# File 'lib/bio/reference.rb', line 435

def nature(short = false)
  if short
    if @authors.size > 4
      authors = "#{@authors[0]} et al."
    elsif @authors.size == 1
      authors = "#{@authors[0]}"
    else
      authors = authors_join(' & ')
    end
    "#{authors} #{@journal} #{@volume}, #{@pages} (#{@year})."
  else
    authors = authors_join(' & ')
    "#{authors} #{@title} #{@journal} #{@volume}, #{@pages} (#{@year})."
  end
end

#pubmed_urlObject

Returns a valid URL for pubmed records

Returns

String



564
565
566
567
568
569
570
571
# File 'lib/bio/reference.rb', line 564

def pubmed_url
  unless @pubmed.to_s.empty?
    cgi = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi"
    opts = "cmd=Retrieve&db=PubMed&dopt=Citation&list_uids"
    return "#{cgi}?#{opts}=#{@pubmed}"
  end
  ''
end

#rd(str = nil) ⇒ Object

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



409
410
411
412
413
414
415
416
417
# File 'lib/bio/reference.rb', line 409

def rd(str = nil)
  @abstract ||= str
  lines = []
  lines << "== " + @title
  lines << "* " + authors_join(' and ')
  lines << "* #{@journal} #{@year} #{@volume}:#{@pages} [PMID:#{@pubmed}]"
  lines << @abstract
  return lines.join("\n\n")
end

#scienceObject

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



460
461
462
463
464
465
466
467
468
# File 'lib/bio/reference.rb', line 460

def science
  if @authors.size > 4
    authors = rev_name(@authors[0]) + " et al."
  else
    authors = @authors.collect {|name| rev_name(name)}.join(', ')
  end
  page_from, = @pages.split('-')
  "#{authors}, #{@journal} #{@volume} #{page_from} (#{@year})."
end

Returns reference formatted in the TRENDS style.

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

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

Returns

String



550
551
552
553
554
555
556
557
558
559
# File 'lib/bio/reference.rb', line 550

def trends
  if @authors.size > 2
    authors = "#{@authors[0]} et al."
  elsif @authors.size == 1
    authors = "#{@authors[0]}"
  else
    authors = authors_join(' and ')
  end
  "#{authors} (#{@year}) #{@title} #{@journal} #{@volume}, #{@pages}"
end