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.
62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 62 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
75 76 77 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 75 def csv_file @csv_file end |
#mapper_files_dir ⇒ Object (readonly)
Directory containing all mapper class files
81 82 83 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 81 def mapper_files_dir @mapper_files_dir end |
#num_header_rows ⇒ Object (readonly)
Number of header rows to skip in CSV file
78 79 80 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 78 def num_header_rows @num_header_rows end |
Instance Method Details
#load_mapper_files ⇒ Object
Require all simulation mappers in mapper_files_dir
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 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 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 84 def load_mapper_files # loads default values from extension gem = OpenStudio::Extension::RunnerConfig.default_config # 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 overriden with runner.conf values = .merge(runner_config.) end # bundle path is assigned from the runner.conf if it exists or is assigned in the root_dir bundle_path = !.key?(:bundle_install_path) || [:bundle_install_path] === '' ? File.join(@root_dir, '.bundle/install/') : [:bundle_install_path] # checks if bundle path doesn't exist or is empty if !Dir.exists?(bundle_path) or Dir.empty?(bundle_path) # install bundle OpenStudio::Extension::Runner.new(@root_dir) 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' or 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
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/urbanopt/scenario/scenario_csv.rb', line 128 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 |