Class: Ms::Ident::Pepxml

Inherits:
Object
  • Object
show all
Defined in:
lib/ms/ident/pepxml.rb,
lib/ms/ident/pepxml/parameters.rb,
lib/ms/ident/pepxml/search_hit.rb,
lib/ms/ident/pepxml/modifications.rb,
lib/ms/ident/pepxml/sample_enzyme.rb,
lib/ms/ident/pepxml/search_result.rb,
lib/ms/ident/pepxml/search_summary.rb,
lib/ms/ident/pepxml/spectrum_query.rb,
lib/ms/ident/pepxml/search_database.rb,
lib/ms/ident/pepxml/msms_run_summary.rb,
lib/ms/ident/pepxml/msms_pipeline_analysis.rb,
lib/ms/ident/pepxml/search_hit/modification_info.rb

Defined Under Namespace

Classes: AminoacidModification, EnzymaticSearchConstraint, MsmsPipelineAnalysis, MsmsRunSummary, Parameters, SampleEnzyme, SearchDatabase, SearchHit, SearchResult, SearchSummary, SpectrumQuery, TerminalModification

Constant Summary collapse

XML_STYLESHEET_LOCATION =
'/tools/bin/TPP/tpp/schema/pepXML_std.xsl'
DEFAULT_PEPXML_VERSION =
MsmsPipelineAnalysis::PEPXML_VERSION
XML_ENCODING =
'UTF-8'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ Pepxml

yields a new Msms_Pipeline_Analysis object if given a block



58
59
60
# File 'lib/ms/ident/pepxml.rb', line 58

def initialize(&block)
  block.call(@msms_pipeline_analysis=MsmsPipelineAnalysis.new) if block
end

Instance Attribute Details

#msms_pipeline_analysisObject

Returns the value of attribute msms_pipeline_analysis.



25
26
27
# File 'lib/ms/ident/pepxml.rb', line 25

def msms_pipeline_analysis
  @msms_pipeline_analysis
end

Class Method Details

.simple_search_hits(file) ⇒ Object

returns an array of Ms::Ident::Pepxml::SearchHit::Simple structs



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/ms/ident/pepxml.rb', line 28

def self.simple_search_hits(file)
  hit_values = File.open(file) do |io|
    doc = Nokogiri::XML.parse(io, nil, nil, Nokogiri::XML::ParseOptions::DEFAULT_XML | Nokogiri::XML::ParseOptions::NOBLANKS | Nokogiri::XML::ParseOptions::STRICT)
    # we can work with namespaces, or just remove them ...
    doc.remove_namespaces!
    root = doc.root
    search_hits = root.xpath('//search_hit')
    search_hits.each_with_index.map do |search_hit,i| 
      aaseq = search_hit['peptide']
      charge = search_hit.parent.parent['assumed_charge'].to_i
      search_score_nodes = search_hit.children.select {|node| node.name == 'search_score' }
      search_scores = {}
      search_score_nodes.each do |node|
        search_scores[node['name'].to_sym] = node['value'].to_f
      end
      Ms::Ident::Pepxml::SearchHit::Simple.new("hit_#{i}", Ms::Ident::Search.new(file.chomp(File.extname(file))), aaseq, charge, search_scores)
    end
  end
end

Instance Method Details

#add_stylesheet(doc, location) ⇒ Object

takes an xml document object and sets it with the xml stylesheet



63
64
65
66
67
# File 'lib/ms/ident/pepxml.rb', line 63

def add_stylesheet(doc, location)
  xml_stylesheet = Nokogiri::XML::ProcessingInstruction.new(doc, "xml-stylesheet", %Q{type="text/xsl" href="#{location}"})
  doc.root.add_previous_sibling  xml_stylesheet
  doc
end

#pepxml_versionObject



48
49
50
# File 'lib/ms/ident/pepxml.rb', line 48

def pepxml_version
  msms_pipeline_analysis.pepxml_version
end

#spectrum_queriesObject

returns an array of spectrum queries



53
54
55
# File 'lib/ms/ident/pepxml.rb', line 53

def spectrum_queries
  msms_pipeline_analysis.msms_run_summary.spectrum_queries
end

#to_xml(opts = {}) ⇒ Object

if no options are given, an xml string is returned. If either :outdir or :outfile is given, the xml is written to file and the output filename is returned. A single string argument will be interpreted as :outfile if it ends in ‘.xml’ and the :outdir otherwise. In this case, update_summary_xml is still true

options:

arg                    default
:outdir             => nil   write to disk using this outdir with summary_xml basename
:outfile            => nil   write to this filename (overrides outdir)
:update_summary_xml => true  update summary_xml attribute to point to the output file true/false

set outdir to File.dirname(pepxml_obj.msms_pipeline_analysis.msms_run_summary.base_name) to write to the same directory as the input search file.



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/ms/ident/pepxml.rb', line 84

def to_xml(opts={})
  opts ||= {}
  if opts.is_a?(String) 
    opts = ( opts.match(/\.xml$/) ?  {:outfile => opts} : {:outdir => opts } )
  end
  opt = {:update_summary_xml => true, :outdir => nil, :outfile => nil}.merge(opts)

  if opt[:outfile]
    outfile = opt[:outfile]
  elsif opt[:outdir]
    outfile = File.join(opt[:outdir], msms_pipeline_analysis.summary_xml.split(/[\/\\]/).last)
  end
  self.msms_pipeline_analysis.summary_xml = File.expand_path(outfile) if (opt[:update_summary_xml] && outfile)

  builder = Nokogiri::XML::Builder.new(:encoding => XML_ENCODING)
  msms_pipeline_analysis.to_xml(builder)
  add_stylesheet(builder.doc, Ms::Ident::Pepxml::XML_STYLESHEET_LOCATION)
  string = builder.doc.to_xml

  if outfile 
    File.open(outfile,'w') {|out| out.print(string) }
    outfile
  else
    string
  end
end