openstudio-analysis 1.0.0.pat2 → 1.0.0.pre.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -1
  3. data/Gemfile +1 -1
  4. data/README.md +1 -1
  5. data/lib/openstudio/analysis/translator/datapoints.rb +57 -26
  6. data/lib/openstudio/analysis/translator/excel.rb +176 -160
  7. data/lib/openstudio/analysis/translator/workflow.rb +2 -1
  8. data/lib/openstudio/analysis/version.rb +1 -1
  9. data/lib/openstudio/analysis/workflow_step.rb +4 -1
  10. data/lib/openstudio/helpers/string.rb +10 -5
  11. data/openstudio-analysis.gemspec +2 -2
  12. data/spec/files/0_1_09_no_variables.xlsx +0 -0
  13. data/spec/files/0_1_09_outputvars.xlsx +0 -0
  14. data/spec/files/0_1_09_setup_version_2.xlsx +0 -0
  15. data/spec/files/0_1_09_small_list.xlsx +0 -0
  16. data/spec/files/0_1_09_small_list_incomplete.xlsx +0 -0
  17. data/spec/files/0_1_09_small_list_repeat_vars.xlsx +0 -0
  18. data/spec/files/0_1_09_small_list_validation_errors.xlsx +0 -0
  19. data/spec/files/0_1_10_proxy.xlsx +0 -0
  20. data/spec/files/0_1_10_proxy_user.xlsx +0 -0
  21. data/spec/files/0_1_10_template_input.xlsx +0 -0
  22. data/spec/files/0_1_11_discrete_variables.xlsx +0 -0
  23. data/spec/files/0_1_12_discrete_dynamic_columns.xlsx +0 -0
  24. data/spec/files/0_2_0_template.xlsx +0 -0
  25. data/spec/files/0_2_0_template_simpletest.xlsx +0 -0
  26. data/spec/files/0_3_0_dynamic_uuids.xlsx +0 -0
  27. data/spec/files/0_3_0_measure_existence.xlsx +0 -0
  28. data/spec/files/0_3_0_outputs.xlsx +0 -0
  29. data/spec/files/0_3_3_short_names.xlsx +0 -0
  30. data/spec/files/0_3_5_multiple_measure_paths.xlsx +0 -0
  31. data/spec/files/0_3_7_unique_measure_names.xlsx +0 -0
  32. data/spec/files/0_3_7_worker_init_final.xlsx +0 -0
  33. data/spec/files/0_4_0_lhs_discrete_continuous.xlsx +0 -0
  34. data/spec/files/0_4_0_multiple_seeds.xlsx +0 -0
  35. data/spec/files/0_4_0_pivot_test.xlsx +0 -0
  36. data/spec/files/workflow/datapoint_0.osd +60 -58
  37. data/spec/files/workflow/datapoint_1.osd +60 -58
  38. data/spec/files/workflow/datapoint_2.osd +60 -58
  39. data/spec/files/workflow/datapoint_wrong_osa_id.osd +62 -62
  40. data/spec/openstudio/excel_spec.rb +2 -8
  41. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c4fedd5922d42f9727401e3231fcd42067aabb6
4
- data.tar.gz: ce310ac6012d8c0d907d8986f76bea206cbcf026
3
+ metadata.gz: 4c950b711edf77a4d8d93f709d8010e3793b0773
4
+ data.tar.gz: 8cb014f35322edfff1102e710e144bea94d50e21
5
5
  SHA512:
6
- metadata.gz: d5204c6088fe07ad1727eae743c2b45713d2ae67433e3874db2da69b98c4de893cea1997d528c73dcb17b6a88d77375b0f8d7af2a2ac713db5eb807a7f533eff
7
- data.tar.gz: c9159754062070903d2479bbd72ebdf8b5b7f481164bde7edf1e85ec94f7deb04324da856a47d3b6f135c45c937a481fa9fa66b7711f774fa9f2d16e36559f34
6
+ metadata.gz: 696f140221118442a52a8cbc8a728d566da1fe1e080f7ef4338fae661f79081eb6723fb76a5314eb583b8bc554402e4e5f336c7146301acdf4c88ca80af298ef
7
+ data.tar.gz: 7694b6fa457d97619594e0986836e4f9aab76734e38a9275ad471c4c722859f37f090705a6160255acd4ad06fc4d9d4817d4c981066a5ff2e4d665bbecda1e14
data/CHANGELOG.md CHANGED
@@ -1,8 +1,9 @@
1
1
  OpenStudio Analysis Gem Change Log
2
2
  ==================================
3
3
 
4
- Version Unreleased (Version 0.5)
4
+ Version 1.0.0.pre.rc2
5
5
  --------------------------------
6
+ * Note that pre.rc1 was yanked from Rubygems.
6
7
  * Remove allow_multiple_jobs and server_as_worker options. These are by defaulted to true now.
7
8
  * Remove uncertain strings from end of uncertainty distributions
8
9
  * Remove measures eval path for CSV import
@@ -11,6 +12,12 @@ Version Unreleased (Version 0.5)
11
12
  * Add json extension to formulation name upon save if none exists
12
13
  * Add zip extension to formulation zip upon save if none exists
13
14
  * In upload_datapoint, allows set the analysis_id in the file to the one passed.
15
+ * Remove reading JSON from custom_csv method.
16
+
17
+ Version 1.0.0-pat2
18
+ ------------------------------
19
+ * Fixed bug in workflow translator which caused errors in server models
20
+ * Updated gem versions to converge across the OpenStudio Analysis Framework platforms
14
21
 
15
22
  Version 0.4.4
16
23
  ------------------
data/Gemfile CHANGED
@@ -2,7 +2,7 @@ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'openstudio-aws', github: 'NREL/OpenStudio-aws-gem', branch: 'develop'
5
+ gem 'openstudio-aws', '0.4.2'
6
6
  gem 'dencity'
7
7
  gem 'colored', '~> 1.2'
8
8
 
data/README.md CHANGED
@@ -47,7 +47,7 @@ There are two ways to create an OpenStudio Analysis description:
47
47
  analysis.save_static_data_point("#{run_dir}/data_point.zip")
48
48
  ```
49
49
 
50
- * Running Data Points with Workflow Gem
50
+ * Running Datapoints with Workflow Gem
51
51
 
52
52
  ```
53
53
  require 'openstudio-workflow'
@@ -23,7 +23,7 @@ module OpenStudio
23
23
  attr_accessor :name
24
24
  attr_reader :analysis_name
25
25
 
26
- # Methods to override instance variables
26
+ require 'nokogiri'
27
27
 
28
28
  # Pass in the filename to read
29
29
  def initialize(csv_filename)
@@ -334,35 +334,46 @@ module OpenStudio
334
334
  data = []
335
335
  measures.each_with_index do |measure, measure_index|
336
336
  data[measure_index] = {}
337
- measure_json = ''
337
+ measure_xml = ''
338
338
  for i in 0..(@measure_paths.length - 1)
339
- if File.exist? File.join(@measure_paths[i], measure.to_s, 'measure.json')
340
- measure_json = MultiJson.load(File.read(File.join(@measure_paths[i], measure.to_s, 'measure.json')))
339
+ if File.exist? File.join(@measure_paths[i], measure.to_s, 'measure.xml')
340
+ measure_xml = Nokogiri::XML File.read(File.join(@measure_paths[i], measure.to_s, 'measure.xml'))
341
341
  break
342
342
  end
343
343
  end
344
- fail "Could not find measure json #{measure}.json in measure_paths: '#{@measure_paths.join("\n")}'" if measure_json == ''
344
+ fail "Could not find measure #{measure} xml in measure_paths: '#{@measure_paths.join("\n")}'" if measure_xml == ''
345
345
  measure_data = {}
346
- measure_data[:classname] = measure_json['classname']
347
- measure_data[:name] = measure_json['name']
348
- measure_data[:display_name] = measure_json['display_name']
349
- measure_data[:measure_type] = measure_json['measure_type']
350
- measure_data[:uid] = measure_json['uid']
351
- measure_data[:version_id] = measure_json['version_id']
346
+ measure_data[:classname] = measure_xml.xpath('/measure/class_name').text
347
+ measure_data[:name] = measure_xml.xpath('/measure/name').text
348
+ measure_data[:display_name] = measure_xml.xpath('/measure/display_name').text
349
+ measure_data[:measure_type] = parse_measure_type(File.join(@measure_paths[i], measure.to_s, 'measure.rb'))
350
+ measure_data[:uid] = measure_xml.xpath('/measure/uid').text
351
+ measure_data[:version_id] = measure_xml.xpath('/measure/version_id').text
352
352
  data[measure_index][:measure_data] = measure_data
353
353
  data[measure_index][:vars] = []
354
354
  vars = measure_map[measure]
355
+
356
+ # construct the list of variables
355
357
  vars.each do |var|
356
358
  var = var[0]
357
359
  var_hash = {}
358
- var_json = measure_json['arguments'].select { |hash| hash['local_variable'] == var.to_s }[0]
359
- fail "measure.json for measure #{measure} does not have an argument with local_variable == #{var}" if var_json.nil?
360
+ found_arg = nil
361
+ measure_xml.xpath('/measure/arguments/argument').each do |arg|
362
+ if arg.xpath('name').text == var.to_s
363
+ found_arg = arg
364
+ break
365
+ end
366
+ end
367
+
368
+ # var_json = measure_json['arguments'].select { |hash| hash['local_variable'] == var.to_s }[0]
369
+ fail "measure.xml for measure #{measure} does not have an argument with argument == #{var}" unless found_arg
370
+ var_hash[:name] = var.to_s
360
371
  var_hash[:variable_type] = 'variable'
361
372
  var_hash[:display_name] = measure_rows[2][measure_map[measure][var]]
362
373
  var_hash[:display_name_short] = var_hash[:display_name]
363
- var_hash[:name] = var_json['local_variable']
364
- var_hash[:type] = var_json['variable_type'].downcase
365
- var_hash[:units] = var_json['units']
374
+ # var_hash[:name] = var_json['local_variable']
375
+ var_hash[:type] = found_arg.xpath('type').text.downcase
376
+ var_hash[:units] = found_arg.xpath('units')
366
377
  var_hash[:distribution] = {}
367
378
  case var_hash[:type].downcase
368
379
  when 'bool', 'boolean' # is 'boolean' necessary? it's not in the enum catch
@@ -385,29 +396,49 @@ module OpenStudio
385
396
  var_hash[:distribution][:type] = 'discrete'
386
397
  var_hash[:distribution][:units] = var_hash[:units]
387
398
  if var_hash[:type] == 'choice'
388
- var_hash[:distribution][:enumerations] = var_json['choices']
399
+ var_hash[:distribution][:enumerations] = found_arg.xpath('choices/choice').map { |s| s.xpath('value').text }
389
400
  elsif var_hash[:type] == 'bool'
390
401
  var_hash[:distribution][:enumerations] = []
391
- var_hash[:distribution][:enumerations] << 'true' # TODO: should this be a real bool?
392
- var_hash[:distribution][:enumerations] << 'false'
402
+ var_hash[:distribution][:enumerations] << true
403
+ var_hash[:distribution][:enumerations] << false
393
404
  end
394
405
  data[measure_index][:vars] << var_hash
395
406
  end
396
407
  data[measure_index][:args] = []
397
- measure_json['arguments'].each do |arg_json|
408
+
409
+
410
+ measure_xml.xpath('/measure/arguments/argument').each do |arg_xml|
398
411
  arg = {}
399
- arg[:value_type] = arg_json['variable_type'].downcase
400
- arg[:name] = arg_json['name']
401
- arg[:display_name] = arg_json['display_name']
402
- arg[:display_name_short] = arg_json['display_name']
403
- arg[:default_value] = arg_json['default_value']
404
- arg[:value] = arg_json['default_value']
412
+ arg[:value_type] = arg_xml.xpath('type').text.downcase
413
+ arg[:name] = arg_xml.xpath('name').text.downcase
414
+ arg[:display_name] = arg_xml.xpath('display_name').text.downcase
415
+ arg[:display_name_short] = arg[:display_name]
416
+ arg[:default_value] = arg_xml.xpath('default_value').text.downcase
417
+ arg[:value] = arg[:default_value]
405
418
  data[measure_index][:args] << arg
406
419
  end
407
420
  end
408
421
 
409
422
  data
410
423
  end
424
+
425
+ private
426
+
427
+ def parse_measure_type(measure_filename)
428
+ measure_string = File.read(measure_filename)
429
+
430
+ if measure_string =~ /OpenStudio::Ruleset::WorkspaceUserScript/
431
+ return 'EnergyPlusMeasure'
432
+ elsif measure_string =~ /OpenStudio::Ruleset::ModelUserScript/
433
+ return 'RubyMeasure'
434
+ elsif measure_string =~ /OpenStudio::Ruleset::ReportingUserScript/
435
+ return 'ReportingMeasure'
436
+ elsif measure_string =~ /OpenStudio::Ruleset::UtilityUserScript/
437
+ return 'UtilityUserScript'
438
+ else
439
+ fail "measure type is unknown with an inherited class in #{measure_filename}"
440
+ end
441
+ end
411
442
  end
412
443
  end
413
444
  end
@@ -155,6 +155,16 @@ module OpenStudio
155
155
  if variable['distribution']['discrete_values'].nil? || variable['distribution']['discrete_values'] == ''
156
156
  fail "Variable #{measure['name']}:#{variable['name']} needs discrete values"
157
157
  end
158
+ elsif variable['distribution']['type'] == 'integer_sequence'
159
+ if variable['distribution']['mean'].nil? || variable['distribution']['mean'] == ''
160
+ fail "Variable #{measure['name']}:#{variable['name']} must have a mean/mode"
161
+ end
162
+ if variable['distribution']['min'].nil? || variable['distribution']['min'] == ''
163
+ fail "Variable #{measure['name']}:#{variable['name']} must have a minimum"
164
+ end
165
+ if variable['distribution']['max'].nil? || variable['distribution']['max'] == ''
166
+ fail "Variable #{measure['name']}:#{variable['name']} must have a maximum"
167
+ end
158
168
  else
159
169
  if variable['distribution']['mean'].nil? || variable['distribution']['mean'] == ''
160
170
  fail "Variable #{measure['name']}:#{variable['name']} must have a mean"
@@ -542,140 +552,140 @@ module OpenStudio
542
552
  rows = nil
543
553
  begin
544
554
  if @version >= '0.3.3'.to_version
545
- rows = @xls.sheet('Variables').parse(enabled: '# variable',
546
- measure_name_or_var_type: 'type',
547
- measure_file_name_or_var_display_name: 'parameter display name*',
548
- measure_file_name_directory: 'measure directory',
549
- measure_type_or_parameter_name_in_measure: 'parameter name in measure',
550
- display_name_short: 'parameter short display name',
551
- # sampling_method: 'sampling method',
552
- variable_type: 'Variable Type',
553
- units: 'units',
554
- default_value: 'static.default value',
555
- enums: 'enumerations',
556
- min: 'min',
557
- max: 'max',
558
- mode: 'mean|mode',
559
- stddev: 'std dev',
560
- delta_x: 'delta.x',
561
- discrete_values: 'discrete values',
562
- discrete_weights: 'discrete weights',
563
- distribution: 'distribution',
564
- source: 'data source',
565
- notes: 'notes',
566
- relation_to_eui: 'typical var to eui relationship',
555
+ rows = @xls.sheet('Variables').parse(enabled: /# variable/i,
556
+ measure_name_or_var_type: /type/i,
557
+ measure_file_name_or_var_display_name: /parameter\sdisplay\sname.*/i,
558
+ measure_file_name_directory: /measure\sdirectory/i,
559
+ measure_type_or_parameter_name_in_measure: /parameter\sname\sin\smeasure/i,
560
+ display_name_short: /parameter\sshort\sdisplay\sname/i,
561
+ # sampling_method: /sampling\smethod/i,
562
+ variable_type: /variable\stype/i,
563
+ units: /units/i,
564
+ default_value: /static.default\svalue/i,
565
+ enums: /enumerations/i,
566
+ min: /min/i,
567
+ max: /max/i,
568
+ mode: /mean|mode/i,
569
+ stddev: /std\sdev/i,
570
+ delta_x: /delta.x/i,
571
+ discrete_values: /discrete\svalues/i,
572
+ discrete_weights: /discrete\sweights/i,
573
+ distribution: /distribution/i,
574
+ source: /data\ssource/i,
575
+ notes: /notes/i,
576
+ relation_to_eui: /typical\svar\sto\seui\srelationship/i,
567
577
  clean: true)
568
- elsif @version >= '0.3.0'.to_version
569
- rows = @xls.sheet('Variables').parse(enabled: '# variable',
570
- measure_name_or_var_type: 'type',
571
- measure_file_name_or_var_display_name: 'parameter display name*',
572
- measure_file_name_directory: 'measure directory',
573
- measure_type_or_parameter_name_in_measure: 'parameter name in measure',
574
- # sampling_method: 'sampling method',
575
- variable_type: 'Variable Type',
576
- units: 'units',
577
- default_value: 'static.default value',
578
- enums: 'enumerations',
579
- min: 'min',
580
- max: 'max',
581
- mode: 'mean|mode',
582
- stddev: 'std dev',
583
- delta_x: 'delta.x',
584
- discrete_values: 'discrete values',
585
- discrete_weights: 'discrete weights',
586
- distribution: 'distribution',
587
- source: 'data source',
588
- notes: 'notes',
589
- relation_to_eui: 'typical var to eui relationship',
578
+ elsif @version >= '0.3.0'.to_version
579
+ rows = @xls.sheet('Variables').parse(enabled: /# variable/i,
580
+ measure_name_or_var_type: /type/i,
581
+ measure_file_name_or_var_display_name: /parameter\sdisplay\sname.*/i,
582
+ measure_file_name_directory: /measure\sdirectory/i,
583
+ measure_type_or_parameter_name_in_measure: /parameter\sname\sin\smeasure/i,
584
+ # sampling_method: /sampling\smethod/i,
585
+ variable_type: /variable\stype/i,
586
+ units: /units/i,
587
+ default_value: /static.default\svalue/i,
588
+ enums: /enumerations/i,
589
+ min: /min/i,
590
+ max: /max/i,
591
+ mode: /mean|mode/i,
592
+ stddev: /std\sdev/i,
593
+ delta_x: /delta.x/i,
594
+ discrete_values: /discrete\svalues/i,
595
+ discrete_weights: /discrete\sweights/i,
596
+ distribution: /distribution/i,
597
+ source: /data\ssource/i,
598
+ notes: /notes/i,
599
+ relation_to_eui: /typical\svar\sto\seui\srelationship/i,
590
600
  clean: true)
591
601
  elsif @version >= '0.2.0'.to_version
592
- rows = @xls.sheet('Variables').parse(enabled: '# variable',
593
- measure_name_or_var_type: 'type',
594
- measure_file_name_or_var_display_name: 'parameter display name*',
595
- measure_file_name_directory: 'measure directory',
596
- measure_type_or_parameter_name_in_measure: 'parameter name in measure',
597
- sampling_method: 'sampling method',
598
- variable_type: 'Variable Type',
599
- units: 'units',
600
- default_value: 'static.default value',
601
- enums: 'enumerations',
602
- min: 'min',
603
- max: 'max',
604
- mode: 'mean|mode',
605
- stddev: 'std dev',
606
- delta_x: 'delta.x',
607
- discrete_values: 'discrete values',
608
- discrete_weights: 'discrete weights',
609
- distribution: 'distribution',
610
- source: 'data source',
611
- notes: 'notes',
612
- relation_to_eui: 'typical var to eui relationship',
602
+ rows = @xls.sheet('Variables').parse(enabled: /# variable/i,
603
+ measure_name_or_var_type: /type/i,
604
+ measure_file_name_or_var_display_name: /parameter\sdisplay\sname.*/i,
605
+ measure_file_name_directory: /measure\sdirectory/i,
606
+ measure_type_or_parameter_name_in_measure: /parameter\sname\sin\smeasure/i,
607
+ sampling_method: /sampling\smethod/i,
608
+ variable_type: /variable\stype/i,
609
+ units: /units/i,
610
+ default_value: /static.default\svalue/i,
611
+ enums: /enumerations/i,
612
+ min: /min/i,
613
+ max: /max/i,
614
+ mode: /mean|mode/i,
615
+ stddev: /std\sdev/i,
616
+ delta_x: /delta.x/i,
617
+ discrete_values: /discrete\svalues/i,
618
+ discrete_weights: /discrete\sweights/i,
619
+ distribution: /distribution/i,
620
+ source: /data\ssource/i,
621
+ notes: /notes/i,
622
+ relation_to_eui: /typical\svar\sto\seui\srelationship/i,
613
623
  clean: true)
614
624
  elsif @version >= '0.1.12'.to_version
615
- rows = @xls.sheet('Variables').parse(enabled: '# variable',
616
- measure_name_or_var_type: 'type',
617
- measure_file_name_or_var_display_name: 'parameter display name*',
618
- measure_type_or_parameter_name_in_measure: 'parameter name in measure',
619
- sampling_method: 'sampling method',
620
- variable_type: 'Variable Type',
621
- units: 'units',
622
- default_value: 'static.default value',
623
- enums: 'enumerations',
624
- min: 'min',
625
- max: 'max',
626
- mode: 'mean|mode',
627
- stddev: 'std dev',
628
- delta_x: 'delta.x',
629
- discrete_values: 'discrete values',
630
- discrete_weights: 'discrete weights',
631
- distribution: 'distribution',
632
- source: 'data source',
633
- notes: 'notes',
634
- relation_to_eui: 'typical var to eui relationship',
625
+ rows = @xls.sheet('Variables').parse(enabled: /# variable/i,
626
+ measure_name_or_var_type: /type/i,
627
+ measure_file_name_or_var_display_name: /parameter\sdisplay\sname.*/i,
628
+ measure_type_or_parameter_name_in_measure: /parameter\sname\sin\smeasure/i,
629
+ sampling_method: /sampling\smethod/i,
630
+ variable_type: /variable\stype/i,
631
+ units: /units/i,
632
+ default_value: /static.default\svalue/i,
633
+ enums: /enumerations/i,
634
+ min: /min/i,
635
+ max: /max/i,
636
+ mode: /mean|mode/i,
637
+ stddev: /std\sdev/i,
638
+ delta_x: /delta.x/i,
639
+ discrete_values: /discrete\svalues/i,
640
+ discrete_weights: /discrete\sweights/i,
641
+ distribution: /distribution/i,
642
+ source: /data\ssource/i,
643
+ notes: /notes/i,
644
+ relation_to_eui: /typical\svar\sto\seui\srelationship/i,
635
645
  clean: true)
636
646
  elsif @version >= '0.1.11'.to_version
637
- rows = @xls.sheet('Variables').parse(enabled: '# variable',
638
- measure_name_or_var_type: 'type',
639
- measure_file_name_or_var_display_name: 'parameter display name*',
640
- measure_type_or_parameter_name_in_measure: 'parameter name in measure',
641
- sampling_method: 'sampling method',
642
- variable_type: 'Variable Type',
643
- units: 'units',
644
- default_value: 'static.default value',
645
- enums: 'enumerations',
646
- min: 'min',
647
- max: 'max',
648
- mode: 'mean|mode',
649
- stddev: 'std dev',
650
- #:delta_x => 'delta.x',
651
- discrete_values: 'discrete values',
652
- discrete_weights: 'discrete weights',
653
- distribution: 'distribution',
654
- source: 'data source',
655
- notes: 'notes',
656
- relation_to_eui: 'typical var to eui relationship',
647
+ rows = @xls.sheet('Variables').parse(enabled: /# variable/i,
648
+ measure_name_or_var_type: /type/i,
649
+ measure_file_name_or_var_display_name: /parameter\sdisplay\sname.*/i,
650
+ measure_type_or_parameter_name_in_measure: /parameter\sname\sin\smeasure/i,
651
+ sampling_method: /sampling\smethod/i,
652
+ variable_type: /variable\stype/i,
653
+ units: /units/i,
654
+ default_value: /static.default\svalue/i,
655
+ enums: /enumerations/i,
656
+ min: /min/i,
657
+ max: /max/i,
658
+ mode: /mean|mode/i,
659
+ stddev: /std\sdev/i,
660
+ # delta_x: /delta.x/i,
661
+ discrete_values: /discrete\svalues/i,
662
+ discrete_weights: /discrete\sweights/i,
663
+ distribution: /distribution/i,
664
+ source: /data\ssource/i,
665
+ notes: /notes/i,
666
+ relation_to_eui: /typical\svar\sto\seui\srelationship/i,
657
667
  clean: true)
658
668
  else
659
- rows = @xls.sheet('Variables').parse(enabled: '# variable',
660
- measure_name_or_var_type: 'type',
661
- measure_file_name_or_var_display_name: 'parameter display name*',
662
- measure_type_or_parameter_name_in_measure: 'parameter name in measure',
663
- sampling_method: 'sampling method',
664
- variable_type: 'Variable Type',
665
- units: 'units',
666
- default_value: 'static.default value',
667
- enums: 'enumerations',
668
- min: 'min',
669
- max: 'max',
670
- mode: 'mean|mode',
671
- stddev: 'std dev',
672
- #:delta_x => 'delta.x',
673
- #:discrete_values => 'discrete values',
674
- #:discrete_weights => 'discrete weights',
675
- distribution: 'distribution',
676
- source: 'data source',
677
- notes: 'notes',
678
- relation_to_eui: 'typical var to eui relationship',
669
+ rows = @xls.sheet('Variables').parse(enabled: /# variable/i,
670
+ measure_name_or_var_type: /type/i,
671
+ measure_file_name_or_var_display_name: /parameter\sdisplay\sname.*/i,
672
+ measure_type_or_parameter_name_in_measure: /parameter\sname\sin\smeasure/i,
673
+ sampling_method: /sampling\smethod/i,
674
+ variable_type: /variable\stype/i,
675
+ units: /units/i,
676
+ default_value: /static.default\svalue/i,
677
+ enums: /enumerations/i,
678
+ min: /min/i,
679
+ max: /max/i,
680
+ mode: /mean|mode/i,
681
+ stddev: /std\sdev/i,
682
+ # delta_x: /delta.x/i,
683
+ # discrete_values: /discrete\svalues/i,
684
+ # discrete_weights: /discrete\sweights/i,
685
+ distribution: /distribution/i,
686
+ source: /data\ssource/i,
687
+ notes: /notes/i,
688
+ relation_to_eui: /typical\svar\sto\seui\srelationship/i,
679
689
  clean: true)
680
690
  end
681
691
  rescue => e
@@ -773,7 +783,7 @@ module OpenStudio
773
783
  measure_name = display_name.downcase.strip.tr('-', '_').tr(' ', '_').gsub('__', '_')
774
784
  data['data'][measure_index]['display_name'] = display_name
775
785
  data['data'][measure_index]['name'] = measure_name
776
- data['data'][measure_index]['enabled'] = row[:enabled] == 'TRUE' ? true : false
786
+ data['data'][measure_index]['enabled'] = row[:enabled]
777
787
  data['data'][measure_index]['measure_file_name'] = row[:measure_file_name_or_var_display_name]
778
788
  if row[:measure_file_name_directory]
779
789
  data['data'][measure_index]['measure_file_name_directory'] = row[:measure_file_name_directory]
@@ -787,45 +797,51 @@ module OpenStudio
787
797
  end
788
798
  end
789
799
 
790
- # puts data.inspect
791
800
  data
792
801
  end
793
802
 
794
803
  def parse_outputs
795
804
  rows = nil
796
805
  if @version >= '0.3.3'.to_version
797
- rows = @xls.sheet('Outputs').parse(display_name: 'Variable Display Name',
798
- display_name_short: 'Short Display Name',
799
- metadata_id: 'Taxonomy Identifier',
800
- name: '^Name$',
801
- units: 'Units',
802
- visualize: 'Visualize',
803
- export: 'Export',
804
- variable_type: 'Variable Type',
805
- objective_function: 'Objective Function',
806
- objective_function_target: 'Objective Function Target',
807
- scaling_factor: 'Scale',
808
- objective_function_group: 'Objective Function Group')
806
+ rows = @xls.sheet('Outputs').parse(display_name: /variable\sdisplay\sname/i,
807
+ display_name_short: /short\sdisplay\sname/i,
808
+ metadata_id: /taxonomy\sidentifier/i,
809
+ name: /^name$/i,
810
+ units: /units/i,
811
+ visualize: /visualize/i,
812
+ export: /export/i,
813
+ variable_type: /variable\stype/i,
814
+ objective_function: /objective\sfunction/i,
815
+ objective_function_target: /objective\sfunction\starget/i,
816
+ scaling_factor: /scale/i,
817
+ objective_function_group: /objective\sfunction\sgroup/i)
809
818
  elsif @version >= '0.3.0'.to_version
810
- rows = @xls.sheet('Outputs').parse(display_name: 'Variable Display Name',
811
- metadata_id: 'Taxonomy Identifier',
812
- name: '^Name$',
813
- units: 'Units',
814
- visualize: 'Visualize',
815
- export: 'Export',
816
- variable_type: 'Variable Type',
817
- objective_function: 'Objective Function',
818
- objective_function_target: 'Objective Function Target',
819
- scaling_factor: 'Scale',
820
- objective_function_group: 'Objective Function Group')
819
+ rows = @xls.sheet('Outputs').parse(display_name: /variable\sdisplay\sname/i,
820
+ # display_name_short: /short\sdisplay\sname/i,
821
+ metadata_id: /taxonomy\sidentifier/i,
822
+ name: /^name$/i,
823
+ units: /units/i,
824
+ visualize: /visualize/i,
825
+ export: /export/i,
826
+ variable_type: /variable\stype/i,
827
+ objective_function: /objective\sfunction/i,
828
+ objective_function_target: /objective\sfunction\starget/i,
829
+ scaling_factor: /scale/i,
830
+ objective_function_group: /objective\sfunction\sgroup/i)
821
831
  else
822
- rows = @xls.sheet('Outputs').parse(display_name: 'Variable Display Name',
823
- name: '^Name$',
824
- units: 'units',
825
- objective_function: 'objective function',
826
- objective_function_target: 'objective function target',
827
- scaling_factor: 'scale',
828
- objective_function_group: 'objective')
832
+ rows = @xls.sheet('Outputs').parse(display_name: /variable\sdisplay\sname/i,
833
+ # display_name_short: /short\sdisplay\sname/i,
834
+ # metadata_id: /taxonomy\sidentifier/i,
835
+ name: /^name$/i,
836
+ units: /units/i,
837
+ # visualize: /visualize/i,
838
+ # export: /export/i,
839
+ # variable_type: /variable\stype/i,
840
+ objective_function: /objective\sfunction/i,
841
+ objective_function_target: /objective\sfunction\starget/i,
842
+ scaling_factor: /scale/i,
843
+ objective_function_group: /objective/i)
844
+
829
845
  end
830
846
 
831
847
  unless rows
@@ -847,10 +863,10 @@ module OpenStudio
847
863
  var['metadata_id'] = row[:metadata_id]
848
864
  var['name'] = row[:name]
849
865
  var['units'] = row[:units]
850
- var['visualize'] = row[:visualize].downcase == 'true' ? true : false if row[:visualize]
851
- var['export'] = row[:export].downcase == 'true' ? true : false if row[:export]
866
+ var['visualize'] = row[:visualize]
867
+ var['export'] = row[:export]
852
868
  var['variable_type'] = row[:variable_type].downcase if row[:variable_type]
853
- var['objective_function'] = row[:objective_function].downcase == 'true' ? true : false
869
+ var['objective_function'] = row[:objective_function]
854
870
  var['objective_function_target'] = row[:objective_function_target]
855
871
  var['scaling_factor'] = row[:scaling_factor]
856
872
 
@@ -54,8 +54,9 @@ module OpenStudio
54
54
 
55
55
  def process_datapoint(osd_filename)
56
56
  # Try to read the osd json file
57
+ osd = nil
57
58
  if File.exist?(osd_filename)
58
- warn('data_point selector in ods will be changed to datapoint in version 1.0')
59
+ # warn('data_point selector in ods will be changed to datapoint in version 1.0') # NL this isn't true anymore.
59
60
  osd = ::JSON.parse(File.read(osd_filename), {symbolize_names: true})[:data_point]
60
61
  else
61
62
  fail "File #{osd_filename} does not exist"
@@ -1,5 +1,5 @@
1
1
  module OpenStudio
2
2
  module Analysis
3
- VERSION = '1.0.0.pat2'
3
+ VERSION = '1.0.0-rc2'
4
4
  end
5
5
  end