openstudio-analysis 1.3.5 → 1.3.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,143 +1,143 @@
1
- # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
3
- # See also https://openstudio.net/license
4
- # *******************************************************************************
5
-
6
- module OpenStudio
7
- module Analysis
8
- module Translator
9
- class Workflow
10
- attr_reader :osa_filename
11
- attr_reader :root_path
12
- attr_reader :analysis
13
- attr_reader :osa
14
- attr_reader :osw_version
15
- attr_reader :options
16
- attr_reader :file_paths
17
- attr_reader :measure_paths
18
- attr_reader :seed_file
19
- attr_reader :weather_file
20
- attr_reader :osa_id
21
- attr_reader :steps
22
-
23
- def initialize(osa_filename, options = {})
24
- @osa_filename = osa_filename
25
- @root_path = File.expand_path(File.dirname(@osa_filename))
26
-
27
- # try to read the osa json file
28
- if File.exist?(@osa_filename)
29
- @osa = ::JSON.parse(File.read(@osa_filename), symbolize_names: true)[:analysis]
30
- else
31
- raise "File #{@osa_filename} does not exist"
32
- end
33
-
34
- # Initialize some other instance variables
35
- @osw_version = '0.0.1'
36
- @options = options
37
- @file_paths = options[:file_paths] ? options[:file_paths] : []
38
- @file_paths << '../lib'
39
- @measure_paths = options[:measure_paths] ? options[:measure_paths] : []
40
-
41
- # Initialize static inputs from the OSA
42
- !@osa[:seed].nil? ? @seed_file = File.basename(@osa[:seed][:path]) : @seed_file = ''
43
- if @options[:seed]
44
- @seed_file = @options[:seed]
45
- end
46
- !@osa[:weather_file].nil? ? @weather_file = File.basename(@osa[:weather_file][:path]) : @weather_file = ''
47
- @osa_id = @osa[:_id]
48
- @steps = []
49
- @osa[:problem][:workflow].each_with_index do |step, i|
50
- step_hash = {}
51
- step_hash[:measure_dir_name] = File.basename(step[:measure_definition_directory])
52
- step_hash[:arguments] = {}
53
- # Measures can have no arguments -- make sure to catch it
54
- @osa[:problem][:workflow][i][:arguments]&.each do |arg|
55
- next if arg[:value].nil?
56
- step_hash[:arguments][arg[:name].to_sym] = arg[:value]
57
- end
58
- step_hash[:name] = step[:name] if step[:name]
59
- step_hash[:description] = step[:description] if step[:description]
60
- if @options[:da_descriptions]
61
- step_hash[:name] = @options[:da_descriptions][i][:name]
62
- step_hash[:description] = @options[:da_descriptions][i][:description]
63
- end
64
- # DLM: the following fields are deprecated and should be removed once EDAPT reports no longer rely on them, they are moved to step.results
65
- step_hash[:measure_id] = step[:measure_definition_uuid] if step[:measure_definition_uuid]
66
- step_hash[:version_id] = step[:measure_definition_version_uuid] if step[:measure_definition_version_uuid]
67
- step_hash[:modeler_description] = step[:modeler_description] if step[:modeler_description]
68
- step_hash[:taxonomy] = step[:taxonomy] if step[:taxonomy]
69
- step_hash[:measure_type] = step[:measure_type]
70
- step_hash[:measure_type] = 'ModelMeasure'
71
- @steps << step_hash
72
- end
73
- end
74
-
75
- # Convert a file in the form of an OSD into an OSW
76
- def process_datapoint(osd_filename)
77
- # Try to read the osd json file
78
- osd = nil
79
- if File.exist?(osd_filename)
80
- osd = ::JSON.parse(File.read(osd_filename), symbolize_names: true)[:data_point]
81
- else
82
- raise "File #{osd_filename} does not exist"
83
- end
84
-
85
- # Parse the osd hash based off of the osa hash. First check that the analysis id matches
86
- raise "File #{osd_filename} does not reference #{@osa_id}." unless @osa_id == osd[:analysis_id]
87
- osw_steps_instance = @steps
88
- osw_steps_instance.each_with_index do |step, i|
89
- next unless @osa[:problem][:workflow][i][:variables]
90
- @osa[:problem][:workflow][i][:variables].each do |var|
91
- var_name = var[:argument][:name]
92
- var_value_uuid = var[:uuid]
93
- var_value = osd[:set_variable_values][var_value_uuid.to_sym]
94
- step[:arguments][var_name.to_sym] = var_value
95
- end
96
- end
97
-
98
- # Overwrite the seed and weather files if they are present in the datapoint.json
99
- if (osd[:weather_file] != '') && !osd[:weather_file].nil?
100
- weather_file = osd[:weather_file]
101
- else
102
- weather_file = @weather_file
103
- end
104
- if (osd[:seed] != '') && !osd[:seed].nil?
105
- seed_file = osd[:seed]
106
- else
107
- seed_file = @seed_file
108
- end
109
-
110
- # Save the OSW hash
111
- osw = {}
112
- created_at = ::Time.now
113
- osw[:seed_file] = seed_file
114
- osw[:weather_file] = weather_file
115
- osw[:file_format_version] = @osw_version
116
- osw[:osa_id] = @osa_id
117
- osw[:osd_id] = osd[:_id]
118
- osw[:created_at] = created_at
119
- osw[:measure_paths] = @measure_paths
120
- osw[:file_paths] = @file_paths
121
- osw[:run_directory] = './run'
122
- osw[:steps] = osw_steps_instance
123
- osw[:name] = osd[:name] if osd[:name]
124
- osw[:description] = osd[:description] if osd[:description]
125
- osw
126
- end
127
-
128
- # Runs an array of OSD files
129
- def process_datapoints(osd_filename_array)
130
- r = []
131
- osd_filename_array.each do |osd_file|
132
- r << process_datapoint(osd_file)
133
- rescue StandardError => e
134
- r << nil
135
- puts "Warning: Failed to process datapoint #{osd_file} with error #{e.message} in #{e.backtrace.join('\n')}"
136
- end
137
-
138
- r
139
- end
140
- end
141
- end
142
- end
143
- end
1
+ # *******************************************************************************
2
+ # OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ # See also https://openstudio.net/license
4
+ # *******************************************************************************
5
+
6
+ module OpenStudio
7
+ module Analysis
8
+ module Translator
9
+ class Workflow
10
+ attr_reader :osa_filename
11
+ attr_reader :root_path
12
+ attr_reader :analysis
13
+ attr_reader :osa
14
+ attr_reader :osw_version
15
+ attr_reader :options
16
+ attr_reader :file_paths
17
+ attr_reader :measure_paths
18
+ attr_reader :seed_file
19
+ attr_reader :weather_file
20
+ attr_reader :osa_id
21
+ attr_reader :steps
22
+
23
+ def initialize(osa_filename, options = {})
24
+ @osa_filename = osa_filename
25
+ @root_path = File.expand_path(File.dirname(@osa_filename))
26
+
27
+ # try to read the osa json file
28
+ if File.exist?(@osa_filename)
29
+ @osa = ::JSON.parse(File.read(@osa_filename), symbolize_names: true)[:analysis]
30
+ else
31
+ raise "File #{@osa_filename} does not exist"
32
+ end
33
+
34
+ # Initialize some other instance variables
35
+ @osw_version = '0.0.1'
36
+ @options = options
37
+ @file_paths = options[:file_paths] ? options[:file_paths] : []
38
+ @file_paths << '../lib'
39
+ @measure_paths = options[:measure_paths] ? options[:measure_paths] : []
40
+
41
+ # Initialize static inputs from the OSA
42
+ !@osa[:seed].nil? ? @seed_file = File.basename(@osa[:seed][:path]) : @seed_file = ''
43
+ if @options[:seed]
44
+ @seed_file = @options[:seed]
45
+ end
46
+ !@osa[:weather_file].nil? ? @weather_file = File.basename(@osa[:weather_file][:path]) : @weather_file = ''
47
+ @osa_id = @osa[:_id]
48
+ @steps = []
49
+ @osa[:problem][:workflow].each_with_index do |step, i|
50
+ step_hash = {}
51
+ step_hash[:measure_dir_name] = File.basename(step[:measure_definition_directory])
52
+ step_hash[:arguments] = {}
53
+ # Measures can have no arguments -- make sure to catch it
54
+ @osa[:problem][:workflow][i][:arguments]&.each do |arg|
55
+ next if arg[:value].nil?
56
+ step_hash[:arguments][arg[:name].to_sym] = arg[:value]
57
+ end
58
+ step_hash[:name] = step[:name] if step[:name]
59
+ step_hash[:description] = step[:description] if step[:description]
60
+ if @options[:da_descriptions]
61
+ step_hash[:name] = @options[:da_descriptions][i][:name]
62
+ step_hash[:description] = @options[:da_descriptions][i][:description]
63
+ end
64
+ # DLM: the following fields are deprecated and should be removed once EDAPT reports no longer rely on them, they are moved to step.results
65
+ step_hash[:measure_id] = step[:measure_definition_uuid] if step[:measure_definition_uuid]
66
+ step_hash[:version_id] = step[:measure_definition_version_uuid] if step[:measure_definition_version_uuid]
67
+ step_hash[:modeler_description] = step[:modeler_description] if step[:modeler_description]
68
+ step_hash[:taxonomy] = step[:taxonomy] if step[:taxonomy]
69
+ step_hash[:measure_type] = step[:measure_type]
70
+ step_hash[:measure_type] = 'ModelMeasure'
71
+ @steps << step_hash
72
+ end
73
+ end
74
+
75
+ # Convert a file in the form of an OSD into an OSW
76
+ def process_datapoint(osd_filename)
77
+ # Try to read the osd json file
78
+ osd = nil
79
+ if File.exist?(osd_filename)
80
+ osd = ::JSON.parse(File.read(osd_filename), symbolize_names: true)[:data_point]
81
+ else
82
+ raise "File #{osd_filename} does not exist"
83
+ end
84
+
85
+ # Parse the osd hash based off of the osa hash. First check that the analysis id matches
86
+ raise "File #{osd_filename} does not reference #{@osa_id}." unless @osa_id == osd[:analysis_id]
87
+ osw_steps_instance = @steps
88
+ osw_steps_instance.each_with_index do |step, i|
89
+ next unless @osa[:problem][:workflow][i][:variables]
90
+ @osa[:problem][:workflow][i][:variables].each do |var|
91
+ var_name = var[:argument][:name]
92
+ var_value_uuid = var[:uuid]
93
+ var_value = osd[:set_variable_values][var_value_uuid.to_sym]
94
+ step[:arguments][var_name.to_sym] = var_value
95
+ end
96
+ end
97
+
98
+ # Overwrite the seed and weather files if they are present in the datapoint.json
99
+ if (osd[:weather_file] != '') && !osd[:weather_file].nil?
100
+ weather_file = osd[:weather_file]
101
+ else
102
+ weather_file = @weather_file
103
+ end
104
+ if (osd[:seed] != '') && !osd[:seed].nil?
105
+ seed_file = osd[:seed]
106
+ else
107
+ seed_file = @seed_file
108
+ end
109
+
110
+ # Save the OSW hash
111
+ osw = {}
112
+ created_at = ::Time.now
113
+ osw[:seed_file] = seed_file
114
+ osw[:weather_file] = weather_file
115
+ osw[:file_format_version] = @osw_version
116
+ osw[:osa_id] = @osa_id
117
+ osw[:osd_id] = osd[:_id]
118
+ osw[:created_at] = created_at
119
+ osw[:measure_paths] = @measure_paths
120
+ osw[:file_paths] = @file_paths
121
+ osw[:run_directory] = './run'
122
+ osw[:steps] = osw_steps_instance
123
+ osw[:name] = osd[:name] if osd[:name]
124
+ osw[:description] = osd[:description] if osd[:description]
125
+ osw
126
+ end
127
+
128
+ # Runs an array of OSD files
129
+ def process_datapoints(osd_filename_array)
130
+ r = []
131
+ osd_filename_array.each do |osd_file|
132
+ r << process_datapoint(osd_file)
133
+ rescue StandardError => e
134
+ r << nil
135
+ puts "Warning: Failed to process datapoint #{osd_file} with error #{e.message} in #{e.backtrace.join('\n')}"
136
+ end
137
+
138
+ r
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
@@ -1,12 +1,12 @@
1
- # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
3
- # See also https://openstudio.net/license
4
- # *******************************************************************************
5
-
6
- module OpenStudio
7
- module Analysis
8
- # format should be ^.*\-{1}[a-z]+[0-9]+
9
- # for example: -rc1, -beta6, -customusecase0
10
- VERSION = '1.3.5'.freeze
11
- end
12
- end
1
+ # *******************************************************************************
2
+ # OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ # See also https://openstudio.net/license
4
+ # *******************************************************************************
5
+
6
+ module OpenStudio
7
+ module Analysis
8
+ # format should be ^.*\-{1}[a-z]+[0-9]+
9
+ # for example: -rc1, -beta6, -customusecase0
10
+ VERSION = '1.3.6'.freeze
11
+ end
12
+ end