Method: OpenStudio::Workflow::Util::Measure#apply_measures

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

#apply_measures(measure_type, registry, options = {}, energyplus_output_requests = false) ⇒ Void

Wrapper method around #apply_measure to allow all measures of a type to be executed

Parameters:

  • measure_type (String)

    Accepts OpenStudio::MeasureType argument

  • registry (Object)

    Hash access to objects

  • options (Hash) (defaults to: {})

    ({}) User-specified options used to override defaults

  • energyplus_output_requests (Boolean) (defaults to: false)

    If true then the energyPlusOutputRequests is called instead of the run method

Options Hash (options):

  • :time_logger (Object)

    A special logger used to debug performance issues

  • :output_adapter (Object)

    An output adapter to register measure transitions to

Returns:

  • (Void)


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
# File 'lib/openstudio/workflow/util/measure.rb', line 19

def apply_measures(measure_type, registry, options = {}, energyplus_output_requests = false)

  # DLM: time_logger is in the registry but docs say it is in options?
  registry[:time_logger].start "#{measure_type.valueName}:apply_measures" if registry[:time_logger]

  logger = registry[:logger]
  workflow_json = registry[:workflow_json]
  
  workflow_steps = workflow_json.workflowSteps
  fail "The 'steps' array of the OSW is required." unless workflow_steps
  
  logger.debug "Finding measures of type #{measure_type.valueName}"
  workflow_steps.each_index do |step_index|
    
    step = workflow_steps[step_index]

    if @registry[:openstudio_2]
      if !step.to_MeasureStep.empty?
        step = step.to_MeasureStep.get
      end
    end
    
    measure_dir_name = step.measureDirName
      
    measure_dir = workflow_json.findMeasure(measure_dir_name)
    fail "Cannot find #{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
    if measure_instance_type == measure_type
      if energyplus_output_requests
        logger.info "Found measure #{class_name} of type #{measure_type.valueName}. Collecting EnergyPlus Output Requests now."
        apply_measure(registry, step, options, energyplus_output_requests)              
      else
        logger.info "Found measure #{class_name} of type #{measure_type.valueName}. Applying now."
        
        # fast forward current step index to this index, skips any previous steps
        while workflow_json.currentStepIndex < step_index
          workflow_json.incrementStep
        end
        
        # DLM: why is output_adapter in options instead of registry?
        options[:output_adapter].communicate_transition("Applying #{class_name}", :measure) if options[:output_adapter]
        apply_measure(registry, step, options)
        options[:output_adapter].communicate_transition("Applied #{class_name}", :measure) if options[:output_adapter]
      end
      
      logger.info 'Moving to the next workflow step.'
    else
      logger.debug "Passing measure #{class_name} of type #{measure_type.valueName}"
    end
  end
  
  registry[:time_logger].stop "#{measure_type.valueName}:apply_measures" if registry[:time_logger]
end