diff --git a/appdata/invest-data/biophysical_tables/guo_et_al_2014_mortality_risk.csv b/appdata/invest-data/biophysical_tables/guo_et_al_2014_mortality_risk.csv index dcd4ecd..ee2961e 100644 --- a/appdata/invest-data/biophysical_tables/guo_et_al_2014_mortality_risk.csv +++ b/appdata/invest-data/biophysical_tables/guo_et_al_2014_mortality_risk.csv @@ -1,110 +1,110 @@ city,t_01,t_10,t_mmtp,t_90,t_99,rr_01,rr_10,rr_mmtp,rr_90,rr_99 -"Honolulu",20.3,22.5,27.2,28.1,29.2,1.11,1.121212121,1,1.00990099,1.02 -"Miami",13.9,19.7,28.1,29.4,30.6,1.24,1.137614679,1,1.038095238,1.09 -"Corpus Christi",5.6,12.8,28.1,29.4,30.8,1.21,1.080357143,1,0.98989899,0.98 -"St. Petersburg",9.2,15.3,27.5,28.6,30,1.19,1.155339806,1,0.979591837,0.96 -"Tampa",9.2,15.3,27.5,28.6,30,1.21,1.12037037,1,1.038461538,1.08 -"Orlando",8.9,15,27.2,28.6,30,1.18,1.123809524,1,1.029411765,1.05 -"San Antonio",2.8,9.7,27.8,30,31.7,1.23,1.205882353,1,1,1.01 -"Houston",3.3,10,27.2,29.4,31.4,1.27,1.165137615,1,1.00990099,1.02 -"New Orleans",4.4,10.6,26.9,28.6,30.6,1.37,1.201754386,1,1.046728972,1.12 -"Lake Charles",3.1,10,26.9,28.6,30.6,0.82,0.891304348,1,1.048543689,1.08 -"Lafayette",4.4,10.6,26.9,28.6,30.6,0.99,0.951923077,1,0.91011236,0.81 -"Austin",2,9.7,27.8,29.7,31.7,1.21,1.21,1,1.01980198,1.03 -"Jacksonville",4.4,10.6,26.4,28.1,30,1.29,1.205607477,1,1.10619469,1.25 -"Baton Rouge",2.5,9.4,26.4,28.3,30.6,1.66,1.394957983,1,1.009615385,1.05 -"Mobile",2.5,9.4,26.1,27.8,30,1.02,1.03030303,1,1.067961165,1.1 -"El Paso",0.8,6.7,25.6,28.3,32.2,1,0.980392157,1,1.01,1.01 -"Tucson",5.6,10.3,28.3,30.8,34.4,1.13,1.076190476,1,1.064814815,1.15 -"Jackson",-0.5,6.7,25.6,28.1,30.3,1.25,1.179245283,1,1.046728972,1.12 -"Shreveport",-0.5,7.2,26.1,28.8,31.7,1.17,1.158415842,1,0.97979798,0.97 -"Columbus",1.1,7.8,25.8,28.2,30.8,0.87,0.896907216,1,1.01980198,1.03 -"Dallas/Fort Worth",-1.1,6.9,26.9,30,33.3,1.1,1.089108911,1,1.01980198,1.03 -"San Diego",10.6,13.3,20.3,21.9,25.3,1.19,1.133333333,1,1.038095238,1.09 -"Birmingham",-1.9,5.6,24.7,27.2,30,1.28,1.185185185,1,1.048076923,1.09 -"Phoenix",8.1,12.8,31.7,34.7,37.8,1.02,1.040816327,1,1,0.99 -"Lubbock",-5,3.3,24.2,27.5,30.6,1.14,1.008849558,1,1.029126214,1.06 -"Atlanta",-1.6,5.8,24.7,27.2,30,1.04,1.04,1,1,0.99 -"Santa Ana/Anaheim",9.7,12.8,21,23.1,26.7,1.08,1.018867925,1,1.00990099,1.02 -"Riverside",8.3,12.1,25,27.9,31.9,1.09,1.048076923,1,1.037735849,1.1 -"Cayce",1.9,8.6,25.6,28.1,30.6,1.13,1.13,1,1.038095238,1.09 -"Los Angeles",9.7,12.9,20.7,22.5,26.3,1.08,1.069306931,1,1.028846154,1.07 -"San Bernardino",8.3,11.9,22.6,24.8,28.1,1.22,1.12962963,1,1.009803922,1.03 -"Huntsville",-3.9,4.4,24.2,26.9,29.4,1.41,1.281818182,1,1.028846154,1.07 -"Little Rock",-4.2,4.8,25.3,28.5,31.9,1.23,1.171428571,1,1,1 -"Memphis",-4.4,4.4,25.6,28.3,31.1,1.35,1.310679612,1,1.019607843,1.04 -"Albuquerque",-4.2,2.5,22.2,25.6,28.9,1.09,1.058252427,1,1.01980198,1.03 -"Charlotte",-2.2,5,23.9,26.7,29.7,1.07,1.091836735,1,0.935483871,0.87 -"Bakersfield",3.3,8.3,25,28.9,33.7,1.13,1.141414141,1,1.047619048,1.1 -"Oklahoma City",-6.4,2.8,24.2,28.2,31.1,1.26,1.188679245,1,0.97979798,0.97 -"Raleigh",-3.1,3.9,23.3,26.4,29.4,1.29,1.205607477,1,0.978947368,0.93 -"Knoxville",-5,3.1,23.1,25.8,28.6,1.29,1.216981132,1,1.073394495,1.17 -"Greensboro",-4.2,3.1,22.5,25.8,28.9,1.24,1.097345133,1,0.902173913,0.83 -"Tulsa",-6.9,2.8,24.4,28.6,32.2,1,1.020408163,1,1,0.97 -"Nashville",-6.1,3.1,23.9,26.9,29.7,1.13,1.118811881,1,1.074074074,1.16 -"Las Vegas",2.8,8.1,28.6,32.8,36.1,0.97,1.043010753,1,1.057142857,1.11 -"Fresno",3.1,7.8,24.4,28.1,32.2,1.03,1,1,1.029411765,1.05 -"Norfolk",-2.5,4.4,23.6,26.9,30.3,1.18,1.053571429,1,0.98,0.98 -"Newport News",-2.2,4.5,23.8,26.9,30.6,1.16,1.054545455,1,0.979381443,0.95 -"San Jose",6.7,9.9,17.5,19.4,23.6,1.18,1.072727273,1,1,1.01 -"Richmond",-4.7,2.8,22.8,26.1,29.7,1.31,1.201834862,1,0.97979798,0.97 -"Modesto",3.1,8.1,22.8,25.8,30.8,1.19,1.072072072,1,1.074766355,1.15 -"Wichita",-10.2,0,23.1,27.5,31.7,0.83,0.892473118,1,0.989795918,0.97 -"Oakland",7,10.2,17.8,19.4,23.5,1.09,1.079207921,1,1,1.01 -"San Francisco",6.4,9.7,16.9,18.9,23,1.17,1.125,1,0.98989899,0.98 -"Stockton",3.1,8,22.6,25.9,30.6,1.39,1.241071429,1,0.99,0.99 -"Evansville",-9.7,0.6,22.8,26.1,29.7,0.83,0.864583333,1,1.029411765,1.05 -"Lexington",-10,0,21.7,25,28.3,1.25,1.25,1,1.082568807,1.18 -"Louisville",-8.6,1.1,23.1,26.4,29.7,1.32,1.189189189,1,1.038461538,1.08 -"Sacramento",3.5,8.2,22.4,25.6,30.1,1.09,1.058252427,1,1.019607843,1.04 -"St. Louis",-11.1,0,23.1,26.9,31.1,1.15,1.095238095,1,1,0.98 -"Colorado Springs",-12.5,-2.8,17.8,21.1,24.7,1.1,1.12244898,1,0.97979798,0.97 -"Arlington",-5.6,2.2,23.1,26.7,30.6,1.32,1.157894737,1,0.947368421,0.9 -"Washington",-7.8,0.3,21.1,25,28.9,1.07,1.103092784,1,1.00990099,1.02 -"Topeka",-12.5,-1.4,22.2,26.1,30.6,1.06,1.070707071,1,0.914893617,0.86 -"Kansas City",-12.4,-1.5,22.1,26.5,30.8,1.33,1.254716981,1,0.990196078,1.01 -"Kansas City",-13,-1.7,21.9,26.1,30.6,1.3,1.203703704,1,1.019047619,1.07 -"Cincinnati",-11.4,-0.8,21.1,24.7,28.3,1.29,1.205607477,1,0.95959596,0.95 -"Baltimore",-6.7,0.8,21.7,25.6,29.7,1.3,1.274509804,1,1.09009009,1.21 -"Denver",-12.6,-2.6,19.2,23,26.8,0.79,0.806122449,1,1.02,1.02 -"Indianapolis",-12.7,-1.7,20.8,24.4,28.3,1.08,1.009345794,1,1.019607843,1.04 -"Dayton",-12.8,-2.5,20.3,24.2,28.3,1.09,1.018691589,1,0.969387755,0.95 -"Columbus",-11.4,-1.4,20.6,24.4,28.3,0.97,0.950980392,1,1.02,1.02 -"Philadelphia",-7.2,0.6,21.9,25.8,29.7,1.33,1.231481481,1,1.072072072,1.19 -"Johnstown",-11.4,-3.3,18.9,22.8,27.2,1.16,1.104761905,1,1.097345133,1.24 -"Pittsburgh",-11.4,-2.2,19.7,23.3,27.5,1.15,1.12745098,1,1.029411765,1.05 -"New York",-7.1,0.6,21,24.9,29,1.22,1.173076923,1,1.083333333,1.17 -"Jersey City",-7.8,0.3,21.7,25.8,30.2,1.2,1.121495327,1,1.029126214,1.06 -"Newark",-7.8,0.3,21.7,25.8,30.2,1.09,1.028301887,1,1.065420561,1.14 -"Salt Lake City",-8.6,-1.7,20.6,25.8,29.7,1.01,0.990196078,1,1.056074766,1.13 -"Lincoln",-16.1,-4.2,21.1,25.6,30.3,1.1,1.057692308,1,0.959183673,0.94 -"Fort Wayne",-14.7,-3.3,19.4,23.9,28,1.06,1.070707071,1,1.047619048,1.1 -"Akron",-12.8,-3.1,18.9,22.9,26.9,1.15,1.074766355,1,1.028846154,1.07 -"Omaha",-16.1,-4,21.2,25.1,29.7,1.28,1.306122449,1,1.037383178,1.11 -"Cleveland",-11.9,-2.8,19.2,23.3,27.8,1.28,1.20754717,1,1,1.02 -"Des Moines",-17.5,-5.3,20.6,24.4,29.4,1.21,1.130841121,1,1.064814815,1.15 -"Toledo",-13.6,-3.6,19.2,23.6,27.8,1.26,1.211538462,1,1.038461538,1.08 -"Coventry",-9.7,-1.7,18.9,23.1,27.5,1.04,1.050505051,1,0.958333333,0.92 -"Providence",-9.7,-1.7,18.9,23.1,27.5,1.17,1.13592233,1,1.046728972,1.12 -"Chicago",-15,-3.9,19.4,23.9,28.6,1.18,1.145631068,1,0.979591837,0.96 -"Kingston",-7.1,0.6,21,24.9,29,1.05,1.009615385,1,0.936170213,0.88 -"Cedar Rapids",-17.5,-5.3,20.6,24.4,29.4,1.07,1.080808081,1,0.979166667,0.94 -"Worcester",-12.9,-4.7,17.4,21.5,25.8,1.26,1.223300971,1,1.123893805,1.27 -"Boston",-9.7,-1.7,18.9,23.3,28.3,1.17,1.181818182,1,1.047619048,1.1 -"Detroit",-12.5,-3.6,19.4,23.6,28.1,1.17,1.125,1,1.029126214,1.06 -"Buffalo",-12.8,-4.4,18.3,22.2,26.1,1.27,1.20952381,1,1.028846154,1.07 -"Grand Rapids",-13.6,-5,18.3,22.5,27.2,1.12,1.12,1,0.912087912,0.83 -"Syracuse",-14.2,-5.3,18.3,22.2,26.7,1.02,1.051546392,1,1.009803922,1.03 -"Milwaukee",-15,-4.4,18.3,23.1,28.1,1.35,1.298076923,1,1.072727273,1.18 -"Madison",-17.8,-6.7,18.3,22.5,27.2,1.01,1.01,1,1,0.99 -"Rochester",-13.3,-4.7,18.1,22.2,26.7,1.02,1.03030303,1,1.019607843,1.04 -"Muskegon",-12.2,-4.2,17.8,21.7,26.1,0.99,1.064516129,1,0.97979798,0.97 -"Biddeford",-13.6,-5.3,16.7,20.6,25.6,1.09,1.172043011,1,1,1 -"Minneapolis/St. Paul",-20.8,-9.2,18.9,23.1,28.1,1.23,1.194174757,1,1.019417476,1.05 -"Portland",-0.3,4.4,17.8,21.1,26.1,1.25,1.179245283,1,1.099099099,1.22 -"Olympia",-2.5,3.3,15,18.1,22.2,1.17,1.158415842,1,1.091743119,1.19 -"Tacoma",-0.6,4.7,16.1,18.9,23.6,1.17,1.13592233,1,1.038834951,1.07 -"Seattle",-0.6,4.7,16.1,18.9,23.6,1.27,1.154545455,1,1.019230769,1.06 -"Spokane",-11.1,-2.2,16.1,20.8,26.1,1.17,1.093457944,1,1.01980198,1.03 -"Anchorage",-20.6,-10.6,11.7,14.4,17.8,0.94,0.94,1,0.989690722,0.96 +Honolulu,20.3,22.5,27.2,28.1,29.2,1.11,1.121212121,1,1.00990099,1.02 +Miami,13.9,19.7,28.1,29.4,30.6,1.24,1.137614679,1,1.038095238,1.09 +Corpus Christi,5.6,12.8,28.1,29.4,30.8,1.21,1.080357143,1,0.98989899,0.98 +St. Petersburg,9.2,15.3,27.5,28.6,30,1.19,1.155339806,1,0.979591837,0.96 +Tampa,9.2,15.3,27.5,28.6,30,1.21,1.12037037,1,1.038461538,1.08 +Orlando,8.9,15,27.2,28.6,30,1.18,1.123809524,1,1.029411765,1.05 +San Antonio,2.8,9.7,27.8,30,31.7,1.23,1.205882353,1,1,1.01 +Houston,3.3,10,27.2,29.4,31.4,1.27,1.165137615,1,1.00990099,1.02 +New Orleans,4.4,10.6,26.9,28.6,30.6,1.37,1.201754386,1,1.046728972,1.12 +Lake Charles,3.1,10,26.9,28.6,30.6,0.82,0.891304348,1,1.048543689,1.08 +Lafayette,4.4,10.6,26.9,28.6,30.6,0.99,0.951923077,1,0.91011236,0.81 +Austin,2,9.7,27.8,29.7,31.7,1.21,1.21,1,1.01980198,1.03 +Jacksonville,4.4,10.6,26.4,28.1,30,1.29,1.205607477,1,1.10619469,1.25 +Baton Rouge,2.5,9.4,26.4,28.3,30.6,1.66,1.394957983,1,1.009615385,1.05 +Mobile,2.5,9.4,26.1,27.8,30,1.02,1.03030303,1,1.067961165,1.1 +El Paso,0.8,6.7,25.6,28.3,32.2,1,0.980392157,1,1.01,1.01 +Tucson,5.6,10.3,28.3,30.8,34.4,1.13,1.076190476,1,1.064814815,1.15 +Jackson,-0.5,6.7,25.6,28.1,30.3,1.25,1.179245283,1,1.046728972,1.12 +Shreveport,-0.5,7.2,26.1,28.8,31.7,1.17,1.158415842,1,0.97979798,0.97 +Columbus,1.1,7.8,25.8,28.2,30.8,0.87,0.896907216,1,1.01980198,1.03 +Dallas/Fort Worth,-1.1,6.9,26.9,30,33.3,1.1,1.089108911,1,1.01980198,1.03 +San Diego,10.6,13.3,20.3,21.9,25.3,1.19,1.133333333,1,1.038095238,1.09 +Birmingham,-1.9,5.6,24.7,27.2,30,1.28,1.185185185,1,1.048076923,1.09 +Phoenix,8.1,12.8,31.7,34.7,37.8,1.02,1.040816327,1,1,0.99 +Lubbock,-5,3.3,24.2,27.5,30.6,1.14,1.008849558,1,1.029126214,1.06 +Atlanta,-1.6,5.8,24.7,27.2,30,1.04,1.04,1,1,0.99 +Santa Ana/Anaheim,9.7,12.8,21,23.1,26.7,1.08,1.018867925,1,1.00990099,1.02 +Riverside,8.3,12.1,25,27.9,31.9,1.09,1.048076923,1,1.037735849,1.1 +Cayce,1.9,8.6,25.6,28.1,30.6,1.13,1.13,1,1.038095238,1.09 +Los Angeles,9.7,12.9,20.7,22.5,26.3,1.08,1.069306931,1,1.028846154,1.07 +San Bernardino,8.3,11.9,22.6,24.8,28.1,1.22,1.12962963,1,1.009803922,1.03 +Huntsville,-3.9,4.4,24.2,26.9,29.4,1.41,1.281818182,1,1.028846154,1.07 +Little Rock,-4.2,4.8,25.3,28.5,31.9,1.23,1.171428571,1,1,1 +Memphis,-4.4,4.4,25.6,28.3,31.1,1.35,1.310679612,1,1.019607843,1.04 +Albuquerque,-4.2,2.5,22.2,25.6,28.9,1.09,1.058252427,1,1.01980198,1.03 +Charlotte,-2.2,5,23.9,26.7,29.7,1.07,1.091836735,1,0.935483871,0.87 +Bakersfield,3.3,8.3,25,28.9,33.7,1.13,1.141414141,1,1.047619048,1.1 +Oklahoma City,-6.4,2.8,24.2,28.2,31.1,1.26,1.188679245,1,0.97979798,0.97 +Raleigh,-3.1,3.9,23.3,26.4,29.4,1.29,1.205607477,1,0.978947368,0.93 +Knoxville,-5,3.1,23.1,25.8,28.6,1.29,1.216981132,1,1.073394495,1.17 +Greensboro,-4.2,3.1,22.5,25.8,28.9,1.24,1.097345133,1,0.902173913,0.83 +Tulsa,-6.9,2.8,24.4,28.6,32.2,1,1.020408163,1,1,0.97 +Nashville,-6.1,3.1,23.9,26.9,29.7,1.13,1.118811881,1,1.074074074,1.16 +Las Vegas,2.8,8.1,28.6,32.8,36.1,0.97,1.043010753,1,1.057142857,1.11 +Fresno,3.1,7.8,24.4,28.1,32.2,1.03,1,1,1.029411765,1.05 +Norfolk,-2.5,4.4,23.6,26.9,30.3,1.18,1.053571429,1,0.98,0.98 +Newport News,-2.2,4.5,23.8,26.9,30.6,1.16,1.054545455,1,0.979381443,0.95 +San Jose,6.7,9.9,17.5,19.4,23.6,1.18,1.072727273,1,1,1.01 +Richmond,-4.7,2.8,22.8,26.1,29.7,1.31,1.201834862,1,0.97979798,0.97 +Modesto,3.1,8.1,22.8,25.8,30.8,1.19,1.072072072,1,1.074766355,1.15 +Wichita,-10.2,0,23.1,27.5,31.7,0.83,0.892473118,1,0.989795918,0.97 +Oakland,7,10.2,17.8,19.4,23.5,1.09,1.079207921,1,1,1.01 +San Francisco,6.4,9.7,16.9,18.9,23,1.17,1.125,1,0.98989899,0.98 +Stockton,3.1,8,22.6,25.9,30.6,1.39,1.241071429,1,0.99,0.99 +Evansville,-9.7,0.6,22.8,26.1,29.7,0.83,0.864583333,1,1.029411765,1.05 +Lexington,-10,0,21.7,25,28.3,1.25,1.25,1,1.082568807,1.18 +Louisville,-8.6,1.1,23.1,26.4,29.7,1.32,1.189189189,1,1.038461538,1.08 +Sacramento,3.5,8.2,22.4,25.6,30.1,1.09,1.058252427,1,1.019607843,1.04 +St. Louis,-11.1,0,23.1,26.9,31.1,1.15,1.095238095,1,1,0.98 +Colorado Springs,-12.5,-2.8,17.8,21.1,24.7,1.1,1.12244898,1,0.97979798,0.97 +Arlington,-5.6,2.2,23.1,26.7,30.6,1.32,1.157894737,1,0.947368421,0.9 +Washington,-7.8,0.3,21.1,25,28.9,1.07,1.103092784,1,1.00990099,1.02 +Topeka,-12.5,-1.4,22.2,26.1,30.6,1.06,1.070707071,1,0.914893617,0.86 +Kansas City,-12.4,-1.5,22.1,26.5,30.8,1.33,1.254716981,1,0.990196078,1.01 +Kansas City,-13,-1.7,21.9,26.1,30.6,1.3,1.203703704,1,1.019047619,1.07 +Cincinnati,-11.4,-0.8,21.1,24.7,28.3,1.29,1.205607477,1,0.95959596,0.95 +Baltimore,-6.7,0.8,21.7,25.6,29.7,1.3,1.274509804,1,1.09009009,1.21 +Denver,-12.6,-2.6,19.2,23,26.8,0.79,0.806122449,1,1.02,1.02 +Indianapolis,-12.7,-1.7,20.8,24.4,28.3,1.08,1.009345794,1,1.019607843,1.04 +Dayton,-12.8,-2.5,20.3,24.2,28.3,1.09,1.018691589,1,0.969387755,0.95 +Columbus,-11.4,-1.4,20.6,24.4,28.3,0.97,0.950980392,1,1.02,1.02 +Philadelphia,-7.2,0.6,21.9,25.8,29.7,1.33,1.231481481,1,1.072072072,1.19 +Johnstown,-11.4,-3.3,18.9,22.8,27.2,1.16,1.104761905,1,1.097345133,1.24 +Pittsburgh,-11.4,-2.2,19.7,23.3,27.5,1.15,1.12745098,1,1.029411765,1.05 +New York,-7.1,0.6,21,24.9,29,1.22,1.173076923,1,1.083333333,1.17 +Jersey City,-7.8,0.3,21.7,25.8,30.2,1.2,1.121495327,1,1.029126214,1.06 +Newark,-7.8,0.3,21.7,25.8,30.2,1.09,1.028301887,1,1.065420561,1.14 +Salt Lake City,-8.6,-1.7,20.6,25.8,29.7,1.01,0.990196078,1,1.056074766,1.13 +Lincoln,-16.1,-4.2,21.1,25.6,30.3,1.1,1.057692308,1,0.959183673,0.94 +Fort Wayne,-14.7,-3.3,19.4,23.9,28,1.06,1.070707071,1,1.047619048,1.1 +Akron,-12.8,-3.1,18.9,22.9,26.9,1.15,1.074766355,1,1.028846154,1.07 +Omaha,-16.1,-4,21.2,25.1,29.7,1.28,1.306122449,1,1.037383178,1.11 +Cleveland,-11.9,-2.8,19.2,23.3,27.8,1.28,1.20754717,1,1,1.02 +Des Moines,-17.5,-5.3,20.6,24.4,29.4,1.21,1.130841121,1,1.064814815,1.15 +Toledo,-13.6,-3.6,19.2,23.6,27.8,1.26,1.211538462,1,1.038461538,1.08 +Coventry,-9.7,-1.7,18.9,23.1,27.5,1.04,1.050505051,1,0.958333333,0.92 +Providence,-9.7,-1.7,18.9,23.1,27.5,1.17,1.13592233,1,1.046728972,1.12 +Chicago,-15,-3.9,19.4,23.9,28.6,1.18,1.145631068,1,0.979591837,0.96 +Kingston,-7.1,0.6,21,24.9,29,1.05,1.009615385,1,0.936170213,0.88 +Cedar Rapids,-17.5,-5.3,20.6,24.4,29.4,1.07,1.080808081,1,0.979166667,0.94 +Worcester,-12.9,-4.7,17.4,21.5,25.8,1.26,1.223300971,1,1.123893805,1.27 +Boston,-9.7,-1.7,18.9,23.3,28.3,1.17,1.181818182,1,1.047619048,1.1 +Detroit,-12.5,-3.6,19.4,23.6,28.1,1.17,1.125,1,1.029126214,1.06 +Buffalo,-12.8,-4.4,18.3,22.2,26.1,1.27,1.20952381,1,1.028846154,1.07 +Grand Rapids,-13.6,-5,18.3,22.5,27.2,1.12,1.12,1,0.912087912,0.83 +Syracuse,-14.2,-5.3,18.3,22.2,26.7,1.02,1.051546392,1,1.009803922,1.03 +Milwaukee,-15,-4.4,18.3,23.1,28.1,1.35,1.298076923,1,1.072727273,1.18 +Madison,-17.8,-6.7,18.3,22.5,27.2,1.01,1.01,1,1,0.99 +Rochester,-13.3,-4.7,18.1,22.2,26.7,1.02,1.03030303,1,1.019607843,1.04 +Muskegon,-12.2,-4.2,17.8,21.7,26.1,0.99,1.064516129,1,0.97979798,0.97 +Biddeford,-13.6,-5.3,16.7,20.6,25.6,1.09,1.172043011,1,1,1 +Minneapolis/St. Paul,-20.8,-9.2,18.9,23.1,28.1,1.23,1.194174757,1,1.019417476,1.05 +Portland,-0.3,4.4,17.8,21.1,26.1,1.25,1.179245283,1,1.099099099,1.22 +Olympia,-2.5,3.3,15,18.1,22.2,1.17,1.158415842,1,1.091743119,1.19 +Tacoma,-0.6,4.7,16.1,18.9,23.6,1.17,1.13592233,1,1.038834951,1.07 +Seattle,-0.6,4.7,16.1,18.9,23.6,1.27,1.154545455,1,1.019230769,1.06 +Spokane,-11.1,-2.2,16.1,20.8,26.1,1.17,1.093457944,1,1.01980198,1.03 +Anchorage,-20.6,-10.6,11.7,14.4,17.8,0.94,0.94,1,0.989690722,0.96 diff --git a/appdata/invest-data/biophysical_tables/placeholder_ucm_energy_parameters.csv b/appdata/invest-data/biophysical_tables/placeholder_ucm_energy_parameters.csv new file mode 100644 index 0000000..5dd9733 --- /dev/null +++ b/appdata/invest-data/biophysical_tables/placeholder_ucm_energy_parameters.csv @@ -0,0 +1,2401 @@ +lucode,kwh_per_cdd,kwh_per_hdd,cost_per_kwh +0,1.8,2.2,0.14 +1,1.8,2.2,0.14 +2,1.8,2.2,0.14 +3,1.8,2.2,0.14 +4,1.8,2.2,0.14 +5,1.8,2.2,0.14 +6,1.8,2.2,0.14 +7,1.8,2.2,0.14 +8,1.8,2.2,0.14 +9,1.8,2.2,0.14 +10,1.8,2.2,0.14 +11,1.8,2.2,0.14 +12,1.8,2.2,0.14 +13,1.8,2.2,0.14 +14,1.8,2.2,0.14 +15,1.8,2.2,0.14 +16,1.8,2.2,0.14 +17,1.8,2.2,0.14 +18,1.8,2.2,0.14 +19,1.8,2.2,0.14 +20,1.8,2.2,0.14 +21,1.8,2.2,0.14 +22,1.8,2.2,0.14 +23,1.8,2.2,0.14 +24,1.8,2.2,0.14 +25,1.8,2.2,0.14 +26,1.8,2.2,0.14 +27,1.8,2.2,0.14 +28,1.8,2.2,0.14 +29,1.8,2.2,0.14 +30,1.8,2.2,0.14 +31,1.8,2.2,0.14 +32,1.8,2.2,0.14 +33,1.8,2.2,0.14 +34,1.8,2.2,0.14 +35,1.8,2.2,0.14 +36,1.8,2.2,0.14 +37,1.8,2.2,0.14 +38,1.8,2.2,0.14 +39,1.8,2.2,0.14 +40,1.8,2.2,0.14 +41,1.8,2.2,0.14 +42,1.8,2.2,0.14 +43,1.8,2.2,0.14 +44,1.8,2.2,0.14 +45,1.8,2.2,0.14 +46,1.8,2.2,0.14 +47,1.8,2.2,0.14 +48,1.8,2.2,0.14 +49,1.8,2.2,0.14 +50,1.8,2.2,0.14 +51,1.8,2.2,0.14 +52,1.8,2.2,0.14 +53,1.8,2.2,0.14 +54,1.8,2.2,0.14 +55,1.8,2.2,0.14 +56,1.8,2.2,0.14 +57,1.8,2.2,0.14 +58,1.8,2.2,0.14 +59,1.8,2.2,0.14 +60,1.8,2.2,0.14 +61,1.8,2.2,0.14 +62,1.8,2.2,0.14 +63,1.8,2.2,0.14 +64,1.8,2.2,0.14 +65,1.8,2.2,0.14 +66,1.8,2.2,0.14 +67,1.8,2.2,0.14 +68,1.8,2.2,0.14 +69,1.8,2.2,0.14 +70,1.8,2.2,0.14 +71,1.8,2.2,0.14 +72,1.8,2.2,0.14 +73,1.8,2.2,0.14 +74,1.8,2.2,0.14 +75,1.8,2.2,0.14 +76,1.8,2.2,0.14 +77,1.8,2.2,0.14 +78,1.8,2.2,0.14 +79,1.8,2.2,0.14 +80,1.8,2.2,0.14 +81,1.8,2.2,0.14 +82,1.8,2.2,0.14 +83,1.8,2.2,0.14 +84,1.8,2.2,0.14 +85,1.8,2.2,0.14 +86,1.8,2.2,0.14 +87,1.8,2.2,0.14 +88,1.8,2.2,0.14 +89,1.8,2.2,0.14 +90,1.8,2.2,0.14 +91,1.8,2.2,0.14 +92,1.8,2.2,0.14 +93,1.8,2.2,0.14 +94,1.8,2.2,0.14 +95,1.8,2.2,0.14 +96,1.8,2.2,0.14 +97,1.8,2.2,0.14 +98,1.8,2.2,0.14 +99,1.8,2.2,0.14 +100,1.8,2.2,0.14 +101,1.8,2.2,0.14 +102,1.8,2.2,0.14 +103,1.8,2.2,0.14 +104,1.8,2.2,0.14 +105,1.8,2.2,0.14 +106,1.8,2.2,0.14 +107,1.8,2.2,0.14 +108,1.8,2.2,0.14 +109,1.8,2.2,0.14 +110,1.8,2.2,0.14 +111,1.8,2.2,0.14 +112,1.8,2.2,0.14 +113,1.8,2.2,0.14 +114,1.8,2.2,0.14 +115,1.8,2.2,0.14 +116,1.8,2.2,0.14 +117,1.8,2.2,0.14 +118,1.8,2.2,0.14 +119,1.8,2.2,0.14 +120,1.8,2.2,0.14 +121,1.8,2.2,0.14 +122,1.8,2.2,0.14 +123,1.8,2.2,0.14 +124,1.8,2.2,0.14 +125,1.8,2.2,0.14 +126,1.8,2.2,0.14 +127,1.8,2.2,0.14 +128,1.8,2.2,0.14 +129,1.8,2.2,0.14 +130,1.8,2.2,0.14 +131,1.8,2.2,0.14 +132,1.8,2.2,0.14 +133,1.8,2.2,0.14 +134,1.8,2.2,0.14 +135,1.8,2.2,0.14 +136,1.8,2.2,0.14 +137,1.8,2.2,0.14 +138,1.8,2.2,0.14 +139,1.8,2.2,0.14 +140,1.8,2.2,0.14 +141,1.8,2.2,0.14 +142,1.8,2.2,0.14 +143,1.8,2.2,0.14 +144,1.8,2.2,0.14 +145,1.8,2.2,0.14 +146,1.8,2.2,0.14 +147,1.8,2.2,0.14 +148,1.8,2.2,0.14 +149,1.8,2.2,0.14 +150,1.8,2.2,0.14 +151,1.8,2.2,0.14 +152,1.8,2.2,0.14 +153,1.8,2.2,0.14 +154,1.8,2.2,0.14 +155,1.8,2.2,0.14 +156,1.8,2.2,0.14 +157,1.8,2.2,0.14 +158,1.8,2.2,0.14 +159,1.8,2.2,0.14 +160,1.8,2.2,0.14 +161,1.8,2.2,0.14 +162,1.8,2.2,0.14 +163,1.8,2.2,0.14 +164,1.8,2.2,0.14 +165,1.8,2.2,0.14 +166,1.8,2.2,0.14 +167,1.8,2.2,0.14 +168,1.8,2.2,0.14 +169,1.8,2.2,0.14 +170,1.8,2.2,0.14 +171,1.8,2.2,0.14 +172,1.8,2.2,0.14 +173,1.8,2.2,0.14 +174,1.8,2.2,0.14 +175,1.8,2.2,0.14 +176,1.8,2.2,0.14 +177,1.8,2.2,0.14 +178,1.8,2.2,0.14 +179,1.8,2.2,0.14 +180,1.8,2.2,0.14 +181,1.8,2.2,0.14 +182,1.8,2.2,0.14 +183,1.8,2.2,0.14 +184,1.8,2.2,0.14 +185,1.8,2.2,0.14 +186,1.8,2.2,0.14 +187,1.8,2.2,0.14 +188,1.8,2.2,0.14 +189,1.8,2.2,0.14 +190,1.8,2.2,0.14 +191,1.8,2.2,0.14 +192,1.8,2.2,0.14 +193,1.8,2.2,0.14 +194,1.8,2.2,0.14 +195,1.8,2.2,0.14 +196,1.8,2.2,0.14 +197,1.8,2.2,0.14 +198,1.8,2.2,0.14 +199,1.8,2.2,0.14 +200,1.8,2.2,0.14 +201,1.8,2.2,0.14 +202,1.8,2.2,0.14 +203,1.8,2.2,0.14 +204,1.8,2.2,0.14 +205,1.8,2.2,0.14 +206,1.8,2.2,0.14 +207,1.8,2.2,0.14 +208,1.8,2.2,0.14 +209,1.8,2.2,0.14 +210,1.8,2.2,0.14 +211,1.8,2.2,0.14 +212,1.8,2.2,0.14 +213,1.8,2.2,0.14 +214,1.8,2.2,0.14 +215,1.8,2.2,0.14 +216,1.8,2.2,0.14 +217,1.8,2.2,0.14 +218,1.8,2.2,0.14 +219,1.8,2.2,0.14 +220,1.8,2.2,0.14 +221,1.8,2.2,0.14 +222,1.8,2.2,0.14 +223,1.8,2.2,0.14 +224,1.8,2.2,0.14 +225,1.8,2.2,0.14 +226,1.8,2.2,0.14 +227,1.8,2.2,0.14 +228,1.8,2.2,0.14 +229,1.8,2.2,0.14 +230,1.8,2.2,0.14 +231,1.8,2.2,0.14 +232,1.8,2.2,0.14 +233,1.8,2.2,0.14 +234,1.8,2.2,0.14 +235,1.8,2.2,0.14 +236,1.8,2.2,0.14 +237,1.8,2.2,0.14 +238,1.8,2.2,0.14 +239,1.8,2.2,0.14 +240,1.8,2.2,0.14 +241,1.8,2.2,0.14 +242,1.8,2.2,0.14 +243,1.8,2.2,0.14 +244,1.8,2.2,0.14 +245,1.8,2.2,0.14 +246,1.8,2.2,0.14 +247,1.8,2.2,0.14 +248,1.8,2.2,0.14 +249,1.8,2.2,0.14 +250,1.8,2.2,0.14 +251,1.8,2.2,0.14 +252,1.8,2.2,0.14 +253,1.8,2.2,0.14 +254,1.8,2.2,0.14 +255,1.8,2.2,0.14 +256,1.8,2.2,0.14 +257,1.8,2.2,0.14 +258,1.8,2.2,0.14 +259,1.8,2.2,0.14 +260,1.8,2.2,0.14 +261,1.8,2.2,0.14 +262,1.8,2.2,0.14 +263,1.8,2.2,0.14 +264,1.8,2.2,0.14 +265,1.8,2.2,0.14 +266,1.8,2.2,0.14 +267,1.8,2.2,0.14 +268,1.8,2.2,0.14 +269,1.8,2.2,0.14 +270,1.8,2.2,0.14 +271,1.8,2.2,0.14 +272,1.8,2.2,0.14 +273,1.8,2.2,0.14 +274,1.8,2.2,0.14 +275,1.8,2.2,0.14 +276,1.8,2.2,0.14 +277,1.8,2.2,0.14 +278,1.8,2.2,0.14 +279,1.8,2.2,0.14 +280,1.8,2.2,0.14 +281,1.8,2.2,0.14 +282,1.8,2.2,0.14 +283,1.8,2.2,0.14 +284,1.8,2.2,0.14 +285,1.8,2.2,0.14 +286,1.8,2.2,0.14 +287,1.8,2.2,0.14 +288,1.8,2.2,0.14 +289,1.8,2.2,0.14 +290,1.8,2.2,0.14 +291,1.8,2.2,0.14 +292,1.8,2.2,0.14 +293,1.8,2.2,0.14 +294,1.8,2.2,0.14 +295,1.8,2.2,0.14 +296,1.8,2.2,0.14 +297,1.8,2.2,0.14 +298,1.8,2.2,0.14 +299,1.8,2.2,0.14 +300,1.8,2.2,0.14 +301,1.8,2.2,0.14 +302,1.8,2.2,0.14 +303,1.8,2.2,0.14 +304,1.8,2.2,0.14 +305,1.8,2.2,0.14 +306,1.8,2.2,0.14 +307,1.8,2.2,0.14 +308,1.8,2.2,0.14 +309,1.8,2.2,0.14 +310,1.8,2.2,0.14 +311,1.8,2.2,0.14 +312,1.8,2.2,0.14 +313,1.8,2.2,0.14 +314,1.8,2.2,0.14 +315,1.8,2.2,0.14 +316,1.8,2.2,0.14 +317,1.8,2.2,0.14 +318,1.8,2.2,0.14 +319,1.8,2.2,0.14 +320,1.8,2.2,0.14 +321,1.8,2.2,0.14 +322,1.8,2.2,0.14 +323,1.8,2.2,0.14 +324,1.8,2.2,0.14 +325,1.8,2.2,0.14 +326,1.8,2.2,0.14 +327,1.8,2.2,0.14 +328,1.8,2.2,0.14 +329,1.8,2.2,0.14 +330,1.8,2.2,0.14 +331,1.8,2.2,0.14 +332,1.8,2.2,0.14 +333,1.8,2.2,0.14 +334,1.8,2.2,0.14 +335,1.8,2.2,0.14 +336,1.8,2.2,0.14 +337,1.8,2.2,0.14 +338,1.8,2.2,0.14 +339,1.8,2.2,0.14 +340,1.8,2.2,0.14 +341,1.8,2.2,0.14 +342,1.8,2.2,0.14 +343,1.8,2.2,0.14 +344,1.8,2.2,0.14 +345,1.8,2.2,0.14 +346,1.8,2.2,0.14 +347,1.8,2.2,0.14 +348,1.8,2.2,0.14 +349,1.8,2.2,0.14 +350,1.8,2.2,0.14 +351,1.8,2.2,0.14 +352,1.8,2.2,0.14 +353,1.8,2.2,0.14 +354,1.8,2.2,0.14 +355,1.8,2.2,0.14 +356,1.8,2.2,0.14 +357,1.8,2.2,0.14 +358,1.8,2.2,0.14 +359,1.8,2.2,0.14 +360,1.8,2.2,0.14 +361,1.8,2.2,0.14 +362,1.8,2.2,0.14 +363,1.8,2.2,0.14 +364,1.8,2.2,0.14 +365,1.8,2.2,0.14 +366,1.8,2.2,0.14 +367,1.8,2.2,0.14 +368,1.8,2.2,0.14 +369,1.8,2.2,0.14 +370,1.8,2.2,0.14 +371,1.8,2.2,0.14 +372,1.8,2.2,0.14 +373,1.8,2.2,0.14 +374,1.8,2.2,0.14 +375,1.8,2.2,0.14 +376,1.8,2.2,0.14 +377,1.8,2.2,0.14 +378,1.8,2.2,0.14 +379,1.8,2.2,0.14 +380,1.8,2.2,0.14 +381,1.8,2.2,0.14 +382,1.8,2.2,0.14 +383,1.8,2.2,0.14 +384,1.8,2.2,0.14 +385,1.8,2.2,0.14 +386,1.8,2.2,0.14 +387,1.8,2.2,0.14 +388,1.8,2.2,0.14 +389,1.8,2.2,0.14 +390,1.8,2.2,0.14 +391,1.8,2.2,0.14 +392,1.8,2.2,0.14 +393,1.8,2.2,0.14 +394,1.8,2.2,0.14 +395,1.8,2.2,0.14 +396,1.8,2.2,0.14 +397,1.8,2.2,0.14 +398,1.8,2.2,0.14 +399,1.8,2.2,0.14 +400,1.8,2.2,0.14 +401,1.8,2.2,0.14 +402,1.8,2.2,0.14 +403,1.8,2.2,0.14 +404,1.8,2.2,0.14 +405,1.8,2.2,0.14 +406,1.8,2.2,0.14 +407,1.8,2.2,0.14 +408,1.8,2.2,0.14 +409,1.8,2.2,0.14 +410,1.8,2.2,0.14 +411,1.8,2.2,0.14 +412,1.8,2.2,0.14 +413,1.8,2.2,0.14 +414,1.8,2.2,0.14 +415,1.8,2.2,0.14 +416,1.8,2.2,0.14 +417,1.8,2.2,0.14 +418,1.8,2.2,0.14 +419,1.8,2.2,0.14 +420,1.8,2.2,0.14 +421,1.8,2.2,0.14 +422,1.8,2.2,0.14 +423,1.8,2.2,0.14 +424,1.8,2.2,0.14 +425,1.8,2.2,0.14 +426,1.8,2.2,0.14 +427,1.8,2.2,0.14 +428,1.8,2.2,0.14 +429,1.8,2.2,0.14 +430,1.8,2.2,0.14 +431,1.8,2.2,0.14 +432,1.8,2.2,0.14 +433,1.8,2.2,0.14 +434,1.8,2.2,0.14 +435,1.8,2.2,0.14 +436,1.8,2.2,0.14 +437,1.8,2.2,0.14 +438,1.8,2.2,0.14 +439,1.8,2.2,0.14 +440,1.8,2.2,0.14 +441,1.8,2.2,0.14 +442,1.8,2.2,0.14 +443,1.8,2.2,0.14 +444,1.8,2.2,0.14 +445,1.8,2.2,0.14 +446,1.8,2.2,0.14 +447,1.8,2.2,0.14 +448,1.8,2.2,0.14 +449,1.8,2.2,0.14 +450,1.8,2.2,0.14 +451,1.8,2.2,0.14 +452,1.8,2.2,0.14 +453,1.8,2.2,0.14 +454,1.8,2.2,0.14 +455,1.8,2.2,0.14 +456,1.8,2.2,0.14 +457,1.8,2.2,0.14 +458,1.8,2.2,0.14 +459,1.8,2.2,0.14 +460,1.8,2.2,0.14 +461,1.8,2.2,0.14 +462,1.8,2.2,0.14 +463,1.8,2.2,0.14 +464,1.8,2.2,0.14 +465,1.8,2.2,0.14 +466,1.8,2.2,0.14 +467,1.8,2.2,0.14 +468,1.8,2.2,0.14 +469,1.8,2.2,0.14 +470,1.8,2.2,0.14 +471,1.8,2.2,0.14 +472,1.8,2.2,0.14 +473,1.8,2.2,0.14 +474,1.8,2.2,0.14 +475,1.8,2.2,0.14 +476,1.8,2.2,0.14 +477,1.8,2.2,0.14 +478,1.8,2.2,0.14 +479,1.8,2.2,0.14 +480,1.8,2.2,0.14 +481,1.8,2.2,0.14 +482,1.8,2.2,0.14 +483,1.8,2.2,0.14 +484,1.8,2.2,0.14 +485,1.8,2.2,0.14 +486,1.8,2.2,0.14 +487,1.8,2.2,0.14 +488,1.8,2.2,0.14 +489,1.8,2.2,0.14 +490,1.8,2.2,0.14 +491,1.8,2.2,0.14 +492,1.8,2.2,0.14 +493,1.8,2.2,0.14 +494,1.8,2.2,0.14 +495,1.8,2.2,0.14 +496,1.8,2.2,0.14 +497,1.8,2.2,0.14 +498,1.8,2.2,0.14 +499,1.8,2.2,0.14 +500,1.8,2.2,0.14 +501,1.8,2.2,0.14 +502,1.8,2.2,0.14 +503,1.8,2.2,0.14 +504,1.8,2.2,0.14 +505,1.8,2.2,0.14 +506,1.8,2.2,0.14 +507,1.8,2.2,0.14 +508,1.8,2.2,0.14 +509,1.8,2.2,0.14 +510,1.8,2.2,0.14 +511,1.8,2.2,0.14 +512,1.8,2.2,0.14 +513,1.8,2.2,0.14 +514,1.8,2.2,0.14 +515,1.8,2.2,0.14 +516,1.8,2.2,0.14 +517,1.8,2.2,0.14 +518,1.8,2.2,0.14 +519,1.8,2.2,0.14 +520,1.8,2.2,0.14 +521,1.8,2.2,0.14 +522,1.8,2.2,0.14 +523,1.8,2.2,0.14 +524,1.8,2.2,0.14 +525,1.8,2.2,0.14 +526,1.8,2.2,0.14 +527,1.8,2.2,0.14 +528,1.8,2.2,0.14 +529,1.8,2.2,0.14 +530,1.8,2.2,0.14 +531,1.8,2.2,0.14 +532,1.8,2.2,0.14 +533,1.8,2.2,0.14 +534,1.8,2.2,0.14 +535,1.8,2.2,0.14 +536,1.8,2.2,0.14 +537,1.8,2.2,0.14 +538,1.8,2.2,0.14 +539,1.8,2.2,0.14 +540,1.8,2.2,0.14 +541,1.8,2.2,0.14 +542,1.8,2.2,0.14 +543,1.8,2.2,0.14 +544,1.8,2.2,0.14 +545,1.8,2.2,0.14 +546,1.8,2.2,0.14 +547,1.8,2.2,0.14 +548,1.8,2.2,0.14 +549,1.8,2.2,0.14 +550,1.8,2.2,0.14 +551,1.8,2.2,0.14 +552,1.8,2.2,0.14 +553,1.8,2.2,0.14 +554,1.8,2.2,0.14 +555,1.8,2.2,0.14 +556,1.8,2.2,0.14 +557,1.8,2.2,0.14 +558,1.8,2.2,0.14 +559,1.8,2.2,0.14 +560,1.8,2.2,0.14 +561,1.8,2.2,0.14 +562,1.8,2.2,0.14 +563,1.8,2.2,0.14 +564,1.8,2.2,0.14 +565,1.8,2.2,0.14 +566,1.8,2.2,0.14 +567,1.8,2.2,0.14 +568,1.8,2.2,0.14 +569,1.8,2.2,0.14 +570,1.8,2.2,0.14 +571,1.8,2.2,0.14 +572,1.8,2.2,0.14 +573,1.8,2.2,0.14 +574,1.8,2.2,0.14 +575,1.8,2.2,0.14 +576,1.8,2.2,0.14 +577,1.8,2.2,0.14 +578,1.8,2.2,0.14 +579,1.8,2.2,0.14 +580,1.8,2.2,0.14 +581,1.8,2.2,0.14 +582,1.8,2.2,0.14 +583,1.8,2.2,0.14 +584,1.8,2.2,0.14 +585,1.8,2.2,0.14 +586,1.8,2.2,0.14 +587,1.8,2.2,0.14 +588,1.8,2.2,0.14 +589,1.8,2.2,0.14 +590,1.8,2.2,0.14 +591,1.8,2.2,0.14 +592,1.8,2.2,0.14 +593,1.8,2.2,0.14 +594,1.8,2.2,0.14 +595,1.8,2.2,0.14 +596,1.8,2.2,0.14 +597,1.8,2.2,0.14 +598,1.8,2.2,0.14 +599,1.8,2.2,0.14 +600,1.8,2.2,0.14 +601,1.8,2.2,0.14 +602,1.8,2.2,0.14 +603,1.8,2.2,0.14 +604,1.8,2.2,0.14 +605,1.8,2.2,0.14 +606,1.8,2.2,0.14 +607,1.8,2.2,0.14 +608,1.8,2.2,0.14 +609,1.8,2.2,0.14 +610,1.8,2.2,0.14 +611,1.8,2.2,0.14 +612,1.8,2.2,0.14 +613,1.8,2.2,0.14 +614,1.8,2.2,0.14 +615,1.8,2.2,0.14 +616,1.8,2.2,0.14 +617,1.8,2.2,0.14 +618,1.8,2.2,0.14 +619,1.8,2.2,0.14 +620,1.8,2.2,0.14 +621,1.8,2.2,0.14 +622,1.8,2.2,0.14 +623,1.8,2.2,0.14 +624,1.8,2.2,0.14 +625,1.8,2.2,0.14 +626,1.8,2.2,0.14 +627,1.8,2.2,0.14 +628,1.8,2.2,0.14 +629,1.8,2.2,0.14 +630,1.8,2.2,0.14 +631,1.8,2.2,0.14 +632,1.8,2.2,0.14 +633,1.8,2.2,0.14 +634,1.8,2.2,0.14 +635,1.8,2.2,0.14 +636,1.8,2.2,0.14 +637,1.8,2.2,0.14 +638,1.8,2.2,0.14 +639,1.8,2.2,0.14 +640,1.8,2.2,0.14 +641,1.8,2.2,0.14 +642,1.8,2.2,0.14 +643,1.8,2.2,0.14 +644,1.8,2.2,0.14 +645,1.8,2.2,0.14 +646,1.8,2.2,0.14 +647,1.8,2.2,0.14 +648,1.8,2.2,0.14 +649,1.8,2.2,0.14 +650,1.8,2.2,0.14 +651,1.8,2.2,0.14 +652,1.8,2.2,0.14 +653,1.8,2.2,0.14 +654,1.8,2.2,0.14 +655,1.8,2.2,0.14 +656,1.8,2.2,0.14 +657,1.8,2.2,0.14 +658,1.8,2.2,0.14 +659,1.8,2.2,0.14 +660,1.8,2.2,0.14 +661,1.8,2.2,0.14 +662,1.8,2.2,0.14 +663,1.8,2.2,0.14 +664,1.8,2.2,0.14 +665,1.8,2.2,0.14 +666,1.8,2.2,0.14 +667,1.8,2.2,0.14 +668,1.8,2.2,0.14 +669,1.8,2.2,0.14 +670,1.8,2.2,0.14 +671,1.8,2.2,0.14 +672,1.8,2.2,0.14 +673,1.8,2.2,0.14 +674,1.8,2.2,0.14 +675,1.8,2.2,0.14 +676,1.8,2.2,0.14 +677,1.8,2.2,0.14 +678,1.8,2.2,0.14 +679,1.8,2.2,0.14 +680,1.8,2.2,0.14 +681,1.8,2.2,0.14 +682,1.8,2.2,0.14 +683,1.8,2.2,0.14 +684,1.8,2.2,0.14 +685,1.8,2.2,0.14 +686,1.8,2.2,0.14 +687,1.8,2.2,0.14 +688,1.8,2.2,0.14 +689,1.8,2.2,0.14 +690,1.8,2.2,0.14 +691,1.8,2.2,0.14 +692,1.8,2.2,0.14 +693,1.8,2.2,0.14 +694,1.8,2.2,0.14 +695,1.8,2.2,0.14 +696,1.8,2.2,0.14 +697,1.8,2.2,0.14 +698,1.8,2.2,0.14 +699,1.8,2.2,0.14 +700,1.8,2.2,0.14 +701,1.8,2.2,0.14 +702,1.8,2.2,0.14 +703,1.8,2.2,0.14 +704,1.8,2.2,0.14 +705,1.8,2.2,0.14 +706,1.8,2.2,0.14 +707,1.8,2.2,0.14 +708,1.8,2.2,0.14 +709,1.8,2.2,0.14 +710,1.8,2.2,0.14 +711,1.8,2.2,0.14 +712,1.8,2.2,0.14 +713,1.8,2.2,0.14 +714,1.8,2.2,0.14 +715,1.8,2.2,0.14 +716,1.8,2.2,0.14 +717,1.8,2.2,0.14 +718,1.8,2.2,0.14 +719,1.8,2.2,0.14 +720,1.8,2.2,0.14 +721,1.8,2.2,0.14 +722,1.8,2.2,0.14 +723,1.8,2.2,0.14 +724,1.8,2.2,0.14 +725,1.8,2.2,0.14 +726,1.8,2.2,0.14 +727,1.8,2.2,0.14 +728,1.8,2.2,0.14 +729,1.8,2.2,0.14 +730,1.8,2.2,0.14 +731,1.8,2.2,0.14 +732,1.8,2.2,0.14 +733,1.8,2.2,0.14 +734,1.8,2.2,0.14 +735,1.8,2.2,0.14 +736,1.8,2.2,0.14 +737,1.8,2.2,0.14 +738,1.8,2.2,0.14 +739,1.8,2.2,0.14 +740,1.8,2.2,0.14 +741,1.8,2.2,0.14 +742,1.8,2.2,0.14 +743,1.8,2.2,0.14 +744,1.8,2.2,0.14 +745,1.8,2.2,0.14 +746,1.8,2.2,0.14 +747,1.8,2.2,0.14 +748,1.8,2.2,0.14 +749,1.8,2.2,0.14 +750,1.8,2.2,0.14 +751,1.8,2.2,0.14 +752,1.8,2.2,0.14 +753,1.8,2.2,0.14 +754,1.8,2.2,0.14 +755,1.8,2.2,0.14 +756,1.8,2.2,0.14 +757,1.8,2.2,0.14 +758,1.8,2.2,0.14 +759,1.8,2.2,0.14 +760,1.8,2.2,0.14 +761,1.8,2.2,0.14 +762,1.8,2.2,0.14 +763,1.8,2.2,0.14 +764,1.8,2.2,0.14 +765,1.8,2.2,0.14 +766,1.8,2.2,0.14 +767,1.8,2.2,0.14 +768,1.8,2.2,0.14 +769,1.8,2.2,0.14 +770,1.8,2.2,0.14 +771,1.8,2.2,0.14 +772,1.8,2.2,0.14 +773,1.8,2.2,0.14 +774,1.8,2.2,0.14 +775,1.8,2.2,0.14 +776,1.8,2.2,0.14 +777,1.8,2.2,0.14 +778,1.8,2.2,0.14 +779,1.8,2.2,0.14 +780,1.8,2.2,0.14 +781,1.8,2.2,0.14 +782,1.8,2.2,0.14 +783,1.8,2.2,0.14 +784,1.8,2.2,0.14 +785,1.8,2.2,0.14 +786,1.8,2.2,0.14 +787,1.8,2.2,0.14 +788,1.8,2.2,0.14 +789,1.8,2.2,0.14 +790,1.8,2.2,0.14 +791,1.8,2.2,0.14 +792,1.8,2.2,0.14 +793,1.8,2.2,0.14 +794,1.8,2.2,0.14 +795,1.8,2.2,0.14 +796,1.8,2.2,0.14 +797,1.8,2.2,0.14 +798,1.8,2.2,0.14 +799,1.8,2.2,0.14 +800,1.8,2.2,0.14 +801,1.8,2.2,0.14 +802,1.8,2.2,0.14 +803,1.8,2.2,0.14 +804,1.8,2.2,0.14 +805,1.8,2.2,0.14 +806,1.8,2.2,0.14 +807,1.8,2.2,0.14 +808,1.8,2.2,0.14 +809,1.8,2.2,0.14 +810,1.8,2.2,0.14 +811,1.8,2.2,0.14 +812,1.8,2.2,0.14 +813,1.8,2.2,0.14 +814,1.8,2.2,0.14 +815,1.8,2.2,0.14 +816,1.8,2.2,0.14 +817,1.8,2.2,0.14 +818,1.8,2.2,0.14 +819,1.8,2.2,0.14 +820,1.8,2.2,0.14 +821,1.8,2.2,0.14 +822,1.8,2.2,0.14 +823,1.8,2.2,0.14 +824,1.8,2.2,0.14 +825,1.8,2.2,0.14 +826,1.8,2.2,0.14 +827,1.8,2.2,0.14 +828,1.8,2.2,0.14 +829,1.8,2.2,0.14 +830,1.8,2.2,0.14 +831,1.8,2.2,0.14 +832,1.8,2.2,0.14 +833,1.8,2.2,0.14 +834,1.8,2.2,0.14 +835,1.8,2.2,0.14 +836,1.8,2.2,0.14 +837,1.8,2.2,0.14 +838,1.8,2.2,0.14 +839,1.8,2.2,0.14 +840,1.8,2.2,0.14 +841,1.8,2.2,0.14 +842,1.8,2.2,0.14 +843,1.8,2.2,0.14 +844,1.8,2.2,0.14 +845,1.8,2.2,0.14 +846,1.8,2.2,0.14 +847,1.8,2.2,0.14 +848,1.8,2.2,0.14 +849,1.8,2.2,0.14 +850,1.8,2.2,0.14 +851,1.8,2.2,0.14 +852,1.8,2.2,0.14 +853,1.8,2.2,0.14 +854,1.8,2.2,0.14 +855,1.8,2.2,0.14 +856,1.8,2.2,0.14 +857,1.8,2.2,0.14 +858,1.8,2.2,0.14 +859,1.8,2.2,0.14 +860,1.8,2.2,0.14 +861,1.8,2.2,0.14 +862,1.8,2.2,0.14 +863,1.8,2.2,0.14 +864,1.8,2.2,0.14 +865,1.8,2.2,0.14 +866,1.8,2.2,0.14 +867,1.8,2.2,0.14 +868,1.8,2.2,0.14 +869,1.8,2.2,0.14 +870,1.8,2.2,0.14 +871,1.8,2.2,0.14 +872,1.8,2.2,0.14 +873,1.8,2.2,0.14 +874,1.8,2.2,0.14 +875,1.8,2.2,0.14 +876,1.8,2.2,0.14 +877,1.8,2.2,0.14 +878,1.8,2.2,0.14 +879,1.8,2.2,0.14 +880,1.8,2.2,0.14 +881,1.8,2.2,0.14 +882,1.8,2.2,0.14 +883,1.8,2.2,0.14 +884,1.8,2.2,0.14 +885,1.8,2.2,0.14 +886,1.8,2.2,0.14 +887,1.8,2.2,0.14 +888,1.8,2.2,0.14 +889,1.8,2.2,0.14 +890,1.8,2.2,0.14 +891,1.8,2.2,0.14 +892,1.8,2.2,0.14 +893,1.8,2.2,0.14 +894,1.8,2.2,0.14 +895,1.8,2.2,0.14 +896,1.8,2.2,0.14 +897,1.8,2.2,0.14 +898,1.8,2.2,0.14 +899,1.8,2.2,0.14 +900,1.8,2.2,0.14 +901,1.8,2.2,0.14 +902,1.8,2.2,0.14 +903,1.8,2.2,0.14 +904,1.8,2.2,0.14 +905,1.8,2.2,0.14 +906,1.8,2.2,0.14 +907,1.8,2.2,0.14 +908,1.8,2.2,0.14 +909,1.8,2.2,0.14 +910,1.8,2.2,0.14 +911,1.8,2.2,0.14 +912,1.8,2.2,0.14 +913,1.8,2.2,0.14 +914,1.8,2.2,0.14 +915,1.8,2.2,0.14 +916,1.8,2.2,0.14 +917,1.8,2.2,0.14 +918,1.8,2.2,0.14 +919,1.8,2.2,0.14 +920,1.8,2.2,0.14 +921,1.8,2.2,0.14 +922,1.8,2.2,0.14 +923,1.8,2.2,0.14 +924,1.8,2.2,0.14 +925,1.8,2.2,0.14 +926,1.8,2.2,0.14 +927,1.8,2.2,0.14 +928,1.8,2.2,0.14 +929,1.8,2.2,0.14 +930,1.8,2.2,0.14 +931,1.8,2.2,0.14 +932,1.8,2.2,0.14 +933,1.8,2.2,0.14 +934,1.8,2.2,0.14 +935,1.8,2.2,0.14 +936,1.8,2.2,0.14 +937,1.8,2.2,0.14 +938,1.8,2.2,0.14 +939,1.8,2.2,0.14 +940,1.8,2.2,0.14 +941,1.8,2.2,0.14 +942,1.8,2.2,0.14 +943,1.8,2.2,0.14 +944,1.8,2.2,0.14 +945,1.8,2.2,0.14 +946,1.8,2.2,0.14 +947,1.8,2.2,0.14 +948,1.8,2.2,0.14 +949,1.8,2.2,0.14 +950,1.8,2.2,0.14 +951,1.8,2.2,0.14 +952,1.8,2.2,0.14 +953,1.8,2.2,0.14 +954,1.8,2.2,0.14 +955,1.8,2.2,0.14 +956,1.8,2.2,0.14 +957,1.8,2.2,0.14 +958,1.8,2.2,0.14 +959,1.8,2.2,0.14 +960,1.8,2.2,0.14 +961,1.8,2.2,0.14 +962,1.8,2.2,0.14 +963,1.8,2.2,0.14 +964,1.8,2.2,0.14 +965,1.8,2.2,0.14 +966,1.8,2.2,0.14 +967,1.8,2.2,0.14 +968,1.8,2.2,0.14 +969,1.8,2.2,0.14 +970,1.8,2.2,0.14 +971,1.8,2.2,0.14 +972,1.8,2.2,0.14 +973,1.8,2.2,0.14 +974,1.8,2.2,0.14 +975,1.8,2.2,0.14 +976,1.8,2.2,0.14 +977,1.8,2.2,0.14 +978,1.8,2.2,0.14 +979,1.8,2.2,0.14 +980,1.8,2.2,0.14 +981,1.8,2.2,0.14 +982,1.8,2.2,0.14 +983,1.8,2.2,0.14 +984,1.8,2.2,0.14 +985,1.8,2.2,0.14 +986,1.8,2.2,0.14 +987,1.8,2.2,0.14 +988,1.8,2.2,0.14 +989,1.8,2.2,0.14 +990,1.8,2.2,0.14 +991,1.8,2.2,0.14 +992,1.8,2.2,0.14 +993,1.8,2.2,0.14 +994,1.8,2.2,0.14 +995,1.8,2.2,0.14 +996,1.8,2.2,0.14 +997,1.8,2.2,0.14 +998,1.8,2.2,0.14 +999,1.8,2.2,0.14 +1000,1.8,2.2,0.14 +1001,1.8,2.2,0.14 +1002,1.8,2.2,0.14 +1003,1.8,2.2,0.14 +1004,1.8,2.2,0.14 +1005,1.8,2.2,0.14 +1006,1.8,2.2,0.14 +1007,1.8,2.2,0.14 +1008,1.8,2.2,0.14 +1009,1.8,2.2,0.14 +1010,1.8,2.2,0.14 +1011,1.8,2.2,0.14 +1012,1.8,2.2,0.14 +1013,1.8,2.2,0.14 +1014,1.8,2.2,0.14 +1015,1.8,2.2,0.14 +1016,1.8,2.2,0.14 +1017,1.8,2.2,0.14 +1018,1.8,2.2,0.14 +1019,1.8,2.2,0.14 +1020,1.8,2.2,0.14 +1021,1.8,2.2,0.14 +1022,1.8,2.2,0.14 +1023,1.8,2.2,0.14 +1024,1.8,2.2,0.14 +1025,1.8,2.2,0.14 +1026,1.8,2.2,0.14 +1027,1.8,2.2,0.14 +1028,1.8,2.2,0.14 +1029,1.8,2.2,0.14 +1030,1.8,2.2,0.14 +1031,1.8,2.2,0.14 +1032,1.8,2.2,0.14 +1033,1.8,2.2,0.14 +1034,1.8,2.2,0.14 +1035,1.8,2.2,0.14 +1036,1.8,2.2,0.14 +1037,1.8,2.2,0.14 +1038,1.8,2.2,0.14 +1039,1.8,2.2,0.14 +1040,1.8,2.2,0.14 +1041,1.8,2.2,0.14 +1042,1.8,2.2,0.14 +1043,1.8,2.2,0.14 +1044,1.8,2.2,0.14 +1045,1.8,2.2,0.14 +1046,1.8,2.2,0.14 +1047,1.8,2.2,0.14 +1048,1.8,2.2,0.14 +1049,1.8,2.2,0.14 +1050,1.8,2.2,0.14 +1051,1.8,2.2,0.14 +1052,1.8,2.2,0.14 +1053,1.8,2.2,0.14 +1054,1.8,2.2,0.14 +1055,1.8,2.2,0.14 +1056,1.8,2.2,0.14 +1057,1.8,2.2,0.14 +1058,1.8,2.2,0.14 +1059,1.8,2.2,0.14 +1060,1.8,2.2,0.14 +1061,1.8,2.2,0.14 +1062,1.8,2.2,0.14 +1063,1.8,2.2,0.14 +1064,1.8,2.2,0.14 +1065,1.8,2.2,0.14 +1066,1.8,2.2,0.14 +1067,1.8,2.2,0.14 +1068,1.8,2.2,0.14 +1069,1.8,2.2,0.14 +1070,1.8,2.2,0.14 +1071,1.8,2.2,0.14 +1072,1.8,2.2,0.14 +1073,1.8,2.2,0.14 +1074,1.8,2.2,0.14 +1075,1.8,2.2,0.14 +1076,1.8,2.2,0.14 +1077,1.8,2.2,0.14 +1078,1.8,2.2,0.14 +1079,1.8,2.2,0.14 +1080,1.8,2.2,0.14 +1081,1.8,2.2,0.14 +1082,1.8,2.2,0.14 +1083,1.8,2.2,0.14 +1084,1.8,2.2,0.14 +1085,1.8,2.2,0.14 +1086,1.8,2.2,0.14 +1087,1.8,2.2,0.14 +1088,1.8,2.2,0.14 +1089,1.8,2.2,0.14 +1090,1.8,2.2,0.14 +1091,1.8,2.2,0.14 +1092,1.8,2.2,0.14 +1093,1.8,2.2,0.14 +1094,1.8,2.2,0.14 +1095,1.8,2.2,0.14 +1096,1.8,2.2,0.14 +1097,1.8,2.2,0.14 +1098,1.8,2.2,0.14 +1099,1.8,2.2,0.14 +1100,1.8,2.2,0.14 +1101,1.8,2.2,0.14 +1102,1.8,2.2,0.14 +1103,1.8,2.2,0.14 +1104,1.8,2.2,0.14 +1105,1.8,2.2,0.14 +1106,1.8,2.2,0.14 +1107,1.8,2.2,0.14 +1108,1.8,2.2,0.14 +1109,1.8,2.2,0.14 +1110,1.8,2.2,0.14 +1111,1.8,2.2,0.14 +1112,1.8,2.2,0.14 +1113,1.8,2.2,0.14 +1114,1.8,2.2,0.14 +1115,1.8,2.2,0.14 +1116,1.8,2.2,0.14 +1117,1.8,2.2,0.14 +1118,1.8,2.2,0.14 +1119,1.8,2.2,0.14 +1120,1.8,2.2,0.14 +1121,1.8,2.2,0.14 +1122,1.8,2.2,0.14 +1123,1.8,2.2,0.14 +1124,1.8,2.2,0.14 +1125,1.8,2.2,0.14 +1126,1.8,2.2,0.14 +1127,1.8,2.2,0.14 +1128,1.8,2.2,0.14 +1129,1.8,2.2,0.14 +1130,1.8,2.2,0.14 +1131,1.8,2.2,0.14 +1132,1.8,2.2,0.14 +1133,1.8,2.2,0.14 +1134,1.8,2.2,0.14 +1135,1.8,2.2,0.14 +1136,1.8,2.2,0.14 +1137,1.8,2.2,0.14 +1138,1.8,2.2,0.14 +1139,1.8,2.2,0.14 +1140,1.8,2.2,0.14 +1141,1.8,2.2,0.14 +1142,1.8,2.2,0.14 +1143,1.8,2.2,0.14 +1144,1.8,2.2,0.14 +1145,1.8,2.2,0.14 +1146,1.8,2.2,0.14 +1147,1.8,2.2,0.14 +1148,1.8,2.2,0.14 +1149,1.8,2.2,0.14 +1150,1.8,2.2,0.14 +1151,1.8,2.2,0.14 +1152,1.8,2.2,0.14 +1153,1.8,2.2,0.14 +1154,1.8,2.2,0.14 +1155,1.8,2.2,0.14 +1156,1.8,2.2,0.14 +1157,1.8,2.2,0.14 +1158,1.8,2.2,0.14 +1159,1.8,2.2,0.14 +1160,1.8,2.2,0.14 +1161,1.8,2.2,0.14 +1162,1.8,2.2,0.14 +1163,1.8,2.2,0.14 +1164,1.8,2.2,0.14 +1165,1.8,2.2,0.14 +1166,1.8,2.2,0.14 +1167,1.8,2.2,0.14 +1168,1.8,2.2,0.14 +1169,1.8,2.2,0.14 +1170,1.8,2.2,0.14 +1171,1.8,2.2,0.14 +1172,1.8,2.2,0.14 +1173,1.8,2.2,0.14 +1174,1.8,2.2,0.14 +1175,1.8,2.2,0.14 +1176,1.8,2.2,0.14 +1177,1.8,2.2,0.14 +1178,1.8,2.2,0.14 +1179,1.8,2.2,0.14 +1180,1.8,2.2,0.14 +1181,1.8,2.2,0.14 +1182,1.8,2.2,0.14 +1183,1.8,2.2,0.14 +1184,1.8,2.2,0.14 +1185,1.8,2.2,0.14 +1186,1.8,2.2,0.14 +1187,1.8,2.2,0.14 +1188,1.8,2.2,0.14 +1189,1.8,2.2,0.14 +1190,1.8,2.2,0.14 +1191,1.8,2.2,0.14 +1192,1.8,2.2,0.14 +1193,1.8,2.2,0.14 +1194,1.8,2.2,0.14 +1195,1.8,2.2,0.14 +1196,1.8,2.2,0.14 +1197,1.8,2.2,0.14 +1198,1.8,2.2,0.14 +1199,1.8,2.2,0.14 +1200,1.8,2.2,0.14 +1201,1.8,2.2,0.14 +1202,1.8,2.2,0.14 +1203,1.8,2.2,0.14 +1204,1.8,2.2,0.14 +1205,1.8,2.2,0.14 +1206,1.8,2.2,0.14 +1207,1.8,2.2,0.14 +1208,1.8,2.2,0.14 +1209,1.8,2.2,0.14 +1210,1.8,2.2,0.14 +1211,1.8,2.2,0.14 +1212,1.8,2.2,0.14 +1213,1.8,2.2,0.14 +1214,1.8,2.2,0.14 +1215,1.8,2.2,0.14 +1216,1.8,2.2,0.14 +1217,1.8,2.2,0.14 +1218,1.8,2.2,0.14 +1219,1.8,2.2,0.14 +1220,1.8,2.2,0.14 +1221,1.8,2.2,0.14 +1222,1.8,2.2,0.14 +1223,1.8,2.2,0.14 +1224,1.8,2.2,0.14 +1225,1.8,2.2,0.14 +1226,1.8,2.2,0.14 +1227,1.8,2.2,0.14 +1228,1.8,2.2,0.14 +1229,1.8,2.2,0.14 +1230,1.8,2.2,0.14 +1231,1.8,2.2,0.14 +1232,1.8,2.2,0.14 +1233,1.8,2.2,0.14 +1234,1.8,2.2,0.14 +1235,1.8,2.2,0.14 +1236,1.8,2.2,0.14 +1237,1.8,2.2,0.14 +1238,1.8,2.2,0.14 +1239,1.8,2.2,0.14 +1240,1.8,2.2,0.14 +1241,1.8,2.2,0.14 +1242,1.8,2.2,0.14 +1243,1.8,2.2,0.14 +1244,1.8,2.2,0.14 +1245,1.8,2.2,0.14 +1246,1.8,2.2,0.14 +1247,1.8,2.2,0.14 +1248,1.8,2.2,0.14 +1249,1.8,2.2,0.14 +1250,1.8,2.2,0.14 +1251,1.8,2.2,0.14 +1252,1.8,2.2,0.14 +1253,1.8,2.2,0.14 +1254,1.8,2.2,0.14 +1255,1.8,2.2,0.14 +1256,1.8,2.2,0.14 +1257,1.8,2.2,0.14 +1258,1.8,2.2,0.14 +1259,1.8,2.2,0.14 +1260,1.8,2.2,0.14 +1261,1.8,2.2,0.14 +1262,1.8,2.2,0.14 +1263,1.8,2.2,0.14 +1264,1.8,2.2,0.14 +1265,1.8,2.2,0.14 +1266,1.8,2.2,0.14 +1267,1.8,2.2,0.14 +1268,1.8,2.2,0.14 +1269,1.8,2.2,0.14 +1270,1.8,2.2,0.14 +1271,1.8,2.2,0.14 +1272,1.8,2.2,0.14 +1273,1.8,2.2,0.14 +1274,1.8,2.2,0.14 +1275,1.8,2.2,0.14 +1276,1.8,2.2,0.14 +1277,1.8,2.2,0.14 +1278,1.8,2.2,0.14 +1279,1.8,2.2,0.14 +1280,1.8,2.2,0.14 +1281,1.8,2.2,0.14 +1282,1.8,2.2,0.14 +1283,1.8,2.2,0.14 +1284,1.8,2.2,0.14 +1285,1.8,2.2,0.14 +1286,1.8,2.2,0.14 +1287,1.8,2.2,0.14 +1288,1.8,2.2,0.14 +1289,1.8,2.2,0.14 +1290,1.8,2.2,0.14 +1291,1.8,2.2,0.14 +1292,1.8,2.2,0.14 +1293,1.8,2.2,0.14 +1294,1.8,2.2,0.14 +1295,1.8,2.2,0.14 +1296,1.8,2.2,0.14 +1297,1.8,2.2,0.14 +1298,1.8,2.2,0.14 +1299,1.8,2.2,0.14 +1300,1.8,2.2,0.14 +1301,1.8,2.2,0.14 +1302,1.8,2.2,0.14 +1303,1.8,2.2,0.14 +1304,1.8,2.2,0.14 +1305,1.8,2.2,0.14 +1306,1.8,2.2,0.14 +1307,1.8,2.2,0.14 +1308,1.8,2.2,0.14 +1309,1.8,2.2,0.14 +1310,1.8,2.2,0.14 +1311,1.8,2.2,0.14 +1312,1.8,2.2,0.14 +1313,1.8,2.2,0.14 +1314,1.8,2.2,0.14 +1315,1.8,2.2,0.14 +1316,1.8,2.2,0.14 +1317,1.8,2.2,0.14 +1318,1.8,2.2,0.14 +1319,1.8,2.2,0.14 +1320,1.8,2.2,0.14 +1321,1.8,2.2,0.14 +1322,1.8,2.2,0.14 +1323,1.8,2.2,0.14 +1324,1.8,2.2,0.14 +1325,1.8,2.2,0.14 +1326,1.8,2.2,0.14 +1327,1.8,2.2,0.14 +1328,1.8,2.2,0.14 +1329,1.8,2.2,0.14 +1330,1.8,2.2,0.14 +1331,1.8,2.2,0.14 +1332,1.8,2.2,0.14 +1333,1.8,2.2,0.14 +1334,1.8,2.2,0.14 +1335,1.8,2.2,0.14 +1336,1.8,2.2,0.14 +1337,1.8,2.2,0.14 +1338,1.8,2.2,0.14 +1339,1.8,2.2,0.14 +1340,1.8,2.2,0.14 +1341,1.8,2.2,0.14 +1342,1.8,2.2,0.14 +1343,1.8,2.2,0.14 +1344,1.8,2.2,0.14 +1345,1.8,2.2,0.14 +1346,1.8,2.2,0.14 +1347,1.8,2.2,0.14 +1348,1.8,2.2,0.14 +1349,1.8,2.2,0.14 +1350,1.8,2.2,0.14 +1351,1.8,2.2,0.14 +1352,1.8,2.2,0.14 +1353,1.8,2.2,0.14 +1354,1.8,2.2,0.14 +1355,1.8,2.2,0.14 +1356,1.8,2.2,0.14 +1357,1.8,2.2,0.14 +1358,1.8,2.2,0.14 +1359,1.8,2.2,0.14 +1360,1.8,2.2,0.14 +1361,1.8,2.2,0.14 +1362,1.8,2.2,0.14 +1363,1.8,2.2,0.14 +1364,1.8,2.2,0.14 +1365,1.8,2.2,0.14 +1366,1.8,2.2,0.14 +1367,1.8,2.2,0.14 +1368,1.8,2.2,0.14 +1369,1.8,2.2,0.14 +1370,1.8,2.2,0.14 +1371,1.8,2.2,0.14 +1372,1.8,2.2,0.14 +1373,1.8,2.2,0.14 +1374,1.8,2.2,0.14 +1375,1.8,2.2,0.14 +1376,1.8,2.2,0.14 +1377,1.8,2.2,0.14 +1378,1.8,2.2,0.14 +1379,1.8,2.2,0.14 +1380,1.8,2.2,0.14 +1381,1.8,2.2,0.14 +1382,1.8,2.2,0.14 +1383,1.8,2.2,0.14 +1384,1.8,2.2,0.14 +1385,1.8,2.2,0.14 +1386,1.8,2.2,0.14 +1387,1.8,2.2,0.14 +1388,1.8,2.2,0.14 +1389,1.8,2.2,0.14 +1390,1.8,2.2,0.14 +1391,1.8,2.2,0.14 +1392,1.8,2.2,0.14 +1393,1.8,2.2,0.14 +1394,1.8,2.2,0.14 +1395,1.8,2.2,0.14 +1396,1.8,2.2,0.14 +1397,1.8,2.2,0.14 +1398,1.8,2.2,0.14 +1399,1.8,2.2,0.14 +1400,1.8,2.2,0.14 +1401,1.8,2.2,0.14 +1402,1.8,2.2,0.14 +1403,1.8,2.2,0.14 +1404,1.8,2.2,0.14 +1405,1.8,2.2,0.14 +1406,1.8,2.2,0.14 +1407,1.8,2.2,0.14 +1408,1.8,2.2,0.14 +1409,1.8,2.2,0.14 +1410,1.8,2.2,0.14 +1411,1.8,2.2,0.14 +1412,1.8,2.2,0.14 +1413,1.8,2.2,0.14 +1414,1.8,2.2,0.14 +1415,1.8,2.2,0.14 +1416,1.8,2.2,0.14 +1417,1.8,2.2,0.14 +1418,1.8,2.2,0.14 +1419,1.8,2.2,0.14 +1420,1.8,2.2,0.14 +1421,1.8,2.2,0.14 +1422,1.8,2.2,0.14 +1423,1.8,2.2,0.14 +1424,1.8,2.2,0.14 +1425,1.8,2.2,0.14 +1426,1.8,2.2,0.14 +1427,1.8,2.2,0.14 +1428,1.8,2.2,0.14 +1429,1.8,2.2,0.14 +1430,1.8,2.2,0.14 +1431,1.8,2.2,0.14 +1432,1.8,2.2,0.14 +1433,1.8,2.2,0.14 +1434,1.8,2.2,0.14 +1435,1.8,2.2,0.14 +1436,1.8,2.2,0.14 +1437,1.8,2.2,0.14 +1438,1.8,2.2,0.14 +1439,1.8,2.2,0.14 +1440,1.8,2.2,0.14 +1441,1.8,2.2,0.14 +1442,1.8,2.2,0.14 +1443,1.8,2.2,0.14 +1444,1.8,2.2,0.14 +1445,1.8,2.2,0.14 +1446,1.8,2.2,0.14 +1447,1.8,2.2,0.14 +1448,1.8,2.2,0.14 +1449,1.8,2.2,0.14 +1450,1.8,2.2,0.14 +1451,1.8,2.2,0.14 +1452,1.8,2.2,0.14 +1453,1.8,2.2,0.14 +1454,1.8,2.2,0.14 +1455,1.8,2.2,0.14 +1456,1.8,2.2,0.14 +1457,1.8,2.2,0.14 +1458,1.8,2.2,0.14 +1459,1.8,2.2,0.14 +1460,1.8,2.2,0.14 +1461,1.8,2.2,0.14 +1462,1.8,2.2,0.14 +1463,1.8,2.2,0.14 +1464,1.8,2.2,0.14 +1465,1.8,2.2,0.14 +1466,1.8,2.2,0.14 +1467,1.8,2.2,0.14 +1468,1.8,2.2,0.14 +1469,1.8,2.2,0.14 +1470,1.8,2.2,0.14 +1471,1.8,2.2,0.14 +1472,1.8,2.2,0.14 +1473,1.8,2.2,0.14 +1474,1.8,2.2,0.14 +1475,1.8,2.2,0.14 +1476,1.8,2.2,0.14 +1477,1.8,2.2,0.14 +1478,1.8,2.2,0.14 +1479,1.8,2.2,0.14 +1480,1.8,2.2,0.14 +1481,1.8,2.2,0.14 +1482,1.8,2.2,0.14 +1483,1.8,2.2,0.14 +1484,1.8,2.2,0.14 +1485,1.8,2.2,0.14 +1486,1.8,2.2,0.14 +1487,1.8,2.2,0.14 +1488,1.8,2.2,0.14 +1489,1.8,2.2,0.14 +1490,1.8,2.2,0.14 +1491,1.8,2.2,0.14 +1492,1.8,2.2,0.14 +1493,1.8,2.2,0.14 +1494,1.8,2.2,0.14 +1495,1.8,2.2,0.14 +1496,1.8,2.2,0.14 +1497,1.8,2.2,0.14 +1498,1.8,2.2,0.14 +1499,1.8,2.2,0.14 +1500,1.8,2.2,0.14 +1501,1.8,2.2,0.14 +1502,1.8,2.2,0.14 +1503,1.8,2.2,0.14 +1504,1.8,2.2,0.14 +1505,1.8,2.2,0.14 +1506,1.8,2.2,0.14 +1507,1.8,2.2,0.14 +1508,1.8,2.2,0.14 +1509,1.8,2.2,0.14 +1510,1.8,2.2,0.14 +1511,1.8,2.2,0.14 +1512,1.8,2.2,0.14 +1513,1.8,2.2,0.14 +1514,1.8,2.2,0.14 +1515,1.8,2.2,0.14 +1516,1.8,2.2,0.14 +1517,1.8,2.2,0.14 +1518,1.8,2.2,0.14 +1519,1.8,2.2,0.14 +1520,1.8,2.2,0.14 +1521,1.8,2.2,0.14 +1522,1.8,2.2,0.14 +1523,1.8,2.2,0.14 +1524,1.8,2.2,0.14 +1525,1.8,2.2,0.14 +1526,1.8,2.2,0.14 +1527,1.8,2.2,0.14 +1528,1.8,2.2,0.14 +1529,1.8,2.2,0.14 +1530,1.8,2.2,0.14 +1531,1.8,2.2,0.14 +1532,1.8,2.2,0.14 +1533,1.8,2.2,0.14 +1534,1.8,2.2,0.14 +1535,1.8,2.2,0.14 +1536,1.8,2.2,0.14 +1537,1.8,2.2,0.14 +1538,1.8,2.2,0.14 +1539,1.8,2.2,0.14 +1540,1.8,2.2,0.14 +1541,1.8,2.2,0.14 +1542,1.8,2.2,0.14 +1543,1.8,2.2,0.14 +1544,1.8,2.2,0.14 +1545,1.8,2.2,0.14 +1546,1.8,2.2,0.14 +1547,1.8,2.2,0.14 +1548,1.8,2.2,0.14 +1549,1.8,2.2,0.14 +1550,1.8,2.2,0.14 +1551,1.8,2.2,0.14 +1552,1.8,2.2,0.14 +1553,1.8,2.2,0.14 +1554,1.8,2.2,0.14 +1555,1.8,2.2,0.14 +1556,1.8,2.2,0.14 +1557,1.8,2.2,0.14 +1558,1.8,2.2,0.14 +1559,1.8,2.2,0.14 +1560,1.8,2.2,0.14 +1561,1.8,2.2,0.14 +1562,1.8,2.2,0.14 +1563,1.8,2.2,0.14 +1564,1.8,2.2,0.14 +1565,1.8,2.2,0.14 +1566,1.8,2.2,0.14 +1567,1.8,2.2,0.14 +1568,1.8,2.2,0.14 +1569,1.8,2.2,0.14 +1570,1.8,2.2,0.14 +1571,1.8,2.2,0.14 +1572,1.8,2.2,0.14 +1573,1.8,2.2,0.14 +1574,1.8,2.2,0.14 +1575,1.8,2.2,0.14 +1576,1.8,2.2,0.14 +1577,1.8,2.2,0.14 +1578,1.8,2.2,0.14 +1579,1.8,2.2,0.14 +1580,1.8,2.2,0.14 +1581,1.8,2.2,0.14 +1582,1.8,2.2,0.14 +1583,1.8,2.2,0.14 +1584,1.8,2.2,0.14 +1585,1.8,2.2,0.14 +1586,1.8,2.2,0.14 +1587,1.8,2.2,0.14 +1588,1.8,2.2,0.14 +1589,1.8,2.2,0.14 +1590,1.8,2.2,0.14 +1591,1.8,2.2,0.14 +1592,1.8,2.2,0.14 +1593,1.8,2.2,0.14 +1594,1.8,2.2,0.14 +1595,1.8,2.2,0.14 +1596,1.8,2.2,0.14 +1597,1.8,2.2,0.14 +1598,1.8,2.2,0.14 +1599,1.8,2.2,0.14 +1600,1.8,2.2,0.14 +1601,1.8,2.2,0.14 +1602,1.8,2.2,0.14 +1603,1.8,2.2,0.14 +1604,1.8,2.2,0.14 +1605,1.8,2.2,0.14 +1606,1.8,2.2,0.14 +1607,1.8,2.2,0.14 +1608,1.8,2.2,0.14 +1609,1.8,2.2,0.14 +1610,1.8,2.2,0.14 +1611,1.8,2.2,0.14 +1612,1.8,2.2,0.14 +1613,1.8,2.2,0.14 +1614,1.8,2.2,0.14 +1615,1.8,2.2,0.14 +1616,1.8,2.2,0.14 +1617,1.8,2.2,0.14 +1618,1.8,2.2,0.14 +1619,1.8,2.2,0.14 +1620,1.8,2.2,0.14 +1621,1.8,2.2,0.14 +1622,1.8,2.2,0.14 +1623,1.8,2.2,0.14 +1624,1.8,2.2,0.14 +1625,1.8,2.2,0.14 +1626,1.8,2.2,0.14 +1627,1.8,2.2,0.14 +1628,1.8,2.2,0.14 +1629,1.8,2.2,0.14 +1630,1.8,2.2,0.14 +1631,1.8,2.2,0.14 +1632,1.8,2.2,0.14 +1633,1.8,2.2,0.14 +1634,1.8,2.2,0.14 +1635,1.8,2.2,0.14 +1636,1.8,2.2,0.14 +1637,1.8,2.2,0.14 +1638,1.8,2.2,0.14 +1639,1.8,2.2,0.14 +1640,1.8,2.2,0.14 +1641,1.8,2.2,0.14 +1642,1.8,2.2,0.14 +1643,1.8,2.2,0.14 +1644,1.8,2.2,0.14 +1645,1.8,2.2,0.14 +1646,1.8,2.2,0.14 +1647,1.8,2.2,0.14 +1648,1.8,2.2,0.14 +1649,1.8,2.2,0.14 +1650,1.8,2.2,0.14 +1651,1.8,2.2,0.14 +1652,1.8,2.2,0.14 +1653,1.8,2.2,0.14 +1654,1.8,2.2,0.14 +1655,1.8,2.2,0.14 +1656,1.8,2.2,0.14 +1657,1.8,2.2,0.14 +1658,1.8,2.2,0.14 +1659,1.8,2.2,0.14 +1660,1.8,2.2,0.14 +1661,1.8,2.2,0.14 +1662,1.8,2.2,0.14 +1663,1.8,2.2,0.14 +1664,1.8,2.2,0.14 +1665,1.8,2.2,0.14 +1666,1.8,2.2,0.14 +1667,1.8,2.2,0.14 +1668,1.8,2.2,0.14 +1669,1.8,2.2,0.14 +1670,1.8,2.2,0.14 +1671,1.8,2.2,0.14 +1672,1.8,2.2,0.14 +1673,1.8,2.2,0.14 +1674,1.8,2.2,0.14 +1675,1.8,2.2,0.14 +1676,1.8,2.2,0.14 +1677,1.8,2.2,0.14 +1678,1.8,2.2,0.14 +1679,1.8,2.2,0.14 +1680,1.8,2.2,0.14 +1681,1.8,2.2,0.14 +1682,1.8,2.2,0.14 +1683,1.8,2.2,0.14 +1684,1.8,2.2,0.14 +1685,1.8,2.2,0.14 +1686,1.8,2.2,0.14 +1687,1.8,2.2,0.14 +1688,1.8,2.2,0.14 +1689,1.8,2.2,0.14 +1690,1.8,2.2,0.14 +1691,1.8,2.2,0.14 +1692,1.8,2.2,0.14 +1693,1.8,2.2,0.14 +1694,1.8,2.2,0.14 +1695,1.8,2.2,0.14 +1696,1.8,2.2,0.14 +1697,1.8,2.2,0.14 +1698,1.8,2.2,0.14 +1699,1.8,2.2,0.14 +1700,1.8,2.2,0.14 +1701,1.8,2.2,0.14 +1702,1.8,2.2,0.14 +1703,1.8,2.2,0.14 +1704,1.8,2.2,0.14 +1705,1.8,2.2,0.14 +1706,1.8,2.2,0.14 +1707,1.8,2.2,0.14 +1708,1.8,2.2,0.14 +1709,1.8,2.2,0.14 +1710,1.8,2.2,0.14 +1711,1.8,2.2,0.14 +1712,1.8,2.2,0.14 +1713,1.8,2.2,0.14 +1714,1.8,2.2,0.14 +1715,1.8,2.2,0.14 +1716,1.8,2.2,0.14 +1717,1.8,2.2,0.14 +1718,1.8,2.2,0.14 +1719,1.8,2.2,0.14 +1720,1.8,2.2,0.14 +1721,1.8,2.2,0.14 +1722,1.8,2.2,0.14 +1723,1.8,2.2,0.14 +1724,1.8,2.2,0.14 +1725,1.8,2.2,0.14 +1726,1.8,2.2,0.14 +1727,1.8,2.2,0.14 +1728,1.8,2.2,0.14 +1729,1.8,2.2,0.14 +1730,1.8,2.2,0.14 +1731,1.8,2.2,0.14 +1732,1.8,2.2,0.14 +1733,1.8,2.2,0.14 +1734,1.8,2.2,0.14 +1735,1.8,2.2,0.14 +1736,1.8,2.2,0.14 +1737,1.8,2.2,0.14 +1738,1.8,2.2,0.14 +1739,1.8,2.2,0.14 +1740,1.8,2.2,0.14 +1741,1.8,2.2,0.14 +1742,1.8,2.2,0.14 +1743,1.8,2.2,0.14 +1744,1.8,2.2,0.14 +1745,1.8,2.2,0.14 +1746,1.8,2.2,0.14 +1747,1.8,2.2,0.14 +1748,1.8,2.2,0.14 +1749,1.8,2.2,0.14 +1750,1.8,2.2,0.14 +1751,1.8,2.2,0.14 +1752,1.8,2.2,0.14 +1753,1.8,2.2,0.14 +1754,1.8,2.2,0.14 +1755,1.8,2.2,0.14 +1756,1.8,2.2,0.14 +1757,1.8,2.2,0.14 +1758,1.8,2.2,0.14 +1759,1.8,2.2,0.14 +1760,1.8,2.2,0.14 +1761,1.8,2.2,0.14 +1762,1.8,2.2,0.14 +1763,1.8,2.2,0.14 +1764,1.8,2.2,0.14 +1765,1.8,2.2,0.14 +1766,1.8,2.2,0.14 +1767,1.8,2.2,0.14 +1768,1.8,2.2,0.14 +1769,1.8,2.2,0.14 +1770,1.8,2.2,0.14 +1771,1.8,2.2,0.14 +1772,1.8,2.2,0.14 +1773,1.8,2.2,0.14 +1774,1.8,2.2,0.14 +1775,1.8,2.2,0.14 +1776,1.8,2.2,0.14 +1777,1.8,2.2,0.14 +1778,1.8,2.2,0.14 +1779,1.8,2.2,0.14 +1780,1.8,2.2,0.14 +1781,1.8,2.2,0.14 +1782,1.8,2.2,0.14 +1783,1.8,2.2,0.14 +1784,1.8,2.2,0.14 +1785,1.8,2.2,0.14 +1786,1.8,2.2,0.14 +1787,1.8,2.2,0.14 +1788,1.8,2.2,0.14 +1789,1.8,2.2,0.14 +1790,1.8,2.2,0.14 +1791,1.8,2.2,0.14 +1792,1.8,2.2,0.14 +1793,1.8,2.2,0.14 +1794,1.8,2.2,0.14 +1795,1.8,2.2,0.14 +1796,1.8,2.2,0.14 +1797,1.8,2.2,0.14 +1798,1.8,2.2,0.14 +1799,1.8,2.2,0.14 +1800,1.8,2.2,0.14 +1801,1.8,2.2,0.14 +1802,1.8,2.2,0.14 +1803,1.8,2.2,0.14 +1804,1.8,2.2,0.14 +1805,1.8,2.2,0.14 +1806,1.8,2.2,0.14 +1807,1.8,2.2,0.14 +1808,1.8,2.2,0.14 +1809,1.8,2.2,0.14 +1810,1.8,2.2,0.14 +1811,1.8,2.2,0.14 +1812,1.8,2.2,0.14 +1813,1.8,2.2,0.14 +1814,1.8,2.2,0.14 +1815,1.8,2.2,0.14 +1816,1.8,2.2,0.14 +1817,1.8,2.2,0.14 +1818,1.8,2.2,0.14 +1819,1.8,2.2,0.14 +1820,1.8,2.2,0.14 +1821,1.8,2.2,0.14 +1822,1.8,2.2,0.14 +1823,1.8,2.2,0.14 +1824,1.8,2.2,0.14 +1825,1.8,2.2,0.14 +1826,1.8,2.2,0.14 +1827,1.8,2.2,0.14 +1828,1.8,2.2,0.14 +1829,1.8,2.2,0.14 +1830,1.8,2.2,0.14 +1831,1.8,2.2,0.14 +1832,1.8,2.2,0.14 +1833,1.8,2.2,0.14 +1834,1.8,2.2,0.14 +1835,1.8,2.2,0.14 +1836,1.8,2.2,0.14 +1837,1.8,2.2,0.14 +1838,1.8,2.2,0.14 +1839,1.8,2.2,0.14 +1840,1.8,2.2,0.14 +1841,1.8,2.2,0.14 +1842,1.8,2.2,0.14 +1843,1.8,2.2,0.14 +1844,1.8,2.2,0.14 +1845,1.8,2.2,0.14 +1846,1.8,2.2,0.14 +1847,1.8,2.2,0.14 +1848,1.8,2.2,0.14 +1849,1.8,2.2,0.14 +1850,1.8,2.2,0.14 +1851,1.8,2.2,0.14 +1852,1.8,2.2,0.14 +1853,1.8,2.2,0.14 +1854,1.8,2.2,0.14 +1855,1.8,2.2,0.14 +1856,1.8,2.2,0.14 +1857,1.8,2.2,0.14 +1858,1.8,2.2,0.14 +1859,1.8,2.2,0.14 +1860,1.8,2.2,0.14 +1861,1.8,2.2,0.14 +1862,1.8,2.2,0.14 +1863,1.8,2.2,0.14 +1864,1.8,2.2,0.14 +1865,1.8,2.2,0.14 +1866,1.8,2.2,0.14 +1867,1.8,2.2,0.14 +1868,1.8,2.2,0.14 +1869,1.8,2.2,0.14 +1870,1.8,2.2,0.14 +1871,1.8,2.2,0.14 +1872,1.8,2.2,0.14 +1873,1.8,2.2,0.14 +1874,1.8,2.2,0.14 +1875,1.8,2.2,0.14 +1876,1.8,2.2,0.14 +1877,1.8,2.2,0.14 +1878,1.8,2.2,0.14 +1879,1.8,2.2,0.14 +1880,1.8,2.2,0.14 +1881,1.8,2.2,0.14 +1882,1.8,2.2,0.14 +1883,1.8,2.2,0.14 +1884,1.8,2.2,0.14 +1885,1.8,2.2,0.14 +1886,1.8,2.2,0.14 +1887,1.8,2.2,0.14 +1888,1.8,2.2,0.14 +1889,1.8,2.2,0.14 +1890,1.8,2.2,0.14 +1891,1.8,2.2,0.14 +1892,1.8,2.2,0.14 +1893,1.8,2.2,0.14 +1894,1.8,2.2,0.14 +1895,1.8,2.2,0.14 +1896,1.8,2.2,0.14 +1897,1.8,2.2,0.14 +1898,1.8,2.2,0.14 +1899,1.8,2.2,0.14 +1900,1.8,2.2,0.14 +1901,1.8,2.2,0.14 +1902,1.8,2.2,0.14 +1903,1.8,2.2,0.14 +1904,1.8,2.2,0.14 +1905,1.8,2.2,0.14 +1906,1.8,2.2,0.14 +1907,1.8,2.2,0.14 +1908,1.8,2.2,0.14 +1909,1.8,2.2,0.14 +1910,1.8,2.2,0.14 +1911,1.8,2.2,0.14 +1912,1.8,2.2,0.14 +1913,1.8,2.2,0.14 +1914,1.8,2.2,0.14 +1915,1.8,2.2,0.14 +1916,1.8,2.2,0.14 +1917,1.8,2.2,0.14 +1918,1.8,2.2,0.14 +1919,1.8,2.2,0.14 +1920,1.8,2.2,0.14 +1921,1.8,2.2,0.14 +1922,1.8,2.2,0.14 +1923,1.8,2.2,0.14 +1924,1.8,2.2,0.14 +1925,1.8,2.2,0.14 +1926,1.8,2.2,0.14 +1927,1.8,2.2,0.14 +1928,1.8,2.2,0.14 +1929,1.8,2.2,0.14 +1930,1.8,2.2,0.14 +1931,1.8,2.2,0.14 +1932,1.8,2.2,0.14 +1933,1.8,2.2,0.14 +1934,1.8,2.2,0.14 +1935,1.8,2.2,0.14 +1936,1.8,2.2,0.14 +1937,1.8,2.2,0.14 +1938,1.8,2.2,0.14 +1939,1.8,2.2,0.14 +1940,1.8,2.2,0.14 +1941,1.8,2.2,0.14 +1942,1.8,2.2,0.14 +1943,1.8,2.2,0.14 +1944,1.8,2.2,0.14 +1945,1.8,2.2,0.14 +1946,1.8,2.2,0.14 +1947,1.8,2.2,0.14 +1948,1.8,2.2,0.14 +1949,1.8,2.2,0.14 +1950,1.8,2.2,0.14 +1951,1.8,2.2,0.14 +1952,1.8,2.2,0.14 +1953,1.8,2.2,0.14 +1954,1.8,2.2,0.14 +1955,1.8,2.2,0.14 +1956,1.8,2.2,0.14 +1957,1.8,2.2,0.14 +1958,1.8,2.2,0.14 +1959,1.8,2.2,0.14 +1960,1.8,2.2,0.14 +1961,1.8,2.2,0.14 +1962,1.8,2.2,0.14 +1963,1.8,2.2,0.14 +1964,1.8,2.2,0.14 +1965,1.8,2.2,0.14 +1966,1.8,2.2,0.14 +1967,1.8,2.2,0.14 +1968,1.8,2.2,0.14 +1969,1.8,2.2,0.14 +1970,1.8,2.2,0.14 +1971,1.8,2.2,0.14 +1972,1.8,2.2,0.14 +1973,1.8,2.2,0.14 +1974,1.8,2.2,0.14 +1975,1.8,2.2,0.14 +1976,1.8,2.2,0.14 +1977,1.8,2.2,0.14 +1978,1.8,2.2,0.14 +1979,1.8,2.2,0.14 +1980,1.8,2.2,0.14 +1981,1.8,2.2,0.14 +1982,1.8,2.2,0.14 +1983,1.8,2.2,0.14 +1984,1.8,2.2,0.14 +1985,1.8,2.2,0.14 +1986,1.8,2.2,0.14 +1987,1.8,2.2,0.14 +1988,1.8,2.2,0.14 +1989,1.8,2.2,0.14 +1990,1.8,2.2,0.14 +1991,1.8,2.2,0.14 +1992,1.8,2.2,0.14 +1993,1.8,2.2,0.14 +1994,1.8,2.2,0.14 +1995,1.8,2.2,0.14 +1996,1.8,2.2,0.14 +1997,1.8,2.2,0.14 +1998,1.8,2.2,0.14 +1999,1.8,2.2,0.14 +2000,1.8,2.2,0.14 +2001,1.8,2.2,0.14 +2002,1.8,2.2,0.14 +2003,1.8,2.2,0.14 +2004,1.8,2.2,0.14 +2005,1.8,2.2,0.14 +2006,1.8,2.2,0.14 +2007,1.8,2.2,0.14 +2008,1.8,2.2,0.14 +2009,1.8,2.2,0.14 +2010,1.8,2.2,0.14 +2011,1.8,2.2,0.14 +2012,1.8,2.2,0.14 +2013,1.8,2.2,0.14 +2014,1.8,2.2,0.14 +2015,1.8,2.2,0.14 +2016,1.8,2.2,0.14 +2017,1.8,2.2,0.14 +2018,1.8,2.2,0.14 +2019,1.8,2.2,0.14 +2020,1.8,2.2,0.14 +2021,1.8,2.2,0.14 +2022,1.8,2.2,0.14 +2023,1.8,2.2,0.14 +2024,1.8,2.2,0.14 +2025,1.8,2.2,0.14 +2026,1.8,2.2,0.14 +2027,1.8,2.2,0.14 +2028,1.8,2.2,0.14 +2029,1.8,2.2,0.14 +2030,1.8,2.2,0.14 +2031,1.8,2.2,0.14 +2032,1.8,2.2,0.14 +2033,1.8,2.2,0.14 +2034,1.8,2.2,0.14 +2035,1.8,2.2,0.14 +2036,1.8,2.2,0.14 +2037,1.8,2.2,0.14 +2038,1.8,2.2,0.14 +2039,1.8,2.2,0.14 +2040,1.8,2.2,0.14 +2041,1.8,2.2,0.14 +2042,1.8,2.2,0.14 +2043,1.8,2.2,0.14 +2044,1.8,2.2,0.14 +2045,1.8,2.2,0.14 +2046,1.8,2.2,0.14 +2047,1.8,2.2,0.14 +2048,1.8,2.2,0.14 +2049,1.8,2.2,0.14 +2050,1.8,2.2,0.14 +2051,1.8,2.2,0.14 +2052,1.8,2.2,0.14 +2053,1.8,2.2,0.14 +2054,1.8,2.2,0.14 +2055,1.8,2.2,0.14 +2056,1.8,2.2,0.14 +2057,1.8,2.2,0.14 +2058,1.8,2.2,0.14 +2059,1.8,2.2,0.14 +2060,1.8,2.2,0.14 +2061,1.8,2.2,0.14 +2062,1.8,2.2,0.14 +2063,1.8,2.2,0.14 +2064,1.8,2.2,0.14 +2065,1.8,2.2,0.14 +2066,1.8,2.2,0.14 +2067,1.8,2.2,0.14 +2068,1.8,2.2,0.14 +2069,1.8,2.2,0.14 +2070,1.8,2.2,0.14 +2071,1.8,2.2,0.14 +2072,1.8,2.2,0.14 +2073,1.8,2.2,0.14 +2074,1.8,2.2,0.14 +2075,1.8,2.2,0.14 +2076,1.8,2.2,0.14 +2077,1.8,2.2,0.14 +2078,1.8,2.2,0.14 +2079,1.8,2.2,0.14 +2080,1.8,2.2,0.14 +2081,1.8,2.2,0.14 +2082,1.8,2.2,0.14 +2083,1.8,2.2,0.14 +2084,1.8,2.2,0.14 +2085,1.8,2.2,0.14 +2086,1.8,2.2,0.14 +2087,1.8,2.2,0.14 +2088,1.8,2.2,0.14 +2089,1.8,2.2,0.14 +2090,1.8,2.2,0.14 +2091,1.8,2.2,0.14 +2092,1.8,2.2,0.14 +2093,1.8,2.2,0.14 +2094,1.8,2.2,0.14 +2095,1.8,2.2,0.14 +2096,1.8,2.2,0.14 +2097,1.8,2.2,0.14 +2098,1.8,2.2,0.14 +2099,1.8,2.2,0.14 +2100,1.8,2.2,0.14 +2101,1.8,2.2,0.14 +2102,1.8,2.2,0.14 +2103,1.8,2.2,0.14 +2104,1.8,2.2,0.14 +2105,1.8,2.2,0.14 +2106,1.8,2.2,0.14 +2107,1.8,2.2,0.14 +2108,1.8,2.2,0.14 +2109,1.8,2.2,0.14 +2110,1.8,2.2,0.14 +2111,1.8,2.2,0.14 +2112,1.8,2.2,0.14 +2113,1.8,2.2,0.14 +2114,1.8,2.2,0.14 +2115,1.8,2.2,0.14 +2116,1.8,2.2,0.14 +2117,1.8,2.2,0.14 +2118,1.8,2.2,0.14 +2119,1.8,2.2,0.14 +2120,1.8,2.2,0.14 +2121,1.8,2.2,0.14 +2122,1.8,2.2,0.14 +2123,1.8,2.2,0.14 +2124,1.8,2.2,0.14 +2125,1.8,2.2,0.14 +2126,1.8,2.2,0.14 +2127,1.8,2.2,0.14 +2128,1.8,2.2,0.14 +2129,1.8,2.2,0.14 +2130,1.8,2.2,0.14 +2131,1.8,2.2,0.14 +2132,1.8,2.2,0.14 +2133,1.8,2.2,0.14 +2134,1.8,2.2,0.14 +2135,1.8,2.2,0.14 +2136,1.8,2.2,0.14 +2137,1.8,2.2,0.14 +2138,1.8,2.2,0.14 +2139,1.8,2.2,0.14 +2140,1.8,2.2,0.14 +2141,1.8,2.2,0.14 +2142,1.8,2.2,0.14 +2143,1.8,2.2,0.14 +2144,1.8,2.2,0.14 +2145,1.8,2.2,0.14 +2146,1.8,2.2,0.14 +2147,1.8,2.2,0.14 +2148,1.8,2.2,0.14 +2149,1.8,2.2,0.14 +2150,1.8,2.2,0.14 +2151,1.8,2.2,0.14 +2152,1.8,2.2,0.14 +2153,1.8,2.2,0.14 +2154,1.8,2.2,0.14 +2155,1.8,2.2,0.14 +2156,1.8,2.2,0.14 +2157,1.8,2.2,0.14 +2158,1.8,2.2,0.14 +2159,1.8,2.2,0.14 +2160,1.8,2.2,0.14 +2161,1.8,2.2,0.14 +2162,1.8,2.2,0.14 +2163,1.8,2.2,0.14 +2164,1.8,2.2,0.14 +2165,1.8,2.2,0.14 +2166,1.8,2.2,0.14 +2167,1.8,2.2,0.14 +2168,1.8,2.2,0.14 +2169,1.8,2.2,0.14 +2170,1.8,2.2,0.14 +2171,1.8,2.2,0.14 +2172,1.8,2.2,0.14 +2173,1.8,2.2,0.14 +2174,1.8,2.2,0.14 +2175,1.8,2.2,0.14 +2176,1.8,2.2,0.14 +2177,1.8,2.2,0.14 +2178,1.8,2.2,0.14 +2179,1.8,2.2,0.14 +2180,1.8,2.2,0.14 +2181,1.8,2.2,0.14 +2182,1.8,2.2,0.14 +2183,1.8,2.2,0.14 +2184,1.8,2.2,0.14 +2185,1.8,2.2,0.14 +2186,1.8,2.2,0.14 +2187,1.8,2.2,0.14 +2188,1.8,2.2,0.14 +2189,1.8,2.2,0.14 +2190,1.8,2.2,0.14 +2191,1.8,2.2,0.14 +2192,1.8,2.2,0.14 +2193,1.8,2.2,0.14 +2194,1.8,2.2,0.14 +2195,1.8,2.2,0.14 +2196,1.8,2.2,0.14 +2197,1.8,2.2,0.14 +2198,1.8,2.2,0.14 +2199,1.8,2.2,0.14 +2200,1.8,2.2,0.14 +2201,1.8,2.2,0.14 +2202,1.8,2.2,0.14 +2203,1.8,2.2,0.14 +2204,1.8,2.2,0.14 +2205,1.8,2.2,0.14 +2206,1.8,2.2,0.14 +2207,1.8,2.2,0.14 +2208,1.8,2.2,0.14 +2209,1.8,2.2,0.14 +2210,1.8,2.2,0.14 +2211,1.8,2.2,0.14 +2212,1.8,2.2,0.14 +2213,1.8,2.2,0.14 +2214,1.8,2.2,0.14 +2215,1.8,2.2,0.14 +2216,1.8,2.2,0.14 +2217,1.8,2.2,0.14 +2218,1.8,2.2,0.14 +2219,1.8,2.2,0.14 +2220,1.8,2.2,0.14 +2221,1.8,2.2,0.14 +2222,1.8,2.2,0.14 +2223,1.8,2.2,0.14 +2224,1.8,2.2,0.14 +2225,1.8,2.2,0.14 +2226,1.8,2.2,0.14 +2227,1.8,2.2,0.14 +2228,1.8,2.2,0.14 +2229,1.8,2.2,0.14 +2230,1.8,2.2,0.14 +2231,1.8,2.2,0.14 +2232,1.8,2.2,0.14 +2233,1.8,2.2,0.14 +2234,1.8,2.2,0.14 +2235,1.8,2.2,0.14 +2236,1.8,2.2,0.14 +2237,1.8,2.2,0.14 +2238,1.8,2.2,0.14 +2239,1.8,2.2,0.14 +2240,1.8,2.2,0.14 +2241,1.8,2.2,0.14 +2242,1.8,2.2,0.14 +2243,1.8,2.2,0.14 +2244,1.8,2.2,0.14 +2245,1.8,2.2,0.14 +2246,1.8,2.2,0.14 +2247,1.8,2.2,0.14 +2248,1.8,2.2,0.14 +2249,1.8,2.2,0.14 +2250,1.8,2.2,0.14 +2251,1.8,2.2,0.14 +2252,1.8,2.2,0.14 +2253,1.8,2.2,0.14 +2254,1.8,2.2,0.14 +2255,1.8,2.2,0.14 +2256,1.8,2.2,0.14 +2257,1.8,2.2,0.14 +2258,1.8,2.2,0.14 +2259,1.8,2.2,0.14 +2260,1.8,2.2,0.14 +2261,1.8,2.2,0.14 +2262,1.8,2.2,0.14 +2263,1.8,2.2,0.14 +2264,1.8,2.2,0.14 +2265,1.8,2.2,0.14 +2266,1.8,2.2,0.14 +2267,1.8,2.2,0.14 +2268,1.8,2.2,0.14 +2269,1.8,2.2,0.14 +2270,1.8,2.2,0.14 +2271,1.8,2.2,0.14 +2272,1.8,2.2,0.14 +2273,1.8,2.2,0.14 +2274,1.8,2.2,0.14 +2275,1.8,2.2,0.14 +2276,1.8,2.2,0.14 +2277,1.8,2.2,0.14 +2278,1.8,2.2,0.14 +2279,1.8,2.2,0.14 +2280,1.8,2.2,0.14 +2281,1.8,2.2,0.14 +2282,1.8,2.2,0.14 +2283,1.8,2.2,0.14 +2284,1.8,2.2,0.14 +2285,1.8,2.2,0.14 +2286,1.8,2.2,0.14 +2287,1.8,2.2,0.14 +2288,1.8,2.2,0.14 +2289,1.8,2.2,0.14 +2290,1.8,2.2,0.14 +2291,1.8,2.2,0.14 +2292,1.8,2.2,0.14 +2293,1.8,2.2,0.14 +2294,1.8,2.2,0.14 +2295,1.8,2.2,0.14 +2296,1.8,2.2,0.14 +2297,1.8,2.2,0.14 +2298,1.8,2.2,0.14 +2299,1.8,2.2,0.14 +2300,1.8,2.2,0.14 +2301,1.8,2.2,0.14 +2302,1.8,2.2,0.14 +2303,1.8,2.2,0.14 +2304,1.8,2.2,0.14 +2305,1.8,2.2,0.14 +2306,1.8,2.2,0.14 +2307,1.8,2.2,0.14 +2308,1.8,2.2,0.14 +2309,1.8,2.2,0.14 +2310,1.8,2.2,0.14 +2311,1.8,2.2,0.14 +2312,1.8,2.2,0.14 +2313,1.8,2.2,0.14 +2314,1.8,2.2,0.14 +2315,1.8,2.2,0.14 +2316,1.8,2.2,0.14 +2317,1.8,2.2,0.14 +2318,1.8,2.2,0.14 +2319,1.8,2.2,0.14 +2320,1.8,2.2,0.14 +2321,1.8,2.2,0.14 +2322,1.8,2.2,0.14 +2323,1.8,2.2,0.14 +2324,1.8,2.2,0.14 +2325,1.8,2.2,0.14 +2326,1.8,2.2,0.14 +2327,1.8,2.2,0.14 +2328,1.8,2.2,0.14 +2329,1.8,2.2,0.14 +2330,1.8,2.2,0.14 +2331,1.8,2.2,0.14 +2332,1.8,2.2,0.14 +2333,1.8,2.2,0.14 +2334,1.8,2.2,0.14 +2335,1.8,2.2,0.14 +2336,1.8,2.2,0.14 +2337,1.8,2.2,0.14 +2338,1.8,2.2,0.14 +2339,1.8,2.2,0.14 +2340,1.8,2.2,0.14 +2341,1.8,2.2,0.14 +2342,1.8,2.2,0.14 +2343,1.8,2.2,0.14 +2344,1.8,2.2,0.14 +2345,1.8,2.2,0.14 +2346,1.8,2.2,0.14 +2347,1.8,2.2,0.14 +2348,1.8,2.2,0.14 +2349,1.8,2.2,0.14 +2350,1.8,2.2,0.14 +2351,1.8,2.2,0.14 +2352,1.8,2.2,0.14 +2353,1.8,2.2,0.14 +2354,1.8,2.2,0.14 +2355,1.8,2.2,0.14 +2356,1.8,2.2,0.14 +2357,1.8,2.2,0.14 +2358,1.8,2.2,0.14 +2359,1.8,2.2,0.14 +2360,1.8,2.2,0.14 +2361,1.8,2.2,0.14 +2362,1.8,2.2,0.14 +2363,1.8,2.2,0.14 +2364,1.8,2.2,0.14 +2365,1.8,2.2,0.14 +2366,1.8,2.2,0.14 +2367,1.8,2.2,0.14 +2368,1.8,2.2,0.14 +2369,1.8,2.2,0.14 +2370,1.8,2.2,0.14 +2371,1.8,2.2,0.14 +2372,1.8,2.2,0.14 +2373,1.8,2.2,0.14 +2374,1.8,2.2,0.14 +2375,1.8,2.2,0.14 +2376,1.8,2.2,0.14 +2377,1.8,2.2,0.14 +2378,1.8,2.2,0.14 +2379,1.8,2.2,0.14 +2380,1.8,2.2,0.14 +2381,1.8,2.2,0.14 +2382,1.8,2.2,0.14 +2383,1.8,2.2,0.14 +2384,1.8,2.2,0.14 +2385,1.8,2.2,0.14 +2386,1.8,2.2,0.14 +2387,1.8,2.2,0.14 +2388,1.8,2.2,0.14 +2389,1.8,2.2,0.14 +2390,1.8,2.2,0.14 +2391,1.8,2.2,0.14 +2392,1.8,2.2,0.14 +2393,1.8,2.2,0.14 +2394,1.8,2.2,0.14 +2395,1.8,2.2,0.14 +2396,1.8,2.2,0.14 +2397,1.8,2.2,0.14 +2398,1.8,2.2,0.14 +2399,1.8,2.2,0.14 diff --git a/backend-worker/invest_results.py b/backend-worker/invest_results.py index 1174898..9052674 100644 --- a/backend-worker/invest_results.py +++ b/backend-worker/invest_results.py @@ -9,6 +9,7 @@ import pygeoprocessing from invest_args import INVEST_BASE_PATH +import ucm_valuation logging.basicConfig(level=logging.INFO) LOGGER = logging.getLogger(__name__) @@ -28,6 +29,7 @@ 'Household did not receive Food Stamps or SNAP in the past 12 months | Income in the past 12 months below poverty level', 'Household did not receive Food Stamps or SNAP in the past 12 months | Income in the past 12 months at or above poverty level'] + def _read_field_from_vector(vector_path, key_field, value_field): """Read a field from a vector's first layer. @@ -64,6 +66,7 @@ def carbon(workspace_dir): carbon_results (dict) : A python dictionary with keys as the output name and values as the aggregated sum. """ + LOGGER.info('Gathering Carbon Model results') #carbon_output_dir = os.path.join(workspace_dir, 'intermediate_outputs') carbon_outputs = { 'tot_c_cur': os.path.join(workspace_dir, 'tot_c_cur.tif'), @@ -112,18 +115,40 @@ def urban_cooling(workspace_dir): there will be only one result to return. Return: - urban_cooling_results (dict) : A python dictionary with a single - key of 'avg_tmp_v' and it's corresponding value. + urban_cooling_results (dict) : A python dictionary of urban cooling + & census metrics summarized in the AOI. """ - + LOGGER.info('Doing Urban Cooling valuation') uhi_vector_path = os.path.join(workspace_dir, 'uhi_results.shp') - value_field = 'avg_tmp_v' - avg_tmp_dict = _read_field_from_vector(uhi_vector_path, 'FID', value_field) - # Currently only aggregating over one large bounding box, so only one entry - feat_key = list(avg_tmp_dict.keys())[0] - urban_cooling_results = {value_field: avg_tmp_dict[feat_key]} + valuation_args = { + 'workspace_dir': os.path.join(workspace_dir, 'valuation'), + 'city': 'San Antonio', + 'lulc_tif': os.path.join(workspace_dir, 'intermediate', 'lulc.tif'), + 'air_temp_tif': os.path.join(workspace_dir, 'intermediate', 'T_air.tif'), + 'dd_energy_path': os.path.join( + INVEST_BASE_PATH, 'biophysical_tables', + 'placeholder_ucm_energy_parameters.csv'), + 'mortality_risk_path': os.path.join( + INVEST_BASE_PATH, 'biophysical_tables', + 'guo_et_al_2014_mortality_risk.csv'), + 'aoi_vector_path': uhi_vector_path + } + ucm_valuation.execute(valuation_args) + + LOGGER.info('Gathering Urban Cooling Model results') + urban_cooling_results = {} + summary_field_list = ['avg_tmp_v', 'cdd_cost'] + for value_field in summary_field_list: + fid_metric_dict = _read_field_from_vector( + uhi_vector_path, 'FID', value_field) + # Only aggregating over one large serviceshed, so only one entry + feat_key = list(fid_metric_dict.keys())[0] + urban_cooling_results[value_field] = fid_metric_dict[feat_key] + + LOGGER.info('Gathering Census data from AOI') census_data = {'census': _extract_census_from_aoi(uhi_vector_path)} results = {**urban_cooling_results, **census_data} + LOGGER.info(results) results_json_path = os.path.join(workspace_dir, "derived_results.json") with open(results_json_path, "w") as fp: json.dump(results, fp) diff --git a/backend-worker/ucm_valuation.py b/backend-worker/ucm_valuation.py index 9396557..b5f4954 100644 --- a/backend-worker/ucm_valuation.py +++ b/backend-worker/ucm_valuation.py @@ -1,6 +1,5 @@ from pathlib import Path import logging -import tempfile import hashlib import inspect from typing import List @@ -9,6 +8,7 @@ import pandas as pd from osgeo import gdal +from osgeo import ogr import pygeoprocessing import natcap.invest.utils @@ -30,7 +30,6 @@ _EXPECTED_ENERGY_HEADERS = [ "lucode", - "building type", "kwh_per_cdd", "kwh_per_hdd", "cost_per_kwh", @@ -103,18 +102,17 @@ def execute(args): """Urban Cooling Model valuation Args: - args['workspace_dir'] (string): a path to the output workspace folder. - args['results_suffix'] (string): string appended to each output file path. + args['workspace_dir'] (string): a path to an output workspace folder. + Will be created if it does not exist. args['city'] (string): selected city from the cities listed in args['mortality_risk_path']. args['lulc_tif'] (string): file path to a landcover raster. args['air_temp_tif'] (string): file path to an air temperature raster output from InVEST Urban Cooling Model. args['dd_energy_path'] (string): file path to a table indicating the relationship between LULC classes and energy use. Table headers must include: * 'lucode': column linking this table to the lulc_tif raster classes - * 'building type': the building type associated with each raster lucode - * 'kwh_per_cdd': the energy impact of each Cooling Degree Day for this building type - * 'kwh_per_hdd': the energy impact of each Heating Degree Day for this building type - * 'cost_per_hdd': the cost of energy associated with this building type + * 'kwh_per_cdd': the energy impact of each Cooling Degree Day for this lucode + * 'kwh_per_hdd': the energy impact of each Heating Degree Day for this lucode + * 'cost_per_hdd': the cost of energy associated with this lucode args['mortality_risk_path'] (string): file path to a table indicating the relationship between temperature and mortality risk for numerous cities . Table headers must include: * 'city': city name in the format 'City, Country' @@ -129,13 +127,12 @@ def execute(args): * 'rr_90': relative mortality risk associated with t_90 * 'rr_99': relative mortality risk associated with t_99 This comes from Guo et al. 2014. + args['aoi_vector_path'] (string): polygon vector with which to aggregate raster results Returns: None """ - file_suffix = natcap.invest.utils.make_suffix_string(args, "results_suffix") - dd_energy_df = pd.read_csv(args["dd_energy_path"]) # Test for correct csv headers @@ -147,70 +144,72 @@ def execute(args): ) # TODO Consider calculating HDD/CDD using WBGT, not just raw temp, to account for the lived experience of heat - - temp_dir = Path(args["workspace_dir"]) / "temp" - temp_dir.mkdir(exist_ok=True) - - # Calculate Heating Degree Days raster - logger.debug(f"Calculating Heating Degree Days") - hdd_tif = Path(args["workspace_dir"]) / f"hdd{file_suffix}.tif" - hdd_calculation(args["air_temp_tif"], hdd_tif) - - # Calculate energy use raster (kWh) based on Heating Degree Days - hdd_kwh_tif = Path(args["workspace_dir"]) / f"hdd_kwh{file_suffix}.tif" - grouped_scalar_calculation( - hdd_tif, - args["lulc_tif"], - hdd_kwh_tif, - dd_energy_df["lucode"].to_list(), - dd_energy_df["kwh_per_hdd"].to_list(), - temp_dir, - ) - - # Calculate energy use raster ($) based on Heating Degree Days - hdd_cost_tif = Path(args["workspace_dir"]) / f"hdd_cost{file_suffix}.tif" - grouped_scalar_calculation( - hdd_kwh_tif, - args["lulc_tif"], - hdd_cost_tif, - dd_energy_df["lucode"].to_list(), - dd_energy_df["cost_per_kwh"].to_list(), - temp_dir, - ) + workspace_dir = Path(args["workspace_dir"]) + workspace_dir.mkdir(exist_ok=True) + + # Skipping the HDD calcs because we only modeled + # air temps for the month of August in San Antonio, TX. + # # Calculate Heating Degree Days raster + # logger.debug(f"Calculating Heating Degree Days") + # hdd_tif = workspace_dir / "hdd.tif" + # hdd_calculation(args["air_temp_tif"], hdd_tif) + + # # Calculate energy use raster (kWh) based on Heating Degree Days + # hdd_kwh_tif = workspace_dir / "hdd_kwh.tif" + # grouped_scalar_calculation( + # hdd_tif, + # args["lulc_tif"], + # hdd_kwh_tif, + # dd_energy_df["lucode"].to_list(), + # dd_energy_df["kwh_per_hdd"].to_list() + # ) + + # # Calculate energy use raster ($) based on Heating Degree Days + # hdd_cost_tif = workspace_dir / "hdd_cost.tif" + # grouped_scalar_calculation( + # hdd_kwh_tif, + # args["lulc_tif"], + # hdd_cost_tif, + # dd_energy_df["lucode"].to_list(), + # dd_energy_df["cost_per_kwh"].to_list() + # ) # Calculate Cooling Degree Days raster - logger.debug(f"Calculating Cooling Degree Days") - cdd_tif = Path(args["workspace_dir"]) / f"cdd{file_suffix}.tif" + logger.debug("Calculating Cooling Degree Days") + cdd_tif = workspace_dir / "cdd.tif" cdd_calculation(args["air_temp_tif"], cdd_tif) # Calculate energy use raster (kWh) based on Cooling Degree Days - cdd_kwh_tif = Path(args["workspace_dir"]) / f"cdd_kwh{file_suffix}.tif" + cdd_kwh_tif = workspace_dir / "cdd_kwh.tif" grouped_scalar_calculation( - cdd_tif, + str(cdd_tif), args["lulc_tif"], - cdd_kwh_tif, + str(cdd_kwh_tif), dd_energy_df["lucode"].to_list(), - dd_energy_df["kwh_per_cdd"].to_list(), - temp_dir, + dd_energy_df["kwh_per_cdd"].to_list() ) # Calculate energy use raster ($) based on Cooling Degree Days - cdd_cost_tif = Path(args["workspace_dir"]) / f"cdd_cost{file_suffix}.tif" + cdd_cost_tif = workspace_dir / "cdd_cost.tif" grouped_scalar_calculation( - cdd_kwh_tif, + str(cdd_kwh_tif), args["lulc_tif"], - cdd_cost_tif, + str(cdd_cost_tif), dd_energy_df["lucode"].to_list(), - dd_energy_df["cost_per_kwh"].to_list(), - temp_dir, + dd_energy_df["cost_per_kwh"].to_list() ) + stats_dict = pygeoprocessing.zonal_statistics( + (str(cdd_cost_tif), 1), + args['aoi_vector_path'], + polygons_might_overlap=False) + logger.info(stats_dict) + _add_zonal_stats_dict_to_vector( + args['aoi_vector_path'], stats_dict, cdd_cost_tif.stem, 'sum') # Calculate Mortality Risk - logger.debug(f"Calculating Relative Mortality Risk") + logger.debug("Calculating Relative Mortality Risk") - mortality_risk_df = pd.read_csv( - args["mortality_risk_path"], encoding="unicode_escape" - ) + mortality_risk_df = pd.read_csv(args["mortality_risk_path"]) # Test for correct csv headers for header in _EXPECTED_MORTALITY_HEADERS: @@ -221,14 +220,14 @@ def execute(args): ) # Test if selected city is in the Guo et al dataset - if args["city"] in mortality_risk_df["city"]: + if args["city"] in mortality_risk_df["city"].values: city_mortality_risk_df = mortality_risk_df.loc[ mortality_risk_df["city"] == args["city"] ] - mortality_tif = Path(args["workspace_dir"]) / f"mortality_risk{file_suffix}.tif" + mortality_tif = workspace_dir / "mortality_risk.tif" mortality_risk_calculation( - args["air_temp_tif"], mortality_tif, city_mortality_risk_df + args["air_temp_tif"], str(mortality_tif), city_mortality_risk_df ) else: logger.warning( @@ -342,8 +341,8 @@ def cdd_op(t_air_array, cdd_val): def mortality_risk_calculation( - t_air_raster_path: pathlike, - target_mortality_path: pathlike, + t_air_raster_path: str, + target_mortality_path: str, mortality_risk_df: pd.DataFrame, ) -> None: """Raster calculator op to calculate Relative Mortality Risk based on the following function: @@ -356,8 +355,8 @@ def mortality_risk_calculation( R1 = lower mortality risk Args: - t_air_raster_path (pathlike): Path to T air raster. - target_mortality_path (pathlike): Path to target mortality risk raster. + t_air_raster_path (string): Path to T air raster. + target_mortality_path (string): Path to target mortality risk raster. mortality_risk_df (DataFrame): Pandas DataFrame with columns for the temperature thresholds and associated mortality risk @@ -365,11 +364,7 @@ def mortality_risk_calculation( None """ - # Ensure path variables are Path objects - t_air_raster_path = Path(t_air_raster_path) - target_mortality_path = Path(target_mortality_path) - - t_air_nodata = pygeoprocessing.get_raster_info(str(t_air_raster_path))["nodata"][0] + t_air_nodata = pygeoprocessing.get_raster_info(t_air_raster_path)["nodata"][0] def mortality_op(t_air_array): """ @@ -387,14 +382,15 @@ def mortality_op(t_air_array): thresholds = ["01", "10", "mmtp", "90", "99"] lower_thresholds = thresholds[:-1] # Iterate through thresholds, except 99th percentile (since we linearly interpolate anything greater than 90th) - for i, t in enumerate(lower_thresholds[:-1]): + for i, t in enumerate(lower_thresholds): + thresholds_df = mortality_risk_df.iloc[0] # always only 1 row since we filtered by city # Temperature Thresholds - lower_threshold = mortality_risk_df.loc[0, f"t_{t}"] - upper_threshold = mortality_risk_df.loc[0, f"t_{thresholds[i+1]}"] + lower_threshold = thresholds_df[f"t_{t}"] + upper_threshold = thresholds_df[f"t_{thresholds[i+1]}"] # Mortality Risks - lower_risk = mortality_risk_df.loc[0, f"rr_{t}"] - upper_risk = mortality_risk_df.loc[0, f"rr_{thresholds[i+1]}"] + lower_risk = thresholds_df[f"rr_{t}"] + upper_risk = thresholds_df[f"rr_{thresholds[i+1]}"] # Calculate mask # Initial bin @@ -421,15 +417,15 @@ def mortality_op(t_air_array): # Actual calculation t_air_masked = t_air_array[current_mask] mortality[current_mask] = (t_air_masked - upper_threshold) / ( - lower_threshold - upper_threshold - ) * (lower_risk - upper_risk) + upper_risk + lower_threshold - upper_threshold # docstring says (upper - lower) + ) * (lower_risk - upper_risk) + upper_risk # docstring says (upper - lower) + lower return mortality pygeoprocessing.raster_calculator( - [(str(t_air_raster_path), 1)], + [(t_air_raster_path, 1)], mortality_op, - str(target_mortality_path), + target_mortality_path, gdal.GDT_Float32, TARGET_NODATA, ) @@ -456,41 +452,79 @@ def grouped_scalar_calculation( None """ - # Ensure path variables are Path objects - base_raster_path = Path(base_raster_path) - category_raster_path = Path(category_raster_path) - target_raster_path = Path(target_raster_path) - - temporary_working_dir = Path(tempfile.mkdtemp(dir=target_raster_path.parent)) - - base_raster_info = pygeoprocessing.get_raster_info(str(base_raster_path)) + base_raster_info = pygeoprocessing.get_raster_info(base_raster_path) base_raster_nodata = base_raster_info["nodata"][0] - cell_size = np.min(np.abs(base_raster_info["pixel_size"])) - category_raster_nodata = pygeoprocessing.get_raster_info(str(category_raster_path))[ - "nodata" - ][0] + category_raster_nodata = pygeoprocessing.get_raster_info( + category_raster_path)["nodata"][0] # Calculate kWh map grouped_scalar_op = MultiplyRasterByScalarList( category_list, scalar_list, base_raster_nodata, category_raster_nodata ) - temp_base_path = temporary_working_dir / Path(base_raster_path).name - temp_category_path = temporary_working_dir / Path(category_raster_path).name - - pygeoprocessing.align_and_resize_raster_stack( - [str(base_raster_path), str(category_raster_path)], - [str(temp_base_path), str(temp_category_path)], - ["near", "near"], - (cell_size, -cell_size), - "intersection", - ) - pygeoprocessing.raster_calculator( - [(str(temp_base_path), 1), (str(temp_category_path), 1)], + [(base_raster_path, 1), (category_raster_path, 1)], grouped_scalar_op, - str(target_raster_path), + target_raster_path, gdal.GDT_Float32, base_raster_nodata, ) + + +def _add_zonal_stats_dict_to_vector( + vector_path, stats_map, field_name, aggregate_field_id): + """Add a new field to a shapefile with values from a dictionary. + + Args: + vector_path (string): a path to a vector whose FIDs + correspond with the keys in `stats_map`. + stats_map (dict): a dictionary in the format generated by + pygeoprocessing.zonal_statistics that contains at least the key + value of `aggregate_field_id` per feature id. + field_name (str): a string for the name of the new field to add to + the target vector. + aggregate_field_id (string): one of 'min' 'max' 'sum' 'mean' 'count' + or 'nodata_count' as defined by pygeoprocessing.zonal_statistics. + + Returns: + None + + """ + vector = gdal.OpenEx( + vector_path, gdal.OF_VECTOR | gdal.GA_Update) + layer = vector.GetLayer() + for idx, field in enumerate(layer.schema): + if field.name == field_name: + layer.DeleteField(idx) + + # Create the new field + field_defn = ogr.FieldDefn(field_name, ogr.OFTReal) + field_defn.SetWidth(24) + field_defn.SetPrecision(11) + layer.CreateField(field_defn) + + # Get the number of features (polygons) and iterate through each + layer.ResetReading() + for feature in layer: + feature_fid = feature.GetFID() + + # Using the unique feature ID, index into the + # dictionary to get the corresponding value + # only write a value if zonal stats found valid pixels in the polygon: + if stats_map[feature_fid]['count'] > 0: + if aggregate_field_id == 'mean': + field_val = float( + stats_map[feature_fid]['sum']) / stats_map[feature_fid]['count'] + else: + field_val = float(stats_map[feature_fid][aggregate_field_id]) + + # Set the value for the new field + feature.SetField(field_name, field_val) + + layer.SetFeature(feature) + + feature = None + field_defn = None + layer = None + vector = None diff --git a/backend-worker/worker.py b/backend-worker/worker.py index 350f508..baed736 100644 --- a/backend-worker/worker.py +++ b/backend-worker/worker.py @@ -47,32 +47,32 @@ '+datum=WGS84 +units=m +no_defs') _ALBERS_EQUAL_AREA_SRS.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER) -NLCD_FILENAME = 'lulc_overlay_3857.tif' -NLCD_RASTER_PATHS = { - 'vsigs': f'/vsigs/natcap-urban-online-datasets-public/{NLCD_FILENAME}', - 'docker': f'/opt/appdata/{NLCD_FILENAME}', +LULC_FILENAME = 'lulc_overlay_3857.tif' +LULC_RASTER_PATHS = { + 'vsigs': f'/vsigs/natcap-urban-online-datasets-public/{LULC_FILENAME}', + 'docker': f'/opt/appdata/{LULC_FILENAME}', 'local': os.path.join(os.path.dirname(__file__), '..', 'appdata', - NLCD_FILENAME) + LULC_FILENAME) } -_NLCD_RASTER_INFO = None -for NLCD_RASTER_PATH in NLCD_RASTER_PATHS.values(): +_LULC_RASTER_INFO = None +for LULC_RASTER_PATH in LULC_RASTER_PATHS.values(): try: - _NLCD_RASTER_INFO = pygeoprocessing.get_raster_info(NLCD_RASTER_PATH) + _LULC_RASTER_INFO = pygeoprocessing.get_raster_info(LULC_RASTER_PATH) except ValueError: - LOGGER.info(f"Could not open raster path {NLCD_RASTER_PATH}") -if _NLCD_RASTER_INFO is None: + LOGGER.info(f"Could not open raster path {LULC_RASTER_PATH}") +if _LULC_RASTER_INFO is None: raise AssertionError( - f"Could not open {NLCD_FILENAME} at any known locations") -LOGGER.info(f"Using NLCD at {NLCD_RASTER_PATH}") + f"Could not open {LULC_FILENAME} at any known locations") +LOGGER.info(f"Using LULC at {LULC_RASTER_PATH}") -NLCD_SRS_WKT = _NLCD_RASTER_INFO['projection_wkt'] -_NLCD_SRS = osr.SpatialReference() -_NLCD_SRS.ImportFromWkt(NLCD_SRS_WKT) -assert _NLCD_SRS.IsSame(_WEB_MERCATOR_SRS), ( - "NLCD must have been reprojected to web mercator") +LULC_SRS_WKT = _LULC_RASTER_INFO['projection_wkt'] +_LULC_SRS = osr.SpatialReference() +_LULC_SRS.ImportFromWkt(LULC_SRS_WKT) +assert _LULC_SRS.IsSame(_WEB_MERCATOR_SRS), ( + "LULC must have been reprojected to web mercator") -NLCD_NODATA = _NLCD_RASTER_INFO['nodata'][0] -NLCD_DTYPE = _NLCD_RASTER_INFO['datatype'] +LULC_NODATA = _LULC_RASTER_INFO['nodata'][0] +LULC_DTYPE = _LULC_RASTER_INFO['datatype'] WEB_MERCATOR_TO_ALBERS_EQ_AREA = osr.CreateCoordinateTransformation( _WEB_MERCATOR_SRS, _ALBERS_EQUAL_AREA_SRS) ALBERS_EQ_AREA_TO_WEB_MERCATOR = osr.CreateCoordinateTransformation( @@ -82,9 +82,9 @@ 'MultiPolygon': ogr.wkbMultiPolygon, } -# NLCD raster attributes copied in by hand from gdalinfo -NLCD_ORIGIN_X, _, _, NLCD_ORIGIN_Y, _, _ = _NLCD_RASTER_INFO['geotransform'] -PIXELSIZE_X, PIXELSIZE_Y = _NLCD_RASTER_INFO['pixel_size'] +# LULC raster attributes copied in by hand from gdalinfo +LULC_ORIGIN_X, _, _, LULC_ORIGIN_Y, _, _ = _LULC_RASTER_INFO['geotransform'] +PIXELSIZE_X, PIXELSIZE_Y = _LULC_RASTER_INFO['pixel_size'] CARBON = 'carbon' URBAN_COOLING = 'urban_cooling_model' @@ -145,7 +145,7 @@ def test_pixelcounts_under_parcel(self): _WEB_MERCATOR_SRS.ExportToWkt(), 'FlatGeoBuf') pixelcounts = pixelcounts_under_parcel( - parcel.wkt, NLCD_RASTER_PATH) + parcel.wkt, LULC_RASTER_PATH) expected_values = { 262: 40, @@ -193,7 +193,7 @@ def test_fill(self): result_array = pygeoprocessing.raster_to_numpy_array( target_raster_path) self.assertEqual( - numpy.sum(result_array[result_array != NLCD_NODATA]), 600) + numpy.sum(result_array[result_array != LULC_NODATA]), 600) self.assertEqual(numpy.sum(result_array == 15), 40) def test_wallpaper(self): @@ -213,7 +213,7 @@ def test_wallpaper(self): target_raster_path = os.path.join( self.workspace_dir, 'wallpapered_raster.tif') - wallpaper_parcel(parcel.wkt, pattern.wkt, NLCD_RASTER_PATH, + wallpaper_parcel(parcel.wkt, pattern.wkt, LULC_RASTER_PATH, target_raster_path, self.workspace_dir) def test_get_bioregion(self): @@ -286,7 +286,7 @@ def _warp_raster_to_web_mercator(source_albers_raster_path, def _reproject_to_nlud(parcel_wkt_epsg3857): - """Reproject a WKT polygon to the NLCD projection. + """Reproject a WKT polygon to the LULC projection. Args: parcel_wkt_epsg3857 (string): A WKT polygon projected in epsg 3857 "Web @@ -294,7 +294,7 @@ def _reproject_to_nlud(parcel_wkt_epsg3857): Returns: parcel (shapely.geometry): A Shapely geometry of the input parcel where - the geometry has been transformed to the NLCD's projection. + the geometry has been transformed to the LULC's projection. """ ogr_geom = ogr.CreateGeometryFromWkt(parcel_wkt_epsg3857) err_code = ogr_geom.Transform(WEB_MERCATOR_TO_ALBERS_EQ_AREA) @@ -309,7 +309,7 @@ def _reproject_to_nlud(parcel_wkt_epsg3857): def _create_new_lulc(parcel_wkt_epsg3857, target_local_gtiff_path, include_pixel_values=False): - """Create an LULC raster in the NLCD projection covering the parcel. + """Create an LULC raster in the LULC projection covering the parcel. Args: parcel_wkt_epsg3857 (str): The parcel WKT in EPSG:3857 (Web Mercator) @@ -327,13 +327,13 @@ def _create_new_lulc(parcel_wkt_epsg3857, target_local_gtiff_path, # Round "up" to the nearest pixel, sort of the pixel-math version of # rasterizing the bounding box with "ALL_TOUCHED=TRUE". - buf_minx -= abs((buf_minx - NLCD_ORIGIN_X) % PIXELSIZE_X) - buf_miny -= abs((buf_miny - NLCD_ORIGIN_Y) % PIXELSIZE_Y) - buf_maxx += PIXELSIZE_X - abs((buf_maxx - NLCD_ORIGIN_X) % PIXELSIZE_X) - buf_maxy += PIXELSIZE_Y - abs((buf_maxy - NLCD_ORIGIN_Y) % PIXELSIZE_Y) + buf_minx -= abs((buf_minx - LULC_ORIGIN_X) % PIXELSIZE_X) + buf_miny -= abs((buf_miny - LULC_ORIGIN_Y) % PIXELSIZE_Y) + buf_maxx += PIXELSIZE_X - abs((buf_maxx - LULC_ORIGIN_X) % PIXELSIZE_X) + buf_maxy += PIXELSIZE_Y - abs((buf_maxy - LULC_ORIGIN_Y) % PIXELSIZE_Y) pygeoprocessing.geoprocessing.warp_raster( - NLCD_RASTER_PATH, (PIXELSIZE_X, PIXELSIZE_Y), + LULC_RASTER_PATH, (PIXELSIZE_X, PIXELSIZE_Y), target_local_gtiff_path, resample_method='near', target_bb=[buf_minx, buf_miny, buf_maxx, buf_maxy]) @@ -345,7 +345,7 @@ def _create_new_lulc(parcel_wkt_epsg3857, target_local_gtiff_path, if nodata is not None: band.Fill(nodata) else: - LOGGER.warning("NLCD does not have a defined nodata value; " + LOGGER.warning("LULC does not have a defined nodata value; " "cannot fill with None.") band = None raster = None @@ -377,7 +377,7 @@ def fill_parcel(parcel_wkt_epsg3857, fill_lulc_class, parcel_vector_path = os.path.join(working_dir, 'parcel.fgb') pygeoprocessing.geoprocessing.shapely_geometry_to_vector( - [parcel_geom], parcel_vector_path, NLCD_SRS_WKT, 'FlatGeoBuf', + [parcel_geom], parcel_vector_path, LULC_SRS_WKT, 'FlatGeoBuf', ogr_geom_type=OGR_GEOMETRY_TYPES[parcel_geom.type] ) @@ -404,7 +404,7 @@ def wallpaper_parcel(parcel_wkt_epsg3857, pattern_wkt_epsg3857, pattern_wkt_epsg3857 (str): The WKT of the pattern geometry, projected in EPSG:3857 (Web Mercator) source_nlud_raster_path (str): The GDAL-compatible URI to the source - NLCD raster, projected in Web Mercator. + LULC raster, projected in Web Mercator. target_raster_path (str): Where the output raster should be written on disk. working_dir (str): Where temporary files should be stored. If @@ -446,7 +446,7 @@ def wallpaper_parcel(parcel_wkt_epsg3857, pattern_wkt_epsg3857, pygeoprocessing.new_raster_from_base( parcel_mask_raster_path, target_raster_path, - NLCD_DTYPE, [NLCD_NODATA]) + LULC_DTYPE, [LULC_NODATA]) target_raster = gdal.OpenEx( target_raster_path, gdal.OF_RASTER | gdal.GA_Update) target_band = target_raster.GetRasterBand(1) @@ -541,7 +541,7 @@ def pixelcounts_under_parcel(parcel_wkt_epsg3857, source_raster_path): gdal_driver = gdal.GetDriverByName('MEM') target_raster = gdal_driver.Create( '', array.shape[1], array.shape[0], 1, gdal.GDT_Byte) - target_raster.SetProjection(NLCD_SRS_WKT) + target_raster.SetProjection(LULC_SRS_WKT) target_origin_x, target_origin_y = gdal.ApplyGeoTransform( geotransform, x0, y0) target_raster.SetGeoTransform( @@ -586,7 +586,7 @@ def make_thumbnail(pattern_wkt_epsg3857, colors_dict, target_thumbnail_path, # Buffer the bbox by a half-pixel to make sure we get the whole pattern and # just a small bit of the surrounding context. pygeoprocessing.geoprocessing.warp_raster( - NLCD_RASTER_PATH, _NLCD_RASTER_INFO['pixel_size'], + LULC_RASTER_PATH, _LULC_RASTER_INFO['pixel_size'], thumbnail_gtiff_path, 'near', target_bb=shapely.wkt.loads(pattern_wkt_epsg3857).buffer( PIXELSIZE_X/2).bounds diff --git a/frontend/src/edit/results.jsx b/frontend/src/edit/results.jsx index 45bf830..ac72f28 100644 --- a/frontend/src/edit/results.jsx +++ b/frontend/src/edit/results.jsx @@ -1,7 +1,6 @@ import React, { useState, useEffect } from 'react'; import { - Divider, HTMLSelect, HTMLTable, Icon, @@ -13,6 +12,11 @@ const METRICS = { units: `${'\u00b0'}F`, precision: 2, }, + cdd_cost: { + label: 'change in cooling cost', + units: 'USD', + precision: 0, + }, tot_c_cur: { label: 'change in carbon stored', units: 'metric tons', @@ -34,8 +38,6 @@ export default function Results(props) { } = props; const [scenarioName, setScenarioName] = useState(null); - const [temperature, setTemperature] = useState(null); - const [carbon, setCarbon] = useState(null); const [table, setTable] = useState(null); const [scenarioNames, setScenarioNames] = useState([]); const [fromLULC, setFromLULC] = useState(''); @@ -52,10 +54,11 @@ export default function Results(props) { names.forEach((name) => { data[name] = {}; Object.entries(METRICS).forEach(([metric, obj]) => { - data[name][obj.label] = { + data[name][metric] = { value: results[name][metric] - results['baseline'][metric], units: obj.units, precision: obj.precision, + label: obj.label, }; }); }); @@ -73,8 +76,6 @@ export default function Results(props) { useEffect(() => { if (scenarioName) { - setTemperature(parseFloat(table[scenarioName][METRICS['avg_tmp_v'].label].value)); - setCarbon(parseFloat(table[scenarioName][METRICS['tot_c_cur'].label].value)); const to = (scenarioDescriptions[scenarioName]['nlcd'].length) ? ` ${scenarioDescriptions[scenarioName]['nlcd'].join(', ')} @@ -98,50 +99,89 @@ export default function Results(props) { ); - const tempDirection = (temperature >= 0) ? 'increase' : 'decrease'; - const carbonDirection = (carbon >= 0) ? 'increase' : 'decrease'; - const paragraphs = ( - - ); + let paragraphs; + if (table && table[scenarioName]) { + const temperature = table[scenarioName]['avg_tmp_v'].value; + const coolingCost = table[scenarioName]['cdd_cost'].value; + const carbon = table[scenarioName]['tot_c_cur'].value; + const tempDirection = (temperature >= 0) ? 'increase' : 'decrease'; + const carbonDirection = (carbon >= 0) ? 'increase' : 'decrease'; + paragraphs = ( + + ); + } const { census } = results.baseline; - const populations = Object.entries(census.race) - .sort(([, a], [, b]) => b - a); + let populationTable; + let povertyPar; + if (census && census.race) { + const populations = Object.entries(census.race) + .sort(([, a], [, b]) => b - a); - const povertyPar = ( - - ); + populationTable = ( +
+

Population by race

+ + + {populations.map(([group, count]) => ( + + {group} + {count} + + ))} + + +
+ ); + } + + if (census && census.poverty) { + povertyPar = ( + + ); + } return (
@@ -198,19 +238,7 @@ export default function Results(props) { Demographics of the impacted area:
-
-

Population by race

- - - {populations.map(([group, count]) => ( - - {group} - {count} - - ))} - - -
+ {populationTable} {/**/}
{povertyPar} diff --git a/scripts/get_building_footprints.py b/scripts/get_building_footprints.py new file mode 100644 index 0000000..9b963c2 --- /dev/null +++ b/scripts/get_building_footprints.py @@ -0,0 +1,55 @@ +""" +Based on https://planetarycomputer.microsoft.com/dataset/ms-buildings#Example-Notebook +The resulting GPKG is hosted on GCS natcap-urban-online-datasets +""" + +import subprocess + +import dask_geopandas +import deltalake +import mercantile +import pystac_client +import planetary_computer +import pygeoprocessing +import shapely + +from osgeo import osr + +catalog = pystac_client.Client.open( + "https://planetarycomputer.microsoft.com/api/stac/v1", + modifier=planetary_computer.sign_inplace, +) +collection = catalog.get_collection("ms-buildings") + +srs = osr.SpatialReference() +srs.ImportFromEPSG(4326) +target_proj_wkt = srs.ExportToWkt() +base_info = pygeoprocessing.get_raster_info('../appdata/lulc_overlay_3857.tif') +bbox = pygeoprocessing.transform_bounding_box( + base_info['bounding_box'], + base_info['projection_wkt'], + target_proj_wkt +) +print(bbox) + +asset = collection.assets['delta'] +storage_options = { + "account_name": asset.extra_fields["table:storage_options"]["account_name"], + "sas_token": asset.extra_fields["table:storage_options"]["credential"], +} +table = deltalake.DeltaTable(asset.href, storage_options=storage_options) + +quadkeys = [ + int(mercantile.quadkey(tile)) + for tile in mercantile.tiles(*bbox, zooms=9) +] +uris = table.file_uris([("quadkey", "in", quadkeys)]) + +df = dask_geopandas.read_parquet(uris, storage_options=storage_options) +mask = df.intersects(shapely.geometry.box(*bbox)) +data = df[mask] +data.to_parquet('buildings.parquet') + +# parquet driver requires libgdal-arrow-parquet, which is only supported in gdal>=3.8 +subprocess.run( + ['ogr2ogr', '-f', 'GPKG', 'buildings_san_antonio.gpkg', 'buildings.parquet'])