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

Sign up to get free protection for your applications and to get access to all the features.
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