# File lib/camping-abingo.rb, line 840
          def self.start_experiment!(test_name, alternatives_array, conversion_name = nil)
                ABingoCampingPlugin.logger.debug "Experiment> start_experiment(test_name=#{test_name}, alternatives_array=#{alternatives_array.inspect}, conversion_name=#{conversion_name})"

                conversion_name ||= test_name
                conversion_name.gsub!(" ", "_")
                cloned_alternatives_array = alternatives_array.clone
                ActiveRecord::Base.transaction do
                  experiment = ABingoCampingPlugin::Models::Experiment.find_or_create_by_test_name(test_name)
                  experiment.alternatives.destroy_all  #Blows away alternatives for pre-existing experiments.
                  while (cloned_alternatives_array.size > 0)
                        alt = cloned_alternatives_array[0]
                        
                        if alt.is_a?(TrueClass) || alt.is_a?(FalseClass) 
                                alt_to_store = alt.to_s
                        else
                                alt_to_store = alt
                        end
                        
                        weight = cloned_alternatives_array.size - (cloned_alternatives_array - [alt]).size
                        experiment.alternatives.build(:content => alt_to_store, :weight => weight,
                          :lookup => ABingoCampingPlugin::Models::Alternative.calculate_lookup(test_name, alt_to_store))
                        cloned_alternatives_array -= [alt]
                  end
                  experiment.status = "Live"
                  experiment.save(false)  #Calling the validation here causes problems b/c of transaction.
                  Abingo.cache.write("Abingo::Experiment::exists(#{test_name})".gsub(" ", "_"), 1)

                  #This might have issues in very, very high concurrency environments...

                  tests_listening_to_conversion = Abingo.cache.read("Abingo::tests_listening_to_conversion#{conversion_name}") || []
                  tests_listening_to_conversion << test_name unless tests_listening_to_conversion.include? test_name
                  Abingo.cache.write("Abingo::tests_listening_to_conversion#{conversion_name}", tests_listening_to_conversion)
                  experiment
                end
          end