rtp-connect 1.9 → 1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d14e5fd97bfd2c6331fd30fc0a74b0e8e6a75f7
4
- data.tar.gz: 6e8bc11d9d6dbd7ba739657cb51f10d7dab37cf2
3
+ metadata.gz: d562152c2ccba6301fcf82f5bdd7329c8efb0515
4
+ data.tar.gz: ef3af37f9d5960f1821073345950b7523aa66ee3
5
5
  SHA512:
6
- metadata.gz: 59d74a73647a8f6f8dbc37ef26d5f9dea0a96c115ca8894fa368d86d6ff6fb2d788cb15071479df5faff65d215b623a63ae0bfab691184d582339d23e7fe3fc3
7
- data.tar.gz: 00a0d20da67fc7bf8e4bcc4a05e2c9abbaec421fac260eaa583692a5c5c7324c1e5d059227e10065734d81cd430ec0c7453d7e6c5aae0b653a9f1eea01bfc3e4
6
+ metadata.gz: bc23ea92ce17778ec1c0c253d68c976d3b5079fb80dc7b3f85f3d93afccb3e95f502d812bf0d408ff347d9f88251cd4caa34a1c87febf3847b4ca74ad55db5bd
7
+ data.tar.gz: 7c5b9a0174462db12b0c015915a9a655ed943f37dc611225b8620444bf47b5c77a54da8ab433766f87cf37851dfe0cd2257ad25b21fd66a7f4b9c5c407349332
@@ -1,7 +1,13 @@
1
- # 1.9
1
+ # 1.10
2
2
 
3
3
  ## (Unreleased)
4
4
 
5
+ * Added support for Mosaiq 2.64, which includes three new iso_pos_x/y/z attributes in the Field and ControlPoint records.
6
+
7
+ # 1.9
8
+
9
+ ## 23rd March 2016
10
+
5
11
  * Added an variable for retrieving a record's attributes (in an array).
6
12
  * Added a sample script for beam parameter modification (useful for linac/plan QA purposes).
7
13
  * Made the parent attribute accessible, and properly update the parent attribute when assigning a record to a new parent.
@@ -1,45 +1,45 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rtp-connect (1.9)
4
+ rtp-connect (1.10)
5
5
 
6
6
  GEM
7
7
  remote: http://www.rubygems.org/
8
8
  specs:
9
- dicom (0.9.6)
9
+ dicom (0.9.8)
10
10
  diff-lcs (1.2.5)
11
11
  metaclass (0.0.4)
12
12
  mocha (1.1.0)
13
13
  metaclass (~> 0.0.1)
14
- rake (10.5.0)
15
- redcarpet (3.3.3)
16
- rspec (3.4.0)
17
- rspec-core (~> 3.4.0)
18
- rspec-expectations (~> 3.4.0)
19
- rspec-mocks (~> 3.4.0)
20
- rspec-core (3.4.1)
21
- rspec-support (~> 3.4.0)
22
- rspec-expectations (3.4.0)
14
+ rake (12.3.1)
15
+ redcarpet (3.4.0)
16
+ rspec (3.7.0)
17
+ rspec-core (~> 3.7.0)
18
+ rspec-expectations (~> 3.7.0)
19
+ rspec-mocks (~> 3.7.0)
20
+ rspec-core (3.7.1)
21
+ rspec-support (~> 3.7.0)
22
+ rspec-expectations (3.7.0)
23
23
  diff-lcs (>= 1.2.0, < 2.0)
24
- rspec-support (~> 3.4.0)
25
- rspec-mocks (3.4.0)
24
+ rspec-support (~> 3.7.0)
25
+ rspec-mocks (3.7.0)
26
26
  diff-lcs (>= 1.2.0, < 2.0)
27
- rspec-support (~> 3.4.0)
28
- rspec-support (3.4.0)
29
- yard (0.8.7.6)
27
+ rspec-support (~> 3.7.0)
28
+ rspec-support (3.7.1)
29
+ yard (0.9.12)
30
30
 
31
31
  PLATFORMS
32
32
  x86-mingw32
33
33
 
34
34
  DEPENDENCIES
35
- bundler (~> 1.8)
36
- dicom (~> 0.9, >= 0.9.6)
35
+ bundler (~> 1.11)
36
+ dicom (~> 0.9, >= 0.9.8)
37
37
  mocha (~> 1.1)
38
- rake (~> 10.4)
39
- redcarpet (~> 3.2)
40
- rspec (~> 3.2)
38
+ rake (~> 12.3)
39
+ redcarpet (~> 3.4)
40
+ rspec (~> 3.7)
41
41
  rtp-connect!
42
- yard (~> 0.8, >= 0.8.7)
42
+ yard (~> 0.9, >= 0.9.12)
43
43
 
44
44
  BUNDLED WITH
45
- 1.11.2
45
+ 1.16.5
data/README.md CHANGED
@@ -56,6 +56,17 @@ external dependencies.
56
56
  # Write a corrected RTP file:
57
57
  rtp.write('valid.rtp')
58
58
 
59
+ ### Write RTP files for specific Mosaiq versions:
60
+
61
+ # Mosaiq 2.4:
62
+ rtp.write('treatment_plan.rtp', version: 2.4)
63
+ # Mosaiq 2.5:
64
+ rtp.write('treatment_plan.rtp', version: 2.5)
65
+ # Mosaiq 2.6 (and 2.62):
66
+ rtp.write('treatment_plan.rtp', version: 2.6)
67
+ # By default files are outputted at the latest supported version (currently 2.64) when omitting the version parameter:
68
+ rtp.write('treatment_plan.rtp')
69
+
59
70
  ### Convert an RTP file to DICOM:
60
71
 
61
72
  p = Plan.read('some_file.rtp')
@@ -125,7 +136,7 @@ If you encounter an RTP file with an unsupported record type, please contact me.
125
136
 
126
137
  ## COPYRIGHT
127
138
 
128
- Copyright 2011-2016 Christoffer Lervåg
139
+ Copyright 2011-2018 Christoffer Lervåg
129
140
 
130
141
  This program is free software: you can redistribute it and/or modify
131
142
  it under the terms of the GNU General Public License as published by
@@ -46,6 +46,9 @@ module RTP
46
46
  attr_reader :couch_dir
47
47
  attr_reader :couch_pedestal
48
48
  attr_reader :couch_ped_dir
49
+ attr_reader :iso_pos_x
50
+ attr_reader :iso_pos_y
51
+ attr_reader :iso_pos_z
49
52
  # Note: This attribute contains an array of all MLC LP A values (leaves 1..100).
50
53
  attr_reader :mlc_lp_a
51
54
  # Note: This attribute contains an array of all MLC LP B values (leaves 1..100).
@@ -68,7 +71,7 @@ module RTP
68
71
  # @param [Record] parent a record which is used to determine the proper parent of this instance
69
72
  #
70
73
  def initialize(parent)
71
- super('CONTROL_PT_DEF', 233, 233)
74
+ super('CONTROL_PT_DEF', 233, 236)
72
75
  # Child:
73
76
  @mlc_shape = nil
74
77
  # Parent relation (may get more than one type of record here):
@@ -110,6 +113,9 @@ module RTP
110
113
  :couch_dir,
111
114
  :couch_pedestal,
112
115
  :couch_ped_dir,
116
+ :iso_pos_x,
117
+ :iso_pos_y,
118
+ :iso_pos_z,
113
119
  :mlc_lp_a,
114
120
  :mlc_lp_b
115
121
  ]
@@ -250,6 +256,9 @@ module RTP
250
256
  @couch_dir,
251
257
  @couch_pedestal,
252
258
  @couch_ped_dir,
259
+ @iso_pos_x,
260
+ @iso_pos_y,
261
+ @iso_pos_z,
253
262
  *@mlc_lp_a,
254
263
  *@mlc_lp_b
255
264
  ]
@@ -531,6 +540,30 @@ module RTP
531
540
  @couch_ped_dir = value && value.to_s
532
541
  end
533
542
 
543
+ # Sets the iso_pos_x attribute.
544
+ #
545
+ # @param [nil, #to_s] value the new attribute value
546
+ #
547
+ def iso_pos_x=(value)
548
+ @iso_pos_x = value && value.to_s.strip
549
+ end
550
+
551
+ # Sets the iso_pos_y attribute.
552
+ #
553
+ # @param [nil, #to_s] value the new attribute value
554
+ #
555
+ def iso_pos_y=(value)
556
+ @iso_pos_y = value && value.to_s.strip
557
+ end
558
+
559
+ # Sets the iso_pos_z attribute.
560
+ #
561
+ # @param [nil, #to_s] value the new attribute value
562
+ #
563
+ def iso_pos_z=(value)
564
+ @iso_pos_z = value && value.to_s.strip
565
+ end
566
+
534
567
 
535
568
  private
536
569
 
@@ -584,10 +617,30 @@ module RTP
584
617
  # Note that this method is defined in the parent Record class, where it is
585
618
  # used for most record types. However, because this record has two attributes
586
619
  # which contain an array of values, we use a custom import_indices method.
587
- ind = Array.new(length - NR_SURPLUS_ATTRIBUTES) { |i| [i] }
620
+ #
621
+ # Furthermore, as of Mosaiq version 2.64, the RTP ControlPoint record includes
622
+ # 3 new attributes: iso_pos_x/y/z. Since these (unfortunately) are not placed
623
+ # at the end of the record (which is the norm), but rather inserted before the
624
+ # MLC leaf positions, we have to take special care here to make sure that this
625
+ # gets right for records where these are included or excluded.
626
+ #
627
+ # Override length:
628
+ applied_length = 235
629
+ ind = Array.new(applied_length - NR_SURPLUS_ATTRIBUTES) { |i| [i] }
588
630
  # Override indices for mlc_pl_a and mlc_lp_b:
589
- ind[32] = (32..131).to_a
590
- ind[33] = (132..231).to_a
631
+ # Allocation here is dependent on the RTP file version:
632
+ # For 2.62 and earlier, where length is 232, we dont have the 3 iso_pos_x/y/z values preceeding the mlc arrays leaf position arrays.
633
+ # For 2.64 (and later), where length is 235, we have the 3 iso_pos_x/y/z values preceeding the mlc leaf position arrays.
634
+ if length == 232
635
+ ind[32] = nil
636
+ ind[33] = nil
637
+ ind[34] = nil
638
+ ind[35] = (32..131).to_a
639
+ ind[36] = (132..231).to_a
640
+ else # (length = 235)
641
+ ind[35] = (35..134).to_a
642
+ ind[36] = (135..234).to_a
643
+ end
591
644
  ind
592
645
  end
593
646
 
@@ -61,6 +61,9 @@ module RTP
61
61
  attr_reader :portfilm_delta_open
62
62
  attr_reader :portfilm_mu_treat
63
63
  attr_reader :portfilm_coeff_treat
64
+ attr_reader :iso_pos_x
65
+ attr_reader :iso_pos_y
66
+ attr_reader :iso_pos_z
64
67
 
65
68
  # Creates a new (treatment) Field by parsing a RTPConnect string line.
66
69
  #
@@ -79,7 +82,7 @@ module RTP
79
82
  # @param [Record] parent a record which is used to determine the proper parent of this instance
80
83
  #
81
84
  def initialize(parent)
82
- super('FIELD_DEF', 27, 49)
85
+ super('FIELD_DEF', 27, 52)
83
86
  # Child records:
84
87
  @control_points = Array.new
85
88
  @extended_field = nil
@@ -136,7 +139,10 @@ module RTP
136
139
  :portfilm_coeff_open,
137
140
  :portfilm_delta_open,
138
141
  :portfilm_mu_treat,
139
- :portfilm_coeff_treat
142
+ :portfilm_coeff_treat,
143
+ :iso_pos_x,
144
+ :iso_pos_y,
145
+ :iso_pos_z
140
146
  ]
141
147
  end
142
148
 
@@ -635,6 +641,30 @@ module RTP
635
641
  @portfilm_coeff_treat = value && value.to_s
636
642
  end
637
643
 
644
+ # Sets the iso_pos_x attribute.
645
+ #
646
+ # @param [nil, #to_s] value the new attribute value
647
+ #
648
+ def iso_pos_x=(value)
649
+ @iso_pos_x = value && value.to_s.strip
650
+ end
651
+
652
+ # Sets the iso_pos_y attribute.
653
+ #
654
+ # @param [nil, #to_s] value the new attribute value
655
+ #
656
+ def iso_pos_y=(value)
657
+ @iso_pos_y = value && value.to_s.strip
658
+ end
659
+
660
+ # Sets the iso_pos_z attribute.
661
+ #
662
+ # @param [nil, #to_s] value the new attribute value
663
+ #
664
+ def iso_pos_z=(value)
665
+ @iso_pos_z = value && value.to_s.strip
666
+ end
667
+
638
668
 
639
669
  private
640
670
 
@@ -1,4 +1,4 @@
1
- # Copyright 2011-2016 Christoffer Lervag
1
+ # Copyright 2011-2018 Christoffer Lervag
2
2
  #
3
3
  # This program is free software: you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -161,8 +161,11 @@ module RTP
161
161
  #
162
162
  def set_attributes(values)
163
163
  import_indices([values.length - 1, @max_elements - 1].min).each_with_index do |indices, i|
164
- param = values.values_at(*indices)
165
- param = param[0] if param.length == 1
164
+ param = nil
165
+ if indices
166
+ param = values.values_at(*indices)
167
+ param = param[0] if param.length == 1
168
+ end
166
169
  self.send("#{@attributes[i]}=", param)
167
170
  end
168
171
  @crc = values[-1]
@@ -190,8 +193,12 @@ module RTP
190
193
  case self
191
194
  when SiteSetup
192
195
  options[:version].to_f >= 2.6 ? values : values[0..-4]
196
+ when Field
197
+ options[:version].to_f >= 2.64 ? values : values[0..-4]
193
198
  when ExtendedField
194
199
  options[:version].to_f >= 2.4 ? values : values[0..-5]
200
+ when ControlPoint
201
+ options[:version].to_f >= 2.64 ? values : values[0..31] + values[35..-1]
195
202
  else
196
203
  values
197
204
  end
@@ -1,6 +1,6 @@
1
1
  module RTP
2
2
 
3
3
  # The RTPConnect library version string.
4
- VERSION = '1.9'
4
+ VERSION = '1.10'
5
5
 
6
6
  end
@@ -16,13 +16,13 @@ Gem::Specification.new do |s|
16
16
  s.description = 'RTPConnect is a file format used in radiotherapy for export & import of treatment planning data.'
17
17
  s.files = Dir["{lib}/**/*", "[A-Z]*"]
18
18
 
19
- s.required_ruby_version = '>= 1.9.3'
19
+ s.required_ruby_version = '>= 2.2'
20
20
 
21
- s.add_development_dependency('bundler', '~> 1.8')
22
- s.add_development_dependency('dicom', '~> 0.9', '>= 0.9.6')
21
+ s.add_development_dependency('bundler', '~> 1.11')
22
+ s.add_development_dependency('dicom', '~> 0.9', '>= 0.9.8')
23
23
  s.add_development_dependency('mocha', '~> 1.1')
24
- s.add_development_dependency('rake', '~> 10.4')
25
- s.add_development_dependency('redcarpet', '~> 3.2')
26
- s.add_development_dependency('rspec', '~> 3.2')
27
- s.add_development_dependency('yard', '~> 0.8', '>= 0.8.7')
24
+ s.add_development_dependency('rake', '~> 12.3')
25
+ s.add_development_dependency('redcarpet', '~> 3.4')
26
+ s.add_development_dependency('rspec', '~> 3.7')
27
+ s.add_development_dependency('yard', '~> 0.9', '>= 0.9.12')
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rtp-connect
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.9'
4
+ version: '1.10'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christoffer Lervag
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-23 00:00:00.000000000 Z
11
+ date: 2018-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '1.11'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.8'
26
+ version: '1.11'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: dicom
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: '0.9'
34
34
  - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: 0.9.6
36
+ version: 0.9.8
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0.9'
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.9.6
46
+ version: 0.9.8
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mocha
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -64,62 +64,62 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '10.4'
67
+ version: '12.3'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '10.4'
74
+ version: '12.3'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: redcarpet
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '3.2'
81
+ version: '3.4'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '3.2'
88
+ version: '3.4'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rspec
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '3.2'
95
+ version: '3.7'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '3.2'
102
+ version: '3.7'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: yard
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '0.8'
109
+ version: '0.9'
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: 0.8.7
112
+ version: 0.9.12
113
113
  type: :development
114
114
  prerelease: false
115
115
  version_requirements: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - "~>"
118
118
  - !ruby/object:Gem::Version
119
- version: '0.8'
119
+ version: '0.9'
120
120
  - - ">="
121
121
  - !ruby/object:Gem::Version
122
- version: 0.8.7
122
+ version: 0.9.12
123
123
  description: RTPConnect is a file format used in radiotherapy for export & import
124
124
  of treatment planning data.
125
125
  email: chris.lervag@gmail.com
@@ -164,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
164
  requirements:
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: 1.9.3
167
+ version: '2.2'
168
168
  required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - ">="
@@ -172,9 +172,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  version: '0'
173
173
  requirements: []
174
174
  rubyforge_project:
175
- rubygems_version: 2.5.0
175
+ rubygems_version: 2.6.8
176
176
  signing_key:
177
177
  specification_version: 4
178
178
  summary: Library for handling RTPConnect files.
179
179
  test_files: []
180
- has_rdoc: