Class: ExperimentList

Inherits:
Object
  • Object
show all
Defined in:
lib/experiment.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(expfile) ⇒ ExperimentList

Returns a new instance of ExperimentList.



43
44
45
46
47
# File 'lib/experiment.rb', line 43

def initialize(expfile)
  @expfile = expfile
  File.open(expfile, "w"){|f| f.puts "---"} unless File.exist?(expfile)
  @list = YAML.load_file(expfile) || Array.new
end

Instance Attribute Details

#dateObject

Persistent storage in .yml file of the experiment status



42
43
44
# File 'lib/experiment.rb', line 42

def date
  @date
end

#nameObject

Persistent storage in .yml file of the experiment status



42
43
44
# File 'lib/experiment.rb', line 42

def name
  @name
end

Instance Method Details

#add(opts) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/experiment.rb', line 48

def add(opts)
  name_available = self.name_available?(opts[:name]) 
  if name_available
    newexp = {:name => opts[:name], :date => Time.now}
    #newexp.merge!({:fake_phy => opts[:fake_phy]}) unless opts[:fake_phy].nil?
    [:fake_phy, :initial_phy, :parsi_size, :bunch_size].each do |label|
      newexp.merge!({label => opts[label]}) unless opts[label].nil?
    end
    @list.push newexp
    self.save
    true
  end
end

#last_iteration(name) ⇒ Object



80
81
82
83
84
# File 'lib/experiment.rb', line 80

def last_iteration(name)
  # TODO is this working?
  e = self.find_by_name(name) 
  e.last_bunch_dir unless e.nil?
end

#name_available?(name) ⇒ Boolean

Returns:

  • (Boolean)


114
115
116
117
118
119
120
121
122
123
124
# File 'lib/experiment.rb', line 114

def name_available?(name)
  existing_items = find_by_name(name)
  unless existing_items.nil?
     if existing_items.size >= 1
       puts "A expremient with this name exists already"
       p existing_items
       return false
     end
  end
  return true
end

#remove(name) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/experiment.rb', line 103

def remove(name)
  item = find_by_name(name)
  unless item.nil?
    @list.delete(item) 
    self.save
  end
end

#saveObject



110
111
112
113
# File 'lib/experiment.rb', line 110

def save
  File.open(@expfile, "w"){|f| f.write @list.to_yaml}
  puts "Experiment list updated"
end

#showObject



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/experiment.rb', line 85

def show
  puts "Current Experiments"
  puts "ID\tname"
  @list.each_with_index  do |item, i|
    fake_name = item[:fake_phy].nil? ? "-" : File.basename(item[:fake_phy]) 
    initial_name = item[:initial_phy].nil? ? "-" : File.basename(item[:initial_phy]) 
    parsi_size = item[:parsi_size] || "?"
    bunch_size = item[:bunch_size] || "?"
    str = "#{i}\t#{item[:name]}"
    str += " \tinit: #{initial_name}" unless initial_name.empty?
    str += " \tfake: #{fake_name}" unless fake_name.empty?
    str += " Best LH: #{item["bestLH"]} (parsi #{parsi_size}, bunch end size #{bunch_size})"
    puts str
    item.keys.select{|k| k =~ /^u\d+$/}.sort.each do |update_key|
      puts "  #{update_key}: #{item[update_key]}"
    end
  end
end

#update(name, step, state) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/experiment.rb', line 65

def update(name, step, state)
  e = self.find_by_name(name) 
  unless e.nil?
    @list.each do |item|
      if item[:name] == name
        if item[step].nil?
          item[step] = state
        else
          item[step] += " " + state
        end
      end
    end
  end
  self.save
end

#value(name, label) ⇒ Object



61
62
63
64
# File 'lib/experiment.rb', line 61

def value(name, label)
  e = self.find_by_name(name) 
  e[label] || "?"
end