purchase 0.1.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  require 'leap'
2
2
  require 'timeframe'
3
3
  require 'date'
4
+ require 'matrix'
4
5
 
5
6
  module BrighterPlanet
6
7
  module Purchase
@@ -11,71 +12,119 @@ module BrighterPlanet
11
12
 
12
13
  base.decide :emission, :with => :characteristics do
13
14
  committee :emission do
14
- quorum 'from emissions factor and adjusted cost', :needs => :sector_emissions do |characteristics|
15
- characteristics[:sector_emissions].sum
15
+ quorum 'from impacts', :needs => :impacts do |characteristics|
16
+ characteristics[:impacts].to_a.sum
16
17
  end
17
18
  end
18
19
 
19
- committee :sector_emissions do
20
- quorum 'from emissions factors and adjusted cost', :needs => [:emission_factors, :adjusted_cost] do |characteristics|
21
- characteristics[:emission_factors].map do |emission_factor|
22
- emission_factor.factor * characteristics[:adjusted_cost]
23
- end
20
+ committee :impacts do
21
+ quorum 'from economic flows and impact vectors', :needs => [:economic_flows, :impact_vectors] do |characteristics|
22
+ characteristics[:impact_vectors] * characteristics[:economic_flows]
24
23
  end
25
24
  end
26
25
 
27
- committee :emission_factors do
28
- quorum 'from sector shares', :needs => [:sector_shares] do |characteristics|
29
- characteristics[:sector_shares].inject([]) do |list, sector_share|
30
- factor = sector_share.emission_factor * sector_share.share
31
- list << EmissionFactor.new(sector_share.io_code, factor)
32
- end
26
+ committee :impact_vectors do
27
+ quorum 'from database' do
28
+ adapter = BrighterPlanet::Purchase.impact_vectors_adapter
29
+ adapter.matrix
33
30
  end
34
-
35
- # FIXME TODO figure out if we really want a fallback and get a real one
36
- quorum 'default' do
37
- [EmissionFactor.new(0, 1)]
31
+ end
32
+
33
+ committee :economic_flows do
34
+ quorum 'from sector shares, a', :needs => [:sector_shares, :sector_direct_requirements] do |characteristics|
35
+ y = characteristics[:sector_shares]
36
+ leonteif_inverse = characteristics[:sector_direct_requirements]
37
+ leonteif_inverse * y
38
+ end
39
+ end
40
+
41
+ committee :sector_direct_requirements do
42
+ quorum 'from database' do
43
+ adapter = BrighterPlanet::Purchase.sector_direct_requirements_adapter
44
+ adapter.matrix
38
45
  end
39
46
  end
40
47
 
41
48
  committee :sector_shares do
42
- quorum 'from industry shares and product line shares', :needs => [:industry_shares, :product_line_shares] do |characteristics|
43
- industry_shares = characteristics[:industry_shares]
44
- industry_sector_shares = industry_shares.inject([]) do |list, industry_share|
45
- industries_sectors = IndustriesSectors.
46
- find_all_by_naics_code industry_share.naics_code
47
- industries_sectors.each do |industry_sector|
48
- io_code = industry_sector.io_code
49
- unless ['420000','4A0000'].include?(io_code.to_s)
50
- calculated_share = industry_share.ratio * industry_sector.ratio
51
- sector = industry_sector.sector
52
- list << SectorShare.new(sector, calculated_share)
53
- end
49
+ quorum 'from industries sectors and product line shares', :needs => [:industries_sectors, :product_line_shares, :adjusted_cost] do |characteristics|
50
+ industry_sector_shares = {}
51
+ characteristics[:industries_sectors].each do |industry_sector|
52
+ unless ['420000','4A0000'].include?(industry_sector.io_code)
53
+ industry_sector_shares[industry_sector.io_code] ||= 0
54
+ industry_sector_shares[industry_sector.io_code] +=
55
+ industry_sector.ratio * characteristics[:adjusted_cost]
54
56
  end
55
- list
56
57
  end
57
58
 
58
- product_line_shares = characteristics[:product_line_shares]
59
- product_sector_shares = product_line_shares.inject([]) do |list, product_line_share|
59
+ product_line_sector_shares = {}
60
+ characteristics[:product_line_shares].each do |product_line_share|
60
61
  product_line_share.product_lines_sectors.each do |product_line_sector|
61
- calculated_share = product_line_sector.ratio * product_line_share.ratio
62
- sector = product_line_sector.sector
63
- list << SectorShare.new(sector, calculated_share)
62
+ io_code = product_line_sector.io_code
63
+ product_line_sector_shares[io_code] ||= 0
64
+ product_line_sector_shares[io_code] +=
65
+ product_line_sector.ratio * product_line_share.ratio * characteristics[:adjusted_cost]
64
66
  end
65
- list
66
67
  end
68
+ sector_shares = industry_sector_shares.merge product_line_sector_shares
67
69
 
68
- industry_sector_shares + product_sector_shares
70
+ shares = BrighterPlanet::Purchase.key_map.map do |key|
71
+ sector_shares[key] || 0
72
+ end
73
+ Vector[*shares]
69
74
  end
70
75
 
76
+ quorum 'from industries sectors', :needs => [:industries_sectors, :adjusted_cost] do |characteristics|
77
+ industry_sector_shares = {}
78
+ characteristics[:industries_sectors].each do |industry_sector|
79
+ unless ['420000','4A0000'].include?(industry_sector.io_code)
80
+ industry_sector_shares[industry_sector.io_code] ||= 0
81
+ industry_sector_shares[industry_sector.io_code] +=
82
+ industry_sector.ratio * characteristics[:adjusted_cost]
83
+ end
84
+ end
85
+
86
+ shares = BrighterPlanet::Purchase.key_map.map do |key|
87
+ industry_sector_shares[key] || 0
88
+ end
89
+ Vector[*shares]
90
+ end
91
+ end
92
+
93
+ committee :industries_sectors do
71
94
  quorum 'from industry', :needs => :naics_code do |characteristics|
72
95
  industries_sectors = IndustriesSectors.
73
96
  find_all_by_naics_code characteristics[:naics_code]
74
- vector_items = industries_sectors
97
+ industries_sectors.map do |industry_sector|
98
+ IndustrySectorShare.new industry_sector.io_code, industry_sector.ratio
99
+ end
100
+ end
101
+
102
+ quorum 'from industry shares', :needs => :industry_shares do |characteristics|
103
+ characteristics[:industry_shares].inject([]) do |list, industry_share|
104
+ sectors = IndustriesSectors.
105
+ find_all_by_naics_code industry_share.naics_code
106
+ sectors.each do |sector|
107
+ ratio = industry_share.ratio * sector.ratio
108
+ list << IndustrySectorShare.new(sector.io_code, ratio)
109
+ end
110
+ list
111
+ end
75
112
  end
76
113
  end
77
114
 
115
+ # only used for purchases from the wholesale and retail trade industries
116
+ # product lines = the product lines sold by particular types of stores
117
+ # ratios = the portion of the purchase amount that goes to each product line
78
118
  committee :product_line_shares do
119
+ quorum 'from industry', :needs => :naics_code do |characteristics|
120
+ IndustriesProductLines.
121
+ find_all_by_naics_code(characteristics[:naics_code]).
122
+ map do |industry_product_line|
123
+ ProductLineShare.new industry_product_line.ps_code,
124
+ industry_product_line.ratio
125
+ end
126
+ end
127
+
79
128
  quorum 'from industry shares', :needs => :industry_shares do |characteristics|
80
129
  industry_shares = characteristics[:industry_shares]
81
130
  industry_shares.inject([]) do |list, industry_share|
@@ -89,32 +138,25 @@ module BrighterPlanet
89
138
  list
90
139
  end
91
140
  end
92
-
93
- quorum 'from industry', :needs => :naics_code do |characteristics|
94
- IndustriesProductLines.
95
- find_all_by_naics_code(characteristics[:naics_code]).
96
- map do |industry_product_line|
97
- ProductLineShare.new industry_product_line.ps_code,
98
- industry_product_line.ratio
99
- end
100
- end
101
141
  end
102
142
 
143
+ # industries = the industries needed to produce the purchased item
144
+ # ratios = the portion of the purchase amount that goes to each industry
103
145
  committee :industry_shares do
104
- quorum 'from merchant_categories_industries', :needs => :merchant_categories_industries do |characteristics|
146
+ quorum 'from merchant categories industries', :needs => :merchant_categories_industries do |characteristics|
105
147
  characteristics[:merchant_categories_industries].map do |mci|
106
148
  IndustryShare.new mci.naics_code, mci.ratio
107
149
  end
108
150
  end
109
151
  end
110
152
 
153
+ # a dictionary to go from merchant categories to industries
111
154
  committee :merchant_categories_industries do
112
155
  quorum 'from merchant category', :needs => :merchant_category do |characteristics|
113
156
  characteristics[:merchant_category].merchant_categories_industries
114
157
  end
115
158
  quorum 'from industry', :needs => :naics_code do |characteristics|
116
- industry = Industry.find_by_naics_code characteristics[:naics_code]
117
- industry.merchant_categories_industries
159
+ MerchantCategoriesIndustries.find_all_by_naics_code characteristics[:naics_code]
118
160
  end
119
161
  end
120
162
 
@@ -124,6 +166,7 @@ module BrighterPlanet
124
166
  end
125
167
 
126
168
  quorum 'default' do
169
+ # FIXME TODO figure out a better merchant category or fallback sectors to use
127
170
  MerchantCategory.find_by_mcc 5111
128
171
  end
129
172
  end
@@ -149,11 +192,12 @@ module BrighterPlanet
149
192
  end
150
193
 
151
194
  quorum 'from purchase amount', :needs => :purchase_amount do |characteristics|
152
- # FIXME TODO take out tax
153
- characteristics[:purchase_amount].to_f * 0.9
195
+ # tax based on http://www.thestc.com/STrates.stm weighted by US Census 2010 projected state population (exclude samoa, guam, pr)
196
+ characteristics[:purchase_amount].to_f / 1.0711
154
197
  end
155
198
 
156
- quorum 'default' do
199
+ quorum 'from default' do
200
+ # FIXME TODO research real average purchase amount
157
201
  100
158
202
  end
159
203
  end
@@ -164,10 +208,10 @@ module BrighterPlanet
164
208
  end
165
209
  end
166
210
  end
167
- # FIXME TODO make other committees to report emissions by gas, by io sector, etc.
168
211
  end
169
212
 
170
213
  class IndustryShare < Struct.new(:naics_code, :ratio); end
214
+ class IndustrySectorShare < Struct.new(:io_code, :ratio); end
171
215
 
172
216
  class ProductLineShare
173
217
  attr_accessor :ps_code, :ratio
@@ -181,16 +225,6 @@ module BrighterPlanet
181
225
  ProductLinesSectors.find_all_by_ps_code ps_code
182
226
  end
183
227
  end
184
-
185
- class SectorShare < Struct.new(:io_code, :share, :emission_factor)
186
- def initialize(sector, share)
187
- self.io_code = sector.io_code
188
- self.share = share
189
- self.emission_factor = sector.emission_factor
190
- end
191
- end
192
-
193
- class EmissionFactor < Struct.new(:io_code, :factor); end
194
228
  end
195
229
  end
196
230
  end
data/lib/purchase.rb CHANGED
@@ -5,5 +5,31 @@ module BrighterPlanet
5
5
  attr_accessor :merchant_category_code
6
6
 
7
7
  extend BrighterPlanet::Emitter
8
+
9
+ class << self
10
+ def sector_direct_requirements_adapter
11
+ return @sector_direct_requirements_adapter if @sector_direct_requirements_adapter
12
+
13
+ require 'test_support/test_sector_direct_requirements_adapter'
14
+ @sector_direct_requirements_adapter = TestSectorDirectRequirementsAdapter
15
+ end
16
+ def sector_direct_requirements_adapter=(val)
17
+ @sector_direct_requirements_adapter = val
18
+ end
19
+
20
+ def impact_vectors_adapter
21
+ return @impact_vectors_adapter if @impact_vectors_adapter
22
+
23
+ require 'test_support/test_impact_vectors_adapter'
24
+ @impact_vectors_adapter = TestImpactVectorsAdapter
25
+ end
26
+ def impact_vectors_adapter=(val)
27
+ @impact_vectors_adapter = val
28
+ end
29
+
30
+ def key_map
31
+ impact_vectors_adapter.key_map
32
+ end
33
+ end
8
34
  end
9
35
  end
@@ -0,0 +1,60 @@
1
+ module BrighterPlanet
2
+ module Purchase
3
+ module TestImpactVectorsAdapter
4
+ extend self
5
+
6
+ def key_map
7
+ @key_map ||= Sector.find(:all, :order => 'io_code').map(&:io_code)
8
+ end
9
+
10
+ def matrix
11
+ Matrix[*data]
12
+ end
13
+
14
+ def data
15
+ matrix_text = <<-MATRIX
16
+ | X| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20| 21| 22| 23| 24| 25| 26|44100|44101|44102|44103|44104|44105|
17
+ | 1|0.81| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
18
+ | 2| 0|0.546| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
19
+ | 3| 0| 0|0.358| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
20
+ | 4| 0| 0| 0|1.2| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
21
+ | 5| 0| 0| 0| 0|1.08| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
22
+ | 6| 0| 0| 0| 0| 0|0.623| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
23
+ | 7| 0| 0| 0| 0| 0| 0|0.567| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
24
+ | 8| 0| 0| 0| 0| 0| 0| 0|0.284| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
25
+ | 9| 0| 0| 0| 0| 0| 0| 0| 0|0.37| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
26
+ | 10| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.362| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
27
+ | 11| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.22| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
28
+ | 12| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.549| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
29
+ | 13| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.544| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
30
+ | 14| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.535| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
31
+ | 15| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.101| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
32
+ | 16| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.245| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
33
+ | 17| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.23| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
34
+ | 18| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.186| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
35
+ | 19| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.559| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
36
+ | 20| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|2.0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
37
+ | 21| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|1.3| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
38
+ | 22| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.9| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|
39
+ | 23| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.2| 0| 0| 0| 0| 0| 0| 0| 0| 0|
40
+ | 24| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|1.2| 0| 0| 0| 0| 0| 0| 0| 0|
41
+ | 25| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|1.6| 0| 0| 0| 0| 0| 0| 0|
42
+ | 26| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0.8| 0| 0| 0| 0| 0| 0|
43
+ |44100| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0.7| 0| 0| 0| 0| 0|
44
+ |44101| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0.1| 0| 0| 0| 0|
45
+ |44102| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0.7| 0| 0| 0|
46
+ |44103| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1.2| 0| 0|
47
+ |44104| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1.4| 0|
48
+ |44105| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0.3|
49
+ MATRIX
50
+ lines = matrix_text.split(/\n/)
51
+ lines.shift
52
+ lines.map do |line|
53
+ row = line.scan(/[\d\.]+/).map(&:to_f)
54
+ row.shift
55
+ row
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,57 @@
1
+ module BrighterPlanet
2
+ module Purchase
3
+ class TestSectorDirectRequirementsAdapter
4
+ def self.matrix
5
+ Matrix[*data]
6
+ end
7
+
8
+ def self.data
9
+ matrix_text = <<-MATRIX
10
+ | X | 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 2 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 3 | 4 | 44100 | 44102 | 44103 | 44104 | 44105 | 5 | 6 | 7 | 8 | 9 | A | B | C | D |
11
+ | 1 | 1.11660147325124 | 0.251599615658254 | 0.373774515688194 | 0.49894260973828 | 0.526839445017405 | 0.50533975009216 | 0.536592476995616 | 0.537767202953766 | 0.538565319780854 | 0.539575777502643 | 0.509735365850664 | 0.528275313128452 | 0.53114006519536 | 0.530216618045907 | 0.527171283798139 | 0.5252186048262 | 0.525470221157555 | 0.522429651950689 | 0.515468420725235 | 0.501915252111428 | 0.420989361897459 | 0.464897922343403 | 0.446150323797142 | 0.419189862221039 | 0.381775901565955 | 0.196865497902236 | 0.0238224813015868 | 0.0235988888362268 | 0.0233757422182553 | 0.023153040115459 | 0.0229307812009271 | 0.021625365692315 | 0.000825976713963838 | 0.000751615465658293 | 0.000843563079940414 |
12
+ | 10 | 0.125262243121322 | 1.22952510962239 | 0.370110059652035 | 0.494051015525159 | 0.521674352419195 | 0.500385438816747 | 0.531331766436835 | 0.532494975473827 | 0.533285267626139 | 0.534285818899676 | 0.504737960303109 | 0.523096143391899 | 0.525932809654229 | 0.525018415908202 | 0.52200293787855 | 0.5200694028181 | 0.520318552322677 | 0.517307792617839 | 0.510414808757341 | 0.49699451434563 | 0.416862015212189 | 0.46034009957533 | 0.441776301014817 | 0.415080157689461 | 0.37803300057021 | 0.194935444001234 | 0.0235889275633359 | 0.0233675271809696 | 0.0231465682749391 | 0.0229260495260918 | 0.0227059696205258 | 0.0214133523031747 | 0.000817878903042624 | 0.000744246686583212 | 0.000835292853666488 |
13
+ | 11 | 0.156149281881415 | 0.310606386989918 | 1.43230986305468 | 0.61617110878513 | 0.647081078444029 | 0.615276049268739 | 0.650534310068097 | 0.647919897130358 | 0.646052451420649 | 0.644990940676493 | 0.727808979721915 | 0.655795603491823 | 0.66345364645156 | 0.665538027750066 | 0.671449101309309 | 0.674607046088545 | 0.666199646822493 | 0.664196130024955 | 0.656854500308926 | 0.639594320146738 | 0.536114277488773 | 0.592280180418301 | 0.568359857457187 | 0.533976085249523 | 0.486349236217753 | 0.250780821745999 | 0.0303467164155268 | 0.0300618889429797 | 0.0297776294215245 | 0.0294939361540962 | 0.029210807450384 | 0.0275478793220013 | 0.00105218599134002 | 0.000957459514863257 | 0.00107458871481431 |
14
+ | 12 | 0.154647846478709 | 0.307619787115015 | 0.456999191294535 | 1.57178484812373 | 0.640859144997452 | 0.609359933410386 | 0.644279172471288 | 0.64168989811949 | 0.639840408618527 | 0.638789104708449 | 0.720810816455358 | 0.649489876535171 | 0.657074284466449 | 0.659138623637085 | 0.664992859950566 | 0.668120439876155 | 0.659793880987661 | 0.657809628774715 | 0.65053859165211 | 0.633444374760712 | 0.53095933251292 | 0.586585178683509 | 0.562894858827791 | 0.528841699814431 | 0.48167280125412 | 0.248369467690749 | 0.0300549210653775 | 0.029772832318528 | 0.0294913060617022 | 0.0292103406141529 | 0.0289299343018226 | 0.027282995866982 | 0.00104206881834637 | 0.000948253173374187 | 0.00106425613101802 |
15
+ | 13 | 0.184449553718395 | 0.366933853087441 | 0.545117239239925 | 0.728080450188034 | 1.71418420752924 | 0.720077272820542 | 0.759079531162292 | 0.752822907504661 | 0.748425811534256 | 0.736120970326851 | 0.842038876483725 | 0.879228980066539 | 0.789376574276721 | 0.794346046748593 | 0.808981868658016 | 0.818330415474245 | 0.800655891515154 | 0.799747435861132 | 0.792152623613159 | 0.771434035794818 | 0.646283812510399 | 0.714207869066124 | 0.685342219410289 | 0.643842308115151 | 0.586444669354947 | 0.302386280828225 | 0.036591437289149 | 0.0362479982673708 | 0.0359052440691654 | 0.0355631726482472 | 0.0352217819664751 | 0.0332166579361551 | 0.00126870390824032 | 0.00115448469993586 | 0.00129571664463958 |
16
+ | 14 | 0.182709463588976 | 0.363472212963975 | 0.539974623775398 | 0.721211766695694 | 0.754616431986516 | 1.65668031741658 | 0.751918403509817 | 0.745720804603674 | 0.741365190670725 | 0.729176432870938 | 0.83409511349803 | 0.870934367047043 | 0.781929625462789 | 0.786852216118889 | 0.801349964236715 | 0.810610317215054 | 0.79310253404803 | 0.792202648730367 | 0.784679485654544 | 0.764156356211848 | 0.640186795411244 | 0.707470058980595 | 0.678876726774343 | 0.637768324076329 | 0.580912172474241 | 0.299533580065695 | 0.0362462350505722 | 0.0359060360195654 | 0.0355665153515317 | 0.0352276710194901 | 0.0348895010045272 | 0.0329032932386442 | 0.0012567350034456 | 0.00114359333484212 | 0.00128349290270901 |
17
+ | 15 | 0.212193869651688 | 0.422164528332642 | 0.627169341955671 | 0.837859668653946 | 0.87352422556479 | 0.820704782473821 | 1.79693533112508 | 0.852501310618306 | 0.837959665312599 | 0.822183524763731 | 0.940822523948768 | 0.991800736132706 | 1.01522794226959 | 0.91544048508758 | 0.941491969567255 | 0.958110546088266 | 0.94954105823658 | 0.935464791236729 | 0.929106556094517 | 0.906004805233736 | 0.757801074512588 | 0.838000392733056 | 0.804185416646659 | 0.755323876548388 | 0.688068529628399 | 0.354764432585494 | 0.0429296608689297 | 0.0425267327024958 | 0.0421246079820568 | 0.0417232843068776 | 0.0413227592857784 | 0.0389703156268542 | 0.00148846376526439 | 0.00135445995889622 | 0.00152015554068163 |
18
+ | 16 | 0.242406786718193 | 0.482320941609924 | 0.71653966329168 | 0.957487144014299 | 0.994349987201864 | 0.927588809968975 | 0.971992910363318 | 1.88029572085916 | 0.932624994095769 | 0.915084622598097 | 1.0452392678578 | 1.10278884511392 | 1.13764711320185 | 1.15525084940753 | 1.08023417626027 | 1.10513929046828 | 1.11061677963145 | 1.10137413581581 | 1.08051355703546 | 1.05658298311275 | 0.885271152612735 | 0.977106241239471 | 0.938285482888756 | 0.881354521637801 | 0.802663202626527 | 0.413906564740078 | 0.0500863864120119 | 0.0496162868251107 | 0.0491471246252223 | 0.0486788970113895 | 0.048211601193803 | 0.0454669859387909 | 0.00173660284750275 | 0.00158025951073778 | 0.00177357790105551 |
19
+ | 17 | 0.240182871243715 | 0.477895978842861 | 0.709965904912858 | 0.948702858289397 | 0.985227510255058 | 0.919078820886691 | 0.963075544213196 | 0.945614108741182 | 1.84149999414994 | 0.906689350831143 | 1.03564991677653 | 1.09267151625966 | 1.12720998372293 | 1.14465221776158 | 1.07032377097348 | 1.09500039789518 | 1.10042763486419 | 1.09126978594594 | 1.0706005886223 | 1.04688956124933 | 0.87714939891904 | 0.968141963796907 | 0.929677359192529 | 0.873268700338371 | 0.795299320033623 | 0.410109256806682 | 0.0496268782797916 | 0.0491610915331372 | 0.0486962335736148 | 0.0482323016259639 | 0.04776929292597 | 0.0450498576274258 | 0.00172067071128713 | 0.00156576171706129 | 0.00175730654416509 |
20
+ | 18 | 0.271782183469522 | 0.540832745313607 | 0.803467531208225 | 1.07395928155164 | 1.11007792831509 | 1.02721146364839 | 1.07387859710272 | 1.04423697755425 | 1.02019046950976 | 1.91070476111306 | 1.14141043345737 | 1.1995282046653 | 1.24523598438383 | 1.26936527137919 | 1.32805634958021 | 1.24272130711313 | 1.26711455263427 | 1.26518949342746 | 1.25011949089346 | 1.20861638539411 | 1.01793708290226 | 1.12339407267671 | 1.07721712999349 | 1.01281877546985 | 0.922260965145154 | 0.475613882440562 | 0.0575535222878011 | 0.0570133378386847 | 0.0564742305270541 | 0.0559361971343709 | 0.055399234454907 | 0.0522454378533439 | 0.00199550452425609 | 0.00181585271941169 | 0.00203799200880401 |
21
+ | 19 | 0.300602475946448 | 0.598263334407089 | 0.888789982738558 | 1.18840187466383 | 1.22168792117974 | 1.12128348321563 | 1.16447216004152 | 1.12920562782696 | 1.10439138167824 | 1.08517394199199 | 2.13464117822183 | 1.29010368488038 | 1.33550718179812 | 1.36350349414729 | 1.44681434284062 | 1.49431333269763 | 1.41327920780033 | 1.42243695868643 | 1.41760936714279 | 1.38043404653272 | 1.15453136633639 | 1.27728803876375 | 1.22544387405263 | 1.15103279057963 | 1.04860047929701 | 0.540637213792007 | 0.0654219253944537 | 0.0648078898789101 | 0.0641950787612042 | 0.0635834883827765 | 0.0629731150996293 | 0.0593881486583924 | 0.00226831899978861 | 0.00206410618176618 | 0.0023166151410811 |
22
+ | 2 | 0.273652258887148 | 0.544633059518311 | 0.809116185463372 | 1.08190192207294 | 1.11166589256965 | 1.01955671428974 | 1.05819306958555 | 1.02588799029688 | 1.00344230956417 | 0.904886249553391 | 1.12081309328616 | 2.0643413122774 | 1.21240122621208 | 1.23799317086212 | 1.31531989785274 | 1.3700139898063 | 1.2875254155312 | 1.29677328107071 | 1.29333432896353 | 1.26019656527849 | 1.05333581102069 | 1.16558063907151 | 1.11832230999917 | 1.0503254642825 | 0.956893245986751 | 0.493344570593814 | 0.0596990937134495 | 0.0591387714122516 | 0.0585795664037779 | 0.0580214753495043 | 0.0574644949241944 | 0.0541931260941796 | 0.00206989610476763 | 0.00188354695519579 | 0.0021139675051068 |
23
+ | 20 | 0.256733916330697 | 0.51104230441626 | 0.75921611300497 | 1.01557979047912 | 1.03675002652783 | 0.939022929118602 | 0.966825358334092 | 0.936248842166872 | 0.852074921334713 | 0.821610405030754 | 0.942609848594383 | 1.06181814301638 | 1.9803730402916 | 1.11890746121298 | 1.21511881035419 | 1.27639498512683 | 1.34861727863252 | 1.24009629976239 | 1.24910584790243 | 1.22630310781183 | 1.017301127635 | 1.12878582849953 | 1.08360819562401 | 1.01663172604512 | 0.926664799074554 | 0.477633446129552 | 0.0577979075088326 | 0.0572554293148549 | 0.0567140328321314 | 0.0561737148284572 | 0.0556344720844918 | 0.0524672837520854 | 0.00200397788600432 | 0.00182356323912541 | 0.00204664578198302 |
24
+ | 21 | 0.248227779488166 | 0.494218368734223 | 0.734226003303193 | 0.982687643398007 | 0.994479034454911 | 0.883155696567892 | 0.907368134918183 | 0.846735544045006 | 0.790129655278206 | 0.775393006491093 | 0.872702204723139 | 0.92703689329313 | 1.01689274306809 | 1.9153542736887 | 1.13754644945804 | 1.20265820993786 | 1.31040849777737 | 1.34669100041271 | 1.23436161840835 | 1.22631771544052 | 1.03746925066632 | 1.13295943081614 | 1.09192804077095 | 1.02618811044321 | 0.933163800959011 | 0.481579621805752 | 0.058275429965844 | 0.0577284698532082 | 0.0571826003888529 | 0.0566378183138688 | 0.0560941203823175 | 0.0529007649511441 | 0.00202053461764335 | 0.00183862939698467 | 0.0020635550329329 |
25
+ | 22 | 0.247740481072168 | 0.493396019374998 | 0.733009653160218 | 0.9817939611424 | 0.981251566457224 | 0.854244634978202 | 0.876760757470747 | 0.786275311878566 | 0.766496818915394 | 0.756558965456113 | 0.84462045011121 | 0.856460482725332 | 0.940671337094794 | 0.990872541046555 | 1.96139382784761 | 1.15628669412462 | 1.29573257263814 | 1.34816250726081 | 1.38784532256333 | 1.2557893478117 | 1.09091964247158 | 1.20305826270504 | 1.14393680981988 | 1.08158513098675 | 0.98407201882014 | 0.507707871768901 | 0.0614371812773887 | 0.0608605456762237 | 0.0602850598967958 | 0.0597107205033827 | 0.0591375240739366 | 0.0557709121652278 | 0.00213015934252483 | 0.0019383847983737 | 0.00217551384362969 |
26
+ | 23 | 0.216927165525523 | 0.432226758418132 | 0.642141228192199 | 0.861067944812799 | 0.843674196018218 | 0.716825352225776 | 0.695610255206846 | 0.654734822364087 | 0.647905732513161 | 0.642298989917132 | 0.711876443894582 | 0.703337906783647 | 0.704083681085624 | 0.732419249914895 | 0.906887100092866 | 1.82308975918707 | 1.09321195475424 | 1.16997863357336 | 1.24009348466059 | 1.26752354823618 | 1.01124390900566 | 1.13785151927113 | 1.0956491075349 | 1.02216090329094 | 0.934121689750038 | 0.480825228903178 | 0.0581841416953897 | 0.0576380383939816 | 0.0570930240323569 | 0.0565490953567116 | 0.0560062491261919 | 0.0528178960758577 | 0.00201736945677288 | 0.00183574919004745 | 0.00206032248072257 |
27
+ | 24 | 0.193492192907198 | 0.385569347517664 | 0.572825592020731 | 0.768302509701516 | 0.749698371981323 | 0.616747317011816 | 0.59311574425243 | 0.57374314116502 | 0.569108306448091 | 0.564704120297908 | 0.624438679973295 | 0.613037186156672 | 0.609762817938952 | 0.621974156710297 | 0.766078270982995 | 0.852600174774314 | 1.83100700605279 | 1.04981189809783 | 1.11978907938031 | 1.15351134275698 | 0.914348555479648 | 1.03092842014415 | 0.993381470568937 | 0.925847679527178 | 0.846439888126328 | 0.435601982265045 | 0.0527117254573296 | 0.0522169850270957 | 0.0517232311181584 | 0.0512304607827449 | 0.0507386710848148 | 0.0478501934729921 | 0.00182762900427627 | 0.00166309074078794 | 0.00186654215036771 |
28
+ | 25 | 0.165925826746795 | 0.33086784402779 | 0.491565979529305 | 0.660452428268094 | 0.627527747278574 | 0.470962759812992 | 0.48165365507294 | 0.474157744369669 | 0.471902467756529 | 0.469117708397332 | 0.516160631110634 | 0.500300930798932 | 0.492007476935382 | 0.497052697771133 | 0.54069464832611 | 0.60224363469453 | 0.791621863699181 | 1.70473787279777 | 0.929177916732962 | 0.997955357774641 | 0.961995500948763 | 0.949059809593501 | 0.938161788176031 | 0.892132379953116 | 0.798736088424077 | 0.415590375973661 | 0.0502901425910015 | 0.0498181305943133 | 0.0493470597980173 | 0.0488769273897617 | 0.0484077305683882 | 0.0456519499577332 | 0.00174366751289344 | 0.00158668815657922 | 0.00178079298447732 |
29
+ | 26 | 0.172808437336453 | 0.344822811294809 | 0.512307030731636 | 0.689462611066773 | 0.633914938943071 | 0.479108285645414 | 0.493450793768153 | 0.487554687273473 | 0.485522230185971 | 0.482937020852494 | 0.530418382279189 | 0.511923309454059 | 0.503848240787414 | 0.507818997145943 | 0.543299289585638 | 0.572427734369471 | 0.768932368523526 | 0.8457310081337 | 1.75667381746505 | 0.988836108575665 | 1.00041561438658 | 1.17264294385693 | 1.03335791765504 | 1.0100048589901 | 0.922762833986326 | 0.475045615443243 | 0.05748475691214 | 0.0569452178794133 | 0.0564067546972005 | 0.0558693641508089 | 0.0553330430383404 | 0.0521830146163681 | 0.00199312028063746 | 0.00181368312510309 | 0.00203555700082345 |
30
+ | 3 | 0.151185191337698 | 0.301929277729937 | 0.448588806166573 | 0.604967212263329 | 0.532719818778295 | 0.4033103234474 | 0.421891249725435 | 0.418857559466621 | 0.417497963908512 | 0.415626457496146 | 0.455317172137666 | 0.436702568040918 | 0.429935661541026 | 0.432095581519658 | 0.446634997140905 | 0.460772417860325 | 0.520675183515443 | 0.633865790925671 | 0.747422847917021 | 1.64497605894068 | 0.862144054484936 | 1.07918318071632 | 1.12095503389319 | 0.971446848036996 | 0.908406264900471 | 0.462039996955376 | 0.0559109610639886 | 0.0553861933260404 | 0.0548624719843793 | 0.0543397939123231 | 0.0538181559956341 | 0.0507543678557532 | 0.00193855339036901 | 0.00176402879714773 | 0.00197982829414269 |
31
+ | 4 | 0.131049030350643 | 0.262160099158857 | 0.389518146811556 | 0.527504519834192 | 0.442316019133042 | 0.342154353033725 | 0.360152070109594 | 0.358339072613479 | 0.357338908706596 | 0.355970989575256 | 0.38917767600088 | 0.37135982051374 | 0.366574696444962 | 0.367924155990893 | 0.374894958762277 | 0.380614941224336 | 0.401516167997669 | 0.429583627766712 | 0.501236422436724 | 0.648700314125699 | 1.53055041120305 | 0.946910165209208 | 1.037148725901 | 1.07525227502152 | 0.885296222779025 | 0.481873724984365 | 0.0583110190738792 | 0.0577637249298592 | 0.0572175221001842 | 0.0566724073239547 | 0.0561283773532501 | 0.0529330717233137 | 0.00202176856863845 | 0.00183975225751585 | 0.00206481525671926 |
32
+ |44100| 0.101802251583302 | 0.2041615762505 | 0.303362144064407 | 0.413342771816601 | 0.284622594699509 | 0.251867108036271 | 0.266099348597074 | 0.265219069168578 | 0.264658806354956 | 0.264191822310273 | 0.286782552531528 | 0.269217726827595 | 0.269859942524894 | 0.270539438020624 | 0.27319781366125 | 0.275077767377702 | 0.278474262223577 | 0.284657241284663 | 0.300051918238832 | 0.331358253707055 | 0.518530079410501 | 1.55312344110517 | 0.847084571247971 | 0.9481498344351 | 0.953967515708387 | 0.467512216045307 | 0.0565731483864864 | 0.0560421655068788 | 0.0555122414166623 | 0.0549833729521235 | 0.054455556962141 | 0.0513554825265779 | 0.00196151285045803 | 0.00178492125694028 | 0.00200327659787697 |
33
+ |44102| 0.0786003663073115 | 0.157742684717276 | 0.234392686933455 | 0.319920514187864 | 0.206791220744278 | 0.191402811111519 | 0.202446561435298 | 0.201882974907995 | 0.201498026768017 | 0.201268386510349 | 0.218006017990471 | 0.203626068635594 | 0.205080035469048 | 0.205523611078922 | 0.206970236850932 | 0.207858324019256 | 0.207658702953865 | 0.208999408566081 | 0.212035521576962 | 0.217910571996919 | 0.253000902868432 | 0.565820701995427 | 1.47613166218156 | 0.756861642484798 | 0.795063546650924 | 0.381440179941917 | 0.0461576642487795 | 0.0457244387667657 | 0.0452920771441377 | 0.0448605767996425 | 0.0444299351623004 | 0.0419006045695359 | 0.00160038559198758 | 0.00145630565803969 | 0.00163446036219419 |
34
+ |44103| 0.0747202542534306 | 0.151085686209771 | 0.224541552072727 | 0.312040927748068 | 0.197664444987144 | 0.184190895856601 | 0.194845757487178 | 0.194310988156741 | 0.193941174360235 | 0.193733758957363 | 0.209995908441732 | 0.195840239899937 | 0.197383709387289 | 0.197806084595572 | 0.199134453782789 | 0.19992259887598 | 0.199321087591085 | 0.200139037105878 | 0.201836582360058 | 0.204952918088907 | 0.223545284511533 | 0.45757281726198 | 0.61787585399038 | 1.52472063910656 | 0.792422155343949 | 0.569519311016879 | 0.0689169167891968 | 0.0682700780684594 | 0.0676245291557394 | 0.0669802661970289 | 0.066337285353659 | 0.0625608016682105 | 0.0023894978757846 | 0.00217437553412187 | 0.00244037410925871 |
35
+ |44104| 0.0549174321105287 | 0.111348367233971 | 0.165495331393948 | 0.231473232529146 | 0.14394441384678 | 0.135569788984884 | 0.143447866589725 | 0.143069512622344 | 0.142802636343115 | 0.142669267562676 | 0.154624093972315 | 0.143993487969017 | 0.145288480973515 | 0.145589016539356 | 0.146477959618935 | 0.146972753534402 | 0.146073945362429 | 0.146130900617773 | 0.145972642961014 | 0.145353633748688 | 0.14161792626782 | 0.236913900138336 | 0.354476928856865 | 0.53067709278976 | 1.39909427099508 | 0.474309162195365 | 0.057395639499927 | 0.0568569369032395 | 0.0563193084891974 | 0.0557827510480917 | 0.0552472613829881 | 0.0521021163839691 | 0.00199003038809585 | 0.00181087141021786 | 0.00203240131952514 |
36
+ |44105| 0.0236726533638111 | 0.0528419473958301 | 0.0787105155710479 | 0.133703058223812 | 0.0738960374559481 | 0.069838323071707 | 0.073882321455352 | 0.0736595119014691 | 0.0735013996827904 | 0.0734189535785694 | 0.0804837676639267 | 0.0742446374496168 | 0.0749744240992277 | 0.0751517195134499 | 0.0756658181928333 | 0.0759463876934597 | 0.0753283469309581 | 0.0752648369364433 | 0.0749187015795843 | 0.0740286163259196 | 0.0686848084891527 | 0.102858361773066 | 0.135509890729056 | 0.209725983382074 | 0.384892545448841 | 1.09147594591117 | 0.132078325504823 | 0.130838667970984 | 0.129601482336515 | 0.128366761215261 | 0.127134497250468 | 0.119896918079653 | 0.00457943989566919 | 0.00416716087929357 | 0.00467694349911398 |
37
+ | 5 | 0.00428206805760895 | 0.00143066948454697 | 0.00248609622013471 | 0.0143117389077685 | 0.00399723884855405 | 0.00368776360460498 | 0.0038837959153822 | 0.00384817138869325 | 0.00382329399451112 | 0.00380498715486426 | 0.00486317124205566 | 0.00399893037788482 | 0.00405494366918949 | 0.00408316199355551 | 0.0041691900054045 | 0.00421928484955422 | 0.00415518112338903 | 0.00418380759293969 | 0.00422943429719749 | 0.00429682184501568 | 0.00469640136199786 | 0.00965375227436077 | 0.0153530270373853 | 0.0280591806267465 | 0.0576326391564692 | 0.177464596687384 | 0.780529204483932 | 0.217058498282155 | 0.2156480201853 | 0.214240351805769 | 0.212835484756346 | 0.204584138628267 | 0.000604139081936176 | 0.00692343936454599 | 0.00777620026969846 |
38
+ | 6 | 0.0259402288354608 | 0.0453067426790929 | 0.067079346258279 | 0.0390920098750296 | 0.0436167929042948 | 0.0416693653940306 | 0.0441500318608842 | 0.0441068690385687 | 0.0440743149903576 | 0.0440784347669058 | 0.04574864583306 | 0.0439952376544178 | 0.0443781531355459 | 0.0444131175895012 | 0.0444943156685055 | 0.0445240818635329 | 0.0442366504206094 | 0.0440375653817638 | 0.0434841380133667 | 0.0423015074177095 | 0.0352251014092748 | 0.0379153673265637 | 0.0350318480649831 | 0.0298833037282514 | 0.0200879211521154 | 0.0224788345113363 | 0.384172117569439 | 0.615255016128572 | 0.381328671975407 | 0.37991119735408 | 0.37849654357777 | 0.370187716087991 | 0.0064102855341364 | 0.0042413464396756 | 0.00475875747304311 |
39
+ | 7 | 0.0232078133677134 | 0.0339272275917191 | 0.0501135004887265 | 0.0443092196934612 | 0.0375804954755689 | 0.0357951203347312 | 0.0379144448526338 | 0.0378627346044663 | 0.0378248250112203 | 0.0378194279746241 | 0.0396588983260008 | 0.0378449115375506 | 0.0381783528972693 | 0.0382198900092202 | 0.0383276188469578 | 0.0383771160743835 | 0.0381282932410054 | 0.0379960424275712 | 0.0376097319839136 | 0.0367676539958474 | 0.0317270862523631 | 0.0387079346991589 | 0.0421418709491858 | 0.0507811599939226 | 0.0725698614086085 | 0.158648479992167 | 0.264214527838954 | 0.263097441769912 | 0.735026389890218 | 0.26086994544499 | 0.25975952190391 | 0.253237560277727 | 0.00222942561270641 | 0.000425315374909903 | 0.00944154681479051 |
40
+ | 8 | 0.0182907332924413 | 0.0351597425158603 | 0.052033993145768 | 0.0444018564173223 | 0.0373303300991636 | 0.0355389861905309 | 0.0376354365783722 | 0.0375730140647305 | 0.037527608260277 | 0.0375159471649261 | 0.0396677710847952 | 0.0376088431525067 | 0.0379509426699467 | 0.0380009704744415 | 0.0381343985393365 | 0.0381988491664444 | 0.0379289998237746 | 0.0378035261819059 | 0.0374261535221454 | 0.0365943930720028 | 0.0316144366657436 | 0.0387208637274869 | 0.0423406202037888 | 0.0513852580456434 | 0.0741022669535889 | 0.163962325837437 | 0.274129442680653 | 0.273008701093938 | 0.271890194286061 | 0.725242020675586 | 0.26965985832289 | 0.263116554432538 | 0.00258327120194925 | 0.00871848943562744 | 0.000834110680426044 |
41
+ | 9 | 1.55596163072858 | 2.63641405458023 | 3.90003008467143 | 2.91386832729571 | 2.72330930990013 | 2.59663823089974 | 2.75054926392216 | 2.74698455270021 | 2.74435624445472 | 2.7440884674722 | 2.87277297556912 | 2.74457794830801 | 2.76887083104418 | 2.77173907981294 | 2.77902135392293 | 2.78224737634749 | 2.76376852139839 | 2.75318156846493 | 2.72272190511781 | 2.65671885877008 | 2.26167492252177 | 2.63725825108415 | 2.72052412446678 | 2.98081243909448 | 3.71421620035713 | 6.5182699867831 | 9.95531339228791 | 9.95082299332193 | 9.94634154829207 | 9.94186903044355 | 8.94238053750617 | 8.95198482308775 | 0.348279118154781 | 0.310394862809376 | 0.349153967999911 |
42
+ | A | 1.60140161530726 | 2.70906326046144 | 4.00731495999829 | 2.98835193545263 | 2.79724629228759 | 2.66719361217727 | 2.82529735381085 | 2.82165026130486 | 2.81896055812585 | 2.81869398995385 | 2.95046005061251 | 2.81910531837086 | 2.84404796494854 | 2.84698270960749 | 2.8544270390703 | 2.85771920366709 | 2.83875653496251 | 2.82786162138841 | 2.79653322257733 | 2.72866253609162 | 2.32244209786277 | 2.70619070500343 | 2.78914593246354 | 3.0508189285373 | 3.79099563674582 | 6.61782698097902 | 10.082765652096 | 10.0792551111839 | 10.0757515703534 | 10.0722550086879 | 10.0687654053541 | 9.04826956913328 | 0.352774173894877 | 0.32248044240785 | 0.362759028653842 |
43
+ | B | 1.60140161530726 | 2.70906326046144 | 4.00731495999829 | 2.98835193545263 | 2.79724629228759 | 2.66719361217727 | 2.82529735381085 | 2.82165026130486 | 2.81896055812585 | 2.81869398995385 | 2.95046005061251 | 2.81910531837086 | 2.84404796494854 | 2.84698270960749 | 2.8544270390703 | 2.85771920366709 | 2.83875653496251 | 2.82786162138841 | 2.79653322257733 | 2.72866253609162 | 2.32244209786277 | 2.70619070500343 | 2.78914593246354 | 3.0508189285373 | 3.79099563674582 | 6.61782698097902 | 10.082765652096 | 10.0792551111839 | 10.0757515703534 | 10.0722550086879 | 10.0687654053541 | 10.0482695691333 | 0.647225826105123 | 0.32248044240785 | 0.362759028653842 |
44
+ | C | 1.60452460094489 | 2.71527538820124 | 4.03596115725938 | 3.00067535762834 | 2.81018791385647 | 2.67949913316264 | 2.83830804001222 | 2.83460865924746 | 2.83188160715427 | 2.83159380876738 | 2.96501623020695 | 2.8322212304407 | 2.85731703787758 | 2.86029347016249 | 2.86785602109649 | 2.87121134458886 | 2.85208052789896 | 2.84114554398891 | 2.80967031258351 | 2.74145442249456 | 2.33316438341254 | 2.7180363086118 | 2.80051312961269 | 3.06149845024229 | 3.80072262147018 | 6.62284259741394 | 10.0821587177676 | 10.078653873405 | 10.075156017765 | 10.0716651299648 | 10.0681811892051 | 10.0477186115468 | 0.35275313017505 | 0.677538706782447 | 0.362737536879545 |
45
+ | D | 0.880295136150399 | 2.55484170189327 | 3.8073308206926 | 2.6825243723863 | 2.4742130853796 | 2.35718105609542 | 2.49602827306575 | 2.49153917629882 | 2.48827467381092 | 2.48731946279743 | 2.64096633220124 | 2.49540023294212 | 2.51871053196511 | 2.52230804871015 | 2.53190917764079 | 2.53656532191272 | 2.51718688061478 | 2.50820823152121 | 2.48118438411519 | 2.4216054518236 | 2.06488244095408 | 2.42177546089277 | 2.51619901771912 | 2.79436480065111 | 3.55743177781448 | 6.49738783199494 | 10.0973398634495 | 10.0936925322591 | 10.0900524739126 | 10.0864196666783 | 10.0827940889112 | 10.0614996204536 | 0.353279493179214 | 0.322940268675082 | 0.636724893005641 |
46
+ MATRIX
47
+ lines = matrix_text.split(/\n/)
48
+ lines.shift
49
+ lines.map do |line|
50
+ row = line.scan(/[A-Z\d\.]+/)
51
+ row.shift
52
+ row.map(&:to_f)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end