Method: OpenStudio::Workflow::Util::Measure#validate_measures

Defined in:
lib/openstudio/workflow/util/measure.rb

#validate_measures(registry, logger) ⇒ true

Determine if a given workflow can find and load all measures defined in steps

Parameters:

  • workflow (Hash)

    See the schema for an OSW defined in the spec folder of this repo. Note that this method requires the OSW to have been loaded with symbolized keys

  • directory (String)

    The directory that will be passed to the find_measure_dir method

Returns:

  • (true)

    If the method doesn’t fail the workflow measures were validated



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
126
127
128
129
130
131
132
133
# File 'lib/openstudio/workflow/util/measure.rb', line 87

def validate_measures(registry, logger)

  logger = registry[:logger] if logger.nil?
  workflow_json = registry[:workflow_json]
  
  state = 'ModelMeasure'.to_MeasureType
  steps = workflow_json.workflowSteps
  steps.each_with_index do |step, index|
    begin
      logger.debug "Validating step #{index}"
      
      if @registry[:openstudio_2]
        if !step.to_MeasureStep.empty?
          step = step.to_MeasureStep.get
        end
      end

      # Verify the existence of the required files
      measure_dir_name = step.measureDirName

      measure_dir = workflow_json.findMeasure(measure_dir_name)
      fail "Cannot find measure #{measure_dir_name}" if measure_dir.empty?
      measure_dir = measure_dir.get
      
      measure = OpenStudio::BCLMeasure.load(measure_dir)
      fail "Cannot load measure at #{measure_dir}" if measure.empty?
      measure = measure.get
      
      class_name = measure.className
      measure_instance_type = measure.measureType

      # Ensure that measures are in order, i.e. no OS after E+, E+ or OS after Reporting
      if measure_instance_type == 'ModelMeasure'.to_MeasureType
        fail "OpenStudio measure #{measure_dir} called after transition to EnergyPlus." if state != 'ModelMeasure'.to_MeasureType
      elsif measure_instance_type == "EnergyPlusMeasure".to_MeasureType
        state = 'EnergyPlusMeasure'.to_MeasureType if state == 'ModelMeasure'.to_MeasureType
        fail "EnergyPlus measure #{measure_dir} called after Energyplus simulation." if state == 'ReportingMeasure'.to_MeasureType
      elsif measure_instance_type == 'ReportingMeasure'.to_MeasureType
        state = 'ReportingMeasure'.to_MeasureType if state == 'EnergyPlusMeasure'.to_MeasureType
      else
        fail "Error: MeasureType #{measure_instance_type.valueName} of measure #{measure_dir} is not supported"
      end

      logger.debug "Validated step #{index}"
    end
  end
end