Class: URBANopt::Scenario::ScenarioCSV
- Inherits:
-
ScenarioBase
- Object
- ScenarioBase
- URBANopt::Scenario::ScenarioCSV
- Defined in:
- lib/urbanopt/scenario/scenario_csv.rb
Instance Attribute Summary collapse
-
#csv_file ⇒ Object
readonly
Path to CSV file.
-
#mapper_files_dir ⇒ Object
readonly
Directory containing all mapper class files.
-
#num_header_rows ⇒ Object
readonly
Number of header rows to skip in CSV file.
Attributes inherited from ScenarioBase
#feature_file, #name, #root_dir, #run_dir
Instance Method Summary collapse
-
#initialize(name, root_dir, run_dir, feature_file, mapper_files_dir, csv_file, num_header_rows) ⇒ ScenarioCSV
constructor
ScenarioCSV is a ScenarioBase which assigns a Simulation Mapper to each Feature in a FeatureFile using a simple CSV format.
-
#load_mapper_files ⇒ Object
Require all simulation mappers in mapper_files_dir.
-
#simulation_dirs ⇒ Object
Gets all the simulation directories.
Methods inherited from ScenarioBase
Constructor Details
#initialize(name, root_dir, run_dir, feature_file, mapper_files_dir, csv_file, num_header_rows) ⇒ ScenarioCSV
ScenarioCSV is a ScenarioBase which assigns a Simulation Mapper to each Feature in a FeatureFile using a simple CSV format. The CSV file has three columns 1) feature_id, 2) feature_name, and 3) mapper_class_name. There is one row for each Feature.
- parameters:
-
name- String - Human readable scenario name. -
root_dir- String - Root directory for the scenario, contains Gemfile describing dependencies. -
run_dir- String - Directory for simulation of this scenario, deleting run directory clears the scenario. -
feature_file- URBANopt::Core::FeatureFile - FeatureFile containing features to simulate. -
mapper_files_dir- String - Directory containing all mapper class files containing MapperBase definitions. -
csv_file- String - Path to CSV file assigning a MapperBase class to each feature in feature_file. -
num_header_rows- String - Number of header rows to skip in CSV file.
27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 27 def initialize(name, root_dir, run_dir, feature_file, mapper_files_dir, csv_file, num_header_rows) super(name, root_dir, run_dir, feature_file) @root_dir = root_dir @mapper_files_dir = mapper_files_dir @csv_file = csv_file @num_header_rows = num_header_rows @@logger ||= URBANopt::Scenario.logger load_mapper_files end |
Instance Attribute Details
#csv_file ⇒ Object (readonly)
Path to CSV file
40 41 42 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 40 def csv_file @csv_file end |
#mapper_files_dir ⇒ Object (readonly)
Directory containing all mapper class files
46 47 48 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 46 def mapper_files_dir @mapper_files_dir end |
#num_header_rows ⇒ Object (readonly)
Number of header rows to skip in CSV file
43 44 45 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 43 def num_header_rows @num_header_rows end |
Instance Method Details
#load_mapper_files ⇒ Object
Require all simulation mappers in mapper_files_dir
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 49 def load_mapper_files # loads default values from extension gem @options = OpenStudio::Extension::RunnerConfig.default_config(@root_dir) # check if runner.conf file exists if File.exist?(File.join(@root_dir, OpenStudio::Extension::RunnerConfig::FILENAME)) runner_config = OpenStudio::Extension::RunnerConfig.new(@root_dir) # use the default values overridden with runner.conf values where not # nil nor empty strings @options = @options.merge(runner_config..reject { |k, v| v.nil? || (v.is_a?(String) && v === '') }) end # bundle path is assigned from the runner.conf if it exists or is assigned in the root_dir # if bundle install path is not provided or is empty, it will be placed in root_dir/.bundle/install, otherwise use the provided path if !@options.key?(:bundle_install_path) || @options[:bundle_install_path] === '' @options[:bundle_install_path] = File.join(@root_dir, '.bundle/install/') else @options[:bundle_install_path] = Pathname.new(@options[:bundle_install_path]).cleanpath.to_s end bundle_path = @options[:bundle_install_path] puts "Bundle final path is set to: #{bundle_path}" # checks if bundle path doesn't exist or is empty if !Dir.exist?(bundle_path) || Dir.empty?(bundle_path) Bundler.with_unbundled_env do OpenStudio::Extension::Runner.new(@root_dir, [], @options) end end # find all lib dirs in the bundle path and add them to the path lib_dirs = Dir.glob(File.join(bundle_path, '/**/lib')) lib_dirs.each do |ld| # for now only add openstudio and urbanopt gems to the load path # and only those with 'urbanopt' or 'openstudio' in the before-last path position tmp_path_arr = Pathname(ld).each_filename.to_a if tmp_path_arr[-2].include?('urbanopt') || tmp_path_arr[-2].include?('openstudio') # puts "adding DIR to load path: #{ld}" $LOAD_PATH.unshift(ld) end end dirs = Dir.glob(File.join(@mapper_files_dir, '/*.rb')) dirs.each do |f| require(f) rescue LoadError => e @@logger.error(e.) raise end end |
#simulation_dirs ⇒ Object
Gets all the simulation directories
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 101 def simulation_dirs # DLM: TODO use HeaderConverters from CSV module rows_skipped = 0 result = [] CSV.foreach(@csv_file) do |row| if rows_skipped < @num_header_rows rows_skipped += 1 next end break if row[0].nil? # gets +feature_id+ , +feature_name+ and +mapper_class+ from csv_file feature_id = row[0].chomp feature_name = row[1].chomp mapper_class = row[2].chomp # gets +features+ from the feature_file. features = [] feature = feature_file.get_feature_by_id(feature_id) features << feature feature_names = [] feature_names << feature_name simulation_dir = SimulationDirOSW.new(self, features, feature_names, mapper_class) result << simulation_dir end return result end |