class BaseAnalyzer

Constants

K1TABLE

Public Class Methods

new(output = $stdout) click to toggle source
# File lib/topas-tools/Analyzers.rb, line 5
def initialize output = $stdout
  @out = output
  @count = 0
  @rtable = []
end

Public Instance Methods

analyze(inp) click to toggle source
# File lib/topas-tools/Analyzers.rb, line 11
def analyze inp
  restrains = inp.restrains
  restrains.each do |r|
    @rtable << {k1:inp.k1, r_wp:inp.r_wp, name:r[:name],
                delta:(r[:value] - r[:restrain])}
  end
  @name = inp.base_name
  errors = restrains.map{|r| r[:value] - r[:restrain]}
  mdev = max_dev(errors)
  mult = K1TABLE[restrains.size - 5]
  outlier = (mdev > mult ? "x" : "o")
  @out.print "%d\t%0.3f\t%0.3f\t%0.3f\t#{outlier}\n" % [inp.k1, inp.r_wp, mdev, mult]
  @count = @count + 1
  true
end
report() click to toggle source
# File lib/topas-tools/Analyzers.rb, line 28
def report 
  @out.print "Refinement  was finished in #{@count} steps.\n"
  file = File.open("#{@name}_rtable.dat", 'w')
  file.write("K1\tRwp\tBond\tDelta\tError\n")
  @rtable.each do |rt|
    file.write("#{rt[:k1]}\t#{rt[:r_wp]}\t#{rt[:name]}\t#{rt[:delta]}\t0\n")
  end
  file.close
  true
end

Private Instance Methods

max_dev(x) click to toggle source
# File lib/topas-tools/Analyzers.rb, line 49
def max_dev x
  q1 = quantile7 0.25, x
  q3 = quantile7 0.75, x
  iqr = q3 - q1
  [(q1 - x.min)/iqr, (x.max-q3)/iqr].max
end
quantile7(p, x) click to toggle source
# File lib/topas-tools/Analyzers.rb, line 41
def quantile7 p, x
  n = x.size
  sorted = x.sort
  j = (n*p - p +1).floor
  g = n*p - p + 1 - j
  (1 - g) * sorted[j - 1] + g * sorted[j]
end