lib/openstudio-standards/btap/measures.rb in openstudio-standards-0.1.9 vs lib/openstudio-standards/btap/measures.rb in openstudio-standards-0.1.10
- old
+ new
@@ -20,26 +20,121 @@
# To change this template, choose Tools | Templates
# and open the template in the editor.
require "#{File.dirname(__FILE__)}/btap"
+class OSMArg
+ ARGUMENT_TYPES = [
+ "BOOL",
+ "STRING",
+ "INTEGER",
+ "FLOAT",
+ "STRINGCHOICE",
+ "WSCHOICE"
+ ]
+
+
+
+ attr_accessor :runner,
+ :variable_name,
+ :type,
+ :required,
+ :model_dependant,
+ :display_name,
+ :default_value,
+ :min_value,
+ :max_value,
+ :string_choice_array,
+ :os_object_type
+
+ def self.bool( variable_name,display_name,required,default_value )
+ raise "#{default_value} defaut value is not a bool." unless default_value.is_a?(Bool)
+ default_value.respond_to?(:to_s)
+ arg = OSMArg.new( "BOOL", variable_name, display_name, required)
+ arg.default_value = default_value
+ return arg
+ end
+
+ def self.string( variable_name,display_name,required,default_value )
+ raise "#{default_value} defaut value is not a string." unless default_value.respond_to?(:to_s)
+ arg = OSMArg.new( "STRING", variable_name, display_name, required)
+ arg.default_value = default_value
+ return arg
+ end
+
+ def self.integer( variable_name,display_name,required,default_value,min_value,max_value )
+ raise "#{default_value} defaut value is not a integer." unless default_value.respond_to?(:to_i)
+ arg = OSMArg.new( "INTEGER", variable_name, display_name, required)
+ arg.default_value = default_value
+ arg.min_value = min_value
+ arg.max_value = max_value
+ return arg
+ end
+
+ def self.float( variable_name, display_name, required,default_value,min_value, max_value )
+ raise "#{default_value} defaut value is not a float." unless default_value.respond_to?(:to_f)
+ arg = OSMArg.new( "INTEGER", variable_name, display_name, required)
+ arg.default_value = default_value
+ arg.min_value = min_value
+ arg.max_value = max_value
+ return arg
+ end
+
+ def self.choice(variable_name,display_name,required,default_value,string_choice_array)
+ raise "#{default_value} defaut value is not an array." unless default_value.is_a?(Array)
+ arg = OSMArg.new( "STRINGCHOICE", variable_name, display_name, required)
+ arg.default_value = default_value
+ arg.string_choice_array = string_choice_array
+ return arg
+ end
+
+ def self.wschoice( variable_name, display_name, required, default_value, os_object_type)
+ arg = OSMArg.new( "WSCHOICE", variable_name, display_name, required )
+ arg.default_value = default_value
+ arg.os_object_type = os_object_type
+ return arg
+ end
+
+ def initialize( type, variable_name, display_name, required )
+ self.type = type
+ self.variable_name = variable_name
+ self.display_name = display_name
+ self.required = required
+ self.model_dependant = false
+ if self.type == "WSCHOICE"
+ self.model_dependant = true
+ else
+ self.model_dependant = false
+ end
+ return self
+ end
+end
+
+
+
module BTAP
module Measures
module OSMeasures
+
+
+
+
class BTAPModelUserScript < OpenStudio::Ruleset::ModelUserScript
#if and E+ measure replace OpenStudio::Ruleset::ModelUserScript with OpenStudio::Ruleset::WorkspaceUserScript
#Array containing information of all inputs required by measure.
attr_accessor :argument_array_of_arrays
+ attr_accessor :argument_array
attr_accessor :file
#Name of measure
#attr_accessor :name
#if and E+ measure replace OpenStudio::Ruleset::ModelUserScript with OpenStudio::Ruleset::WorkspaceUserScript
def name
"BTAPModelUserScript"
+ OSMArgument.new
end
#this method will output the ruby macro to perform the change.
def generate_ruby_macro(model,runner)
if @file == nil or @file == ""
@@ -50,65 +145,10 @@
BTAP::runner_register("MACRO", "argument_values = #{@arg_table}", runner)
BTAP::runner_register("MACRO", "#{self.class.name}.new.set_user_arguments_and_apply(model,argument_values,runner)",runner)
BTAP::runner_register("MACRO", "\##{self.class.name} Measure End", runner)
end
- def arguments(model,argument_array_of_arrays)
- #IF and E+ measure replace model with workspace as the argument
-
- #Create an argument vector
- args = OpenStudio::Ruleset::OSArgumentVector.new
-
- @argument_array_of_arrays = argument_array_of_arrays
-
- #***boilerplate code starts. Do not edit...
- # this converts the 2D array to a array hash for better readability and makes
- # column data accessible by name.
- @argument_array_of_hashes = []
- @argument_array_of_arrays[1..-1].each do |row| # [1..-1] skips the first row
- hsh = {}; @argument_array_of_arrays[0].each_with_index{ |header, idx| hsh[header] = row[idx] }
- @argument_array_of_hashes << hsh
- end
-
- #iterate through array of hashes and make arguments based on type and set
- # max and min values where applicable.
- @argument_array_of_hashes.each do |row|
- arg = nil
- case row["type"]
- when "BOOL"
- arg = OpenStudio::Ruleset::OSArgument::makeBoolArgument(row["variable_name"],row["required"],row["model_dependant"])
- when "STRING"
- arg = OpenStudio::Ruleset::OSArgument::makeStringArgument(row["variable_name"],row["required"],row["model_dependant"])
- when "INTEGER"
- arg = OpenStudio::Ruleset::OSArgument::makeIntegerArgument(row["variable_name"],row["required"],row["model_dependant"])
- arg.setMaxValue( row["max_value"].to_i ) unless row["min_value"].nil?
- arg.setMaxValue( row["max_value"].to_i ) unless row["max_value"].nil?
- when "FLOAT"
- arg = OpenStudio::Ruleset::OSArgument::makeDoubleArgument(row["variable_name"],row["required"],row["model_dependant"])
- arg.setMaxValue( row["max_value"].to_f ) unless row["min_value"].nil?
- arg.setMaxValue( row["max_value"].to_f ) unless row["max_value"].nil?
- when "STRINGCHOICE"
- # #add string choices one by one.
- chs = OpenStudio::StringVector.new
- row["string_choice_array"].each {|choice| chs << choice}
- arg = OpenStudio::Ruleset::OSArgument::makeChoiceArgument(row["variable_name"], chs,row["required"],row["model_dependant"])
- when "PATH"
- arg = OpenStudio::Ruleset::OSArgument::makePathArgument("alternativeModelPath",true,"osm")
- when "WSCHOICE"
- arg = OpenStudio::Ruleset::makeChoiceArgumentOfWorkspaceObjects( row["variable_name"], row["os_object_type"].to_IddObjectType , model, row["required"])
- end
- # #common argument aspects.
- unless arg.nil?
- arg.setDisplayName(row["display_name"])
- arg.setDefaultValue(row["default_value"]) unless row["default_value"].nil?
- args << arg
- end
- end
- return args
- end
-
-
def set_user_arguments_and_apply(model,argument_values,runner)
message = "Settting Arguments"
runner.nil? ? puts(message) : runner.registerInfo(message)
#create argument map
user_arguments = OpenStudio::Ruleset::OSArgumentMap.new
@@ -156,65 +196,61 @@
#will run the childs method measure_code
result = self.measure_code(model,runner)
generate_ruby_macro(model,runner)
return result
end # end method run
-
- def argument_setter(args)
+
+ def argument_setter(model,args)
#***boilerplate code starts. Do not edit...
- # this converts the 2D array to a array hash for better readability and makes
- # column data accessible by name.
- @argument_array_of_hashes = []
- @argument_array_of_arrays[1..-1].each do |row| # [1..-1] skips the first row
- hsh = {}; @argument_array_of_arrays[0].each_with_index{ |header, idx| hsh[header] = row[idx] }
- @argument_array_of_hashes << hsh
- end
+
#iterate through array of hashes and make arguments based on type and set
# max and min values where applicable.
- @argument_array_of_hashes.each do |row|
+ @argument_array.each do |row|
+ #strip out first char that contains the @ symbol
+ row.variable_name[0] = ''
arg = nil
- case row["type"]
+ case row.type
when "BOOL"
- arg = OpenStudio::Ruleset::OSArgument::makeBoolArgument(row["variable_name"],row["required"],row["model_dependant"])
+ arg = OpenStudio::Ruleset::OSArgument::makeBoolArgument(row.variable_name,row.required,row.model_dependant)
when "STRING"
- arg = OpenStudio::Ruleset::OSArgument::makeStringArgument(row["variable_name"],row["required"],row["model_dependant"])
+ arg = OpenStudio::Ruleset::OSArgument::makeStringArgument(row.variable_name,row.required,row.model_dependant)
when "INTEGER"
- arg = OpenStudio::Ruleset::OSArgument::makeIntegerArgument(row["variable_name"],row["required"],row["model_dependant"])
- arg.setMaxValue( row["max_value"].to_i ) unless row["min_value"].nil?
- arg.setMaxValue( row["max_value"].to_i ) unless row["max_value"].nil?
+ arg = OpenStudio::Ruleset::OSArgument::makeIntegerArgument(row.variable_name,row.required,row.model_dependant)
+ arg.setMaxValue( row.max_value.to_i ) unless row.min_value.nil?
+ arg.setMaxValue( row.max_value.to_i ) unless row.max_value.nil?
when "FLOAT"
- arg = OpenStudio::Ruleset::OSArgument::makeDoubleArgument(row["variable_name"],row["required"],row["model_dependant"])
- arg.setMaxValue( row["max_value"].to_f ) unless row["min_value"].nil?
- arg.setMaxValue( row["max_value"].to_f ) unless row["max_value"].nil?
+ arg = OpenStudio::Ruleset::OSArgument::makeDoubleArgument(row.variable_name,row.required,row.model_dependant)
+ arg.setMaxValue( row.max_value.to_f ) unless row.min_value.nil?
+ arg.setMaxValue( row.max_value.to_f ) unless row.max_value.nil?
when "STRINGCHOICE"
# #add string choices one by one.
chs = OpenStudio::StringVector.new
- row["string_choice_array"].each {|choice| chs << choice}
- arg = OpenStudio::Ruleset::OSArgument::makeChoiceArgument(row["variable_name"], chs,row["required"],row["model_dependant"])
+ row.string_choice_array.each {|choice| chs << choice}
+ arg = OpenStudio::Ruleset::OSArgument::makeChoiceArgument(row.variable_name, chs,row.required,row.model_dependant)
when "PATH"
arg = OpenStudio::Ruleset::OSArgument::makePathArgument("alternativeModelPath",true,"osm")
when "WSCHOICE"
- arg = OpenStudio::Ruleset::makeChoiceArgumentOfWorkspaceObjects( row["variable_name"], row["os_object_type"].to_IddObjectType , model, row["required"])
+ arg = OpenStudio::Ruleset::makeChoiceArgumentOfWorkspaceObjects( row.variable_name, row.os_object_type.to_IddObjectType , model, row.required)
end
# #common argument aspects.
unless arg.nil?
- arg.setDisplayName(row["display_name"])
- arg.setDefaultValue(row["default_value"]) unless row["default_value"].nil?
+ arg.setDisplayName(row.display_name)
+ arg.setDefaultValue(row.default_value) unless row.default_value.nil?
args << arg
end
end
return args
end
def argument_getter(model, runner,user_arguments)
@arg_table = []
- unless @argument_array_of_hashes == nil
- @argument_array_of_hashes.each do |row|
- name = row["variable_name"]
+ unless @argument_array == nil
+ @argument_array.each do |row|
+ name = row.variable_name
- case row["type"]
+ case row.type
when "BOOL"
value = runner.getBoolArgumentValue(name, user_arguments)
instance_variable_set("@#{name}",value)
@arg_table << [name,value]
when "STRING"
@@ -223,21 +259,21 @@
@arg_table << [name,value]
when "INTEGER"
value = runner.getIntegerArgumentValue(name, user_arguments)
instance_variable_set("@#{name}",value)
@arg_table << [name,value]
- if ( not row["min_value"].nil? and instance_variable_get("@#{name}") < row["min_value"] ) or ( not row["max_value"].nil? and instance_variable_get("@#{name}") > row["max_value"] )
- runner.registerError("#{row["display_name"]} must be greater than or equal to #{row["min_value"]} and less than or equal to #{row["max_value"]}. You entered #{instance_variable_get("@#{name}")}.")
+ if ( not row.min_value.nil? and instance_variable_get("@#{name}") < row.min_value ) or ( not row.max_value.nil? and instance_variable_get("@#{name}") > row.max_value )
+ runner.registerError("#{row.display_name} must be greater than or equal to #{row.min_value} and less than or equal to #{row.max_value}. You entered #{instance_variable_get("@#{name}")}.")
return false
end
when "FLOAT"
value = runner.getDoubleArgumentValue(name, user_arguments)
instance_variable_set("@#{name}",value)
@arg_table << [name,value]
- if ( not row["min_value"].nil? and instance_variable_get("@#{name}") < row["min_value"] ) or ( not row["max_value"].nil? and instance_variable_get("@#{name}") > row["max_value"] )
- runner.registerError("#{row["display_name"]} must be greater than or equal to #{row["min_value"]} and less than or equal to #{row["max_value"]}. You entered #{instance_variable_get("@#{name}")}.")
+ if ( not row.min_value.nil? and instance_variable_get("@#{name}") < row.min_value ) or ( not row.max_value.nil? and instance_variable_get("@#{name}") > row.max_value )
+ runner.registerError("#{row.display_name} must be greater than or equal to #{row.min_value} and less than or equal to #{row.max_value}. You entered #{instance_variable_get("@#{name}")}.")
return false
end
when "STRINGCHOICE"
@arg_table << [name,runner.getBoolArgumentValue(name, user_arguments)]
instance_variable_set("@#{name}", runner.getStringArgumentValue(name, user_arguments) )
@@ -252,32 +288,33 @@
end #end do
end
return @arg_table
end
-
end
#Measure Template simplified.
class TemplateModelMeasure < BTAPModelUserScript
def name
"BTAPTempModelMeasure"
end
def arguments(model)
- #list of arguments as they will appear in the interface. They are available in the run command as @variable_name.
- @argument_array_of_arrays = [
- [ "variable_name", "type", "required", "model_dependant","display_name", "default_value", "min_value", "max_value", "string_choice_array", "os_object_type" ],
- [ "boolean_argument_name", "BOOL", true, false, "boolean interface name", false, nil, nil, nil, nil ],
- [ "string_argument_name", "STRING", true, false, "string interface name", "default", nil, nil, nil, nil ],
- [ "integer_argument_name", "INTEGER", true, false, "integer interface name(units)", 0, 0, 100, nil, nil ],
- [ "float_argument_name", "FLOAT", true, false, "float interface name(units)", 0.0, 0.0, 100.0, nil, nil ],
- [ "choice_argument_name", "STRINGCHOICE", true, false, "choice interface name", "choice1", nil, nil, ["choice1","choice2"], nil ],
- [ "ws_choice_argument_name","WSCHOICE", true, true, "wschoice interface name", nil, nil, nil, nil, "OS_ThermalZone" ]
- ]
- args = super(model,@argument_array_of_arrays)
+ #bool
+ @argument_array << OSMArgument.bool(variable_name,display_name,required,default_value)
+ #string
+ @argument_array << OSMArgument.string(variable_name,display_name,required,default_value)
+ #integer
+ @argument_array << OSMArgument.integer(variable_name,display_name,required,default_value,min_value,max_value)
+ #float
+ @argument_array << OSMArgument.float(variable_name,display_name,required,default_value,min_value,max_value)
+ #Choice
+ @argument_array << OSMArgument.choice(variable_name,display_name,required,default_value,string_choice_array)
+ #Workspace choice (using zones as an example)
+ @argument_array << OSMArgument.wschoice(variable_name,display_name,required,default_value,string_choice_array)
+ args = super(model,@argument_array)
return args
end
def run(model, runner, user_arguments)
#IF and E+ measure replace model with workspace as the argument
@@ -402,12 +439,10 @@
def set_user_arguments_and_apply(model,argument_values,runner)
self.run(model, runner, super(model,argument_values,runner) )
end
end
end
- module EPMeasures
-
- end
+
class CSV_Measures
def initialize(
csv_file,
script_root_folder_path
)