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