diff --git a/examples/arts-catalogue-data/cia/cia.py b/examples/arts-catalogue-data/cia/cia.py index 38b6619e9c..4c749ac265 100644 --- a/examples/arts-catalogue-data/cia/cia.py +++ b/examples/arts-catalogue-data/cia/cia.py @@ -58,7 +58,7 @@ set so that our automatic agenda routine can do its work """ -ws.absorption_bands = [] +ws.absorption_bands = {} """ diff --git a/examples/arts-catalogue-data/lines/lines.py b/examples/arts-catalogue-data/lines/lines.py index 5d1cd1455a..5619bea1da 100644 --- a/examples/arts-catalogue-data/lines/lines.py +++ b/examples/arts-catalogue-data/lines/lines.py @@ -135,12 +135,16 @@ """ ws.jacobian_targets = pyarts.arts.JacobianTargets() -ws.frequency_grid = np.linspace(40e9, 120e9, 1001) # Frequencies between 40 and 120 GHz +ws.frequency_grid = np.linspace( + 40e9, 120e9, 11 +) # Frequencies between 40 and 120 GHz ws.ray_path_point # No particular POSLOS ws.atmospheric_pointInit() ws.atmospheric_point.temperature = 295 # At room temperature ws.atmospheric_point.pressure = 1e5 # At 1 bar -ws.atmospheric_point[ws.absorption_species[0]] = 0.21 # At 21% atmospheric Oxygen +ws.atmospheric_point[ws.absorption_species[0]] = ( + 0.21 # At 21% atmospheric Oxygen +) # Call the agenda with inputs above ws.propagation_matrix_agendaExecute() @@ -163,8 +167,19 @@ # ws.propagation_matrix.savexml("lines_test_result.xml", type="ascii") # test that we are still OK -propagation_matrix_agenda = \ - pyarts.arts.PropmatVector.fromxml("lines_test_result.xml") assert np.allclose( - propagation_matrix_agenda, ws.propagation_matrix + [ + 8.92664373e-06, + 2.88107577e-05, + 1.55470464e-03, + 1.55360514e-03, + 5.57640699e-05, + 2.51926728e-05, + 1.72272988e-05, + 1.43453057e-05, + 1.46251762e-05, + 2.71389841e-05, + 1.97382384e-04, + ], + ws.propagation_matrix[:, 0], ), "O2 Absorption has changed" diff --git a/examples/arts-catalogue-data/lines/lines_test_result.xml b/examples/arts-catalogue-data/lines/lines_test_result.xml deleted file mode 100644 index 6bf225238c..0000000000 --- a/examples/arts-catalogue-data/lines/lines_test_result.xml +++ /dev/null @@ -1,1006 +0,0 @@ - - - -9.02213429888367e-06 0 0 0 0 0 0 -9.09276486572987e-06 0 0 0 0 0 0 -9.16447375946901e-06 0 0 0 0 0 0 -9.23728175112035e-06 0 0 0 0 0 0 -9.31121011111257e-06 0 0 0 0 0 0 -9.38628062391456e-06 0 0 0 0 0 0 -9.46251560317747e-06 0 0 0 0 0 0 -9.53993790740934e-06 0 0 0 0 0 0 -9.61857095620397e-06 0 0 0 0 0 0 -9.6984387470473e-06 0 0 0 0 0 0 -9.77956587272538e-06 0 0 0 0 0 0 -9.86197753935921e-06 0 0 0 0 0 0 -9.94569958509289e-06 0 0 0 0 0 0 -1.00307584994634e-05 0 0 0 0 0 0 -1.01171814434805e-05 0 0 0 0 0 0 -1.02049962704482e-05 0 0 0 0 0 0 -1.02942315475599e-05 0 0 0 0 0 0 -1.03849165783e-05 0 0 0 0 0 0 -1.04770814256898e-05 0 0 0 0 0 0 -1.05707569364126e-05 0 0 0 0 0 0 -1.06659747658596e-05 0 0 0 0 0 0 -1.07627674041362e-05 0 0 0 0 0 0 -1.08611682030736e-05 0 0 0 0 0 0 -1.09612114042908e-05 0 0 0 0 0 0 -1.10629321683566e-05 0 0 0 0 0 0 -1.11663666051004e-05 0 0 0 0 0 0 -1.12715518051276e-05 0 0 0 0 0 0 -1.13785258725959e-05 0 0 0 0 0 0 -1.14873279593112e-05 0 0 0 0 0 0 -1.15979983002073e-05 0 0 0 0 0 0 -1.1710578250276e-05 0 0 0 0 0 0 -1.1825110323018e-05 0 0 0 0 0 0 -1.19416382304885e-05 0 0 0 0 0 0 -1.20602069250173e-05 0 0 0 0 0 0 -1.21808626426861e-05 0 0 0 0 0 0 -1.23036529486521e-05 0 0 0 0 0 0 -1.24286267844099e-05 0 0 0 0 0 0 -1.25558345170927e-05 0 0 0 0 0 0 -1.26853279909169e-05 0 0 0 0 0 0 -1.28171605808816e-05 0 0 0 0 0 0 -1.29513872488425e-05 0 0 0 0 0 0 -1.30880646020843e-05 0 0 0 0 0 0 -1.32272509545279e-05 0 0 0 0 0 0 -1.33690063907118e-05 0 0 0 0 0 0 -1.35133928327021e-05 0 0 0 0 0 0 -1.36604741100907e-05 0 0 0 0 0 0 -1.38103160332543e-05 0 0 0 0 0 0 -1.3962986470058e-05 0 0 0 0 0 0 -1.41185554261993e-05 0 0 0 0 0 0 -1.42770951294022e-05 0 0 0 0 0 0 -1.4438680117685e-05 0 0 0 0 0 0 -1.46033873319415e-05 0 0 0 0 0 0 -1.47712962130936e-05 0 0 0 0 0 0 -1.49424888040884e-05 0 0 0 0 0 0 -1.51170498570377e-05 0 0 0 0 0 0 -1.52950669458164e-05 0 0 0 0 0 0 -1.54766305844609e-05 0 0 0 0 0 0 -1.56618343517363e-05 0 0 0 0 0 0 -1.58507750222687e-05 0 0 0 0 0 0 -1.60435527046696e-05 0 0 0 0 0 0 -1.6240270987116e-05 0 0 0 0 0 0 -1.64410370908864e-05 0 0 0 0 0 0 -1.6645962032394e-05 0 0 0 0 0 0 -1.68551607943073e-05 0 0 0 0 0 0 -1.70687525063964e-05 0 0 0 0 0 0 -1.72868606368016e-05 0 0 0 0 0 0 -1.75096131944844e-05 0 0 0 0 0 0 -1.77371429436885e-05 0 0 0 0 0 0 -1.79695876313204e-05 0 0 0 0 0 0 -1.82070902282425e-05 0 0 0 0 0 0 -1.84497991855729e-05 0 0 0 0 0 0 -1.8697868707192e-05 0 0 0 0 0 0 -1.89514590397842e-05 0 0 0 0 0 0 -1.92107367818756e-05 0 0 0 0 0 0 -1.94758752134895e-05 0 0 0 0 0 0 -1.97470546482133e-05 0 0 0 0 0 0 -2.0024462809669e-05 0 0 0 0 0 0 -2.03082952346011e-05 0 0 0 0 0 0 -2.05987557050397e-05 0 0 0 0 0 0 -2.08960567122757e-05 0 0 0 0 0 0 -2.12004199556866e-05 0 0 0 0 0 0 -2.15120768797807e-05 0 0 0 0 0 0 -2.1831269253194e-05 0 0 0 0 0 0 -2.21582497937467e-05 0 0 0 0 0 0 -2.24932828440724e-05 0 0 0 0 0 0 -2.28366451027389e-05 0 0 0 0 0 0 -2.31886264161925e-05 0 0 0 0 0 0 -2.35495306372807e-05 0 0 0 0 0 0 -2.39196765565403e-05 0 0 0 0 0 0 -2.42993989129279e-05 0 0 0 0 0 0 -2.46890494912537e-05 0 0 0 0 0 0 -2.50889983142916e-05 0 0 0 0 0 0 -2.54996349383143e-05 0 0 0 0 0 0 -2.59213698612903e-05 0 0 0 0 0 0 -2.63546360523445e-05 0 0 0 0 0 0 -2.67998906078636e-05 0 0 0 0 0 0 -2.72576165321749e-05 0 0 0 0 0 0 -2.77283246286212e-05 0 0 0 0 0 0 -2.82125554735205e-05 0 0 0 0 0 0 -2.87108814405014e-05 0 0 0 0 0 0 -2.92239087606634e-05 0 0 0 0 0 0 -2.97522796569363e-05 0 0 0 0 0 0 -3.02966746751537e-05 0 0 0 0 0 0 -3.08578154200165e-05 0 0 0 0 0 0 -3.14364679407579e-05 0 0 0 0 0 0 -3.20334469546104e-05 0 0 0 0 0 0 -3.26496209467518e-05 0 0 0 0 0 0 -3.32859180093823e-05 0 0 0 0 0 0 -3.39433321817481e-05 0 0 0 0 0 0 -3.4622930088694e-05 0 0 0 0 0 0 -3.53258578066931e-05 0 0 0 0 0 0 -3.60533479950587e-05 0 0 0 0 0 0 -3.68067273325173e-05 0 0 0 0 0 0 -3.75874242441857e-05 0 0 0 0 0 0 -3.83969769411373e-05 0 0 0 0 0 0 -3.92370420128579e-05 0 0 0 0 0 0 -4.01094040911243e-05 0 0 0 0 0 0 -4.10159871557496e-05 0 0 0 0 0 0 -4.19588676865083e-05 0 0 0 0 0 0 -4.29402892544922e-05 0 0 0 0 0 0 -4.39626778085752e-05 0 0 0 0 0 0 -4.50286572991355e-05 0 0 0 0 0 0 -4.61410662548488e-05 0 0 0 0 0 0 -4.73029766718822e-05 0 0 0 0 0 0 -4.85177162030986e-05 0 0 0 0 0 0 -4.97888931248076e-05 0 0 0 0 0 0 -5.1120422110052e-05 0 0 0 0 0 0 -5.25165490505329e-05 0 0 0 0 0 0 -5.39818754636066e-05 0 0 0 0 0 0 -5.55213857240681e-05 0 0 0 0 0 0 -5.71404807177086e-05 0 0 0 0 0 0 -5.88450182404032e-05 0 0 0 0 0 0 -6.06413556715651e-05 0 0 0 0 0 0 -6.25363886465036e-05 0 0 0 0 0 0 -6.45375836280609e-05 0 0 0 0 0 0 -6.66530101549974e-05 0 0 0 0 0 0 -6.88913830985266e-05 0 0 0 0 0 0 -7.12621204658259e-05 0 0 0 0 0 0 -7.37754098195943e-05 0 0 0 0 0 0 -7.6442266540422e-05 0 0 0 0 0 0 -7.92745711037521e-05 0 0 0 0 0 0 -8.22850909052523e-05 0 0 0 0 0 0 -8.54875107994535e-05 0 0 0 0 0 0 -8.88964962491714e-05 0 0 0 0 0 0 -9.25277877756758e-05 0 0 0 0 0 0 -9.63982928344224e-05 0 0 0 0 0 0 -0.000100526132201369 0 0 0 0 0 0 -0.000104930629334001 0 0 0 0 0 0 -0.000109632284212808 0 0 0 0 0 0 -0.000114652801490848 0 0 0 0 0 0 -0.000120015210744511 0 0 0 0 0 0 -0.000125744037985873 0 0 0 0 0 0 -0.000131865425975433 0 0 0 0 0 0 -0.000138407120829045 0 0 0 0 0 0 -0.000145398346027813 0 0 0 0 0 0 -0.000152869693307835 0 0 0 0 0 0 -0.000160853169837817 0 0 0 0 0 0 -0.000169382419370043 0 0 0 0 0 0 -0.000178492967031379 0 0 0 0 0 0 -0.000188222272658148 0 0 0 0 0 0 -0.000198609500995737 0 0 0 0 0 0 -0.000209695152931551 0 0 0 0 0 0 -0.000221520851172426 0 0 0 0 0 0 -0.000234129477396927 0 0 0 0 0 0 -0.000247565555322536 0 0 0 0 0 0 -0.000261875506227676 0 0 0 0 0 0 -0.000277107427222151 0 0 0 0 0 0 -0.000293310393318449 0 0 0 0 0 0 -0.000310533699372809 0 0 0 0 0 0 -0.000328826564551021 0 0 0 0 0 0 -0.00034823846216086 0 0 0 0 0 0 -0.000368819652235489 0 0 0 0 0 0 -0.000390621173793578 0 0 0 0 0 0 -0.000413693835385166 0 0 0 0 0 0 -0.00043808647575424 0 0 0 0 0 0 -0.000463844366905678 0 0 0 0 0 0 -0.000491008539591939 0 0 0 0 0 0 -0.000519615999710617 0 0 0 0 0 0 -0.000549699891383476 0 0 0 0 0 0 -0.000581288465970793 0 0 0 0 0 0 -0.000614402558002551 0 0 0 0 0 0 -0.000649052606851178 0 0 0 0 0 0 -0.000685237024926459 0 0 0 0 0 0 -0.00072294314155594 0 0 0 0 0 0 -0.000762150291936857 0 0 0 0 0 0 -0.000802833049815647 0 0 0 0 0 0 -0.000844962370730889 0 0 0 0 0 0 -0.000888503825873378 0 0 0 0 0 0 -0.000933414192203646 0 0 0 0 0 0 -0.000979638862652228 0 0 0 0 0 0 -0.00102711191414581 0 0 0 0 0 0 -0.00107575866278156 0 0 0 0 0 0 -0.00112549865110122 0 0 0 0 0 0 -0.00117624667688847 0 0 0 0 0 0 -0.00122791093925126 0 0 0 0 0 0 -0.00128038953870647 0 0 0 0 0 0 -0.00133356781331158 0 0 0 0 0 0 -0.0013873184339569 0 0 0 0 0 0 -0.00144150429387581 0 0 0 0 0 0 -0.00149598244723087 0 0 0 0 0 0 -0.00155060697965228 0 0 0 0 0 0 -0.00160522993878245 0 0 0 0 0 0 -0.0016597013156227 0 0 0 0 0 0 -0.00171387011454135 0 0 0 0 0 0 -0.00176758798021053 0 0 0 0 0 0 -0.00182071506463228 0 0 0 0 0 0 -0.00187312610531113 0 0 0 0 0 0 -0.00192471428385355 0 0 0 0 0 0 -0.00197539165029028 0 0 0 0 0 0 -0.00202508690459656 0 0 0 0 0 0 -0.00207374275302395 0 0 0 0 0 0 -0.00212131494448149 0 0 0 0 0 0 -0.00216777354034222 0 0 0 0 0 0 -0.00221310504747308 0 0 0 0 0 0 -0.00225731305308744 0 0 0 0 0 0 -0.00230041561442294 0 0 0 0 0 0 -0.00234243948754307 0 0 0 0 0 0 -0.00238341314729953 0 0 0 0 0 0 -0.00242336125492955 0 0 0 0 0 0 -0.00246230231298253 0 0 0 0 0 0 -0.00250024926692723 0 0 0 0 0 0 -0.00253721098783617 0 0 0 0 0 0 -0.00257319204351176 0 0 0 0 0 0 -0.002608189328046 0 0 0 0 0 0 -0.00264218638415394 0 0 0 0 0 0 -0.00267514837963071 0 0 0 0 0 0 -0.00270702147775246 0 0 0 0 0 0 -0.00273773922827171 0 0 0 0 0 0 -0.00276723599418824 0 0 0 0 0 0 -0.00279546444420793 0 0 0 0 0 0 -0.00282241209922746 0 0 0 0 0 0 -0.00284811173400309 0 0 0 0 0 0 -0.00287264221397877 0 0 0 0 0 0 -0.00289611938328498 0 0 0 0 0 0 -0.00291867972582916 0 0 0 0 0 0 -0.00294046155636396 0 0 0 0 0 0 -0.00296158881952174 0 0 0 0 0 0 -0.00298216122559193 0 0 0 0 0 0 -0.00300225205658402 0 0 0 0 0 0 -0.00302191244112718 0 0 0 0 0 0 -0.00304117906186892 0 0 0 0 0 0 -0.00306008161876824 0 0 0 0 0 0 -0.00307864694606977 0 0 0 0 0 0 -0.0030968980753342 0 0 0 0 0 0 -0.00311484816600429 0 0 0 0 0 0 -0.00313249059008853 0 0 0 0 0 0 -0.00314978733125927 0 0 0 0 0 0 -0.00316665827830934 0 0 0 0 0 0 -0.00318297409427922 0 0 0 0 0 0 -0.00319855517082401 0 0 0 0 0 0 -0.00321317861697112 0 0 0 0 0 0 -0.00322659410299733 0 0 0 0 0 0 -0.00323854763657602 0 0 0 0 0 0 -0.00324881023979443 0 0 0 0 0 0 -0.00325720659134143 0 0 0 0 0 0 -0.00326363772390992 0 0 0 0 0 0 -0.00326809240727224 0 0 0 0 0 0 -0.00327064403781393 0 0 0 0 0 0 -0.00327143321783843 0 0 0 0 0 0 -0.00327063974472817 0 0 0 0 0 0 -0.00326845026845482 0 0 0 0 0 0 -0.0032650285315775 0 0 0 0 0 0 -0.003260493657658 0 0 0 0 0 0 -0.00325490896149975 0 0 0 0 0 0 -0.00324828035948447 0 0 0 0 0 0 -0.0032405609381081 0 0 0 0 0 0 -0.00323165747940485 0 0 0 0 0 0 -0.00322143584741941 0 0 0 0 0 0 -0.0032097243781773 0 0 0 0 0 0 -0.003196316568563 0 0 0 0 0 0 -0.00318097533825887 0 0 0 0 0 0 -0.00316344055159103 0 0 0 0 0 0 -0.00314343983659921 0 0 0 0 0 0 -0.00312070112106621 0 0 0 0 0 0 -0.0030949647455494 0 0 0 0 0 0 -0.00306599383192163 0 0 0 0 0 0 -0.0030335831777492 0 0 0 0 0 0 -0.00299756815267699 0 0 0 0 0 0 -0.00295783494120895 0 0 0 0 0 0 -0.00291433193574244 0 0 0 0 0 0 -0.00286708006414821 0 0 0 0 0 0 -0.00281617871111229 0 0 0 0 0 0 -0.00276180457250197 0 0 0 0 0 0 -0.00270420305499635 0 0 0 0 0 0 -0.00264367442960787 0 0 0 0 0 0 -0.0025805583403208 0 0 0 0 0 0 -0.00251521969200296 0 0 0 0 0 0 -0.00244803692212733 0 0 0 0 0 0 -0.00237939166695275 0 0 0 0 0 0 -0.00230965825342674 0 0 0 0 0 0 -0.00223919260425111 0 0 0 0 0 0 -0.0021683220468498 0 0 0 0 0 0 -0.00209733858312258 0 0 0 0 0 0 -0.00202649740696062 0 0 0 0 0 0 -0.00195602022198912 0 0 0 0 0 0 -0.00188610073775055 0 0 0 0 0 0 -0.00181690918705679 0 0 0 0 0 0 -0.00174859424578477 0 0 0 0 0 0 -0.00168128325004514 0 0 0 0 0 0 -0.0016150832239265 0 0 0 0 0 0 -0.00155008470834075 0 0 0 0 0 0 -0.00148636808178149 0 0 0 0 0 0 -0.00142400974964711 0 0 0 0 0 0 -0.00136308510716097 0 0 0 0 0 0 -0.00130366705841781 0 0 0 0 0 0 -0.00124582179403499 0 0 0 0 0 0 -0.00118960531399493 0 0 0 0 0 0 -0.00113506344711561 0 0 0 0 0 0 -0.00108223536825028 0 0 0 0 0 0 -0.00103115788555507 0 0 0 0 0 0 -0.00098186709139529 0 0 0 0 0 0 -0.00093439582024854 0 0 0 0 0 0 -0.000888768317330867 0 0 0 0 0 0 -0.000844995397810347 0 0 0 0 0 0 -0.000803072882751155 0 0 0 0 0 0 -0.000762983764813198 0 0 0 0 0 0 -0.000724702199494921 0 0 0 0 0 0 -0.000688196688228801 0 0 0 0 0 0 -0.00065343101383769 0 0 0 0 0 0 -0.000620363474722596 0 0 0 0 0 0 -0.00058894617945336 0 0 0 0 0 0 -0.000559125827530871 0 0 0 0 0 0 -0.000530845998251852 0 0 0 0 0 0 -0.000504049716460322 0 0 0 0 0 0 -0.000478680902776309 0 0 0 0 0 0 -0.000454684236238613 0 0 0 0 0 0 -0.000432004126113839 0 0 0 0 0 0 -0.00041058399066539 0 0 0 0 0 0 -0.000390366585022232 0 0 0 0 0 0 -0.000371295182767332 0 0 0 0 0 0 -0.000353314769505891 0 0 0 0 0 0 -0.000336372495613068 0 0 0 0 0 0 -0.000320417284132869 0 0 0 0 0 0 -0.000305399123460089 0 0 0 0 0 0 -0.000291268714059596 0 0 0 0 0 0 -0.000277977752851495 0 0 0 0 0 0 -0.000265479600472011 0 0 0 0 0 0 -0.000253729816039257 0 0 0 0 0 0 -0.000242686214439761 0 0 0 0 0 0 -0.000232308504950867 0 0 0 0 0 0 -0.000222557864097421 0 0 0 0 0 0 -0.000213396776252247 0 0 0 0 0 0 -0.000204789210457491 0 0 0 0 0 0 -0.0001967009327375 0 0 0 0 0 0 -0.000189099682146655 0 0 0 0 0 0 -0.000181955083665794 0 0 0 0 0 0 -0.000175238384286354 0 0 0 0 0 0 -0.000168922208499347 0 0 0 0 0 0 -0.000162980474228723 0 0 0 0 0 0 -0.000157388463529081 0 0 0 0 0 0 -0.000152122930714302 0 0 0 0 0 0 -0.000147162128554663 0 0 0 0 0 0 -0.000142485718733031 0 0 0 0 0 0 -0.000138074623801487 0 0 0 0 0 0 -0.000133910906171424 0 0 0 0 0 0 -0.000129977718680595 0 0 0 0 0 0 -0.000126259307266159 0 0 0 0 0 0 -0.000122741011846047 0 0 0 0 0 0 -0.000119409225209009 0 0 0 0 0 0 -0.000116251310134939 0 0 0 0 0 0 -0.000113255505877563 0 0 0 0 0 0 -0.000110410855917122 0 0 0 0 0 0 -0.000107707166211228 0 0 0 0 0 0 -0.000105134979476452 0 0 0 0 0 0 -0.000102685544034453 0 0 0 0 0 0 -0.000100350766485843 0 0 0 0 0 0 -9.81231535841846e-05 0 0 0 0 0 0 -9.59957568781866e-05 0 0 0 0 0 0 -9.39621298654057e-05 0 0 0 0 0 0 -9.20162973961624e-05 0 0 0 0 0 0 -9.01527298089272e-05 0 0 0 0 0 0 -8.83663143884616e-05 0 0 0 0 0 0 -8.66523222201744e-05 0 0 0 0 0 0 -8.50063739229635e-05 0 0 0 0 0 0 -8.34244091035307e-05 0 0 0 0 0 0 -8.19026617520373e-05 0 0 0 0 0 0 -8.04376401818464e-05 0 0 0 0 0 0 -7.9026108428648e-05 0 0 0 0 0 0 -7.76650669868622e-05 0 0 0 0 0 0 -7.63517329501926e-05 0 0 0 0 0 0 -7.50835210954669e-05 0 0 0 0 0 0 -7.3858027319413e-05 0 0 0 0 0 0 -7.26730146472253e-05 0 0 0 0 0 0 -7.1526400952874e-05 0 0 0 0 0 0 -7.04162473302639e-05 0 0 0 0 0 0 -6.93407466412849e-05 0 0 0 0 0 0 -6.82982124983875e-05 0 0 0 0 0 0 -6.72870692444268e-05 0 0 0 0 0 0 -6.6305843269713e-05 0 0 0 0 0 0 -6.53531555626062e-05 0 0 0 0 0 0 -6.44277150986444e-05 0 0 0 0 0 0 -6.35283126846812e-05 0 0 0 0 0 0 -6.26538150769076e-05 0 0 0 0 0 0 -6.18031593743871e-05 0 0 0 0 0 0 -6.09753477322641e-05 0 0 0 0 0 0 -6.01694423758631e-05 0 0 0 0 0 0 -5.93845608435005e-05 0 0 0 0 0 0 -5.86198714177444e-05 0 0 0 0 0 0 -5.78745888008386e-05 0 0 0 0 0 0 -5.71479701680697e-05 0 0 0 0 0 0 -5.64393117293945e-05 0 0 0 0 0 0 -5.57479458472427e-05 0 0 0 0 0 0 -5.50732386516625e-05 0 0 0 0 0 0 -5.44145880211538e-05 0 0 0 0 0 0 -5.3771421784205e-05 0 0 0 0 0 0 -5.31431960315278e-05 0 0 0 0 0 0 -5.25293934826725e-05 0 0 0 0 0 0 -5.19295218962649e-05 0 0 0 0 0 0 -5.13431125378834e-05 0 0 0 0 0 0 -5.07697187249248e-05 0 0 0 0 0 0 -5.02089144619956e-05 0 0 0 0 0 0 -4.96602931716621e-05 0 0 0 0 0 0 -4.91234665185494e-05 0 0 0 0 0 0 -4.85980633210341e-05 0 0 0 0 0 0 -4.80837285435263e-05 0 0 0 0 0 0 -4.75801223624433e-05 0 0 0 0 0 0 -4.70869192996188e-05 0 0 0 0 0 0 -4.66038074175781e-05 0 0 0 0 0 0 -4.61304875716968e-05 0 0 0 0 0 0 -4.56666727147169e-05 0 0 0 0 0 0 -4.52120872494591e-05 0 0 0 0 0 0 -4.47664664258847e-05 0 0 0 0 0 0 -4.43295557789444e-05 0 0 0 0 0 0 -4.39011106039251e-05 0 0 0 0 0 0 -4.34808954662666e-05 0 0 0 0 0 0 -4.30686837430723e-05 0 0 0 0 0 0 -4.26642571937796e-05 0 0 0 0 0 0 -4.22674055576767e-05 0 0 0 0 0 0 -4.18779261761655e-05 0 0 0 0 0 0 -4.14956236378601e-05 0 0 0 0 0 0 -4.11203094447834e-05 0 0 0 0 0 0 -4.07518016980873e-05 0 0 0 0 0 0 -4.03899248018587e-05 0 0 0 0 0 0 -4.00345091837092e-05 0 0 0 0 0 0 -3.96853910309556e-05 0 0 0 0 0 0 -3.93424120413044e-05 0 0 0 0 0 0 -3.90054191870506e-05 0 0 0 0 0 0 -3.86742644918763e-05 0 0 0 0 0 0 -3.8348804819419e-05 0 0 0 0 0 0 -3.8028901672841e-05 0 0 0 0 0 0 -3.77144210046952e-05 0 0 0 0 0 0 -3.74052330364388e-05 0 0 0 0 0 0 -3.71012120869931e-05 0 0 0 0 0 0 -3.6802236409797e-05 0 0 0 0 0 0 -3.65081880378402e-05 0 0 0 0 0 0 -3.62189526362014e-05 0 0 0 0 0 0 -3.59344193616504e-05 0 0 0 0 0 0 -3.56544807289021e-05 0 0 0 0 0 0 -3.53790324831457e-05 0 0 0 0 0 0 -3.51079734784898e-05 0 0 0 0 0 0 -3.48412055619936e-05 0 0 0 0 0 0 -3.45786334629782e-05 0 0 0 0 0 0 -3.43201646873248e-05 0 0 0 0 0 0 -3.40657094164945e-05 0 0 0 0 0 0 -3.38151804110148e-05 0 0 0 0 0 0 -3.35684929181974e-05 0 0 0 0 0 0 -3.33255645838658e-05 0 0 0 0 0 0 -3.30863153678845e-05 0 0 0 0 0 0 -3.28506674632952e-05 0 0 0 0 0 0 -3.26185452188765e-05 0 0 0 0 0 0 -3.23898750649543e-05 0 0 0 0 0 0 -3.21645854423022e-05 0 0 0 0 0 0 -3.19426067339772e-05 0 0 0 0 0 0 -3.17238711999488e-05 0 0 0 0 0 0 -3.15083129143855e-05 0 0 0 0 0 0 -3.12958677054693e-05 0 0 0 0 0 0 -3.10864730976202e-05 0 0 0 0 0 0 -3.08800682560148e-05 0 0 0 0 0 0 -3.06765939332921e-05 0 0 0 0 0 0 -3.04759924183444e-05 0 0 0 0 0 0 -3.02782074870977e-05 0 0 0 0 0 0 -3.00831843551898e-05 0 0 0 0 0 0 -2.98908696324605e-05 0 0 0 0 0 0 -2.9701211279172e-05 0 0 0 0 0 0 -2.95141585638812e-05 0 0 0 0 0 0 -2.93296620228931e-05 0 0 0 0 0 0 -2.9147673421222e-05 0 0 0 0 0 0 -2.89681457149981e-05 0 0 0 0 0 0 -2.87910330152546e-05 0 0 0 0 0 0 -2.86162905530355e-05 0 0 0 0 0 0 -2.844387464577e-05 0 0 0 0 0 0 -2.82737426648566e-05 0 0 0 0 0 0 -2.81058530044082e-05 0 0 0 0 0 0 -2.79401650511078e-05 0 0 0 0 0 0 -2.77766391551308e-05 0 0 0 0 0 0 -2.76152366020863e-05 0 0 0 0 0 0 -2.74559195859393e-05 0 0 0 0 0 0 -2.72986511828713e-05 0 0 0 0 0 0 -2.71433953260424e-05 0 0 0 0 0 0 -2.69901167812173e-05 0 0 0 0 0 0 -2.68387811232226e-05 0 0 0 0 0 0 -2.66893547132008e-05 0 0 0 0 0 0 -2.65418046766296e-05 0 0 0 0 0 0 -2.63960988820768e-05 0 0 0 0 0 0 -2.62522059206631e-05 0 0 0 0 0 0 -2.61100950862029e-05 0 0 0 0 0 0 -2.59697363559989e-05 0 0 0 0 0 0 -2.58311003722653e-05 0 0 0 0 0 0 -2.56941584241544e-05 0 0 0 0 0 0 -2.55588824303653e-05 0 0 0 0 0 0 -2.54252449223114e-05 0 0 0 0 0 0 -2.5293219027827e-05 0 0 0 0 0 0 -2.5162778455392e-05 0 0 0 0 0 0 -2.50338974788559e-05 0 0 0 0 0 0 -2.49065509226428e-05 0 0 0 0 0 0 -2.47807141474195e-05 0 0 0 0 0 0 -2.46563630362103e-05 0 0 0 0 0 0 -2.45334739809419e-05 0 0 0 0 0 0 -2.44120238694029e-05 0 0 0 0 0 0 -2.4291990072604e-05 0 0 0 0 0 0 -2.41733504325228e-05 0 0 0 0 0 0 -2.40560832502215e-05 0 0 0 0 0 0 -2.39401672743233e-05 0 0 0 0 0 0 -2.38255816898352e-05 0 0 0 0 0 0 -2.37123061073046e-05 0 0 0 0 0 0 -2.36003205522999e-05 0 0 0 0 0 0 -2.3489605455201e-05 0 0 0 0 0 0 -2.33801416412922e-05 0 0 0 0 0 0 -2.3271910321145e-05 0 0 0 0 0 0 -2.31648930812813e-05 0 0 0 0 0 0 -2.30590718751092e-05 0 0 0 0 0 0 -2.29544290141194e-05 0 0 0 0 0 0 -2.28509471593365e-05 0 0 0 0 0 0 -2.27486093130137e-05 0 0 0 0 0 0 -2.26473988105663e-05 0 0 0 0 0 0 -2.2547299312732e-05 0 0 0 0 0 0 -2.2448294797955e-05 0 0 0 0 0 0 -2.23503695549828e-05 0 0 0 0 0 0 -2.22535081756713e-05 0 0 0 0 0 0 -2.21576955479901e-05 0 0 0 0 0 0 -2.20629168492225e-05 0 0 0 0 0 0 -2.1969157539353e-05 0 0 0 0 0 0 -2.18764033546373e-05 0 0 0 0 0 0 -2.17846403013484e-05 0 0 0 0 0 0 -2.16938546496934e-05 0 0 0 0 0 0 -2.16040329278955e-05 0 0 0 0 0 0 -2.15151619164369e-05 0 0 0 0 0 0 -2.1427228642456e-05 0 0 0 0 0 0 -2.13402203742955e-05 0 0 0 0 0 0 -2.12541246161969e-05 0 0 0 0 0 0 -2.11689291031348e-05 0 0 0 0 0 0 -2.10846217957896e-05 0 0 0 0 0 0 -2.10011908756528e-05 0 0 0 0 0 0 -2.09186247402606e-05 0 0 0 0 0 0 -2.08369119985529e-05 0 0 0 0 0 0 -2.07560414663536e-05 0 0 0 0 0 0 -2.06760021619683e-05 0 0 0 0 0 0 -2.05967833018961e-05 0 0 0 0 0 0 -2.05183742966525e-05 0 0 0 0 0 0 -2.04407647466996e-05 0 0 0 0 0 0 -2.03639444384803e-05 0 0 0 0 0 0 -2.02879033405548e-05 0 0 0 0 0 0 -2.0212631599834e-05 0 0 0 0 0 0 -2.01381195379106e-05 0 0 0 0 0 0 -2.00643576474804e-05 0 0 0 0 0 0 -1.99913365888558e-05 0 0 0 0 0 0 -1.99190471865664e-05 0 0 0 0 0 0 -1.98474804260439e-05 0 0 0 0 0 0 -1.97766274503907e-05 0 0 0 0 0 0 -1.97064795572282e-05 0 0 0 0 0 0 -1.96370281956239e-05 0 0 0 0 0 0 -1.95682649630939e-05 0 0 0 0 0 0 -1.95001816026791e-05 0 0 0 0 0 0 -1.94327700000945e-05 0 0 0 0 0 0 -1.93660221809466e-05 0 0 0 0 0 0 -1.929993030802e-05 0 0 0 0 0 0 -1.92344866786295e-05 0 0 0 0 0 0 -1.91696837220371e-05 0 0 0 0 0 0 -1.91055139969312e-05 0 0 0 0 0 0 -1.90419701889659e-05 0 0 0 0 0 0 -1.89790451083618e-05 0 0 0 0 0 0 -1.89167316875621e-05 0 0 0 0 0 0 -1.88550229789465e-05 0 0 0 0 0 0 -1.87939121525989e-05 0 0 0 0 0 0 -1.8733392494129e-05 0 0 0 0 0 0 -1.86734574025455e-05 0 0 0 0 0 0 -1.861410038818e-05 0 0 0 0 0 0 -1.85553150706595e-05 0 0 0 0 0 0 -1.84970951769284e-05 0 0 0 0 0 0 -1.84394345393156e-05 0 0 0 0 0 0 -1.83823270936484e-05 0 0 0 0 0 0 -1.83257668774098e-05 0 0 0 0 0 0 -1.82697480279401e-05 0 0 0 0 0 0 -1.82142647806801e-05 0 0 0 0 0 0 -1.81593114674561e-05 0 0 0 0 0 0 -1.81048825148041e-05 0 0 0 0 0 0 -1.80509724423338e-05 0 0 0 0 0 0 -1.79975758611316e-05 0 0 0 0 0 0 -1.79446874721991e-05 0 0 0 0 0 0 -1.78923020649292e-05 0 0 0 0 0 0 -1.78404145156183e-05 0 0 0 0 0 0 -1.77890197860115e-05 0 0 0 0 0 0 -1.7738112921883e-05 0 0 0 0 0 0 -1.7687689051649e-05 0 0 0 0 0 0 -1.76377433850132e-05 0 0 0 0 0 0 -1.75882712116435e-05 0 0 0 0 0 0 -1.75392678998798e-05 0 0 0 0 0 0 -1.74907288954718e-05 0 0 0 0 0 0 -1.74426497203461e-05 0 0 0 0 0 0 -1.73950259714023e-05 0 0 0 0 0 0 -1.7347853319337e-05 0 0 0 0 0 0 -1.73011275074954e-05 0 0 0 0 0 0 -1.725484435075e-05 0 0 0 0 0 0 -1.72089997344048e-05 0 0 0 0 0 0 -1.71635896131262e-05 0 0 0 0 0 0 -1.71186100098984e-05 0 0 0 0 0 0 -1.70740570150038e-05 0 0 0 0 0 0 -1.70299267850274e-05 0 0 0 0 0 0 -1.69862155418843e-05 0 0 0 0 0 0 -1.69429195718713e-05 0 0 0 0 0 0 -1.69000352247403e-05 0 0 0 0 0 0 -1.6857558912794e-05 0 0 0 0 0 0 -1.68154871100039e-05 0 0 0 0 0 0 -1.67738163511487e-05 0 0 0 0 0 0 -1.67325432309741e-05 0 0 0 0 0 0 -1.66916644033734e-05 0 0 0 0 0 0 -1.66511765805869e-05 0 0 0 0 0 0 -1.66110765324226e-05 0 0 0 0 0 0 -1.65713610854948e-05 0 0 0 0 0 0 -1.65320271224827e-05 0 0 0 0 0 0 -1.6493071581407e-05 0 0 0 0 0 0 -1.64544914549246e-05 0 0 0 0 0 0 -1.64162837896418e-05 0 0 0 0 0 0 -1.6378445685445e-05 0 0 0 0 0 0 -1.63409742948485e-05 0 0 0 0 0 0 -1.63038668223589e-05 0 0 0 0 0 0 -1.62671205238574e-05 0 0 0 0 0 0 -1.62307327059975e-05 0 0 0 0 0 0 -1.61947007256193e-05 0 0 0 0 0 0 -1.61590219891798e-05 0 0 0 0 0 0 -1.61236939521987e-05 0 0 0 0 0 0 -1.60887141187196e-05 0 0 0 0 0 0 -1.60540800407868e-05 0 0 0 0 0 0 -1.60197893179367e-05 0 0 0 0 0 0 -1.59858395967041e-05 0 0 0 0 0 0 -1.59522285701431e-05 0 0 0 0 0 0 -1.59189539773625e-05 0 0 0 0 0 0 -1.58860136030751e-05 0 0 0 0 0 0 -1.58534052771611e-05 0 0 0 0 0 0 -1.58211268742456e-05 0 0 0 0 0 0 -1.57891763132895e-05 0 0 0 0 0 0 -1.57575515571939e-05 0 0 0 0 0 0 -1.57262506124181e-05 0 0 0 0 0 0 -1.56952715286104e-05 0 0 0 0 0 0 -1.56646123982525e-05 0 0 0 0 0 0 -1.56342713563163e-05 0 0 0 0 0 0 -1.56042465799341e-05 0 0 0 0 0 0 -1.5574536288081e-05 0 0 0 0 0 0 -1.554513874127e-05 0 0 0 0 0 0 -1.55160522412601e-05 0 0 0 0 0 0 -1.54872751307759e-05 0 0 0 0 0 0 -1.54588057932403e-05 0 0 0 0 0 0 -1.54306426525194e-05 0 0 0 0 0 0 -1.54027841726787e-05 0 0 0 0 0 0 -1.53752288577526e-05 0 0 0 0 0 0 -1.53479752515245e-05 0 0 0 0 0 0 -1.53210219373208e-05 0 0 0 0 0 0 -1.52943675378147e-05 0 0 0 0 0 0 -1.52680107148433e-05 0 0 0 0 0 0 -1.52419501692363e-05 0 0 0 0 0 0 -1.52161846406558e-05 0 0 0 0 0 0 -1.51907129074489e-05 0 0 0 0 0 0 -1.5165533786511e-05 0 0 0 0 0 0 -1.51406461331623e-05 0 0 0 0 0 0 -1.51160488410341e-05 0 0 0 0 0 0 -1.50917408419689e-05 0 0 0 0 0 0 -1.50677211059305e-05 0 0 0 0 0 0 -1.50439886409275e-05 0 0 0 0 0 0 -1.50205424929467e-05 0 0 0 0 0 0 -1.49973817459008e-05 0 0 0 0 0 0 -1.49745055215851e-05 0 0 0 0 0 0 -1.49519129796486e-05 0 0 0 0 0 0 -1.49296033175758e-05 0 0 0 0 0 0 -1.49075757706804e-05 0 0 0 0 0 0 -1.48858296121121e-05 0 0 0 0 0 0 -1.48643641528741e-05 0 0 0 0 0 0 -1.48431787418543e-05 0 0 0 0 0 0 -1.48222727658677e-05 0 0 0 0 0 0 -1.48016456497117e-05 0 0 0 0 0 0 -1.47812968562342e-05 0 0 0 0 0 0 -1.47612258864135e-05 0 0 0 0 0 0 -1.47414322794513e-05 0 0 0 0 0 0 -1.47219156128794e-05 0 0 0 0 0 0 -1.47026755026778e-05 0 0 0 0 0 0 -1.4683711603407e-05 0 0 0 0 0 0 -1.46650236083535e-05 0 0 0 0 0 0 -1.46466112496887e-05 0 0 0 0 0 0 -1.46284742986406e-05 0 0 0 0 0 0 -1.46106125656807e-05 0 0 0 0 0 0 -1.45930259007237e-05 0 0 0 0 0 0 -1.45757141933417e-05 0 0 0 0 0 0 -1.4558677372993e-05 0 0 0 0 0 0 -1.45419154092652e-05 0 0 0 0 0 0 -1.45254283121335e-05 0 0 0 0 0 0 -1.45092161322328e-05 0 0 0 0 0 0 -1.44932789611472e-05 0 0 0 0 0 0 -1.44776169317128e-05 0 0 0 0 0 0 -1.44622302183379e-05 0 0 0 0 0 0 -1.44471190373385e-05 0 0 0 0 0 0 -1.44322836472901e-05 0 0 0 0 0 0 -1.44177243493971e-05 0 0 0 0 0 0 -1.44034414878775e-05 0 0 0 0 0 0 -1.43894354503671e-05 0 0 0 0 0 0 -1.4375706668339e-05 0 0 0 0 0 0 -1.4362255617543e-05 0 0 0 0 0 0 -1.43490828184626e-05 0 0 0 0 0 0 -1.43361888367903e-05 0 0 0 0 0 0 -1.43235742839233e-05 0 0 0 0 0 0 -1.43112398174773e-05 0 0 0 0 0 0 -1.42991861418216e-05 0 0 0 0 0 0 -1.42874140086339e-05 0 0 0 0 0 0 -1.42759242174759e-05 0 0 0 0 0 0 -1.42647176163912e-05 0 0 0 0 0 0 -1.42537951025237e-05 0 0 0 0 0 0 -1.424315762276e-05 0 0 0 0 0 0 -1.42328061743933e-05 0 0 0 0 0 0 -1.42227418058118e-05 0 0 0 0 0 0 -1.42129656172104e-05 0 0 0 0 0 0 -1.42034787613282e-05 0 0 0 0 0 0 -1.41942824442099e-05 0 0 0 0 0 0 -1.41853779259939e-05 0 0 0 0 0 0 -1.41767665217275e-05 0 0 0 0 0 0 -1.41684496022081e-05 0 0 0 0 0 0 -1.41604285948537e-05 0 0 0 0 0 0 -1.41527049846015e-05 0 0 0 0 0 0 -1.41452803148358e-05 0 0 0 0 0 0 -1.41381561883471e-05 0 0 0 0 0 0 -1.41313342683216e-05 0 0 0 0 0 0 -1.41248162793628e-05 0 0 0 0 0 0 -1.41186040085464e-05 0 0 0 0 0 0 -1.41126993065089e-05 0 0 0 0 0 0 -1.41071040885704e-05 0 0 0 0 0 0 -1.41018203358942e-05 0 0 0 0 0 0 -1.40968500966825e-05 0 0 0 0 0 0 -1.40921954874099e-05 0 0 0 0 0 0 -1.40878586940962e-05 0 0 0 0 0 0 -1.40838419736197e-05 0 0 0 0 0 0 -1.40801476550705e-05 0 0 0 0 0 0 -1.40767781411479e-05 0 0 0 0 0 0 -1.40737359096006e-05 0 0 0 0 0 0 -1.40710235147122e-05 0 0 0 0 0 0 -1.40686435888336e-05 0 0 0 0 0 0 -1.40665988439629e-05 0 0 0 0 0 0 -1.40648920733751e-05 0 0 0 0 0 0 -1.40635261533021e-05 0 0 0 0 0 0 -1.40625040446664e-05 0 0 0 0 0 0 -1.40618287948676e-05 0 0 0 0 0 0 -1.40615035396257e-05 0 0 0 0 0 0 -1.40615315048822e-05 0 0 0 0 0 0 -1.40619160087599e-05 0 0 0 0 0 0 -1.4062660463585e-05 0 0 0 0 0 0 -1.40637683779719e-05 0 0 0 0 0 0 -1.40652433589743e-05 0 0 0 0 0 0 -1.40670891143033e-05 0 0 0 0 0 0 -1.40693094546155e-05 0 0 0 0 0 0 -1.40719082958735e-05 0 0 0 0 0 0 -1.4074889661781e-05 0 0 0 0 0 0 -1.40782576862942e-05 0 0 0 0 0 0 -1.40820166162146e-05 0 0 0 0 0 0 -1.4086170813862e-05 0 0 0 0 0 0 -1.40907247598345e-05 0 0 0 0 0 0 -1.40956830558556e-05 0 0 0 0 0 0 -1.41010504277125e-05 0 0 0 0 0 0 -1.41068317282894e-05 0 0 0 0 0 0 -1.41130319406972e-05 0 0 0 0 0 0 -1.41196561815051e-05 0 0 0 0 0 0 -1.41267097040761e-05 0 0 0 0 0 0 -1.41341979020115e-05 0 0 0 0 0 0 -1.41421263127059e-05 0 0 0 0 0 0 -1.415050062102e-05 0 0 0 0 0 0 -1.41593266630721e-05 0 0 0 0 0 0 -1.41686104301553e-05 0 0 0 0 0 0 -1.41783580727826e-05 0 0 0 0 0 0 -1.41885759048662e-05 0 0 0 0 0 0 -1.41992704080359e-05 0 0 0 0 0 0 -1.42104482361001e-05 0 0 0 0 0 0 -1.42221162196564e-05 0 0 0 0 0 0 -1.42342813708566e-05 0 0 0 0 0 0 -1.42469508883323e-05 0 0 0 0 0 0 -1.42601321622857e-05 0 0 0 0 0 0 -1.42738327797544e-05 0 0 0 0 0 0 -1.42880605300539e-05 0 0 0 0 0 0 -1.4302823410407e-05 0 0 0 0 0 0 -1.43181296317652e-05 0 0 0 0 0 0 -1.43339876248316e-05 0 0 0 0 0 0 -1.43504060462908e-05 0 0 0 0 0 0 -1.43673937852559e-05 0 0 0 0 0 0 -1.43849599699393e-05 0 0 0 0 0 0 -1.44031139745579e-05 0 0 0 0 0 0 -1.442186542648e-05 0 0 0 0 0 0 -1.44412242136251e-05 0 0 0 0 0 0 -1.44612004921251e-05 0 0 0 0 0 0 -1.44818046942598e-05 0 0 0 0 0 0 -1.4503047536674e-05 0 0 0 0 0 0 -1.45249400288919e-05 0 0 0 0 0 0 -1.4547493482137e-05 0 0 0 0 0 0 -1.45707195184728e-05 0 0 0 0 0 0 -1.45946300802753e-05 0 0 0 0 0 0 -1.46192374400531e-05 0 0 0 0 0 0 -1.46445542106275e-05 0 0 0 0 0 0 -1.46705933556888e-05 0 0 0 0 0 0 -1.46973682007443e-05 0 0 0 0 0 0 -1.47248924444747e-05 0 0 0 0 0 0 -1.47531801705147e-05 0 0 0 0 0 0 -1.47822458596787e-05 0 0 0 0 0 0 -1.48121044026475e-05 0 0 0 0 0 0 -1.48427711131382e-05 0 0 0 0 0 0 -1.48742617415764e-05 0 0 0 0 0 0 -1.49065924892943e-05 0 0 0 0 0 0 -1.49397800232755e-05 0 0 0 0 0 0 -1.49738414914726e-05 0 0 0 0 0 0 -1.50087945387217e-05 0 0 0 0 0 0 -1.50446573232797e-05 0 0 0 0 0 0 -1.50814485340139e-05 0 0 0 0 0 0 -1.51191874082721e-05 0 0 0 0 0 0 -1.51578937504634e-05 0 0 0 0 0 0 -1.51975879513822e-05 0 0 0 0 0 0 -1.52382910083111e-05 0 0 0 0 0 0 -1.52800245459342e-05 0 0 0 0 0 0 -1.53228108381035e-05 0 0 0 0 0 0 -1.53666728304927e-05 0 0 0 0 0 0 -1.54116341641833e-05 0 0 0 0 0 0 -1.54577192002258e-05 0 0 0 0 0 0 -1.55049530452201e-05 0 0 0 0 0 0 -1.55533615779665e-05 0 0 0 0 0 0 -1.56029714772349e-05 0 0 0 0 0 0 -1.56538102507095e-05 0 0 0 0 0 0 -1.57059062651612e-05 0 0 0 0 0 0 -1.57592887779114e-05 0 0 0 0 0 0 -1.58139879696471e-05 0 0 0 0 0 0 -1.58700349786548e-05 0 0 0 0 0 0 -1.59274619365432e-05 0 0 0 0 0 0 -1.59863020055277e-05 0 0 0 0 0 0 -1.60465894173553e-05 0 0 0 0 0 0 -1.61083595139517e-05 0 0 0 0 0 0 -1.61716487898774e-05 0 0 0 0 0 0 -1.62364949366853e-05 0 0 0 0 0 0 -1.63029368892752e-05 0 0 0 0 0 0 -1.637101487435e-05 0 0 0 0 0 0 -1.64407704610804e-05 0 0 0 0 0 0 -1.65122466140921e-05 0 0 0 0 0 0 -1.65854877489002e-05 0 0 0 0 0 0 -1.66605397899161e-05 0 0 0 0 0 0 -1.67374502311636e-05 0 0 0 0 0 0 -1.68162681998504e-05 0 0 0 0 0 0 -1.68970445229454e-05 0 0 0 0 0 0 -1.6979831796925e-05 0 0 0 0 0 0 -1.70646844608605e-05 0 0 0 0 0 0 -1.71516588730275e-05 0 0 0 0 0 0 -1.72408133912316e-05 0 0 0 0 0 0 -1.7332208457056e-05 0 0 0 0 0 0 -1.74259066842474e-05 0 0 0 0 0 0 -1.7521972951474e-05 0 0 0 0 0 0 -1.76204744996982e-05 0 0 0 0 0 0 -1.77214810344301e-05 0 0 0 0 0 0 -1.78250648331343e-05 0 0 0 0 0 0 -1.79313008580918e-05 0 0 0 0 0 0 -1.80402668750262e-05 0 0 0 0 0 0 -1.81520435778332e-05 0 0 0 0 0 0 -1.82667147197683e-05 0 0 0 0 0 0 -1.83843672514742e-05 0 0 0 0 0 0 -1.8505091466251e-05 0 0 0 0 0 0 -1.8628981153004e-05 0 0 0 0 0 0 -1.87561337573278e-05 0 0 0 0 0 0 -1.88866505512193e-05 0 0 0 0 0 0 -1.90206368119438e-05 0 0 0 0 0 0 -1.91582020106162e-05 0 0 0 0 0 0 -1.92994600110936e-05 0 0 0 0 0 0 -1.94445292798215e-05 0 0 0 0 0 0 -1.95935331073165e-05 0 0 0 0 0 0 -1.97465998420177e-05 0 0 0 0 0 0 -1.99038631372897e-05 0 0 0 0 0 0 -2.0065462212415e-05 0 0 0 0 0 0 -2.02315421284745e-05 0 0 0 0 0 0 -2.04022540800769e-05 0 0 0 0 0 0 -2.05777557039672e-05 0 0 0 0 0 0 -2.07582114056213e-05 0 0 0 0 0 0 -2.09437927050109e-05 0 0 0 0 0 0 -2.11346786028109e-05 0 0 0 0 0 0 -2.1331055968416e-05 0 0 0 0 0 0 -2.15331199512332e-05 0 0 0 0 0 0 -2.17410744168267e-05 0 0 0 0 0 0 -2.19551324096094e-05 0 0 0 0 0 0 -2.21755166439039e-05 0 0 0 0 0 0 -2.24024600253335e-05 0 0 0 0 0 0 -2.26362062046529e-05 0 0 0 0 0 0 -2.28770101662914e-05 0 0 0 0 0 0 -2.31251388540558e-05 0 0 0 0 0 0 -2.33808718366309e-05 0 0 0 0 0 0 -2.3644502015721e-05 0 0 0 0 0 0 -2.39163363798984e-05 0 0 0 0 0 0 -2.41966968074694e-05 0 0 0 0 0 0 -2.4485920921927e-05 0 0 0 0 0 0 -2.47843630038472e-05 0 0 0 0 0 0 -2.50923949633944e-05 0 0 0 0 0 0 -2.54104073779343e-05 0 0 0 0 0 0 -2.5738810599621e-05 0 0 0 0 0 0 -2.6078035938215e-05 0 0 0 0 0 0 -2.64285369248216e-05 0 0 0 0 0 0 -2.6790790662704e-05 0 0 0 0 0 0 -2.71652992718292e-05 0 0 0 0 0 0 -2.75525914343556e-05 0 0 0 0 0 0 -2.7953224048867e-05 0 0 0 0 0 0 -2.8367784001803e-05 0 0 0 0 0 0 -2.87968900652373e-05 0 0 0 0 0 0 -2.92411949309185e-05 0 0 0 0 0 0 -2.97013873913094e-05 0 0 0 0 0 0 -3.01781946792562e-05 0 0 0 0 0 0 -3.06723849788874e-05 0 0 0 0 0 0 -3.11847701213843e-05 0 0 0 0 0 0 -3.17162084803986e-05 0 0 0 0 0 0 -3.2267608083113e-05 0 0 0 0 0 0 -3.2839929954249e-05 0 0 0 0 0 0 -3.34341917117456e-05 0 0 0 0 0 0 -3.40514714343423e-05 0 0 0 0 0 0 -3.4692911822926e-05 0 0 0 0 0 0 -3.5359724679229e-05 0 0 0 0 0 0 -3.6053195727302e-05 0 0 0 0 0 0 -3.67746898051358e-05 0 0 0 0 0 0 -3.75256564558416e-05 0 0 0 0 0 0 -3.83076359499437e-05 0 0 0 0 0 0 -3.91222657725429e-05 0 0 0 0 0 0 -3.99712876113792e-05 0 0 0 0 0 0 -4.08565548841016e-05 0 0 0 0 0 0 -4.17800408453244e-05 0 0 0 0 0 0 -4.27438473162297e-05 0 0 0 0 0 0 -4.37502140815017e-05 0 0 0 0 0 0 -4.48015290001532e-05 0 0 0 0 0 0 -4.59003388781761e-05 0 0 0 0 0 0 -4.70493611517726e-05 0 0 0 0 0 0 -4.8251496429967e-05 0 0 0 0 0 0 -4.9509841944386e-05 0 0 0 0 0 0 -5.08277059515909e-05 0 0 0 0 0 0 -5.22086231290868e-05 0 0 0 0 0 0 -5.36563709994867e-05 0 0 0 0 0 0 -5.51749874075527e-05 0 0 0 0 0 0 -5.67687890611279e-05 0 0 0 0 0 0 -5.84423911282018e-05 0 0 0 0 0 0 -6.02007278571856e-05 0 0 0 0 0 0 -6.2049074154238e-05 0 0 0 0 0 0 -6.399306800812e-05 0 0 0 0 0 0 -6.60387335970326e-05 0 0 0 0 0 0 -6.81925048401093e-05 0 0 0 0 0 0 -7.04612490649145e-05 0 0 0 0 0 0 -7.28522903468666e-05 0 0 0 0 0 0 -7.53734319314327e-05 0 0 0 0 0 0 -7.8032976968676e-05 0 0 0 0 0 0 -8.0839746564428e-05 0 0 0 0 0 0 -8.38030938739518e-05 0 0 0 0 0 0 -8.69329126218895e-05 0 0 0 0 0 0 -9.02396380147323e-05 0 0 0 0 0 0 -9.37342375059273e-05 0 0 0 0 0 0 -9.74281882652691e-05 0 0 0 0 0 0 -0.000101333437479613 0 0 0 0 0 0 -0.000105462340758853 0 0 0 0 0 0 -0.000109827572930684 0 0 0 0 0 0 -0.000114442004377838 0 0 0 0 0 0 -0.000119318534811913 0 0 0 0 0 0 -0.000124469875016352 0 0 0 0 0 0 -0.000129908265683197 0 0 0 0 0 0 -0.000135645121109424 0 0 0 0 0 0 -0.000141690584359945 0 0 0 0 0 0 -0.000148052979771374 0 0 0 0 0 0 -0.000154738148684638 0 0 0 0 0 0 -0.00016174865549353 0 0 0 0 0 0 -0.00016908285405136 0 0 0 0 0 0 -0.00017673380989603 0 0 0 0 0 0 -0.000184688082455587 0 0 0 0 0 0 -0.00019292438424915 0 0 0 0 0 0 -0.0002014121518847 0 0 0 0 0 0 -0.000210110086851757 0 0 0 0 0 0 -0.0002189647525554 0 0 0 0 0 0 -0.000227909346514898 0 0 0 0 0 0 -0.000236862800376246 0 0 0 0 0 0 -0.000245729390587109 0 0 0 0 0 0 -0.000254399062283497 0 0 0 0 0 0 -0.000262748669286353 0 0 0 0 0 0 -0.00027064430449272 0 0 0 0 0 0 -0.000277944829140879 0 0 0 0 0 0 -0.000284506602656729 0 0 0 0 0 0 -0.000290189271174628 0 0 0 0 0 0 -0.000294862307084681 0 0 0 0 0 0 -0.000298411829807868 0 0 0 0 0 0 -0.000300747112942397 0 0 0 0 0 0 -0.000301806129026728 0 0 0 0 0 0 -0.000301559525179553 0 0 0 0 0 0 -0.000300012566806299 0 0 0 0 0 0 -0.000297204814564875 0 0 0 0 0 0 -0.000293207572335121 0 0 0 0 0 0 -0.000288119409427309 0 0 0 0 0 0 -0.00028206026899406 0 0 0 0 0 0 -0.000275164792082547 0 0 0 0 0 0 -0.000267575501528076 0 0 0 0 0 0 -0.000259436413655919 0 0 0 0 0 0 -0.000250887506806146 0 0 0 0 0 0 -0.000242060308933425 0 0 0 0 0 0 -0.000233074704048841 0 0 0 0 0 0 -0.00022403692209114 0 0 0 0 0 0 -0.000215038580723034 0 0 0 0 0 0 -0.000206156592249088 0 0 0 0 0 0 -0.000197453729011842 0 0 0 0 0 0 - - diff --git a/examples/getting-started/2-clearsky-radiative-transfer/1.zeeman.py b/examples/getting-started/2-clearsky-radiative-transfer/1.zeeman.py index 5bb967d9ef..b7fdfdb4ae 100644 --- a/examples/getting-started/2-clearsky-radiative-transfer/1.zeeman.py +++ b/examples/getting-started/2-clearsky-radiative-transfer/1.zeeman.py @@ -56,17 +56,17 @@ ws.spectral_radiance[::100], np.array( [ - [2.27786279e02, -2.23644583e-04, -3.77015913e-04, 5.69269522e-02], - [2.30865312e02, -3.48096654e-04, -5.82873607e-04, 7.04140485e-02], - [2.34807995e02, -6.21529170e-04, -1.02888198e-03, 9.33839855e-02], - [2.40362302e02, -1.41676334e-03, -2.28982732e-03, 1.40030558e-01], - [2.49783915e02, -5.60528357e-03, -8.33754971e-03, 2.69733178e-01], - [2.07245890e02, -4.30794421e00, -2.14467490e01, 1.24566607e-05], - [2.49783382e02, -5.60754703e-03, -8.34040843e-03, -2.69809821e-01], - [2.40361281e02, -1.41779460e-03, -2.29136074e-03, -1.40106384e-01], - [2.34806526e02, -6.22190182e-04, -1.02991615e-03, -9.34592546e-02], - [2.30863403e02, -3.48585873e-04, -5.83658317e-04, -7.04893428e-02], - [2.27783939e02, -2.24035725e-04, -3.77652642e-04, -5.70022211e-02], + [2.27784834e02, -2.23635319e-04, -3.77001634e-04, 5.69266632e-02], + [2.30863853e02, -3.48081919e-04, -5.82851478e-04, 7.04138002e-02], + [2.34806521e02, -6.21501805e-04, -1.02884266e-03, 9.33836080e-02], + [2.40360801e02, -1.41669913e-03, -2.28974401e-03, 1.40029968e-01], + [2.49782407e02, -5.60506178e-03, -8.33739163e-03, 2.69735122e-01], + [2.07248447e02, -4.30842579e00, -2.14475851e01, 1.25057382e-05], + [2.49781840e02, -5.60734272e-03, -8.34027514e-03, -2.69812575e-01], + [2.40359708e02, -1.41773814e-03, -2.29128954e-03, -1.40106546e-01], + [2.34804943e02, -6.22167771e-04, -1.02988483e-03, -9.34596090e-02], + [2.30861802e02, -3.48574780e-04, -5.83642167e-04, -7.04898114e-02], + [2.27782317e02, -2.24029336e-04, -3.77643130e-04, -5.70026253e-02], ] ), ), "Values have drifted from expected results in spectral radiance" diff --git a/examples/getting-started/2-clearsky-radiative-transfer/2.zeeman-sensor.py b/examples/getting-started/2-clearsky-radiative-transfer/2.zeeman-sensor.py index 9e741826e9..e681547dbd 100644 --- a/examples/getting-started/2-clearsky-radiative-transfer/2.zeeman-sensor.py +++ b/examples/getting-started/2-clearsky-radiative-transfer/2.zeeman-sensor.py @@ -64,17 +64,17 @@ result[::100], np.array( [ - 227.78791323, - 230.8653163, - 234.80800379, - 240.3623207, - 249.78397782, - 207.61855855, - 249.78344508, - 240.36129972, - 234.80653428, - 230.86340781, - 227.78557379, + 227.78646795, + 230.8638575, + 234.80652899, + 240.36081974, + 249.78247057, + 207.62113428, + 249.78190355, + 240.35972683, + 234.80495168, + 230.86180615, + 227.78395156, ] ), ) diff --git a/examples/getting-started/3-disort/2.clearsky-flux.py b/examples/getting-started/3-disort/2.clearsky-flux.py index 1068244d65..eb52955465 100644 --- a/examples/getting-started/3-disort/2.clearsky-flux.py +++ b/examples/getting-started/3-disort/2.clearsky-flux.py @@ -59,36 +59,36 @@ ws.disort_spectral_flux_field[:, :2].flatten() / np.array( [ - 2.65884980e-15, - 2.66123187e-15, + 2.65924430e-15, + 2.66162733e-15, 2.75440515e-15, - 9.57958301e-18, - 2.08163832e-17, - 5.41861020e-16, - 2.93041798e-15, - 2.93324940e-15, + 9.57958182e-18, + 2.08076327e-17, + 5.39749082e-16, + 2.93074072e-15, + 2.93357370e-15, 3.03918211e-15, - 9.99616715e-18, - 2.34556308e-17, - 6.14497069e-16, - 3.19240354e-15, - 3.19640875e-15, + 9.99616600e-18, + 2.34511632e-17, + 6.12773186e-16, + 3.19264874e-15, + 3.19665668e-15, 3.33784028e-15, - 1.03768106e-17, - 3.05931058e-17, - 8.09137668e-16, - 3.35237338e-15, - 3.36061097e-15, + 1.03768102e-17, + 3.05943372e-17, + 8.07853130e-16, + 3.35251230e-15, + 3.36075470e-15, 3.65036247e-15, - 1.07209030e-17, - 6.78813350e-17, - 1.56228981e-15, - 3.37235564e-15, - 2.86991074e-15, + 1.07209025e-17, + 6.78926741e-17, + 1.56163327e-15, + 3.37235023e-15, + 2.86992821e-15, 3.97673151e-15, - 1.52461809e-15, - 2.80896218e-15, - 3.94568143e-15, + 1.52446216e-15, + 2.80896759e-15, + 3.94566396e-15, ] ), 1, diff --git a/examples/recipes/SingleSpeciesAbsorption/species_absorption.ipynb b/examples/recipes/SingleSpeciesAbsorption/species_absorption.ipynb index c2fa32fd7e..c29c53cde5 100644 --- a/examples/recipes/SingleSpeciesAbsorption/species_absorption.ipynb +++ b/examples/recipes/SingleSpeciesAbsorption/species_absorption.ipynb @@ -162,11 +162,11 @@ "metadata": {}, "outputs": [], "source": [ - "assert np.isclose(6.7940695853245560e-28 / xsec.mean(), 1)\n", - "assert np.isclose(5.4406909239279050e-24 / xsec.sum(), 1)\n", - "assert np.isclose(1.3361953365612772e-24 / xsec.max(), 1)\n", - "assert np.isclose(2.5383142016771395e-26 / xsec.std(), 1)\n", - "assert np.isclose(8.2386317491421410e-35 / xsec.min(), 1)" + "assert np.isclose(6.792977548868407e-28 / xsec.mean(), 1)\n", + "assert np.isclose(5.43981642113382e-24 / xsec.sum(), 1)\n", + "assert np.isclose(1.3359834491781882e-24 / xsec.max(), 1)\n", + "assert np.isclose(2.537911691540087e-26 / xsec.std(), 1)\n", + "assert np.isclose(8.236637542411964e-35 / xsec.min(), 1)" ] } ], diff --git a/python/src/pyarts/recipe/AtmosphericFlux.py b/python/src/pyarts/recipe/AtmosphericFlux.py index f39680441b..19592dfa08 100644 --- a/python/src/pyarts/recipe/AtmosphericFlux.py +++ b/python/src/pyarts/recipe/AtmosphericFlux.py @@ -66,8 +66,8 @@ def __init__( self.ws.ReadCatalogData() for band in self.ws.absorption_bands: - band.data.cutoff = "ByLine" - band.data.cutoff_value = 750e9 + self.ws.absorption_bands[band].cutoff = "ByLine" + self.ws.absorption_bands[band].cutoff_value = 750e9 self.ws.propagation_matrix_agendaAuto() diff --git a/python/src/pyarts/recipe/SpectralAtmosphericFlux.py b/python/src/pyarts/recipe/SpectralAtmosphericFlux.py index abad1424f8..e1167a05d5 100644 --- a/python/src/pyarts/recipe/SpectralAtmosphericFlux.py +++ b/python/src/pyarts/recipe/SpectralAtmosphericFlux.py @@ -65,8 +65,8 @@ def __init__( self.ws.ReadCatalogData() for band in self.ws.absorption_bands: - band.data.cutoff = "ByLine" - band.data.cutoff_value = 750e9 + self.ws.absorption_bands[band].cutoff = "ByLine" + self.ws.absorption_bands[band].cutoff_value = 750e9 self.ws.propagation_matrix_agendaAuto() diff --git a/python/test/workspace/test_groups.py b/python/test/workspace/test_groups.py index 9de3aeb6f6..8e6babe66b 100644 --- a/python/test/workspace/test_groups.py +++ b/python/test/workspace/test_groups.py @@ -1027,4 +1027,4 @@ def test_construct_empty(self): if __name__ == "__main__": x = TestGroups() - x.testArrayOfAtmPoint() + x.test_construct_empty() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7d744fc6ce..fbf85c0075 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -149,6 +149,7 @@ add_library(artsworkspace STATIC xml_io_array_types.cc xml_io_basic_types.cc xml_io_compound_types.cc + xml_io_map_types.cc xml_io_rtepack.cc xml_operators.cc ${NETCDF_CC_FILES} diff --git a/src/core/file.cc b/src/core/file.cc index 7826333f32..fc8fa81a7f 100644 --- a/src/core/file.cc +++ b/src/core/file.cc @@ -14,12 +14,15 @@ // External declarations //////////////////////////////////////////////////////////////////////////// +#include "file.h" + +#include + #include #include #include #include -#include "file.h" #include "parameters.h" //////////////////////////////////////////////////////////////////////////// @@ -132,7 +135,14 @@ void open_input_file(std::ifstream& file, const std::string_view name) { // g++ stream exceptions work properly. ARTS_USER_ERROR_IF(!file, "Cannot open input file: {}" - "\nMaybe the file does not exist?", ename); + "\nMaybe the file does not exist?", + ename); +} + +std::ifstream open_input_file(const std::string_view name) { + std::ifstream file; + open_input_file(file, name); + return file; } /** @@ -207,7 +217,9 @@ ArrayOfString read_text_from_file(const std::string_view name) { @param with The replacement. @author Stefan Buehler */ -void replace_all(String& s, const std::string_view what, const std::string_view with) { +void replace_all(String& s, + const std::string_view what, + const std::string_view with) { Size j = s.find(what); while (j != s.npos) { s.replace(j, 1, with); @@ -226,7 +238,7 @@ void replace_all(String& s, const std::string_view what, const std::string_view @author Oliver Lemke */ int check_newline(const std::string_view s) { - String d = String{s}; + String d = String{s}; int result = 0; // Remove all whitespaces except \n @@ -363,11 +375,11 @@ bool find_xml_file_existence(String& filename) { extern Parameters parameters; ArrayOfString allpaths = parameters.includepath; allpaths.insert( - allpaths.end(), parameters.datapath.begin(), parameters.datapath.end()); - + allpaths.end(), parameters.datapath.begin(), parameters.datapath.end()); + ArrayOfString matching_files; find_file(matching_files, filename, allpaths, {"", ".xml", ".gz", ".xml.gz"}); - + if (matching_files.size()) { filename = matching_files[0]; return true; @@ -456,8 +468,7 @@ ArrayOfString list_directory(const std::string_view dirname) { dirname) ArrayOfString files{}; - for (const auto& filename : - std::filesystem::directory_iterator{dirname}) { + for (const auto& filename : std::filesystem::directory_iterator{dirname}) { files.push_back(filename.path().string()); } @@ -476,7 +487,8 @@ ArrayOfString list_directory(const std::string_view dirname) { \author Oliver Lemke */ -String make_filename_unique(const std::string_view filename, const String& extension) { +String make_filename_unique(const std::string_view filename, + const String& extension) { String basename = String{filename}; String extensionname; diff --git a/src/core/file.h b/src/core/file.h index 20f880289f..c9333f0011 100644 --- a/src/core/file.h +++ b/src/core/file.h @@ -35,6 +35,8 @@ void cleanup_output_file(std::ofstream& file, const std::string_view name); void open_input_file(std::ifstream& file, const std::string_view name); +std::ifstream open_input_file(const std::string_view name); + [[nodiscard]] ArrayOfString read_text_from_stream(std::istream& is); [[nodiscard]] ArrayOfString read_text_from_file(const std::string_view name); diff --git a/src/core/fwd/fwd_propmat.cpp b/src/core/fwd/fwd_propmat.cpp index 2733ee9e16..141e3b837f 100644 --- a/src/core/fwd/fwd_propmat.cpp +++ b/src/core/fwd/fwd_propmat.cpp @@ -8,7 +8,7 @@ namespace fwd { propmat::propmat(std::shared_ptr atm_, - std::shared_ptr lines_, + std::shared_ptr lines_, std::shared_ptr cia_, std::shared_ptr xsec_, std::shared_ptr predef_, @@ -68,7 +68,7 @@ void propmat::set_ciaextrap(Numeric extrap) { cia.set_extrap(extrap); } void propmat::set_ciarobust(Index robust) { cia.set_robust(robust); } -void propmat::set_bands(std::shared_ptr lines_) { +void propmat::set_bands(std::shared_ptr lines_) { lines.set_model(std::move(lines_)); } diff --git a/src/core/fwd/fwd_propmat.h b/src/core/fwd/fwd_propmat.h index 38bb4d0b69..af15b26da4 100644 --- a/src/core/fwd/fwd_propmat.h +++ b/src/core/fwd/fwd_propmat.h @@ -29,7 +29,7 @@ class propmat { propmat& operator=(propmat&&) = default; propmat(std::shared_ptr atm, - std::shared_ptr lines, + std::shared_ptr lines, std::shared_ptr cia, std::shared_ptr xsec, std::shared_ptr predef, @@ -42,7 +42,7 @@ class propmat { void set_atm(std::shared_ptr atm); void set_ciaextrap(Numeric extrap); void set_ciarobust(Index robust); - void set_bands(std::shared_ptr lines); + void set_bands(std::shared_ptr lines); void set_cia(std::shared_ptr cia); void set_predef(std::shared_ptr predef); void set_model(std::shared_ptr xsec); diff --git a/src/core/fwd/fwd_spectral_radiance.cpp b/src/core/fwd/fwd_spectral_radiance.cpp index 136ed13236..dabae6673c 100644 --- a/src/core/fwd/fwd_spectral_radiance.cpp +++ b/src/core/fwd/fwd_spectral_radiance.cpp @@ -92,7 +92,7 @@ spectral_radiance::spectral_radiance( AscendingGrid lon_, const AtmField& atm_, const SurfaceField& surf, - const std::shared_ptr& lines, + const std::shared_ptr& lines, const std::shared_ptr& cia, const std::shared_ptr& xsec, const std::shared_ptr& predef, diff --git a/src/core/fwd/fwd_spectral_radiance.h b/src/core/fwd/fwd_spectral_radiance.h index bbe0edd5de..902de0fbd4 100644 --- a/src/core/fwd/fwd_spectral_radiance.h +++ b/src/core/fwd/fwd_spectral_radiance.h @@ -48,7 +48,7 @@ struct spectral_radiance { AscendingGrid lon, const AtmField& atm, const SurfaceField& surf, - const std::shared_ptr& lines, + const std::shared_ptr& lines, const std::shared_ptr& cia, const std::shared_ptr& xsec, const std::shared_ptr& predef, diff --git a/src/core/jacobian.cc b/src/core/jacobian.cc index e9152d119b..d30156ca84 100644 --- a/src/core/jacobian.cc +++ b/src/core/jacobian.cc @@ -43,7 +43,7 @@ std::ostream& operator<<(std::ostream& os, const LineTarget&) { return os << "Line key value: "; } -void LineTarget::update(ArrayOfAbsorptionBand& absorption_bands, +void LineTarget::update(AbsorptionBands& absorption_bands, const Vector& x) const { const auto sz = static_cast(x.size()); ARTS_USER_ERROR_IF(sz < (x_start + x_size), "Got too small vector.") @@ -51,7 +51,7 @@ void LineTarget::update(ArrayOfAbsorptionBand& absorption_bands, } void LineTarget::update(Vector& x, - const ArrayOfAbsorptionBand& absorption_bands) const { + const AbsorptionBands& absorption_bands) const { const auto sz = static_cast(x.size()); ARTS_USER_ERROR_IF(sz < (x_start + x_size), "Got too small vector.") set_state(x.slice(x_start, x_size), absorption_bands, type); @@ -77,7 +77,7 @@ std::vector& Targets::line() { return target(); } void Targets::finalize(const AtmField& atmospheric_field, const SurfaceField& surface_field, - const ArrayOfAbsorptionBand&) { + const AbsorptionBands&) { zero_out_x(); const Size natm = atm().size(); diff --git a/src/core/jacobian.h b/src/core/jacobian.h index 974e5b4c9f..bb3d3b67b9 100644 --- a/src/core/jacobian.h +++ b/src/core/jacobian.h @@ -141,15 +141,15 @@ struct LineTarget { Size x_size{std::numeric_limits::max()}; std::function + ExhaustiveVectorView, const AbsorptionBands&, const LblLineKey&)> set_state{[](ExhaustiveVectorView x, - const ArrayOfAbsorptionBand& bands, + const AbsorptionBands& bands, const LblLineKey& key) { x = key.get_value(bands); }}; - std::function - set_model{[](ArrayOfAbsorptionBand& bands, + set_model{[](AbsorptionBands& bands, const LblLineKey& key, const ExhaustiveConstVectorView x) { ExhaustiveVectorView{key.get_value(bands)} = x; @@ -157,9 +157,9 @@ struct LineTarget { friend std::ostream& operator<<(std::ostream& os, const LineTarget&); - void update(ArrayOfAbsorptionBand&, const Vector&) const; + void update(AbsorptionBands&, const Vector&) const; - void update(Vector&, const ArrayOfAbsorptionBand&) const; + void update(Vector&, const AbsorptionBands&) const; }; template @@ -290,7 +290,7 @@ struct Targets final : targets_t { //! Sets the sizes and x-positions of the targets. void finalize(const AtmField& atmospheric_field, const SurfaceField& surface_field, - const ArrayOfAbsorptionBand& absorption_bands); + const AbsorptionBands& absorption_bands); friend std::ostream& operator<<(std::ostream& os, const Targets& targets); }; diff --git a/src/core/lbl/CMakeLists.txt b/src/core/lbl/CMakeLists.txt index 0ca26b64eb..1ba6d26019 100644 --- a/src/core/lbl/CMakeLists.txt +++ b/src/core/lbl/CMakeLists.txt @@ -1,6 +1,7 @@ add_library(lbl STATIC lbl_data.cpp lbl_fwd.cpp + lbl_hitran.cpp lbl_lineshape.cpp lbl_lineshape_linemixing.cpp lbl_lineshape_model.cpp @@ -14,5 +15,5 @@ add_library(lbl STATIC lbl_zeeman.cpp ) -target_link_libraries(lbl PUBLIC matpack atm Faddeeva predef quantum surface wigner util) +target_link_libraries(lbl PUBLIC matpack atm Faddeeva predef quantum surface wigner util arts_options) target_include_directories(lbl PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/..) diff --git a/src/core/lbl/lbl.h b/src/core/lbl/lbl.h index 93aed163d4..4fa70c19f2 100644 --- a/src/core/lbl/lbl.h +++ b/src/core/lbl/lbl.h @@ -2,6 +2,7 @@ #include "lbl_data.h" #include "lbl_fwd.h" +#include "lbl_hitran.h" #include "lbl_lineshape.h" #include "lbl_lineshape_model.h" #include "lbl_lineshape_voigt_ecs.h" diff --git a/src/core/lbl/lbl_data.cpp b/src/core/lbl/lbl_data.cpp index 0d302329e8..8fa9cf2fe9 100644 --- a/src/core/lbl/lbl_data.cpp +++ b/src/core/lbl/lbl_data.cpp @@ -5,20 +5,27 @@ #include #include #include +#include #include #include "arts_constants.h" #include "arts_constexpr_math.h" #include "debug.h" #include "double_imanip.h" +#include "hitran_species.h" +#include "partfun.h" #include "quantum_numbers.h" //! In CPP file +using Constant::c; +using Constant::h; using Constant::k; +using Constant::pi; using Math::pow2; using Math::pow3; using Math::pow4; using std::exp; +using std::expm1; namespace lbl { Numeric line::s(Numeric T, Numeric Q) const { @@ -45,15 +52,9 @@ Numeric line::ds_da(Numeric T, Numeric Q) const { void band_data::sort(LineByLineVariable v) { using enum LineByLineVariable; switch (v) { - case f0: - std::ranges::sort(lines, {}, &line::f0); - break; - case e0: - std::ranges::sort(lines, {}, &line::e0); - break; - case a: - std::ranges::sort(lines, {}, &line::a); - break; + case f0: std::ranges::sort(lines, {}, &line::f0); break; + case e0: std::ranges::sort(lines, {}, &line::e0); break; + case a: std::ranges::sort(lines, {}, &line::a); break; } } @@ -91,15 +92,11 @@ std::ostream& operator<<(std::ostream& os, const band_data& x) { << x.lines; } -std::ostream& operator<<(std::ostream& os, const band& x) { - return os << x.key << '\n' << x.data; -} - -std::ostream& operator<<(std::ostream& os, const std::vector& x) { +std::ostream& operator<<(std::ostream& os, const AbsorptionBands& x) { constexpr std::string_view endl = "\n"; std::string_view sep = ""; - for (auto& y : x) { - os << sep << y; + for (auto& [key, data] : x) { + os << sep << key << '\n' << data; std::exchange(sep, endl); } return os; @@ -139,16 +136,13 @@ std::ostream& operator<<(std::ostream& os, const line_key& x) { template auto local_get_value(T& absorption_bands, const line_key& type) -> std::conditional_t, const Numeric&, Numeric&> { - auto& band = - [&type, &absorption_bands]() { - auto ptr = - std::ranges::find(absorption_bands, type.band, &lbl::band::key); - ARTS_USER_ERROR_IF(ptr == absorption_bands.end(), - "No band with quantum identifier: {}", - type.band); - return ptr; - }() - ->data; + auto ptr = absorption_bands.find(type.band); + + ARTS_USER_ERROR_IF(ptr == absorption_bands.end(), + "No band with quantum identifier: {}", + type.band); + + auto& band = ptr->second; ARTS_USER_ERROR_IF(type.line >= band.lines.size(), "Line index out of range: {}" @@ -184,22 +178,42 @@ auto local_get_value(T& absorption_bands, const line_key& type) } switch (type.var) { - case LineByLineVariable::f0: - return line.f0; - case LineByLineVariable::e0: - return line.e0; - case LineByLineVariable::a: - return line.a; + case LineByLineVariable::f0: return line.f0; + case LineByLineVariable::e0: return line.e0; + case LineByLineVariable::a: return line.a; } std::unreachable(); } -Numeric& line_key::get_value(std::vector& b) const { +Numeric& line_key::get_value(AbsorptionBands& b) const { return local_get_value(b, *this); } -const Numeric& line_key::get_value(const std::vector& b) const { +const Numeric& line_key::get_value(const AbsorptionBands& b) const { return local_get_value(b, *this); } + +[[nodiscard]] Numeric line::hitran_a(const Numeric hitran_s, + const SpeciesIsotope& isot) { + constexpr Numeric T0 = 296.0; + const Numeric Q0 = PartitionFunctions::Q(T0, isot); + const Numeric Ia = Hitran::isotopologue_ratios()[isot]; + + //! Note negative value because expm1 is used as a more accurate form of (1 - exp(x)) for exp(x) close to 1. + return -8.0 * pi * Q0 * hitran_s / + (Ia * gu * exp(-e0 / (k * T0)) * expm1(-(h * f0) / (k * T0)) * + pow2(c / f0)); +} + +bool band_data::merge(const line& linedata) { + for (auto& line : lines) { + if (line.qn == linedata.qn) { + line = linedata; + return false; + } + } + lines.push_back(linedata); + return true; +} } // namespace lbl diff --git a/src/core/lbl/lbl_data.h b/src/core/lbl/lbl_data.h index 0a2b0c9be0..684e6c6bb8 100644 --- a/src/core/lbl/lbl_data.h +++ b/src/core/lbl/lbl_data.h @@ -115,6 +115,14 @@ struct line { */ [[nodiscard]] Numeric ds_dT(Numeric T, Numeric Q, Numeric dQ_dt) const; + /** Compute the HITRAN linestrength for this line + * + * @param hitran_s The HITRAN line strength + * @param isot The isotope to use - required to get the correct partition function + * @return Numeric Hitran equivalent linestrength + */ + [[nodiscard]] Numeric hitran_a(const Numeric hitran_s, const SpeciesIsotope& isot); + friend std::ostream& operator<<(std::ostream& os, const line& x); friend std::istream& operator>>(std::istream& is, line& x); @@ -168,14 +176,10 @@ struct band_data { [[nodiscard]] Rational max(QuantumNumberType) const; - friend std::ostream& operator<<(std::ostream& os, const band_data& x); -}; + //! Returns true if the line is new for the band_data (based on quantum numbers) + bool merge(const line& linedata); -struct band { - QuantumIdentifier key{"Ar-8"}; - band_data data{}; - - friend std::ostream& operator<<(std::ostream& os, const band&); + friend std::ostream& operator<<(std::ostream& os, const band_data& x); }; struct line_pos { @@ -217,13 +221,13 @@ struct line_key { friend std::ostream& operator<<(std::ostream& os, const line_key& x); - [[nodiscard]] Numeric& get_value(std::vector&) const; - [[nodiscard]] const Numeric& get_value(const std::vector&) const; + [[nodiscard]] Numeric& get_value(std::unordered_map&) const; + [[nodiscard]] const Numeric& get_value(const std::unordered_map&) const; }; std::ostream& operator<<(std::ostream& os, const std::vector& x); -std::ostream& operator<<(std::ostream& os, const std::vector& x); +std::ostream& operator<<(std::ostream& os, const std::unordered_map& x); } // namespace lbl //! Support hashing of line keys @@ -237,10 +241,10 @@ struct std::hash { using LblLineKey = lbl::line_key; -using AbsorptionBand = lbl::band; +using AbsorptionBand = lbl::band_data; //! A list of multiple bands -using ArrayOfAbsorptionBand = std::vector; +using AbsorptionBands = std::unordered_map; template <> struct std::formatter { @@ -290,24 +294,6 @@ struct std::formatter { } }; -template <> -struct std::formatter { - format_tags tags; - - [[nodiscard]] constexpr auto& inner_fmt() { return *this; } - [[nodiscard]] constexpr auto& inner_fmt() const { return *this; } - - constexpr std::format_parse_context::iterator parse( - std::format_parse_context& ctx) { - return parse_format_tags(tags, ctx); - } - - template - FmtContext::iterator format(const AbsorptionBand& v, FmtContext& ctx) const { - return tags.format(ctx, v.key, tags.sep(), v.data); - } -}; - template <> struct std::formatter { format_tags tags; diff --git a/src/core/lbl/lbl_fwd.cpp b/src/core/lbl/lbl_fwd.cpp index be4e05bdfd..0ff8d792ad 100644 --- a/src/core/lbl/lbl_fwd.cpp +++ b/src/core/lbl/lbl_fwd.cpp @@ -222,17 +222,17 @@ std::pair nlte::operator()(const Numeric frequency) const { return {scl * (a + ac), scl * (s + sc)}; } -void lte::set_model(std::shared_ptr bands_) { +void lte::set_model(std::shared_ptr bands_) { bands = std::move(bands_); adapt(); } -void lte_mirror::set_model(std::shared_ptr bands_) { +void lte_mirror::set_model(std::shared_ptr bands_) { bands = std::move(bands_); adapt(); } -void nlte::set_model(std::shared_ptr bands_) { +void nlte::set_model(std::shared_ptr bands_) { bands = std::move(bands_); adapt(); } @@ -267,7 +267,7 @@ void nlte::set_pol(zeeman::pol pol_) { adapt(); } -void lte::set(std::shared_ptr bands_, +void lte::set(std::shared_ptr bands_, std::shared_ptr atm_, zeeman::pol pol_) { bands = std::move(bands_); @@ -276,7 +276,7 @@ void lte::set(std::shared_ptr bands_, adapt(); } -void lte_mirror::set(std::shared_ptr bands_, +void lte_mirror::set(std::shared_ptr bands_, std::shared_ptr atm_, zeeman::pol pol_) { bands = std::move(bands_); @@ -285,7 +285,7 @@ void lte_mirror::set(std::shared_ptr bands_, adapt(); } -void nlte::set(std::shared_ptr bands_, +void nlte::set(std::shared_ptr bands_, std::shared_ptr atm_, zeeman::pol pol_) { bands = std::move(bands_); @@ -296,7 +296,7 @@ void nlte::set(std::shared_ptr bands_, } // namespace models line_storage::line_storage(std::shared_ptr atm_, - std::shared_ptr bands_) + std::shared_ptr bands_) : atm(std::move(atm_)), bands(std::move(bands_)) { for (auto& [qid, band] : *bands) { ARTS_USER_ERROR_IF( @@ -328,7 +328,7 @@ line_storage::line_storage(std::shared_ptr atm_, nlte[static_cast(zeeman::pol::no)].set(bands, atm, zeeman::pol::no); } -void line_storage::set_model(std::shared_ptr bands_) { +void line_storage::set_model(std::shared_ptr bands_) { for (auto& m : lte) m.set_model(bands_); for (auto& m : lte_mirror) m.set_model(bands_); for (auto& m : nlte) m.set_model(bands_); diff --git a/src/core/lbl/lbl_fwd.h b/src/core/lbl/lbl_fwd.h index f99af533db..b8592b9b57 100644 --- a/src/core/lbl/lbl_fwd.h +++ b/src/core/lbl/lbl_fwd.h @@ -12,7 +12,7 @@ namespace lbl::fwd { namespace models { class lte { std::shared_ptr atm{}; - std::shared_ptr bands{}; + std::shared_ptr bands{}; zeeman::pol pol{}; voigt::lte::band_shape lines{}; @@ -25,16 +25,16 @@ class lte { public: std::pair operator()(const Numeric frequency) const; - void set_model(std::shared_ptr bands); + void set_model(std::shared_ptr bands); void set_atm(std::shared_ptr atm); void set_pol(zeeman::pol pol); - void set(std::shared_ptr bands, std::shared_ptr atm, + void set(std::shared_ptr bands, std::shared_ptr atm, zeeman::pol pol); }; class lte_mirror { std::shared_ptr atm{}; - std::shared_ptr bands{}; + std::shared_ptr bands{}; zeeman::pol pol{}; voigt::lte_mirror::band_shape lines{}; @@ -47,16 +47,16 @@ class lte_mirror { public: std::pair operator()(const Numeric frequency) const; - void set_model(std::shared_ptr bands); + void set_model(std::shared_ptr bands); void set_atm(std::shared_ptr atm); void set_pol(zeeman::pol pol); - void set(std::shared_ptr bands, std::shared_ptr atm, + void set(std::shared_ptr bands, std::shared_ptr atm, zeeman::pol pol); }; class nlte { std::shared_ptr atm{}; - std::shared_ptr bands{}; + std::shared_ptr bands{}; zeeman::pol pol{}; voigt::nlte::band_shape lines{}; @@ -69,17 +69,17 @@ class nlte { public: std::pair operator()(const Numeric frequency) const; - void set_model(std::shared_ptr bands); + void set_model(std::shared_ptr bands); void set_atm(std::shared_ptr atm); void set_pol(zeeman::pol pol); - void set(std::shared_ptr bands, std::shared_ptr atm, + void set(std::shared_ptr bands, std::shared_ptr atm, zeeman::pol pol); }; } // namespace models class line_storage { std::shared_ptr atm{}; - std::shared_ptr bands{}; + std::shared_ptr bands{}; std::array lte{}; std::array lte_mirror{}; @@ -93,11 +93,11 @@ class line_storage { line_storage& operator=(line_storage&&) = default; line_storage(std::shared_ptr atm, - std::shared_ptr bands); + std::shared_ptr bands); std::pair operator()(const Numeric frequency, const zeeman::pol pol) const; - void set_model(std::shared_ptr bands); + void set_model(std::shared_ptr bands); void set_atm(std::shared_ptr atm); }; // struct frequency } // namespace lbl::fwd diff --git a/src/core/lbl/lbl_hitran.cpp b/src/core/lbl/lbl_hitran.cpp new file mode 100644 index 0000000000..d3c3ddf00b --- /dev/null +++ b/src/core/lbl/lbl_hitran.cpp @@ -0,0 +1,200 @@ +#include +#include +#include + +#include "partfun.h" + +namespace lbl { +struct reader { + std::string::const_iterator it; + std::string::const_iterator end; + + reader(const std::string& s) : it(s.begin()), end(s.end()) {} + + template + constexpr T read_next(Size n) { + std::string_view orig(it, it + n); + std::string_view sv = orig; + skip(n); + + if constexpr (std::same_as) { + ARTS_ASSERT(n == 1) + return orig[0]; + } else { + while (sv.size() and sv.front() == ' ') sv.remove_prefix(1); + while (sv.size() and sv.back() == ' ') sv.remove_suffix(1); + + T x{}; + if constexpr (std::same_as or std::same_as) { + auto res = fast_float::from_chars(sv.data(), sv.data() + sv.size(), x); + ARTS_USER_ERROR_IF(res.ec != std::errc{}, + "Failed to parse value from string \"{}\"", + orig) + ARTS_USER_ERROR_IF(res.ptr != sv.data() + sv.size(), + "Failed to fully parse string \"{}\"", + orig) + } else { + auto res = std::from_chars(sv.data(), sv.data() + sv.size(), x); + ARTS_USER_ERROR_IF(res.ec != std::errc{}, + "Failed to parse value from string \"{}\"", + orig) + ARTS_USER_ERROR_IF(res.ptr != sv.data() + sv.size(), + "Failed to fully parse string \"{}\"", + orig) + } + + return x; + } + } + + constexpr void skip(Size n) { + ARTS_USER_ERROR_IF(it + n > end, "Unexpected end of string"); + it += n; + } + + [[nodiscard]] constexpr bool end_of_string() const { return it == end; } +}; + +bool read_hitran_par_record(hitran_record& record, + const std::string& linedata, + const Numeric fmin) try { + using namespace Conversion; + + reader data(linedata); + + const auto M = data.read_next(2); + const auto I = data.read_next(1); + + record.f0 = kaycm2freq(data.read_next(12)); + if (record.f0 < fmin) return false; + + // Set this after the frequency check to avoid unnecessary work + record.qid = Hitran::id_from_lookup(M, I); + + record.S = kaycm_per_cmsquared2hz_per_msquared(data.read_next(10)); + record.A = data.read_next(10); + record.gamma_air = kaycm_per_atm2hz_per_pa(data.read_next(5)); + record.gamma_self = kaycm_per_atm2hz_per_pa(data.read_next(5)); + record.E = kaycm2joule(data.read_next(10)); + record.n = data.read_next(4); + record.delta = kaycm_per_atm2hz_per_pa(data.read_next(8)); + data.skip(79); + record.g_upp = data.read_next(7); + record.g_low = data.read_next(7); + + if (not data.end_of_string()) { + const std::string_view remainder{data.it + 1, data.end}; + const std::string_view::const_iterator space = + std::ranges::find_if(remainder, nonstd::isspace); + ARTS_USER_ERROR_IF(space == remainder.end(), + "Failed to parse HITRAN Quantum numbers:\n\n{}", + remainder); + + record.qid.val = Quantum::Number::from_hitran( + std::string_view{remainder.begin(), space}, + std::string_view{space + 1, remainder.end()}); + } + + return true; +} catch (std::exception& e) { + ARTS_USER_ERROR( + "Internal error:\n\n{}\n\nFailed to read HITRAN line record:\n\n{}", + e.what(), + linedata); +} + +hitran_data read_hitran_par(std::istream& file, + const Vector2& frequency_range) { + hitran_data out; + + std::string linedata; + bool last_ok = true; + + while (std::getline(file, linedata)) { + last_ok = read_hitran_par_record(last_ok ? out.emplace_back() : out.back(), + linedata, + frequency_range[0]); + + if (last_ok and out.back().f0 > frequency_range[1]) { + out.pop_back(); + break; + } + } + + if (not last_ok) out.pop_back(); + + return out; +} + +hitran_data read_hitran_par(std::istream&& file, + const Vector2& frequency_range) { + return read_hitran_par(file, frequency_range); +} + +line hitran_record::from(HitranLineStrengthOption ls, + QuantumNumberLocalState&& local, + bool do_zeeman) const { + line l; + l.a = A; + l.f0 = f0; + l.e0 = E; + l.gu = g_upp; + l.gl = g_low; + + switch (ls) { + case HitranLineStrengthOption::S: + if (g_upp == 0.0) { + l.gu = -1.0; + l.gl = -1.0; + } + + l.a = l.hitran_a(S, qid.Isotopologue()); + + break; + case HitranLineStrengthOption::A: break; + } + + ARTS_USER_ERROR_IF( + not std::isnormal(l.a) or not std::isnormal(l.gu), + "Invalid Einstein coefficient {} or gu {} for full HITRAN RECORD: {}", + l.a, + l.gu, + *this) + + if (do_zeeman) { + l.z = lbl::zeeman::GetAdvancedModel(qid); + } else { + l.z = {}; + } + l.z.on = false; + + // Set the line shape + l.ls = line_shape::model{}; + l.ls.T0 = 296.0; + l.ls.one_by_one = false; + l.ls.single_models.resize(2); + + l.ls.single_models[0].species = qid.Species(); + l.ls.single_models[0].data.emplace_back( + LineShapeModelVariable::G0, + lbl::temperature::data{LineShapeModelType::T1, Vector{gamma_self, n}}); + + l.ls.single_models[1].species = SpeciesEnum::Bath; + l.ls.single_models[1].data.emplace_back( + LineShapeModelVariable::G0, + lbl::temperature::data{LineShapeModelType::T1, Vector{gamma_air, n}}); + + if (delta != 0) { + l.ls.single_models[0].data.emplace_back( + LineShapeModelVariable::D0, + lbl::temperature::data{LineShapeModelType::T0, Vector{delta}}); + l.ls.single_models[1].data.emplace_back( + LineShapeModelVariable::D0, + lbl::temperature::data{LineShapeModelType::T0, Vector{delta}}); + } + + l.qn = std::move(local); + + return l; +} +} // namespace lbl \ No newline at end of file diff --git a/src/core/lbl/lbl_hitran.h b/src/core/lbl/lbl_hitran.h new file mode 100644 index 0000000000..ff8dc45275 --- /dev/null +++ b/src/core/lbl/lbl_hitran.h @@ -0,0 +1,75 @@ +#pragma once + +#include +#include +#include +#include + +namespace lbl { +struct hitran_record { + QuantumIdentifier qid; + Numeric f0; + Numeric S; + Numeric A; + Numeric gamma_air; + Numeric gamma_self; + Numeric E; + Numeric n; + Numeric delta; + Numeric g_upp; + Numeric g_low; + + [[nodiscard]] line from(HitranLineStrengthOption ls, + QuantumNumberLocalState&& local, + bool do_zeeman) const; +}; +using hitran_data = std::vector; + +hitran_data read_hitran_par(std::istream& file, const Vector2& frequency_range); +hitran_data read_hitran_par(std::istream&& file, + const Vector2& frequency_range); +} // namespace lbl + +template <> +struct std::formatter { + format_tags tags; + + [[nodiscard]] constexpr auto& inner_fmt() { return *this; } + [[nodiscard]] constexpr auto& inner_fmt() const { return *this; } + + constexpr std::format_parse_context::iterator parse( + std::format_parse_context& ctx) { + return parse_format_tags(tags, ctx); + } + + template + FmtContext::iterator format(const lbl::hitran_record& v, + FmtContext& ctx) const { + const auto sep = tags.sep(); + tags.add_if_bracket(ctx, '['); + tags.format(ctx, + v.qid, + sep, + v.f0, + sep, + v.S, + sep, + v.A, + sep, + v.gamma_air, + sep, + v.gamma_self, + sep, + v.E, + sep, + v.n, + sep, + v.delta, + sep, + v.g_upp, + sep, + v.g_low); + tags.add_if_bracket(ctx, ']'); + return ctx.out(); + } +}; diff --git a/src/core/lbl/lbl_lineshape.cpp b/src/core/lbl/lbl_lineshape.cpp index 62f837e4ba..200fb4a127 100644 --- a/src/core/lbl/lbl_lineshape.cpp +++ b/src/core/lbl/lbl_lineshape.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "debug.h" #include "lbl_data.h" @@ -17,26 +18,24 @@ namespace lbl { std::unique_ptr init_voigt_lte_data( const ExhaustiveConstVectorView& f_grid, - const std::span& bnds, + const AbsorptionBands& bnds, const AtmPoint& atm, const Vector2 los) { if (std::ranges::any_of( - bnds, - [](auto& bnd) { return bnd.lineshape == LineByLineLineshape::VP_LTE; }, - &band::data)) + bnds |std::ranges::views::values, + [](auto& bnd) { return bnd.lineshape == LineByLineLineshape::VP_LTE; })) return std::make_unique( f_grid, atm, los, zeeman::pol::no); return nullptr; } std::unique_ptr init_voigt_lte_mirrored_data( const ExhaustiveConstVectorView& f_grid, - const std::span& bnds, + const AbsorptionBands& bnds, const AtmPoint& atm, const Vector2 los) { if (std::ranges::any_of( - bnds, - [](auto& bnd) { return bnd.lineshape == LineByLineLineshape::VP_LTE_MIRROR; }, - &band::data)) + bnds|std::ranges::views::values, + [](auto& bnd) { return bnd.lineshape == LineByLineLineshape::VP_LTE_MIRROR; })) return std::make_unique( f_grid, atm, los, zeeman::pol::no); return nullptr; @@ -44,13 +43,12 @@ std::unique_ptr init_voigt_lte_mirrored_data( std::unique_ptr init_voigt_line_nlte_data( const ExhaustiveConstVectorView& f_grid, - const std::span& bnds, + const AbsorptionBands& bnds, const AtmPoint& atm, const Vector2 los) { if (std::ranges::any_of( - bnds, - [](auto& bnd) { return bnd.lineshape == LineByLineLineshape::VP_LINE_NLTE; }, - &band::data)) + bnds|std::ranges::views::values, + [](auto& bnd) { return bnd.lineshape == LineByLineLineshape::VP_LINE_NLTE; })) return std::make_unique( f_grid, atm, los, zeeman::pol::no); return nullptr; @@ -58,16 +56,15 @@ std::unique_ptr init_voigt_line_nlte_data( std::unique_ptr init_voigt_ecs_data( const ExhaustiveConstVectorView& f_grid, - const std::span& bnds, + const AbsorptionBands& bnds, const AtmPoint& atm, const Vector2 los) { if (std::ranges::any_of( - bnds, + bnds|std::ranges::views::values, [](auto& bnd) { return bnd.lineshape == LineByLineLineshape::VP_ECS_MAKAROV or bnd.lineshape == LineByLineLineshape::VP_ECS_HARTMANN; - }, - &band::data)) + })) return std::make_unique( f_grid, atm, los, zeeman::pol::no); return nullptr; @@ -80,7 +77,7 @@ void calculate(PropmatVectorView pm, const ExhaustiveConstVectorView& f_grid, const Jacobian::Targets& jacobian_targets, const SpeciesEnum species, - const std::span& bnds, + const AbsorptionBands& bnds, const linemixing::isot_map& ecs_data, const AtmPoint& atm, const Vector2 los, diff --git a/src/core/lbl/lbl_lineshape.h b/src/core/lbl/lbl_lineshape.h index 63c889ef57..3e512faf3b 100644 --- a/src/core/lbl/lbl_lineshape.h +++ b/src/core/lbl/lbl_lineshape.h @@ -15,7 +15,7 @@ void calculate(PropmatVectorView pm, const ExhaustiveConstVectorView& f_grid, const Jacobian::Targets& jacobian_targets, const SpeciesEnum species, - const std::span& bnds, + const AbsorptionBands& bnds, const linemixing::isot_map& ecs_data, const AtmPoint& atm, const Vector2 los, diff --git a/src/core/lbl/lbl_lineshape_model.h b/src/core/lbl/lbl_lineshape_model.h index 5f16bf4797..1e49d4d5be 100644 --- a/src/core/lbl/lbl_lineshape_model.h +++ b/src/core/lbl/lbl_lineshape_model.h @@ -19,6 +19,12 @@ struct species_model { std::vector> data{}; + //! Removes the variables from the model. + template + std::vector>::size_type remove_variables() { + return (std::erase_if(data, [v = V](const auto& x) { return x.first == v; }) + ...); + } + #define VARIABLE(name) \ [[nodiscard]] Numeric name(Numeric T0, Numeric T, Numeric P) const diff --git a/src/core/lbl/lbl_zeeman.cpp b/src/core/lbl/lbl_zeeman.cpp index b26bb8c64d..cb2b3f03ac 100644 --- a/src/core/lbl/lbl_zeeman.cpp +++ b/src/core/lbl/lbl_zeeman.cpp @@ -130,9 +130,9 @@ data GetAdvancedModel(const QuantumIdentifier& qid) { if (qid.Isotopologue() == "O2-66"_isot) { if (qid.val.has(QuantumNumberType::J, QuantumNumberType::N, - QuantumNumberType::v1)) { - if (qid.val[QuantumNumberType::v1].low() == 0 and - qid.val[QuantumNumberType::v1].upp() == 0) { + QuantumNumberType::v)) { + if (qid.val[QuantumNumberType::v].low() == 0 and + qid.val[QuantumNumberType::v].upp() == 0) { constexpr Numeric GS = 2.002084; constexpr Numeric GLE = 2.77e-3; constexpr Numeric GR = -1.16e-4; @@ -163,9 +163,9 @@ data GetAdvancedModel(const QuantumIdentifier& qid) { } else if (qid.Isotopologue() == "O2-68"_isot) { if (qid.val.has(QuantumNumberType::J, QuantumNumberType::N, - QuantumNumberType::v1)) { - if (qid.val[QuantumNumberType::v1].low() == 0 and - qid.val[QuantumNumberType::v1].upp() == 0) { + QuantumNumberType::v)) { + if (qid.val[QuantumNumberType::v].low() == 0 and + qid.val[QuantumNumberType::v].upp() == 0) { constexpr Numeric GS = 2.002025; constexpr Numeric GLE = 2.813e-3; constexpr Numeric GR = -1.26e-4; diff --git a/src/core/matpack/matpack_concepts.h b/src/core/matpack/matpack_concepts.h index 3094bb8fc3..e4290e612b 100644 --- a/src/core/matpack/matpack_concepts.h +++ b/src/core/matpack/matpack_concepts.h @@ -63,6 +63,27 @@ concept is_always_exhaustive_v = std::remove_cvref_t::is_always_exhaustive(); template concept arithmetic = std::is_arithmetic_v>; +//! The two types are arithmetic together +template +concept arithmetic_addition_with = requires(T a, U b) { + { a + b } -> std::convertible_to; +}; + +template +concept arithmetic_subtraction_with = requires(T a, U b) { + { a - b } -> std::convertible_to; +}; + +template +concept arithmetic_multiplication_with = requires(T a, U b) { + { a * b } -> std::convertible_to; +}; + +template +concept arithmetic_division_with = requires(T a, U b) { + { a / b } -> std::convertible_to; +}; + //! Checks that the type is a pure arithmetic complex type template concept complex_type = diff --git a/src/core/matpack/matpack_view.h b/src/core/matpack/matpack_view.h index d6d261ceea..5a1f5afae8 100644 --- a/src/core/matpack/matpack_view.h +++ b/src/core/matpack/matpack_view.h @@ -6,8 +6,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -1111,8 +1111,8 @@ class matpack_view { return *this; } - template - constexpr matpack_view& operator+=(const matpack_view& x) + template U, bool c, bool s> + constexpr matpack_view& operator+=(const matpack_view& x) requires(not constant) { ARTS_ASSERT(shape() == x.shape(), "{} vs {}", shape(), x.shape()) @@ -1126,8 +1126,15 @@ class matpack_view { [](auto a, auto b) { return a + b; }); return *this; } - template - constexpr matpack_view& operator-=(const matpack_view& x) + template U> + constexpr matpack_view& operator+=(const matpack_data& x) + requires(not constant) + { + *this += x.view; + return *this; + } + template U, bool c, bool s> + constexpr matpack_view& operator-=(const matpack_view& x) requires(not constant) { ARTS_ASSERT(shape() == x.shape(), "{} vs {}", shape(), x.shape()) @@ -1141,8 +1148,15 @@ class matpack_view { [](auto a, auto b) { return a - b; }); return *this; } - template - constexpr matpack_view& operator*=(const matpack_view& x) + template U> + constexpr matpack_view& operator-=(const matpack_data& x) + requires(not constant) + { + *this -= x.view; + return *this; + } + template U, bool c, bool s> + constexpr matpack_view& operator*=(const matpack_view& x) requires(not constant) { ARTS_ASSERT(shape() == x.shape(), "{} vs {}", shape(), x.shape()) @@ -1156,8 +1170,15 @@ class matpack_view { [](auto a, auto b) { return a * b; }); return *this; } - template - constexpr matpack_view& operator/=(const matpack_view& x) + template U> + constexpr matpack_view& operator*=(const matpack_data& x) + requires(not constant) + { + *this *= x.view; + return *this; + } + template U, bool c, bool s> + constexpr matpack_view& operator/=(const matpack_view& x) requires(not constant) { ARTS_ASSERT(shape() == x.shape(), "{} vs {}", shape(), x.shape()) @@ -1171,6 +1192,13 @@ class matpack_view { [](auto a, auto b) { return a / b; }); return *this; } + template U> + constexpr matpack_view& operator/=(const matpack_data& x) + requires(not constant) + { + *this /= x.view; + return *this; + } constexpr matpack_view& operator+=(const data_t& x) requires(not constant) { diff --git a/src/core/matpack/rational.h b/src/core/matpack/rational.h index 46fd1e9983..e9719ac846 100644 --- a/src/core/matpack/rational.h +++ b/src/core/matpack/rational.h @@ -15,8 +15,8 @@ #include #include -#include #include +#include using std::gcd; @@ -940,8 +940,8 @@ struct std::formatter { template FmtContext::iterator format(const Rational& v, FmtContext& ctx) const { - const std::string_view div = tags.comma ? ","sv : "/"sv; - return std::format_to(ctx.out(), "{}{}{}", v.numer, div, v.denom); + if (v.denom == 1) return tags.format(ctx, v.numer); + return tags.format(ctx, v.numer, '/', v.denom); } }; diff --git a/src/core/options/arts_options.cc b/src/core/options/arts_options.cc index 320cd3c831..123c05151b 100644 --- a/src/core/options/arts_options.cc +++ b/src/core/options/arts_options.cc @@ -14,6 +14,21 @@ using Value = std::vector; std::vector internal_options_create() { std::vector opts; + opts.emplace_back(EnumeratedOption{ + .name = "HitranLineStrengthOption", + .desc = + R"(The way line strength is computed in ARTS when reading Hitran data. + +ARTS uses Einstein A-coefficients to compute the line strength. Hitran provides +both the line strength and the Einstein A-coefficient. There is a 1-to-1 conversion +between these two. However, as with all data, the numbers might differ slightly even +if good cases, so we have provide this selection mechanism to make them match. +)", + .values_and_desc = { + Value{"S", "s", "strenght", "s0", "S0", "Line strength"}, + Value{"A", "a", "einstein", "ein", "A0", "Absorption intensity"}, + }}); + opts.emplace_back(EnumeratedOption{ .name = "TimeStepType", .desc = @@ -60,20 +75,20 @@ std::vector internal_options_create() { Value{"wind_w", "Wind field W-component [m/s]"}, }}); - opts.emplace_back( - EnumeratedOption{.name = "AtmKey", - .desc = R"(A key to identify an atmospheric property. + opts.emplace_back(EnumeratedOption{ + .name = "AtmKey", + .desc = R"(A key to identify an atmospheric property. )", - .values_and_desc = { - Value{"t", "temperature", "Temperature [K]"}, - Value{"p", "pressure", "Pressure [Pa]"}, - Value{"wind_u", "WindU", "Wind field U-component [m/s]"}, - Value{"wind_v", "WindV", "Wind field V-component [m/s]"}, - Value{"wind_w", "WindW", "Wind field W-component [m/s]"}, - Value{"mag_u", "MagU", "Magnetic field U-component [T]"}, - Value{"mag_v", "MagV", "Magnetic field V-component [T]"}, - Value{"mag_w", "MagW", "Magnetic field W-component [T]"}, - }}); + .values_and_desc = { + Value{"t", "temperature", "Temperature [K]"}, + Value{"p", "pressure", "Pressure [Pa]"}, + Value{"wind_u", "WindU", "Wind field U-component [m/s]"}, + Value{"wind_v", "WindV", "Wind field V-component [m/s]"}, + Value{"wind_w", "WindW", "Wind field W-component [m/s]"}, + Value{"mag_u", "MagU", "Magnetic field U-component [T]"}, + Value{"mag_v", "MagV", "Magnetic field V-component [T]"}, + Value{"mag_w", "MagW", "Magnetic field W-component [T]"}, + }}); opts.emplace_back(EnumeratedOption{ .name = "InterpolationExtrapolation", @@ -1047,7 +1062,8 @@ radiation). opts.emplace_back(EnumeratedOption{ .name = "ParticulateProperty", - .desc = R"(Numerical properties used to numerically represent particle populations. + .desc = + R"(Numerical properties used to numerically represent particle populations. )", .values_and_desc = {Value{"MassDensity", "m", "Mass density in kg/m^{-3}"}, @@ -1092,12 +1108,12 @@ std::string EnumeratedOption::docs() const { const auto n = values_and_desc.front().size(); - os << "Group name: " << '"'<< name<< '"' << "\n\n" + os << "Group name: " << '"' << name << '"' << "\n\n" << desc << "\n\nValid options:\n\n"; for (auto& v : values_and_desc) { std::string_view x = "- "; for (auto& s : v | std::views::take(n - 1)) { - os << std::exchange(x, " or ") << "``" << '"'<< s<< '"' << "``"; + os << std::exchange(x, " or ") << "``" << '"' << s << '"' << "``"; } os << ": " << v.back() << '\n'; } diff --git a/src/core/quantum/quantum_numbers.cc b/src/core/quantum/quantum_numbers.cc index 84d255db6d..02022b03e0 100644 --- a/src/core/quantum/quantum_numbers.cc +++ b/src/core/quantum/quantum_numbers.cc @@ -1003,7 +1003,7 @@ std::strong_ordering ValueList::operator<=>(const ValueList& v) const { const std::size_t n = std::min(values.size(), v.values.size()); if (auto f = values.size() <=> v.values.size(); - f == std::strong_ordering::equal) { + f != std::strong_ordering::equal) { return f; } diff --git a/src/core/quantum/quantum_numbers.h b/src/core/quantum/quantum_numbers.h index 1b2c88a154..3a47aea8d6 100644 --- a/src/core/quantum/quantum_numbers.h +++ b/src/core/quantum/quantum_numbers.h @@ -184,8 +184,8 @@ struct TwoLevelValueHolder { * @param s Some view of a string * @return constexpr ValueDescription */ -[[nodiscard]] ValueDescription value_holder(std::string_view s, - QuantumNumberType t) ; +[[nodiscard]] ValueDescription value_holder(std::string_view s, + QuantumNumberType t); //! Struct that converts to bool automatically but allows checking both energy levels matching status struct LevelMatch { @@ -203,28 +203,28 @@ struct LevelMatch { * @param s Any set of characters * @return constexpr Index The number of space-separated items in s */ - Index count_items(std::string_view s) noexcept; +Index count_items(std::string_view s) noexcept; /** Strips spaces at the end of x before returning it * * @param x any string view * @return constexpr std::string_view stripped */ - std::string_view rstrip(std::string_view x); +std::string_view rstrip(std::string_view x); /** Strips spaces at the beginning x before returning it * * @param x any string view * @return constexpr std::string_view stripped */ - std::string_view lstrip(std::string_view x); +std::string_view lstrip(std::string_view x); /** Strips spaces at the beginning and end of x before returning it * * @param x any string view * @return constexpr std::string_view stripped */ - std::string_view strip(std::string_view x); +std::string_view strip(std::string_view x); /** Get a view of a number of space-separated items from the list * @@ -239,29 +239,30 @@ struct LevelMatch { * @param n The length of the list of items * @return constexpr std::string_view */ -std::string_view items(std::string_view s, std::size_t i, std::size_t n=1) noexcept; +std::string_view items(std::string_view s, + std::size_t i, + std::size_t n = 1) noexcept; //! A complete quantum number value with type information struct Value { QuantumNumberType type; TwoLevelValueHolder qn; - std::strong_ordering operator<=>(const Value& v) const; + std::strong_ordering operator<=>(const Value& v) const; - Value(QuantumNumberType t = QuantumNumberType::term) - : type(t), qn(type) {} + Value(QuantumNumberType t = QuantumNumberType::term) : type(t), qn(type) {} Value(const Value&) = default; Value(Value&&) noexcept = default; Value& operator=(const Value&) = default; Value& operator=(Value&&) noexcept = default; - Value(QuantumNumberType t, Rational upp_, Rational low_); + Value(QuantumNumberType t, Rational upp_, Rational low_); //! Default constructor from some string of values - Value(std::string_view s); + Value(std::string_view s); //! Returns the upper quantum number rational if it exists or an undefined - [[nodiscard]] Rational upp() const noexcept; + [[nodiscard]] Rational upp() const noexcept; //! Returns the lower quantum number rational if it exists or an undefined [[nodiscard]] Rational low() const noexcept; @@ -316,13 +317,13 @@ struct CheckMatch { }; //! Updates old by what a new check says it should be - CheckValue update(CheckValue val, CheckValue res) noexcept ; +CheckValue update(CheckValue val, CheckValue res) noexcept; //! Updates old by what a new check says it should be - CheckMatch update(CheckMatch val, CheckValue res) noexcept ; +CheckMatch update(CheckMatch val, CheckValue res) noexcept; //! Updates old by what a new check says it should be - CheckMatch update(CheckMatch val, CheckMatch res) noexcept; +CheckMatch update(CheckMatch val, CheckMatch res) noexcept; /** Checks if an array of types is sorted * @@ -385,29 +386,29 @@ struct ValueList { void finalize(); //! Return number of quantum numbers - [[nodiscard]] Index size() const { return values.size(); } + [[nodiscard]] Index size() const { return values.size(); } //! Finds whether two ValueList describe completely different sets of quantum numbers (e.g., local vs global) - [[nodiscard]] bool perpendicular(const ValueList& that) const ; + [[nodiscard]] bool perpendicular(const ValueList& that) const; //! Returns whether all the Types are part of the list, the types must be sorted - template - [[nodiscard]] bool has(Types... ts) const { - static_assert(sizeof...(Types) > 0); - - ARTS_ASSERT(is_sorted(std::array{QuantumNumberType(ts)...})) - - auto ptr = cbegin(); - auto end = cend(); - for (QuantumNumberType t : {QuantumNumberType(ts)...}) { - ptr = std::find_if(ptr, end, [t](auto& x) { return x.type == t; }); - if (ptr == end) return false; + template + [[nodiscard]] bool has(Types... ts) const + requires(N > Size{0}) + { + if constexpr (N > 1) { + return (has(ts) and ...); + } else { + return cend() != + std::find_if(cbegin(), + cend(), + [t = std::array{QuantumNumberType(ts)...}[0]]( + const Value& v) { return v.type == t; }); } - return true; } //! Returns the value of the Type (assumes it exist) - const Value& operator[](QuantumNumberType t) const ; + const Value& operator[](QuantumNumberType t) const; //! Legacy manipulation operator access Value& operator[](Index i) { return values.at(i); } @@ -425,8 +426,7 @@ struct ValueList { void set(Index i, std::string_view upp, std::string_view low); //! Returns upper and lower matching status - [[nodiscard]] CheckMatch check_match(const ValueList& other) const - ; + [[nodiscard]] CheckMatch check_match(const ValueList& other) const; //! ouptut stream if all values friend std::ostream& operator<<(std::ostream& os, const ValueList& vl); @@ -454,7 +454,7 @@ struct LocalState { ValueList val{}; std::strong_ordering operator<=>(const LocalState& l) const; - bool operator==(const LocalState& l) const ; + bool operator==(const LocalState& l) const; bool operator!=(const LocalState& l) const; LocalState() = default; @@ -546,9 +546,9 @@ struct StateMatch { StateMatch(const GlobalState& target, const GlobalState& key); //! It is of the desired type if it is less than the value, bar None - bool operator==(StateMatchType x) const noexcept ; + bool operator==(StateMatchType x) const noexcept; - bool operator!=(StateMatchType x) const noexcept ; + bool operator!=(StateMatchType x) const noexcept; }; //! VAMDC classes of quantum number cases @@ -577,7 +577,7 @@ enum class VAMDC : char { * @return true If it can belong to the VAMDC type * @return false If it cannot belong to the VAMDC type */ -bool vamdcCheck(const ValueList& l, VAMDC type) ; +bool vamdcCheck(const ValueList& l, VAMDC type); //! A default state of global quantum numbers [[maybe_unused]] inline constexpr std::array global_types{ @@ -654,6 +654,41 @@ bool vamdcCheck(const ValueList& l, VAMDC type) ; QuantumNumberType::Kc, QuantumNumberType::N}; +/** Selects the global state + * + * @param qns Quantum numbers to select, must just be iterable for template to work + * @param qid State to select from + * @return State of all qns in qid + */ +template +[[nodiscard]] GlobalState global_state(const list_type& qns, + const GlobalState& qid) { + GlobalState out(qid.Isotopologue()); + for (auto qn : qns) { + if (qid.val.has(qn)) { + out.val.set(qid.val[qn]); + } + } + return out; +} +/** Selects the global state + * + * @param qns Quantum numbers to select, must just be iterable for template to work + * @param qid State to select from + * @return State of all qns in qid + */ +template +[[nodiscard]] LocalState local_state(const list_type& qns, + const GlobalState& qid) { + LocalState out; + for (auto qn : qns) { + if (qid.val.has(qn)) { + out.val.add(qid.val[qn]); + } + } + return out; +} + std::ostream& operator<<(std::ostream& os, const Array& a); } // namespace Quantum::Number @@ -796,11 +831,7 @@ struct std::formatter { template FmtContext::iterator format(const QuantumIdentifier& v, FmtContext& ctx) const { - tags.add_if_bracket(ctx, '['); - tags.format(ctx, v.Isotopologue().FullName(), tags.sep(), v.val); - tags.add_if_bracket(ctx, ']'); - - return ctx.out(); + return format_to(ctx.out(), "{}{} {}{}"sv, tags.quote(), v.Isotopologue().FullName(), v.val, tags.quote()); } }; diff --git a/src/m_abs.cc b/src/m_abs.cc index d7166be5c0..c72d8fd83c 100644 --- a/src/m_abs.cc +++ b/src/m_abs.cc @@ -521,7 +521,7 @@ void propagation_matrix_agendaAuto( // Workspace reference: Agenda& propagation_matrix_agenda, // WS Input: const ArrayOfArrayOfSpeciesTag& absorption_species, - const ArrayOfAbsorptionBand& absorption_bands, + const AbsorptionBands& absorption_bands, // WS Generic Input: const Numeric& T_extrapolfac, const Numeric& force_p, diff --git a/src/m_absorptionlines.cc b/src/m_absorptionlines.cc index d3b688b1da..d459e22974 100644 --- a/src/m_absorptionlines.cc +++ b/src/m_absorptionlines.cc @@ -165,23 +165,6 @@ void merge_local_lines(ArrayOfAbsorptionLines& abs_lines, } } -/** Selects the global quantum numbers - * - * @param qns Quantum numbers to select - * @param qid Identifeier to select from - * @return QuantumIdentifier of all qns in qid - */ -QuantumIdentifier global_quantumidentifier(const Array& qns, - const QuantumIdentifier& qid) { - QuantumIdentifier out(qid.Isotopologue()); - for (auto qn : qns) { - if (qid.val.has(qn)) { - out.val.set(qid.val[qn]); - } - } - return out; -} - /** Get a list of quantum numbers from a string * * @param[in] qnstr A string such as "J N v1" @@ -323,7 +306,7 @@ void ReadArrayOfARTSCAT(ArrayOfAbsorptionLines& abs_lines, // Get the global quantum number identifier const QuantumIdentifier global_qid = - global_quantumidentifier(global_nums, sline.quantumidentity); + Quantum::Number::global_state(global_nums, sline.quantumidentity); // Get local quantum numbers into the line for (auto qn : local_nums) { @@ -455,7 +438,7 @@ void ReadARTSCAT(ArrayOfAbsorptionLines& abs_lines, // Get the global quantum number identifier const QuantumIdentifier global_qid = - global_quantumidentifier(global_nums, sline.quantumidentity); + Quantum::Number::global_state(global_nums, sline.quantumidentity); // Get local quantum numbers into the line for (auto qn : local_nums) { @@ -626,7 +609,7 @@ void ReadHITRAN(ArrayOfAbsorptionLines& abs_lines, // Get the global quantum number identifier const QuantumIdentifier global_qid = - global_quantumidentifier(global_nums, sline.quantumidentity); + Quantum::Number::global_state(global_nums, sline.quantumidentity); // Get local quantum numbers into the line for (auto qn : local_nums) { diff --git a/src/m_atm.cc b/src/m_atm.cc index a0a7621762..92cc05a957 100644 --- a/src/m_atm.cc +++ b/src/m_atm.cc @@ -178,13 +178,12 @@ void atmospheric_fieldAppendBaseData(AtmField &atmospheric_field, } break; - case MissingFieldComponentError::Ignore: - break; + case MissingFieldComponentError::Ignore: break; } } void keysSpecies(std::unordered_map keys, - const ArrayOfAbsorptionBand &absorption_bands) { + const AbsorptionBands &absorption_bands) { if (absorption_bands.empty()) return; for (auto &[key, value] : absorption_bands) { @@ -200,7 +199,7 @@ void keysSpecies(std::unordered_map keys, void atmospheric_fieldAppendLineSpeciesData( AtmField &atmospheric_field, - const ArrayOfAbsorptionBand &absorption_bands, + const AbsorptionBands &absorption_bands, const String &basename, const String &extrapolation, const Index &missing_is_zero, @@ -219,7 +218,7 @@ void atmospheric_fieldAppendLineSpeciesData( } void keysIsotopologue(std::unordered_map keys, - const ArrayOfAbsorptionBand &absorption_bands) { + const AbsorptionBands &absorption_bands) { if (absorption_bands.empty()) return; for (auto &[key, value] : absorption_bands) { @@ -229,7 +228,7 @@ void keysIsotopologue(std::unordered_map keys, void atmospheric_fieldAppendLineIsotopologueData( AtmField &atmospheric_field, - const ArrayOfAbsorptionBand &absorption_bands, + const AbsorptionBands &absorption_bands, const String &basename, const String &extrapolation, const Index &missing_is_zero, @@ -252,7 +251,7 @@ void atmospheric_fieldAppendLineIsotopologueData( } void keysNLTE(std::unordered_map keys, - const ArrayOfAbsorptionBand &absorption_bands) { + const AbsorptionBands &absorption_bands) { if (absorption_bands.empty()) return; for (auto &[key, value] : absorption_bands) { @@ -263,7 +262,7 @@ void keysNLTE(std::unordered_map keys, void atmospheric_fieldAppendLineLevelData( AtmField &atmospheric_field, - const ArrayOfAbsorptionBand &absorption_bands, + const AbsorptionBands &absorption_bands, const String &basename, const String &extrapolation, const Index &missing_is_zero, @@ -435,7 +434,7 @@ void atmospheric_fieldAppendAbsorptionData(const Workspace &ws, if (const String lines_str = "absorption_bands"; ws.wsv_and_contains(lines_str)) { - using lines_t = ArrayOfAbsorptionBand; + using lines_t = AbsorptionBands; const auto &data = ws.get(lines_str); keysSpecies(keys, data); diff --git a/src/m_cat.cc b/src/m_cat.cc index 0c85158f24..24e6fb0ff8 100644 --- a/src/m_cat.cc +++ b/src/m_cat.cc @@ -5,7 +5,7 @@ void ReadCatalogData( PredefinedModelData& absorption_predefined_model_data, ArrayOfXsecRecord& absorption_xsec_fit_data, ArrayOfCIARecord& absorption_cia_data, - ArrayOfAbsorptionBand& absorption_bands, + AbsorptionBands& absorption_bands, const ArrayOfArrayOfSpeciesTag& absorption_species, const String& basename) try { absorption_bandsReadSpeciesSplitCatalog( diff --git a/src/m_covmat.cc b/src/m_covmat.cc index 165638dbe8..aad910c7d4 100644 --- a/src/m_covmat.cc +++ b/src/m_covmat.cc @@ -285,7 +285,7 @@ void RetrievalFinalizeDiagonal(CovarianceMatrix& model_state_covariance_matrix, covariance_matrix_diagonal_blocks, const AtmField& atmospheric_field, const SurfaceField& surface_field, - const ArrayOfAbsorptionBand& absorption_bands) { + const AbsorptionBands& absorption_bands) { jacobian_targetsFinalize( jacobian_targets, atmospheric_field, surface_field, absorption_bands); diff --git a/src/m_fwd.cc b/src/m_fwd.cc index 8ee3173a3d..c328223373 100644 --- a/src/m_fwd.cc +++ b/src/m_fwd.cc @@ -29,7 +29,7 @@ void spectral_radiance_operatorClearsky1D( const Index& cia_robust) { ARTS_USER_ERROR_IF(altitude_grid.size() < 2, "Must have some type of path") - using lines_t = ArrayOfAbsorptionBand; + using lines_t = AbsorptionBands; using cia_t = ArrayOfCIARecord; using xsec_t = ArrayOfXsecRecord; using predef_t = PredefinedModelData; diff --git a/src/m_jactargets.cc b/src/m_jactargets.cc index 0792d9ed37..2dc7ddd6c1 100644 --- a/src/m_jactargets.cc +++ b/src/m_jactargets.cc @@ -18,7 +18,7 @@ void jacobian_targetsInit(JacobianTargets& jacobian_targets) { void jacobian_targetsFinalize(JacobianTargets& jacobian_targets, const AtmField& atmospheric_field, const SurfaceField& surface_field, - const ArrayOfAbsorptionBand& absorption_bands) { + const AbsorptionBands& absorption_bands) { jacobian_targets.finalize(atmospheric_field, surface_field, absorption_bands); } diff --git a/src/m_lbl.cc b/src/m_lbl.cc index 3975d37da8..f77f5e3b77 100644 --- a/src/m_lbl.cc +++ b/src/m_lbl.cc @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -17,15 +18,18 @@ #include "artstime.h" #include "configtypes.h" #include "debug.h" +#include "enumsLineByLineCutoffType.h" #include "isotopologues.h" #include "jacobian.h" #include "lbl_data.h" #include "lbl_lineshape_linemixing.h" #include "lineshapemodel.h" #include "matpack_view.h" +#include "minimize.h" #include "path_point.h" #include "quantum_numbers.h" #include "rtepack.h" +#include "sorting.h" #include "species.h" #include "species_tags.h" #include "xml_io.h" @@ -44,7 +48,7 @@ LineByLineLineshape toLineshape(const LineShapeTypeOld old_ls, ARTS_METHOD_ERROR_CATCH void absorption_bandsFromAbsorbtionLines( - ArrayOfAbsorptionBand& absorption_bands, + AbsorptionBands& absorption_bands, const ArrayOfArrayOfSpeciesTag& absorption_species, const ArrayOfArrayOfAbsorptionLines& abs_lines_per_species) try { ARTS_USER_ERROR_IF(absorption_species.size() != abs_lines_per_species.size(), @@ -52,7 +56,7 @@ void absorption_bandsFromAbsorbtionLines( absorption_species.size(), abs_lines_per_species.size()) - absorption_bands.resize(0); + absorption_bands = {}; absorption_bands.reserve(std::transform_reduce( abs_lines_per_species.begin(), abs_lines_per_species.end(), @@ -62,8 +66,8 @@ void absorption_bandsFromAbsorbtionLines( for (auto& abs_lines : abs_lines_per_species) { for (auto& old_band : abs_lines) { - auto& [new_key, new_band] = absorption_bands.emplace_back(); - new_key = old_band.quantumidentity; + auto& new_band = absorption_bands[old_band.quantumidentity]; + new_band.lineshape = toLineshape(old_band.lineshapetype, old_band.population); new_band.cutoff = to(toString(old_band.cutoff)); @@ -97,8 +101,7 @@ void absorption_bandsFromAbsorbtionLines( const auto new_var = to(strvar); switch (old_value.type) { - case LineShapeTemperatureModelOld::None: - break; + case LineShapeTemperatureModelOld::None: break; case LineShapeTemperatureModelOld::T0: new_line_lsspec.data.emplace_back( new_var, @@ -171,16 +174,9 @@ void absorption_bandsFromAbsorbtionLines( } } - std::ranges::sort( - absorption_bands, - [](const lbl::band_data& lhs, const lbl::band_data& rhs) { - return lhs.size() > rhs.size(); - }, - &lbl::band::data); - - for (auto& bnd : absorption_bands) { - bnd.data.sort(); - for (auto& line : bnd.data.lines) { + for (auto& [key, bnd] : absorption_bands) { + bnd.sort(); + for (auto& line : bnd.lines) { line.ls.clear_zeroes(); } } @@ -197,9 +193,9 @@ toLineshapeAndPolpulation(LineByLineLineshape x) try { } ARTS_METHOD_ERROR_CATCH -void abs_linesFromArrayOfAbsorptionBand( +void abs_linesFromArrayOfAbsorptionBands( ArrayOfAbsorptionLines& abs_lines, - const ArrayOfAbsorptionBand& absorption_bands) try { + const AbsorptionBands& absorption_bands) try { abs_lines.resize(0); abs_lines.reserve(absorption_bands.size()); @@ -289,26 +285,25 @@ std::vector> omp_offset_count(const Index N, return result; } -void absorption_bandsSelectFrequency(ArrayOfAbsorptionBand& absorption_bands, +void absorption_bandsSelectFrequency(AbsorptionBands& absorption_bands, const Numeric& fmin, const Numeric& fmax, const Index& by_line) try { - std::vector to_remove; + std::vector to_remove; - for (Size i = 0; i < absorption_bands.size(); i++) { - if (absorption_bands[i].data.lines.front().f0 > fmax or - absorption_bands[i].data.lines.back().f0 < fmin) { - to_remove.push_back(i); + for (auto& [key, band] : absorption_bands) { + if (band.lines.front().f0 > fmax or band.lines.back().f0 < fmin) { + to_remove.push_back(key); } } - for (auto i : to_remove | std::views::reverse) { - absorption_bands.erase(absorption_bands.begin() + i); + for (const auto& key : to_remove) { + absorption_bands.erase(key); } if (by_line) { - for (auto& band : absorption_bands) { - auto& lines = band.data.lines; + for (auto& [key, band] : absorption_bands) { + auto& lines = band.lines; lines.erase(std::remove_if(lines.begin(), lines.end(), [fmin, fmax](const lbl::line& l) { @@ -320,20 +315,14 @@ void absorption_bandsSelectFrequency(ArrayOfAbsorptionBand& absorption_bands, } ARTS_METHOD_ERROR_CATCH -void absorption_bandsRemoveID(ArrayOfAbsorptionBand& absorption_bands, +void absorption_bandsRemoveID(AbsorptionBands& absorption_bands, const QuantumIdentifier& id) try { - for (Size i = 0; i < absorption_bands.size(); i++) { - if (id == absorption_bands[i].key) { - absorption_bands.erase(absorption_bands.begin() + i); - return; - } - } - ARTS_USER_ERROR("Did not find band of ID: {}", id) + absorption_bands.erase(id); } ARTS_METHOD_ERROR_CATCH void sortedIndexOfBands(ArrayOfIndex& sorted_idxs, - const ArrayOfAbsorptionBand& absorption_bands, + const AbsorptionBands& absorption_bands, const String& criteria, const Index& reverse, const Numeric& temperature) try { @@ -367,8 +356,7 @@ void sortedIndexOfBands(ArrayOfIndex& sorted_idxs, case AbsorptionBandSortingOption::FrontFrequency: if (band.size()) v = band.lines.front().f0; break; - case AbsorptionBandSortingOption::None: - break; + case AbsorptionBandSortingOption::None: break; } } @@ -400,35 +388,35 @@ void sortedIndexOfBands(ArrayOfIndex& sorted_idxs, } ARTS_METHOD_ERROR_CATCH -void absorption_bandsKeepID(ArrayOfAbsorptionBand& absorption_bands, +void absorption_bandsKeepID(AbsorptionBands& absorption_bands, const QuantumIdentifier& id, const Index& line) try { - for (auto& [key, band] : absorption_bands) { - if (id == key) { - absorption_bands = {{key, band}}; - - if (line >= 0) { - ARTS_USER_ERROR_IF(static_cast(line) >= - absorption_bands.front().data.lines.size(), - "Line index out of range: {}", - line) - absorption_bands[0].data.lines = { - absorption_bands.front().data.lines[line]}; - } - - return; + if (auto ptr = absorption_bands.find(id); ptr != absorption_bands.end()) { + const auto& [key, band] = *ptr; + + QuantumIdentifier newk = key; + AbsorptionBand newb = band; + absorption_bands = {}; + AbsorptionBand& data = absorption_bands[newk]; + data = std::move(newb); + + if (line >= 0) { + ARTS_USER_ERROR_IF(static_cast(line) >= band.lines.size(), + "Line index out of range: {}", + line) + data.lines = {data.lines[line]}; } + } else { + absorption_bands = {}; } - - absorption_bands = {}; } ARTS_METHOD_ERROR_CATCH void absorption_bandsReadSpeciesSplitCatalog( - ArrayOfAbsorptionBand& absorption_bands, + AbsorptionBands& absorption_bands, const ArrayOfArrayOfSpeciesTag& absorbtion_species, const String& basename) try { - absorption_bands.resize(0); + absorption_bands = {}; const String my_base = complete_basename(basename); @@ -452,11 +440,9 @@ void absorption_bandsReadSpeciesSplitCatalog( for (auto& isot : isotopologues) { String filename = my_base + isot.FullName() + ".xml"; if (find_xml_file_existence(filename)) { - ArrayOfAbsorptionBand other; + AbsorptionBands other; xml_read_from_file(filename, other); - - absorption_bands.insert(absorption_bands.end(), - std::make_move_iterator(other.begin()), + absorption_bands.insert(std::make_move_iterator(other.begin()), std::make_move_iterator(other.end())); } else { ARTS_USER_ERROR("File {} not found", filename) @@ -465,9 +451,9 @@ void absorption_bandsReadSpeciesSplitCatalog( } ARTS_METHOD_ERROR_CATCH -void absorption_bandsReadSplit(ArrayOfAbsorptionBand& absorption_bands, +void absorption_bandsReadSplit(AbsorptionBands& absorption_bands, const String& dir) try { - absorption_bands.resize(0); + absorption_bands = {}; std::vector paths; std::ranges::copy_if( @@ -478,7 +464,7 @@ void absorption_bandsReadSplit(ArrayOfAbsorptionBand& absorption_bands, }); std::ranges::sort(paths); - std::vector splitbands(paths.size()); + std::vector splitbands(paths.size()); std::string error{}; #pragma omp parallel for schedule(dynamic) @@ -498,16 +484,19 @@ void absorption_bandsReadSplit(ArrayOfAbsorptionBand& absorption_bands, splitbands.end(), Size{0}, std::plus<>{}, - [](const ArrayOfAbsorptionBand& bands) { return bands.size(); })); + [](const AbsorptionBands& bands) { return bands.size(); })); for (auto& bands : splitbands) { - absorption_bands.insert(absorption_bands.end(), - std::make_move_iterator(bands.begin()), - std::make_move_iterator(bands.end())); + for (auto& [key, data] : bands) { + ARTS_USER_ERROR_IF(absorption_bands.find(key) != absorption_bands.end(), + "Read multiple bands of ID: {}", + key) + absorption_bands[key] = std::move(data); + } } } ARTS_METHOD_ERROR_CATCH -void absorption_bandsSaveSplit(const ArrayOfAbsorptionBand& absorption_bands, +void absorption_bandsSaveSplit(const AbsorptionBands& absorption_bands, const String& dir) try { auto create_if_not = [](const std::filesystem::path& path) { if (not std::filesystem::exists(path)) { @@ -518,9 +507,9 @@ void absorption_bandsSaveSplit(const ArrayOfAbsorptionBand& absorption_bands, const auto p = create_if_not(dir); - std::unordered_map isotopologues_data; - for (auto& band : absorption_bands) { - isotopologues_data[band.key.Isotopologue()].push_back(band); + std::unordered_map isotopologues_data; + for (auto& [key, band] : absorption_bands) { + isotopologues_data[key.Isotopologue()][key] = band; } for (const auto& [isot, bands] : isotopologues_data) { @@ -530,7 +519,7 @@ void absorption_bandsSaveSplit(const ArrayOfAbsorptionBand& absorption_bands, } ARTS_METHOD_ERROR_CATCH -void absorption_bandsSetZeeman(ArrayOfAbsorptionBand& absorption_bands, +void absorption_bandsSetZeeman(AbsorptionBands& absorption_bands, const SpeciesIsotope& species, const Numeric& fmin, const Numeric& fmax, @@ -556,7 +545,7 @@ void propagation_matrixAddLines(PropmatVector& pm, const AscendingGrid& f_grid, const JacobianTargets& jacobian_targets, const SpeciesEnum& species, - const ArrayOfAbsorptionBand& absorption_bands, + const AbsorptionBands& absorption_bands, const LinemixingEcsData& ecs_data, const AtmPoint& atm_point, const PropagationPathPoint& path_point, @@ -604,3 +593,197 @@ void propagation_matrixAddLines(PropmatVector& pm, } } ARTS_METHOD_ERROR_CATCH + +void absorption_bandsReadHITRAN(AbsorptionBands& absorption_bands, + const String& filename, + const Vector2& frequency_range, + const String& line_strength_option, + const Index& compute_zeeman_parameters) try { + using namespace Quantum::Number; + + const AbsorptionBand default_band{.lines = {}, + .lineshape = LineByLineLineshape::VP_LTE, + .cutoff = LineByLineCutoffType::None, + .cutoff_value = NAN}; + + const auto selection = to(line_strength_option); + + const bool do_zeeman = static_cast(compute_zeeman_parameters); + + const auto data = + lbl::read_hitran_par(open_input_file(filename), frequency_range); + + absorption_bands = {}; + for (auto& line : data) { + auto [mapped_band, _] = absorption_bands.try_emplace( + global_state(global_types, line.qid), default_band); + + mapped_band->second.lines.emplace_back( + line.from(selection, local_state(local_types, line.qid), do_zeeman)); + } +} +ARTS_METHOD_ERROR_CATCH + +template +const T& get_value(const Key& k, const std::unordered_map& m) { + auto it = m.find(k); + ARTS_USER_ERROR_IF(it == m.end(), "Key not found: {}", k) + return it->second; +} + +template +T& get_value(const Key& k, std::unordered_map& m) { + auto it = m.find(k); + ARTS_USER_ERROR_IF(it == m.end(), "Key not found: {}", k) + return it->second; +} + +void absorption_bandsLineMixingAdaptation( + AbsorptionBands& absorption_bands, + const LinemixingEcsData& ecs_data, + const AtmPoint& atmospheric_point, + const AscendingGrid& temperatures, + const QuantumIdentifier& band_key, + const Index& rosenkranz_fit_order, + const Index& polynomial_fit_degree) try { + ARTS_USER_ERROR_IF(temperatures.empty() or temperatures.front() <= 0.0, + "Need a positive temperature grid") + + ARTS_USER_ERROR_IF(rosenkranz_fit_order != 1 and rosenkranz_fit_order != 2, + "Only 1 or 2 is supported for the ordered fit") + ARTS_USER_ERROR_IF( + polynomial_fit_degree < 1 or + polynomial_fit_degree > temperatures.size() - 1, + "Polynomial degree must be between 1 and the number of temperatures - 1") + + auto& band = get_value(band_key, absorption_bands); + + if (band.lines.empty()) return; + + const auto& orig_front_ls = band.lines.front().ls; + const bool orig_one_by_one = orig_front_ls.one_by_one; + + for (auto& line : band.lines | std::ranges::views::drop(1)) { + ARTS_USER_ERROR_IF( + orig_one_by_one != line.ls.one_by_one, + "Inconsistent line shape models - all lines must be consistently set to use one-by-one or not") + + ARTS_USER_ERROR_IF( + not std::ranges::equal(line.ls.single_models, + orig_front_ls.single_models, + [](const auto& lsl, const auto& lsr) { + return lsl.species == lsr.species; + }), + "Inconsistent line shape models, all lines must have the same broadening species") + + line.ls.one_by_one = true; + } + band.lines.front().ls.one_by_one = true; + + const Size K = band.lines.front().ls.single_models.size(); + const Size M = temperatures.size(); + const Size N = band.lines.size(); + + lbl::voigt::ecs::ComputeData com_data({}, atmospheric_point); + ComplexTensor3 eqv_str(M, K, N), eqv_val(M, K, N); + + lbl::voigt::ecs::equivalent_values(eqv_str, + eqv_val, + com_data, + band_key, + band, + ecs_data.data.at(band_key.Isotopologue()), + atmospheric_point, + temperatures); + + band.sort(LineByLineVariable::f0); + + Matrix lbl_str(M, N); + for (Size i = 0; i < M; i++) { + const Numeric Q = + PartitionFunctions::Q(temperatures[i], band_key.Isotopologue()); + for (Size k = 0; k < N; k++) { + auto& line = band.lines[k]; + lbl_str(i, k) = line.s(temperatures[i], Q) * Math::pow2(Constant::c) / + (8 * Constant::pi); + } + } + + for (auto& line : band.lines) { + for (auto& lsm : line.ls.single_models) { + lsm.remove_variables(); + } + } + + ComplexTensor3 lbl_val(M, K, N); + for (Size i = 0; i < M; i++) { + for (Size j = 0; j < K; j++) { + for (Size k = 0; k < N; k++) { + auto& line = band.lines[k]; + lbl_val(i, j, k) = Complex{ + line.f0 + line.ls.single_models[j].D0(line.ls.T0, + temperatures[i], + atmospheric_point.pressure), + line.ls.single_models[j].G0( + line.ls.T0, temperatures[i], atmospheric_point.pressure)}; + } + } + } + + for (Size i = 0; i < M; i++) { + for (Size j = 0; j < K; j++) { + auto s = eqv_str(i, j, joker); + auto v = eqv_val(i, j, joker); + bubble_sort_by( + [&](auto I1, auto I2) { return v[I1].real() > v[I2].real(); }, s, v); + } + } + + eqv_val -= lbl_val; + + for (Size j = 0; j < K; j++) eqv_str(joker, j, joker) /= lbl_str; + + eqv_val.real() /= Math::pow2(atmospheric_point.pressure); + eqv_val.imag() /= Math::pow3(atmospheric_point.pressure); + + eqv_str.real() -= 1.0; + eqv_str.real() /= Math::pow2(atmospheric_point.pressure); + eqv_str.imag() /= atmospheric_point.pressure; + + for (Size j = 0; j < K; j++) { + for (Size k = 0; k < N; k++) { + if (rosenkranz_fit_order >= 1) { + auto [success_y, yfit] = Minimize::curve_fit( + temperatures, eqv_str(joker, j, k).imag(), polynomial_fit_degree); + ARTS_USER_ERROR_IF( + not success_y, "Cannot fit y for line {} of band {}", k, band_key) + band.lines[k].ls.single_models[j].data.emplace_back( + LineShapeModelVariable::Y, + lbl::temperature::data{LineShapeModelType::POLY, Vector{yfit}}); + } + + if (rosenkranz_fit_order >= 2) { + auto [success_g, gfit] = Minimize::curve_fit( + temperatures, eqv_str(joker, j, k).real(), polynomial_fit_degree); + ARTS_USER_ERROR_IF( + not success_g, "Cannot fit g for line {} of band {}", k, band_key) + band.lines[k].ls.single_models[j].data.emplace_back( + LineShapeModelVariable::G, + lbl::temperature::data{LineShapeModelType::POLY, Vector{gfit}}); + + auto [success_d, dfit] = Minimize::curve_fit( + temperatures, eqv_val(joker, j, k).real(), polynomial_fit_degree); + ARTS_USER_ERROR_IF( + not success_d, "Cannot fit dv for line {} of band {}", k, band_key) + band.lines[k].ls.single_models[j].data.emplace_back( + LineShapeModelVariable::DV, + lbl::temperature::data{LineShapeModelType::POLY, Vector{dfit}}); + } + } + } + + for (auto& line : band.lines) line.ls.one_by_one = orig_one_by_one; +} +ARTS_METHOD_ERROR_CATCH diff --git a/src/m_model_state.cc b/src/m_model_state.cc index 2d8a0c320b..95b7b4c0fb 100644 --- a/src/m_model_state.cc +++ b/src/m_model_state.cc @@ -41,7 +41,7 @@ void model_state_vectorFromSurface(Vector& model_state_vector, } } -void absorption_bandsFromModelState(ArrayOfAbsorptionBand& absorption_bands, +void absorption_bandsFromModelState(AbsorptionBands& absorption_bands, const Vector& model_state_vector, const JacobianTargets& jacobian_targets) { for (auto& target : jacobian_targets.line()) { @@ -50,7 +50,7 @@ void absorption_bandsFromModelState(ArrayOfAbsorptionBand& absorption_bands, } void model_state_vectorFromBands(Vector& model_state_vector, - const ArrayOfAbsorptionBand& absorption_bands, + const AbsorptionBands& absorption_bands, const JacobianTargets& jacobian_targets) { for (auto& target : jacobian_targets.line()) { target.update(model_state_vector, absorption_bands); diff --git a/src/partfun/data/CS2-224.xml b/src/partfun/data/CS2-224.xml index 2ce059206d..2c2cabedcd 100644 --- a/src/partfun/data/CS2-224.xml +++ b/src/partfun/data/CS2-224.xml @@ -1,11 +1,5007 @@ - - -0 -0 -0 -0 + + +1 6.9065499 +2 13.464139 +3 20.025454 +4 26.587791 +5 33.150624 +6 39.713779 +7 46.277181 +8 52.840793 +9 59.404595 +10 65.968575 +11 72.532724 +12 79.097039 +13 85.661514 +14 92.226148 +15 98.790938 +16 105.35588 +17 111.92098 +18 118.48624 +19 125.05164 +20 131.6172 +21 138.18291 +22 144.74877 +23 151.31478 +24 157.88094 +25 164.44726 +26 171.01372 +27 177.58033 +28 184.1471 +29 190.71401 +30 197.28108 +31 203.8483 +32 210.41566 +33 216.98318 +34 223.55086 +35 230.11868 +36 236.68667 +37 243.25482 +38 249.82314 +39 256.39163 +40 262.96031 +41 269.52918 +42 276.09825 +43 282.66756 +44 289.23711 +45 295.80693 +46 302.37705 +47 308.94751 +48 315.51835 +49 322.08962 +50 328.66137 +51 335.23366 +52 341.80656 +53 348.38016 +54 354.95453 +55 361.52978 +56 368.106 +57 374.68333 +58 381.26188 +59 387.84178 +60 394.4232 +61 401.00628 +62 407.5912 +63 414.17813 +64 420.76727 +65 427.35883 +66 433.95301 +67 440.55005 +68 447.15018 +69 453.75364 +70 460.3607 +71 466.97163 +72 473.5867 +73 480.20621 +74 486.83046 +75 493.45975 +76 500.09441 +77 506.73476 +78 513.38114 +79 520.03389 +80 526.69337 +81 533.35994 +82 540.03396 +83 546.71582 +84 553.40589 +85 560.10457 +86 566.81224 +87 573.5293 +88 580.25617 +89 586.99325 +90 593.74096 +91 600.49971 +92 607.26993 +93 614.05205 +94 620.84649 +95 627.65369 +96 634.47409 +97 641.30811 +98 648.15621 +99 655.01882 +100 661.8964 +101 668.78938 +102 675.6982 +103 682.62333 +104 689.56521 +105 696.52428 +106 703.501 +107 710.49582 +108 717.50918 +109 724.54154 +110 731.59334 +111 738.66503 +112 745.75707 +113 752.8699 +114 760.00396 +115 767.15971 +116 774.33759 +117 781.53803 +118 788.76149 +119 796.0084 +120 803.27921 +121 810.57435 +122 817.89426 +123 825.23937 +124 832.61012 +125 840.00694 +126 847.43025 +127 854.8805 +128 862.35809 +129 869.86347 +130 877.39704 +131 884.95923 +132 892.55046 +133 900.17114 +134 907.8217 +135 915.50253 +136 923.21406 +137 930.95668 +138 938.73081 +139 946.53685 +140 954.37521 +141 962.24628 +142 970.15045 +143 978.08814 +144 986.05973 +145 994.06561 +146 1002.1062 +147 1010.1818 +148 1018.2929 +149 1026.4398 +150 1034.623 +151 1042.8428 +152 1051.0995 +153 1059.3936 +154 1067.7255 +155 1076.0954 +156 1084.5039 +157 1092.9511 +158 1101.4376 +159 1109.9637 +160 1118.5298 +161 1127.1361 +162 1135.7831 +163 1144.4712 +164 1153.2006 +165 1161.9718 +166 1170.7851 +167 1179.6408 +168 1188.5394 +169 1197.4811 +170 1206.4663 +171 1215.4953 +172 1224.5686 +173 1233.6864 +174 1242.8491 +175 1252.057 +176 1261.3105 +177 1270.6099 +178 1279.9556 +179 1289.3478 +180 1298.787 +181 1308.2735 +182 1317.8075 +183 1327.3894 +184 1337.0197 +185 1346.6985 +186 1356.4262 +187 1366.2032 +188 1376.0298 +189 1385.9062 +190 1395.833 +191 1405.8102 +192 1415.8384 +193 1425.9178 +194 1436.0487 +195 1446.2314 +196 1456.4664 +197 1466.7538 +198 1477.0941 +199 1487.4875 +200 1497.9343 +201 1508.435 +202 1518.9897 +203 1529.5989 +204 1540.2628 +205 1550.9817 +206 1561.756 +207 1572.586 +208 1583.472 +209 1594.4143 +210 1605.4133 +211 1616.4692 +212 1627.5823 +213 1638.753 +214 1649.9816 +215 1661.2684 +216 1672.6137 +217 1684.0178 +218 1695.4811 +219 1707.0038 +220 1718.5863 +221 1730.2288 +222 1741.9317 +223 1753.6953 +224 1765.5199 +225 1777.4059 +226 1789.3534 +227 1801.3629 +228 1813.4347 +229 1825.569 +230 1837.7662 +231 1850.0265 +232 1862.3504 +233 1874.738 +234 1887.1898 +235 1899.706 +236 1912.2869 +237 1924.9329 +238 1937.6442 +239 1950.4212 +240 1963.2642 +241 1976.1735 +242 1989.1494 +243 2002.1922 +244 2015.3022 +245 2028.4797 +246 2041.7252 +247 2055.0387 +248 2068.4208 +249 2081.8716 +250 2095.3916 +251 2108.9809 +252 2122.64 +253 2136.3691 +254 2150.1686 +255 2164.0388 +256 2177.9799 +257 2191.9924 +258 2206.0765 +259 2220.2325 +260 2234.4607 +261 2248.7615 +262 2263.1352 +263 2277.5821 +264 2292.1025 +265 2306.6968 +266 2321.3652 +267 2336.1081 +268 2350.9257 +269 2365.8185 +270 2380.7867 +271 2395.8307 +272 2410.9507 +273 2426.1472 +274 2441.4203 +275 2456.7705 +276 2472.198 +277 2487.7033 +278 2503.2865 +279 2518.9481 +280 2534.6883 +281 2550.5075 +282 2566.4061 +283 2582.3842 +284 2598.4423 +285 2614.5808 +286 2630.7998 +287 2647.0998 +288 2663.481 +289 2679.9439 +290 2696.4887 +291 2713.1157 +292 2729.8254 +293 2746.618 +294 2763.4939 +295 2780.4533 +296 2797.4967 +297 2814.6244 +298 2831.8367 +299 2849.1339 +300 2866.5163 +301 2883.9844 +302 2901.5385 +303 2919.1788 +304 2936.9058 +305 2954.7197 +306 2972.6209 +307 2990.6098 +308 3008.6867 +309 3026.8519 +310 3045.1058 +311 3063.4487 +312 3081.881 +313 3100.403 +314 3119.015 +315 3137.7175 +316 3156.5107 +317 3175.395 +318 3194.3708 +319 3213.4384 +320 3232.5981 +321 3251.8503 +322 3271.1954 +323 3290.6337 +324 3310.1656 +325 3329.7913 +326 3349.5114 +327 3369.326 +328 3389.2357 +329 3409.2407 +330 3429.3414 +331 3449.5382 +332 3469.8314 +333 3490.2213 +334 3510.7084 +335 3531.293 +336 3551.9755 +337 3572.7562 +338 3593.6355 +339 3614.6138 +340 3635.6914 +341 3656.8687 +342 3678.1461 +343 3699.5239 +344 3721.0025 +345 3742.5822 +346 3764.2636 +347 3786.0468 +348 3807.9323 +349 3829.9205 +350 3852.0117 +351 3874.2064 +352 3896.5048 +353 3918.9074 +354 3941.4146 +355 3964.0266 +356 3986.744 +357 4009.5671 +358 4032.4963 +359 4055.5318 +360 4078.6743 +361 4101.9239 +362 4125.2812 +363 4148.7464 +364 4172.3201 +365 4196.0025 +366 4219.794 +367 4243.6951 +368 4267.7061 +369 4291.8275 +370 4316.0596 +371 4340.4028 +372 4364.8575 +373 4389.4241 +374 4414.103 +375 4438.8946 +376 4463.7993 +377 4488.8175 +378 4513.9496 +379 4539.1959 +380 4564.557 +381 4590.0332 +382 4615.6249 +383 4641.3324 +384 4667.1563 +385 4693.097 +386 4719.1547 +387 4745.33 +388 4771.6232 +389 4798.0348 +390 4824.5651 +391 4851.2147 +392 4877.9838 +393 4904.8729 +394 4931.8824 +395 4959.0128 +396 4986.2644 +397 5013.6377 +398 5041.1331 +399 5068.751 +400 5096.4919 +401 5124.3561 +402 5152.344 +403 5180.4562 +404 5208.693 +405 5237.0548 +406 5265.5421 +407 5294.1554 +408 5322.8949 +409 5351.7612 +410 5380.7547 +411 5409.8759 +412 5439.1251 +413 5468.5028 +414 5498.0094 +415 5527.6454 +416 5557.4111 +417 5587.3072 +418 5617.3339 +419 5647.4917 +420 5677.781 +421 5708.2024 +422 5738.7562 +423 5769.4429 +424 5800.2629 +425 5831.2167 +426 5862.3048 +427 5893.5275 +428 5924.8853 +429 5956.3787 +430 5988.0081 +431 6019.7739 +432 6051.6767 +433 6083.7169 +434 6115.895 +435 6148.2113 +436 6180.6663 +437 6213.2606 +438 6245.9945 +439 6278.8686 +440 6311.8832 +441 6345.039 +442 6378.3362 +443 6411.7754 +444 6445.357 +445 6479.0815 +446 6512.9495 +447 6546.9612 +448 6581.1173 +449 6615.4182 +450 6649.8644 +451 6684.4562 +452 6719.1943 +453 6754.0791 +454 6789.111 +455 6824.2905 +456 6859.6182 +457 6895.0945 +458 6930.7198 +459 6966.4947 +460 7002.4196 +461 7038.4951 +462 7074.7215 +463 7111.0995 +464 7147.6294 +465 7184.3118 +466 7221.1471 +467 7258.1359 +468 7295.2787 +469 7332.5758 +470 7370.0279 +471 7407.6354 +472 7445.3988 +473 7483.3187 +474 7521.3954 +475 7559.6295 +476 7598.0216 +477 7636.572 +478 7675.2814 +479 7714.1502 +480 7753.1789 +481 7792.368 +482 7831.7181 +483 7871.2295 +484 7910.903 +485 7950.7389 +486 7990.7377 +487 8030.9001 +488 8071.2264 +489 8111.7172 +490 8152.3731 +491 8193.1945 +492 8234.1819 +493 8275.336 +494 8316.6571 +495 8358.1458 +496 8399.8027 +497 8441.6283 +498 8483.623 +499 8525.7874 +500 8568.1221 +501 8610.6276 +502 8653.3043 +503 8696.1529 +504 8739.1738 +505 8782.3677 +506 8825.7349 +507 8869.2761 +508 8912.9918 +509 8956.8825 +510 9000.9488 +511 9045.1913 +512 9089.6103 +513 9134.2066 +514 9178.9805 +515 9223.9328 +516 9269.0639 +517 9314.3743 +518 9359.8647 +519 9405.5355 +520 9451.3873 +521 9497.4208 +522 9543.6363 +523 9590.0345 +524 9636.6159 +525 9683.3811 +526 9730.3306 +527 9777.465 +528 9824.7849 +529 9872.2908 +530 9919.9832 +531 9967.8628 +532 10015.93 +533 10064.186 +534 10112.63 +535 10161.264 +536 10210.088 +537 10259.102 +538 10308.307 +539 10357.704 +540 10407.294 +541 10457.076 +542 10507.051 +543 10557.221 +544 10607.585 +545 10658.144 +546 10708.899 +547 10759.85 +548 10810.998 +549 10862.344 +550 10913.888 +551 10965.63 +552 11017.571 +553 11069.713 +554 11122.054 +555 11174.597 +556 11227.341 +557 11280.288 +558 11333.437 +559 11386.789 +560 11440.346 +561 11494.107 +562 11548.073 +563 11602.245 +564 11656.623 +565 11711.209 +566 11766.002 +567 11821.003 +568 11876.212 +569 11931.632 +570 11987.261 +571 12043.101 +572 12099.152 +573 12155.414 +574 12211.89 +575 12268.578 +576 12325.48 +577 12382.597 +578 12439.928 +579 12497.475 +580 12555.238 +581 12613.217 +582 12671.414 +583 12729.829 +584 12788.463 +585 12847.316 +586 12906.389 +587 12965.683 +588 13025.198 +589 13084.934 +590 13144.893 +591 13205.075 +592 13265.481 +593 13326.111 +594 13386.966 +595 13448.046 +596 13509.353 +597 13570.887 +598 13632.648 +599 13694.638 +600 13756.856 +601 13819.304 +602 13881.982 +603 13944.891 +604 14008.031 +605 14071.404 +606 14135.009 +607 14198.847 +608 14262.92 +609 14327.227 +610 14391.77 +611 14456.549 +612 14521.564 +613 14586.817 +614 14652.307 +615 14718.037 +616 14784.006 +617 14850.214 +618 14916.664 +619 14983.355 +620 15050.288 +621 15117.463 +622 15184.882 +623 15252.545 +624 15320.453 +625 15388.606 +626 15457.005 +627 15525.651 +628 15594.545 +629 15663.686 +630 15733.077 +631 15802.717 +632 15872.607 +633 15942.748 +634 16013.14 +635 16083.785 +636 16154.683 +637 16225.834 +638 16297.24 +639 16368.901 +640 16440.818 +641 16512.99 +642 16585.421 +643 16658.109 +644 16731.055 +645 16804.261 +646 16877.726 +647 16951.453 +648 17025.44 +649 17099.69 +650 17174.203 +651 17248.979 +652 17324.019 +653 17399.324 +654 17474.895 +655 17550.732 +656 17626.836 +657 17703.208 +658 17779.849 +659 17856.758 +660 17933.938 +661 18011.389 +662 18089.11 +663 18167.104 +664 18245.371 +665 18323.912 +666 18402.726 +667 18481.816 +668 18561.182 +669 18640.824 +670 18720.743 +671 18800.941 +672 18881.417 +673 18962.173 +674 19043.209 +675 19124.526 +676 19206.124 +677 19288.005 +678 19370.17 +679 19452.618 +680 19535.351 +681 19618.369 +682 19701.674 +683 19785.266 +684 19869.145 +685 19953.313 +686 20037.77 +687 20122.518 +688 20207.556 +689 20292.885 +690 20378.507 +691 20464.422 +692 20550.631 +693 20637.134 +694 20723.933 +695 20811.027 +696 20898.419 +697 20986.109 +698 21074.097 +699 21162.384 +700 21250.971 +701 21339.859 +702 21429.048 +703 21518.54 +704 21608.336 +705 21698.435 +706 21788.838 +707 21879.548 +708 21970.563 +709 22061.886 +710 22153.516 +711 22245.456 +712 22337.704 +713 22430.263 +714 22523.133 +715 22616.315 +716 22709.81 +717 22803.618 +718 22897.74 +719 22992.177 +720 23086.93 +721 23182 +722 23277.388 +723 23373.093 +724 23469.118 +725 23565.463 +726 23662.128 +727 23759.116 +728 23856.425 +729 23954.058 +730 24052.014 +731 24150.296 +732 24248.903 +733 24347.837 +734 24447.098 +735 24546.687 +736 24646.605 +737 24746.853 +738 24847.431 +739 24948.341 +740 25049.583 +741 25151.159 +742 25253.068 +743 25355.312 +744 25457.892 +745 25560.808 +746 25664.062 +747 25767.654 +748 25871.585 +749 25975.855 +750 26080.467 +751 26185.42 +752 26290.715 +753 26396.354 +754 26502.337 +755 26608.665 +756 26715.338 +757 26822.359 +758 26929.727 +759 27037.443 +760 27145.509 +761 27253.925 +762 27362.691 +763 27471.81 +764 27581.282 +765 27691.107 +766 27801.287 +767 27911.822 +768 28022.713 +769 28133.961 +770 28245.568 +771 28357.533 +772 28469.858 +773 28582.544 +774 28695.591 +775 28809 +776 28922.773 +777 29036.91 +778 29151.413 +779 29266.281 +780 29381.516 +781 29497.119 +782 29613.09 +783 29729.431 +784 29846.143 +785 29963.226 +786 30080.681 +787 30198.509 +788 30316.711 +789 30435.288 +790 30554.242 +791 30673.572 +792 30793.279 +793 30913.365 +794 31033.831 +795 31154.677 +796 31275.905 +797 31397.515 +798 31519.508 +799 31641.885 +800 31764.647 +801 31887.795 +802 32011.33 +803 32135.253 +804 32259.565 +805 32384.266 +806 32509.358 +807 32634.841 +808 32760.717 +809 32886.986 +810 33013.65 +811 33140.709 +812 33268.164 +813 33396.016 +814 33524.266 +815 33652.916 +816 33781.965 +817 33911.416 +818 34041.268 +819 34171.523 +820 34302.182 +821 34433.246 +822 34564.715 +823 34696.591 +824 34828.875 +825 34961.568 +826 35094.669 +827 35228.182 +828 35362.106 +829 35496.442 +830 35631.192 +831 35766.356 +832 35901.936 +833 36037.932 +834 36174.345 +835 36311.176 +836 36448.427 +837 36586.098 +838 36724.191 +839 36862.705 +840 37001.643 +841 37141.005 +842 37280.792 +843 37421.005 +844 37561.645 +845 37702.713 +846 37844.211 +847 37986.139 +848 38128.498 +849 38271.289 +850 38414.513 +851 38558.171 +852 38702.264 +853 38846.794 +854 38991.76 +855 39137.165 +856 39283.009 +857 39429.293 +858 39576.018 +859 39723.186 +860 39870.796 +861 40018.851 +862 40167.351 +863 40316.297 +864 40465.691 +865 40615.533 +866 40765.824 +867 40916.566 +868 41067.759 +869 41219.404 +870 41371.503 +871 41524.057 +872 41677.065 +873 41830.531 +874 41984.454 +875 42138.836 +876 42293.677 +877 42448.979 +878 42604.743 +879 42760.969 +880 42917.66 +881 43074.815 +882 43232.436 +883 43390.525 +884 43549.081 +885 43708.106 +886 43867.602 +887 44027.569 +888 44188.008 +889 44348.92 +890 44510.307 +891 44672.17 +892 44834.509 +893 44997.325 +894 45160.62 +895 45324.395 +896 45488.651 +897 45653.389 +898 45818.61 +899 45984.314 +900 46150.504 +901 46317.18 +902 46484.344 +903 46651.995 +904 46820.137 +905 46988.769 +906 47157.892 +907 47327.508 +908 47497.618 +909 47668.223 +910 47839.324 +911 48010.923 +912 48183.019 +913 48355.615 +914 48528.711 +915 48702.308 +916 48876.409 +917 49051.013 +918 49226.122 +919 49401.737 +920 49577.859 +921 49754.489 +922 49931.628 +923 50109.278 +924 50287.44 +925 50466.114 +926 50645.302 +927 50825.005 +928 51005.223 +929 51185.96 +930 51367.214 +931 51548.988 +932 51731.282 +933 51914.098 +934 52097.437 +935 52281.3 +936 52465.688 +937 52650.602 +938 52836.044 +939 53022.014 +940 53208.514 +941 53395.545 +942 53583.107 +943 53771.203 +944 53959.833 +945 54148.999 +946 54338.701 +947 54528.941 +948 54719.72 +949 54911.039 +950 55102.899 +951 55295.302 +952 55488.248 +953 55681.739 +954 55875.776 +955 56070.36 +956 56265.492 +957 56461.174 +958 56657.406 +959 56854.19 +960 57051.527 +961 57249.419 +962 57447.865 +963 57646.868 +964 57846.429 +965 58046.549 +966 58247.229 +967 58448.47 +968 58650.273 +969 58852.641 +970 59055.573 +971 59259.071 +972 59463.136 +973 59667.77 +974 59872.974 +975 60078.748 +976 60285.095 +977 60492.015 +978 60699.509 +979 60907.579 +980 61116.226 +981 61325.452 +982 61535.256 +983 61745.642 +984 61956.609 +985 62168.159 +986 62380.293 +987 62593.013 +988 62806.319 +989 63020.214 +990 63234.698 +991 63449.772 +992 63665.438 +993 63881.696 +994 64098.549 +995 64315.997 +996 64534.042 +997 64752.685 +998 64971.927 +999 65191.769 +1000 65412.213 +1001 65633.259 +1002 65854.91 +1003 66077.166 +1004 66300.029 +1005 66523.5 +1006 66747.579 +1007 66972.27 +1008 67197.571 +1009 67423.486 +1010 67650.015 +1011 67877.16 +1012 68104.921 +1013 68333.3 +1014 68562.299 +1015 68791.918 +1016 69022.159 +1017 69253.023 +1018 69484.511 +1019 69716.626 +1020 69949.367 +1021 70182.736 +1022 70416.735 +1023 70651.365 +1024 70886.627 +1025 71122.522 +1026 71359.052 +1027 71596.219 +1028 71834.022 +1029 72072.464 +1030 72311.546 +1031 72551.27 +1032 72791.635 +1033 73032.645 +1034 73274.3 +1035 73516.601 +1036 73759.55 +1037 74003.149 +1038 74247.397 +1039 74492.298 +1040 74737.851 +1041 74984.059 +1042 75230.923 +1043 75478.443 +1044 75726.622 +1045 75975.461 +1046 76224.961 +1047 76475.123 +1048 76725.949 +1049 76977.44 +1050 77229.597 +1051 77482.422 +1052 77735.916 +1053 77990.08 +1054 78244.916 +1055 78500.426 +1056 78756.61 +1057 79013.469 +1058 79271.006 +1059 79529.221 +1060 79788.116 +1061 80047.693 +1062 80307.952 +1063 80568.895 +1064 80830.523 +1065 81092.838 +1066 81355.841 +1067 81619.534 +1068 81883.917 +1069 82148.992 +1070 82414.761 +1071 82681.225 +1072 82948.386 +1073 83216.244 +1074 83484.801 +1075 83754.059 +1076 84024.018 +1077 84294.681 +1078 84566.048 +1079 84838.122 +1080 85110.902 +1081 85384.392 +1082 85658.592 +1083 85933.504 +1084 86209.128 +1085 86485.467 +1086 86762.522 +1087 87040.294 +1088 87318.785 +1089 87597.996 +1090 87877.928 +1091 88158.583 +1092 88439.963 +1093 88722.068 +1094 89004.9 +1095 89288.461 +1096 89572.753 +1097 89857.775 +1098 90143.53 +1099 90430.02 +1100 90717.245 +1101 91005.208 +1102 91293.909 +1103 91583.35 +1104 91873.533 +1105 92164.459 +1106 92456.129 +1107 92748.544 +1108 93041.707 +1109 93335.619 +1110 93630.281 +1111 93925.695 +1112 94221.861 +1113 94518.783 +1114 94816.46 +1115 95114.894 +1116 95414.088 +1117 95714.042 +1118 96014.758 +1119 96316.237 +1120 96618.48 +1121 96921.491 +1122 97225.268 +1123 97529.816 +1124 97835.133 +1125 98141.223 +1126 98448.087 +1127 98755.726 +1128 99064.141 +1129 99373.334 +1130 99683.307 +1131 99994.062 +1132 100305.6 +1133 100617.92 +1134 100931.03 +1135 101244.92 +1136 101559.6 +1137 101875.07 +1138 102191.34 +1139 102508.39 +1140 102826.25 +1141 103144.89 +1142 103464.34 +1143 103784.58 +1144 104105.63 +1145 104427.48 +1146 104750.13 +1147 105073.58 +1148 105397.85 +1149 105722.92 +1150 106048.8 +1151 106375.49 +1152 106703 +1153 107031.32 +1154 107360.45 +1155 107690.41 +1156 108021.18 +1157 108352.77 +1158 108685.19 +1159 109018.42 +1160 109352.49 +1161 109687.38 +1162 110023.1 +1163 110359.65 +1164 110697.03 +1165 111035.24 +1166 111374.29 +1167 111714.17 +1168 112054.89 +1169 112396.45 +1170 112738.86 +1171 113082.1 +1172 113426.19 +1173 113771.12 +1174 114116.9 +1175 114463.53 +1176 114811.01 +1177 115159.34 +1178 115508.53 +1179 115858.57 +1180 116209.46 +1181 116561.22 +1182 116913.83 +1183 117267.31 +1184 117621.65 +1185 117976.85 +1186 118332.92 +1187 118689.86 +1188 119047.67 +1189 119406.34 +1190 119765.89 +1191 120126.32 +1192 120487.62 +1193 120849.8 +1194 121212.85 +1195 121576.79 +1196 121941.61 +1197 122307.32 +1198 122673.91 +1199 123041.38 +1200 123409.75 +1201 123779 +1202 124149.15 +1203 124520.19 +1204 124892.13 +1205 125264.96 +1206 125638.7 +1207 126013.33 +1208 126388.86 +1209 126765.3 +1210 127142.65 +1211 127520.9 +1212 127900.06 +1213 128280.13 +1214 128661.11 +1215 129043 +1216 129425.81 +1217 129809.54 +1218 130194.18 +1219 130579.75 +1220 130966.23 +1221 131353.64 +1222 131741.98 +1223 132131.24 +1224 132521.43 +1225 132912.55 +1226 133304.61 +1227 133697.59 +1228 134091.51 +1229 134486.37 +1230 134882.17 +1231 135278.91 +1232 135676.59 +1233 136075.21 +1234 136474.78 +1235 136875.29 +1236 137276.76 +1237 137679.17 +1238 138082.54 +1239 138486.86 +1240 138892.14 +1241 139298.37 +1242 139705.57 +1243 140113.72 +1244 140522.84 +1245 140932.92 +1246 141343.96 +1247 141755.98 +1248 142168.96 +1249 142582.92 +1250 142997.84 +1251 143413.75 +1252 143830.63 +1253 144248.48 +1254 144667.32 +1255 145087.14 +1256 145507.94 +1257 145929.72 +1258 146352.5 +1259 146776.26 +1260 147201.01 +1261 147626.76 +1262 148053.49 +1263 148481.23 +1264 148909.96 +1265 149339.69 +1266 149770.42 +1267 150202.15 +1268 150634.89 +1269 151068.63 +1270 151503.38 +1271 151939.15 +1272 152375.92 +1273 152813.7 +1274 153252.51 +1275 153692.32 +1276 154133.16 +1277 154575.02 +1278 155017.9 +1279 155461.8 +1280 155906.73 +1281 156352.69 +1282 156799.67 +1283 157247.69 +1284 157696.74 +1285 158146.82 +1286 158597.95 +1287 159050.11 +1288 159503.31 +1289 159957.55 +1290 160412.83 +1291 160869.17 +1292 161326.55 +1293 161784.97 +1294 162244.45 +1295 162704.99 +1296 163166.57 +1297 163629.22 +1298 164092.92 +1299 164557.68 +1300 165023.51 +1301 165490.4 +1302 165958.35 +1303 166427.38 +1304 166897.47 +1305 167368.63 +1306 167840.87 +1307 168314.18 +1308 168788.57 +1309 169264.04 +1310 169740.58 +1311 170218.21 +1312 170696.93 +1313 171176.73 +1314 171657.62 +1315 172139.6 +1316 172622.67 +1317 173106.83 +1318 173592.09 +1319 174078.45 +1320 174565.91 +1321 175054.47 +1322 175544.13 +1323 176034.9 +1324 176526.77 +1325 177019.75 +1326 177513.84 +1327 178009.05 +1328 178505.37 +1329 179002.81 +1330 179501.36 +1331 180001.03 +1332 180501.83 +1333 181003.75 +1334 181506.8 +1335 182010.97 +1336 182516.28 +1337 183022.71 +1338 183530.28 +1339 184038.99 +1340 184548.83 +1341 185059.81 +1342 185571.94 +1343 186085.2 +1344 186599.61 +1345 187115.17 +1346 187631.88 +1347 188149.74 +1348 188668.75 +1349 189188.92 +1350 189710.24 +1351 190232.72 +1352 190756.37 +1353 191281.17 +1354 191807.14 +1355 192334.28 +1356 192862.58 +1357 193392.06 +1358 193922.71 +1359 194454.53 +1360 194987.53 +1361 195521.71 +1362 196057.06 +1363 196593.6 +1364 197131.33 +1365 197670.24 +1366 198210.34 +1367 198751.63 +1368 199294.11 +1369 199837.78 +1370 200382.66 +1371 200928.73 +1372 201476 +1373 202024.47 +1374 202574.15 +1375 203125.03 +1376 203677.12 +1377 204230.42 +1378 204784.93 +1379 205340.66 +1380 205897.61 +1381 206455.77 +1382 207015.15 +1383 207575.76 +1384 208137.59 +1385 208700.64 +1386 209264.93 +1387 209830.44 +1388 210397.19 +1389 210965.17 +1390 211534.39 +1391 212104.84 +1392 212676.54 +1393 213249.48 +1394 213823.67 +1395 214399.1 +1396 214975.78 +1397 215553.71 +1398 216132.89 +1399 216713.33 +1400 217295.03 +1401 217877.98 +1402 218462.2 +1403 219047.68 +1404 219634.43 +1405 220222.44 +1406 220811.72 +1407 221402.27 +1408 221994.1 +1409 222587.2 +1410 223181.58 +1411 223777.24 +1412 224374.19 +1413 224972.41 +1414 225571.92 +1415 226172.72 +1416 226774.82 +1417 227378.2 +1418 227982.88 +1419 228588.85 +1420 229196.12 +1421 229804.7 +1422 230414.58 +1423 231025.76 +1424 231638.25 +1425 232252.04 +1426 232867.15 +1427 233483.58 +1428 234101.32 +1429 234720.37 +1430 235340.75 +1431 235962.45 +1432 236585.47 +1433 237209.82 +1434 237835.5 +1435 238462.51 +1436 239090.85 +1437 239720.52 +1438 240351.54 +1439 240983.89 +1440 241617.58 +1441 242252.62 +1442 242889 +1443 243526.73 +1444 244165.81 +1445 244806.25 +1446 245448.03 +1447 246091.18 +1448 246735.68 +1449 247381.54 +1450 248028.77 +1451 248677.36 +1452 249327.32 +1453 249978.64 +1454 250631.34 +1455 251285.42 +1456 251940.87 +1457 252597.7 +1458 253255.9 +1459 253915.5 +1460 254576.47 +1461 255238.83 +1462 255902.59 +1463 256567.73 +1464 257234.27 +1465 257902.2 +1466 258571.53 +1467 259242.27 +1468 259914.4 +1469 260587.94 +1470 261262.89 +1471 261939.24 +1472 262617.01 +1473 263296.19 +1474 263976.79 +1475 264658.8 +1476 265342.24 +1477 266027.09 +1478 266713.38 +1479 267401.09 +1480 268090.23 +1481 268780.8 +1482 269472.8 +1483 270166.24 +1484 270861.12 +1485 271557.44 +1486 272255.21 +1487 272954.41 +1488 273655.07 +1489 274357.17 +1490 275060.73 +1491 275765.74 +1492 276472.21 +1493 277180.14 +1494 277889.53 +1495 278600.38 +1496 279312.7 +1497 280026.48 +1498 280741.74 +1499 281458.46 +1500 282176.67 +1501 282896.35 +1502 283617.51 +1503 284340.15 +1504 285064.27 +1505 285789.88 +1506 286516.98 +1507 287245.57 +1508 287975.66 +1509 288707.24 +1510 289440.32 +1511 290174.89 +1512 290910.98 +1513 291648.56 +1514 292387.65 +1515 293128.26 +1516 293870.37 +1517 294614 +1518 295359.14 +1519 296105.81 +1520 296853.99 +1521 297603.7 +1522 298354.94 +1523 299107.7 +1524 299861.99 +1525 300617.82 +1526 301375.18 +1527 302134.08 +1528 302894.52 +1529 303656.51 +1530 304420.03 +1531 305185.11 +1532 305951.73 +1533 306719.91 +1534 307489.64 +1535 308260.93 +1536 309033.77 +1537 309808.18 +1538 310584.15 +1539 311361.69 +1540 312140.8 +1541 312921.48 +1542 313703.73 +1543 314487.55 +1544 315272.96 +1545 316059.95 +1546 316848.51 +1547 317638.67 +1548 318430.41 +1549 319223.74 +1550 320018.67 +1551 320815.19 +1552 321613.31 +1553 322413.03 +1554 323214.35 +1555 324017.27 +1556 324821.81 +1557 325627.95 +1558 326435.7 +1559 327245.07 +1560 328056.06 +1561 328868.67 +1562 329682.89 +1563 330498.75 +1564 331316.23 +1565 332135.34 +1566 332956.08 +1567 333778.45 +1568 334602.46 +1569 335428.11 +1570 336255.4 +1571 337084.34 +1572 337914.92 +1573 338747.15 +1574 339581.04 +1575 340416.58 +1576 341253.77 +1577 342092.62 +1578 342933.14 +1579 343775.31 +1580 344619.16 +1581 345464.67 +1582 346311.86 +1583 347160.72 +1584 348011.25 +1585 348863.47 +1586 349717.36 +1587 350572.94 +1588 351430.21 +1589 352289.17 +1590 353149.81 +1591 354012.15 +1592 354876.19 +1593 355741.93 +1594 356609.37 +1595 357478.51 +1596 358349.36 +1597 359221.92 +1598 360096.19 +1599 360972.17 +1600 361849.87 +1601 362729.29 +1602 363610.44 +1603 364493.3 +1604 365377.9 +1605 366264.22 +1606 367152.28 +1607 368042.07 +1608 368933.6 +1609 369826.87 +1610 370721.88 +1611 371618.63 +1612 372517.14 +1613 373417.39 +1614 374319.4 +1615 375223.16 +1616 376128.68 +1617 377035.96 +1618 377945 +1619 378855.81 +1620 379768.39 +1621 380682.73 +1622 381598.86 +1623 382516.75 +1624 383436.43 +1625 384357.89 +1626 385281.13 +1627 386206.16 +1628 387132.97 +1629 388061.58 +1630 388991.99 +1631 389924.19 +1632 390858.19 +1633 391793.99 +1634 392731.6 +1635 393671.01 +1636 394612.24 +1637 395555.27 +1638 396500.13 +1639 397446.8 +1640 398395.29 +1641 399345.61 +1642 400297.75 +1643 401251.72 +1644 402207.52 +1645 403165.16 +1646 404124.63 +1647 405085.94 +1648 406049.09 +1649 407014.09 +1650 407980.94 +1651 408949.64 +1652 409920.18 +1653 410892.59 +1654 411866.85 +1655 412842.97 +1656 413820.96 +1657 414800.81 +1658 415782.53 +1659 416766.13 +1660 417751.59 +1661 418738.94 +1662 419728.16 +1663 420719.27 +1664 421712.26 +1665 422707.14 +1666 423703.91 +1667 424702.57 +1668 425703.13 +1669 426705.59 +1670 427709.95 +1671 428716.21 +1672 429724.38 +1673 430734.46 +1674 431746.46 +1675 432760.36 +1676 433776.19 +1677 434793.93 +1678 435813.6 +1679 436835.2 +1680 437858.72 +1681 438884.18 +1682 439911.57 +1683 440940.89 +1684 441972.16 +1685 443005.37 +1686 444040.52 +1687 445077.63 +1688 446116.68 +1689 447157.69 +1690 448200.65 +1691 449245.58 +1692 450292.46 +1693 451341.31 +1694 452392.13 +1695 453444.92 +1696 454499.68 +1697 455556.42 +1698 456615.14 +1699 457675.83 +1700 458738.52 +1701 459803.19 +1702 460869.85 +1703 461938.5 +1704 463009.15 +1705 464081.8 +1706 465156.45 +1707 466233.1 +1708 467311.76 +1709 468392.43 +1710 469475.11 +1711 470559.81 +1712 471646.52 +1713 472735.26 +1714 473826.02 +1715 474918.81 +1716 476013.63 +1717 477110.48 +1718 478209.37 +1719 479310.29 +1720 480413.26 +1721 481518.27 +1722 482625.32 +1723 483734.43 +1724 484845.59 +1725 485958.8 +1726 487074.07 +1727 488191.41 +1728 489310.81 +1729 490432.27 +1730 491555.81 +1731 492681.42 +1732 493809.1 +1733 494938.86 +1734 496070.71 +1735 497204.63 +1736 498340.65 +1737 499478.75 +1738 500618.95 +1739 501761.25 +1740 502905.64 +1741 504052.14 +1742 505200.74 +1743 506351.45 +1744 507504.27 +1745 508659.2 +1746 509816.25 +1747 510975.42 +1748 512136.71 +1749 513300.12 +1750 514465.67 +1751 515633.34 +1752 516803.15 +1753 517975.1 +1754 519149.19 +1755 520325.42 +1756 521503.79 +1757 522684.32 +1758 523866.99 +1759 525051.83 +1760 526238.81 +1761 527427.97 +1762 528619.28 +1763 529812.76 +1764 531008.41 +1765 532206.23 +1766 533406.23 +1767 534608.41 +1768 535812.77 +1769 537019.32 +1770 538228.05 +1771 539438.97 +1772 540652.09 +1773 541867.4 +1774 543084.91 +1775 544304.63 +1776 545526.55 +1777 546750.68 +1778 547977.02 +1779 549205.58 +1780 550436.35 +1781 551669.35 +1782 552904.57 +1783 554142.01 +1784 555381.69 +1785 556623.6 +1786 557867.74 +1787 559114.13 +1788 560362.76 +1789 561613.63 +1790 562866.75 +1791 564122.12 +1792 565379.74 +1793 566639.63 +1794 567901.77 +1795 569166.18 +1796 570432.85 +1797 571701.8 +1798 572973.01 +1799 574246.51 +1800 575522.28 +1801 576800.33 +1802 578080.67 +1803 579363.3 +1804 580648.21 +1805 581935.43 +1806 583224.94 +1807 584516.75 +1808 585810.86 +1809 587107.28 +1810 588406.02 +1811 589707.06 +1812 591010.42 +1813 592316.1 +1814 593624.1 +1815 594934.43 +1816 596247.09 +1817 597562.07 +1818 598879.4 +1819 600199.06 +1820 601521.06 +1821 602845.41 +1822 604172.1 +1823 605501.15 +1824 606832.55 +1825 608166.3 +1826 609502.42 +1827 610840.9 +1828 612181.74 +1829 613524.96 +1830 614870.55 +1831 616218.51 +1832 617568.85 +1833 618921.58 +1834 620276.69 +1835 621634.19 +1836 622994.08 +1837 624356.37 +1838 625721.05 +1839 627088.14 +1840 628457.63 +1841 629829.53 +1842 631203.84 +1843 632580.56 +1844 633959.7 +1845 635341.26 +1846 636725.25 +1847 638111.66 +1848 639500.5 +1849 640891.78 +1850 642285.49 +1851 643681.65 +1852 645080.24 +1853 646481.28 +1854 647884.78 +1855 649290.72 +1856 650699.12 +1857 652109.98 +1858 653523.31 +1859 654939.1 +1860 656357.36 +1861 657778.09 +1862 659201.29 +1863 660626.98 +1864 662055.15 +1865 663485.8 +1866 664918.94 +1867 666354.58 +1868 667792.71 +1869 669233.33 +1870 670676.46 +1871 672122.1 +1872 673570.24 +1873 675020.9 +1874 676474.07 +1875 677929.76 +1876 679387.97 +1877 680848.7 +1878 682311.96 +1879 683777.76 +1880 685246.09 +1881 686716.96 +1882 688190.37 +1883 689666.32 +1884 691144.82 +1885 692625.88 +1886 694109.48 +1887 695595.65 +1888 697084.38 +1889 698575.67 +1890 700069.53 +1891 701565.97 +1892 703064.97 +1893 704566.56 +1894 706070.73 +1895 707577.48 +1896 709086.82 +1897 710598.75 +1898 712113.28 +1899 713630.4 +1900 715150.13 +1901 716672.46 +1902 718197.41 +1903 719724.96 +1904 721255.13 +1905 722787.91 +1906 724323.32 +1907 725861.36 +1908 727402.02 +1909 728945.31 +1910 730491.24 +1911 732039.81 +1912 733591.03 +1913 735144.89 +1914 736701.39 +1915 738260.55 +1916 739822.37 +1917 741386.85 +1918 742953.98 +1919 744523.79 +1920 746096.26 +1921 747671.41 +1922 749249.24 +1923 750829.74 +1924 752412.93 +1925 753998.81 +1926 755587.37 +1927 757178.63 +1928 758772.59 +1929 760369.25 +1930 761968.61 +1931 763570.68 +1932 765175.46 +1933 766782.96 +1934 768393.17 +1935 770006.11 +1936 771621.77 +1937 773240.16 +1938 774861.28 +1939 776485.14 +1940 778111.74 +1941 779741.08 +1942 781373.16 +1943 783008 +1944 784645.58 +1945 786285.93 +1946 787929.03 +1947 789574.9 +1948 791223.54 +1949 792874.94 +1950 794529.12 +1951 796186.08 +1952 797845.82 +1953 799508.34 +1954 801173.65 +1955 802841.76 +1956 804512.66 +1957 806186.36 +1958 807862.86 +1959 809542.16 +1960 811224.28 +1961 812909.21 +1962 814596.95 +1963 816287.52 +1964 817980.91 +1965 819677.13 +1966 821376.18 +1967 823078.06 +1968 824782.78 +1969 826490.34 +1970 828200.75 +1971 829914.01 +1972 831630.12 +1973 833349.08 +1974 835070.91 +1975 836795.59 +1976 838523.15 +1977 840253.57 +1978 841986.87 +1979 843723.05 +1980 845462.11 +1981 847204.05 +1982 848948.88 +1983 850696.6 +1984 852447.22 +1985 854200.74 +1986 855957.16 +1987 857716.49 +1988 859478.73 +1989 861243.88 +1990 863011.95 +1991 864782.94 +1992 866556.86 +1993 868333.7 +1994 870113.48 +1995 871896.19 +1996 873681.84 +1997 875470.44 +1998 877261.98 +1999 879056.47 +2000 880853.92 +2001 882654.32 +2002 884457.69 +2003 886264.02 +2004 888073.32 +2005 889885.59 +2006 891700.84 +2007 893519.07 +2008 895340.28 +2009 897164.48 +2010 898991.67 +2011 900821.86 +2012 902655.04 +2013 904491.23 +2014 906330.42 +2015 908172.62 +2016 910017.84 +2017 911866.07 +2018 913717.33 +2019 915571.6 +2020 917428.91 +2021 919289.25 +2022 921152.62 +2023 923019.04 +2024 924888.49 +2025 926761 +2026 928636.55 +2027 930515.16 +2028 932396.83 +2029 934281.56 +2030 936169.36 +2031 938060.22 +2032 939954.16 +2033 941851.18 +2034 943751.27 +2035 945654.46 +2036 947560.73 +2037 949470.09 +2038 951382.55 +2039 953298.11 +2040 955216.77 +2041 957138.54 +2042 959063.42 +2043 960991.42 +2044 962922.53 +2045 964856.77 +2046 966794.14 +2047 968734.63 +2048 970678.26 +2049 972625.03 +2050 974574.94 +2051 976528 +2052 978484.2 +2053 980443.56 +2054 982406.08 +2055 984371.75 +2056 986340.59 +2057 988312.6 +2058 990287.79 +2059 992266.15 +2060 994247.69 +2061 996232.41 +2062 998220.33 +2063 1000211.4 +2064 1002205.7 +2065 1004203.2 +2066 1006203.9 +2067 1008207.8 +2068 1010215 +2069 1012225.3 +2070 1014238.9 +2071 1016255.6 +2072 1018275.7 +2073 1020298.9 +2074 1022325.4 +2075 1024355.1 +2076 1026388 +2077 1028424.2 +2078 1030463.7 +2079 1032506.4 +2080 1034552.4 +2081 1036601.6 +2082 1038654.1 +2083 1040709.8 +2084 1042768.9 +2085 1044831.2 +2086 1046896.8 +2087 1048965.7 +2088 1051037.9 +2089 1053113.3 +2090 1055192.1 +2091 1057274.2 +2092 1059359.5 +2093 1061448.2 +2094 1063540.2 +2095 1065635.5 +2096 1067734.2 +2097 1069836.1 +2098 1071941.4 +2099 1074050 +2100 1076162 +2101 1078277.3 +2102 1080395.9 +2103 1082517.9 +2104 1084643.3 +2105 1086772 +2106 1088904.1 +2107 1091039.5 +2108 1093178.3 +2109 1095320.5 +2110 1097466.1 +2111 1099615 +2112 1101767.3 +2113 1103923 +2114 1106082.1 +2115 1108244.7 +2116 1110410.6 +2117 1112579.9 +2118 1114752.6 +2119 1116928.7 +2120 1119108.3 +2121 1121291.3 +2122 1123477.7 +2123 1125667.5 +2124 1127860.8 +2125 1130057.5 +2126 1132257.6 +2127 1134461.2 +2128 1136668.3 +2129 1138878.8 +2130 1141092.8 +2131 1143310.2 +2132 1145531.1 +2133 1147755.4 +2134 1149983.3 +2135 1152214.6 +2136 1154449.4 +2137 1156687.7 +2138 1158929.5 +2139 1161174.7 +2140 1163423.5 +2141 1165675.8 +2142 1167931.6 +2143 1170190.9 +2144 1172453.7 +2145 1174720 +2146 1176989.9 +2147 1179263.3 +2148 1181540.2 +2149 1183820.7 +2150 1186104.7 +2151 1188392.2 +2152 1190683.3 +2153 1192978 +2154 1195276.2 +2155 1197578 +2156 1199883.3 +2157 1202192.2 +2158 1204504.7 +2159 1206820.8 +2160 1209140.4 +2161 1211463.7 +2162 1213790.5 +2163 1216120.9 +2164 1218454.9 +2165 1220792.5 +2166 1223133.8 +2167 1225478.6 +2168 1227827.1 +2169 1230179.2 +2170 1232534.9 +2171 1234894.2 +2172 1237257.2 +2173 1239623.8 +2174 1241994.1 +2175 1244368 +2176 1246745.5 +2177 1249126.7 +2178 1251511.6 +2179 1253900.1 +2180 1256292.3 +2181 1258688.2 +2182 1261087.7 +2183 1263490.9 +2184 1265897.8 +2185 1268308.4 +2186 1270722.7 +2187 1273140.7 +2188 1275562.4 +2189 1277987.8 +2190 1280416.9 +2191 1282849.7 +2192 1285286.2 +2193 1287726.5 +2194 1290170.5 +2195 1292618.2 +2196 1295069.7 +2197 1297524.9 +2198 1299983.8 +2199 1302446.5 +2200 1304912.9 +2201 1307383.1 +2202 1309857.1 +2203 1312334.8 +2204 1314816.3 +2205 1317301.6 +2206 1319790.7 +2207 1322283.5 +2208 1324780.1 +2209 1327280.6 +2210 1329784.8 +2211 1332292.8 +2212 1334804.6 +2213 1337320.2 +2214 1339839.7 +2215 1342363 +2216 1344890 +2217 1347421 +2218 1349955.7 +2219 1352494.3 +2220 1355036.7 +2221 1357583 +2222 1360133.1 +2223 1362687.1 +2224 1365244.9 +2225 1367806.6 +2226 1370372.2 +2227 1372941.6 +2228 1375514.9 +2229 1378092.1 +2230 1380673.2 +2231 1383258.1 +2232 1385847 +2233 1388439.7 +2234 1391036.4 +2235 1393637 +2236 1396241.4 +2237 1398849.8 +2238 1401462.1 +2239 1404078.4 +2240 1406698.5 +2241 1409322.6 +2242 1411950.7 +2243 1414582.7 +2244 1417218.6 +2245 1419858.5 +2246 1422502.3 +2247 1425150.1 +2248 1427801.8 +2249 1430457.6 +2250 1433117.3 +2251 1435781 +2252 1438448.6 +2253 1441120.3 +2254 1443795.9 +2255 1446475.5 +2256 1449159.2 +2257 1451846.8 +2258 1454538.5 +2259 1457234.2 +2260 1459933.8 +2261 1462637.6 +2262 1465345.3 +2263 1468057.1 +2264 1470772.9 +2265 1473492.7 +2266 1476216.6 +2267 1478944.6 +2268 1481676.6 +2269 1484412.6 +2270 1487152.8 +2271 1489897 +2272 1492645.2 +2273 1495397.6 +2274 1498154 +2275 1500914.5 +2276 1503679.2 +2277 1506447.9 +2278 1509220.7 +2279 1511997.6 +2280 1514778.6 +2281 1517563.8 +2282 1520353 +2283 1523146.4 +2284 1525943.9 +2285 1528745.6 +2286 1531551.3 +2287 1534361.3 +2288 1537175.3 +2289 1539993.6 +2290 1542815.9 +2291 1545642.5 +2292 1548473.2 +2293 1551308.1 +2294 1554147.1 +2295 1556990.4 +2296 1559837.8 +2297 1562689.4 +2298 1565545.2 +2299 1568405.2 +2300 1571269.4 +2301 1574137.8 +2302 1577010.4 +2303 1579887.3 +2304 1582768.3 +2305 1585653.6 +2306 1588543.1 +2307 1591436.9 +2308 1594334.9 +2309 1597237.1 +2310 1600143.6 +2311 1603054.4 +2312 1605969.4 +2313 1608888.6 +2314 1611812.2 +2315 1614740 +2316 1617672.1 +2317 1620608.4 +2318 1623549.1 +2319 1626494 +2320 1629443.3 +2321 1632396.8 +2322 1635354.7 +2323 1638316.9 +2324 1641283.4 +2325 1644254.2 +2326 1647229.3 +2327 1650208.8 +2328 1653192.5 +2329 1656180.7 +2330 1659173.2 +2331 1662170 +2332 1665171.2 +2333 1668176.7 +2334 1671186.6 +2335 1674200.9 +2336 1677219.6 +2337 1680242.6 +2338 1683270 +2339 1686301.8 +2340 1689338 +2341 1692378.6 +2342 1695423.6 +2343 1698473 +2344 1701526.8 +2345 1704585 +2346 1707647.6 +2347 1710714.7 +2348 1713786.2 +2349 1716862.2 +2350 1719942.5 +2351 1723027.4 +2352 1726116.7 +2353 1729210.4 +2354 1732308.6 +2355 1735411.2 +2356 1738518.4 +2357 1741630 +2358 1744746.1 +2359 1747866.6 +2360 1750991.7 +2361 1754121.2 +2362 1757255.3 +2363 1760393.8 +2364 1763536.9 +2365 1766684.5 +2366 1769836.6 +2367 1772993.2 +2368 1776154.4 +2369 1779320.1 +2370 1782490.3 +2371 1785665 +2372 1788844.4 +2373 1792028.2 +2374 1795216.7 +2375 1798409.6 +2376 1801607.2 +2377 1804809.3 +2378 1808016 +2379 1811227.3 +2380 1814443.2 +2381 1817663.7 +2382 1820888.8 +2383 1824118.4 +2384 1827352.7 +2385 1830591.6 +2386 1833835.1 +2387 1837083.3 +2388 1840336 +2389 1843593.4 +2390 1846855.5 +2391 1850122.1 +2392 1853393.5 +2393 1856669.4 +2394 1859950.1 +2395 1863235.4 +2396 1866525.3 +2397 1869820 +2398 1873119.3 +2399 1876423.3 +2400 1879732 +2401 1883045.3 +2402 1886363.4 +2403 1889686.2 +2404 1893013.7 +2405 1896345.9 +2406 1899682.8 +2407 1903024.4 +2408 1906370.8 +2409 1909721.9 +2410 1913077.7 +2411 1916438.3 +2412 1919803.7 +2413 1923173.7 +2414 1926548.6 +2415 1929928.2 +2416 1933312.6 +2417 1936701.7 +2418 1940095.7 +2419 1943494.4 +2420 1946897.9 +2421 1950306.2 +2422 1953719.3 +2423 1957137.2 +2424 1960559.9 +2425 1963987.4 +2426 1967419.7 +2427 1970856.9 +2428 1974298.9 +2429 1977745.7 +2430 1981197.4 +2431 1984653.9 +2432 1988115.3 +2433 1991581.5 +2434 1995052.6 +2435 1998528.6 +2436 2002009.4 +2437 2005495.1 +2438 2008985.7 +2439 2012481.2 +2440 2015981.5 +2441 2019486.8 +2442 2022996.9 +2443 2026512 +2444 2030032 +2445 2033556.9 +2446 2037086.7 +2447 2040621.4 +2448 2044161.1 +2449 2047705.7 +2450 2051255.3 +2451 2054809.8 +2452 2058369.3 +2453 2061933.7 +2454 2065503.1 +2455 2069077.5 +2456 2072656.8 +2457 2076241.1 +2458 2079830.4 +2459 2083424.7 +2460 2087024 +2461 2090628.3 +2462 2094237.6 +2463 2097851.9 +2464 2101471.2 +2465 2105095.6 +2466 2108725 +2467 2112359.4 +2468 2115998.8 +2469 2119643.3 +2470 2123292.9 +2471 2126947.5 +2472 2130607.1 +2473 2134271.8 +2474 2137941.6 +2475 2141616.5 +2476 2145296.4 +2477 2148981.5 +2478 2152671.6 +2479 2156366.8 +2480 2160067.1 +2481 2163772.5 +2482 2167483.1 +2483 2171198.7 +2484 2174919.5 +2485 2178645.4 +2486 2182376.5 +2487 2186112.7 +2488 2189854 +2489 2193600.5 +2490 2197352.1 +2491 2201108.9 +2492 2204870.8 +2493 2208638 +2494 2212410.3 +2495 2216187.8 +2496 2219970.4 +2497 2223758.3 +2498 2227551.4 +2499 2231349.7 +2500 2235153.1 +2501 2238961.8 +2502 2242775.8 +2503 2246594.9 +2504 2250419.3 +2505 2254248.9 +2506 2258083.7 +2507 2261923.8 +2508 2265769.2 +2509 2269619.8 +2510 2273475.6 +2511 2277336.8 +2512 2281203.2 +2513 2285074.9 +2514 2288951.9 +2515 2292834.1 +2516 2296721.7 +2517 2300614.6 +2518 2304512.7 +2519 2308416.2 +2520 2312325 +2521 2316239.2 +2522 2320158.6 +2523 2324083.4 +2524 2328013.5 +2525 2331949 +2526 2335889.8 +2527 2339836 +2528 2343787.6 +2529 2347744.5 +2530 2351706.8 +2531 2355674.4 +2532 2359647.5 +2533 2363625.9 +2534 2367609.8 +2535 2371599 +2536 2375593.6 +2537 2379593.7 +2538 2383599.1 +2539 2387610 +2540 2391626.4 +2541 2395648.1 +2542 2399675.3 +2543 2403707.9 +2544 2407746 +2545 2411789.6 +2546 2415838.6 +2547 2419893 +2548 2423953 +2549 2428018.4 +2550 2432089.3 +2551 2436165.7 +2552 2440247.6 +2553 2444335 +2554 2448427.9 +2555 2452526.3 +2556 2456630.2 +2557 2460739.7 +2558 2464854.7 +2559 2468975.2 +2560 2473101.2 +2561 2477232.8 +2562 2481370 +2563 2485512.7 +2564 2489661 +2565 2493814.8 +2566 2497974.2 +2567 2502139.2 +2568 2506309.8 +2569 2510486 +2570 2514667.7 +2571 2518855.1 +2572 2523048.1 +2573 2527246.7 +2574 2531450.9 +2575 2535660.7 +2576 2539876.2 +2577 2544097.3 +2578 2548324 +2579 2552556.4 +2580 2556794.5 +2581 2561038.2 +2582 2565287.5 +2583 2569542.6 +2584 2573803.3 +2585 2578069.7 +2586 2582341.8 +2587 2586619.6 +2588 2590903 +2589 2595192.2 +2590 2599487.1 +2591 2603787.7 +2592 2608094.1 +2593 2612406.1 +2594 2616723.9 +2595 2621047.5 +2596 2625376.7 +2597 2629711.8 +2598 2634052.6 +2599 2638399.1 +2600 2642751.4 +2601 2647109.5 +2602 2651473.4 +2603 2655843.1 +2604 2660218.5 +2605 2664599.8 +2606 2668986.8 +2607 2673379.7 +2608 2677778.4 +2609 2682182.9 +2610 2686593.2 +2611 2691009.3 +2612 2695431.3 +2613 2699859.2 +2614 2704292.9 +2615 2708732.4 +2616 2713177.8 +2617 2717629.1 +2618 2722086.2 +2619 2726549.3 +2620 2731018.2 +2621 2735493 +2622 2739973.7 +2623 2744460.3 +2624 2748952.8 +2625 2753451.2 +2626 2757955.6 +2627 2762465.8 +2628 2766982 +2629 2771504.2 +2630 2776032.3 +2631 2780566.3 +2632 2785106.3 +2633 2789652.3 +2634 2794204.2 +2635 2798762.1 +2636 2803325.9 +2637 2807895.8 +2638 2812471.7 +2639 2817053.5 +2640 2821641.3 +2641 2826235.2 +2642 2830835.1 +2643 2835441 +2644 2840052.9 +2645 2844670.9 +2646 2849294.9 +2647 2853924.9 +2648 2858561 +2649 2863203.1 +2650 2867851.3 +2651 2872505.6 +2652 2877166 +2653 2881832.4 +2654 2886504.9 +2655 2891183.5 +2656 2895868.3 +2657 2900559.1 +2658 2905256 +2659 2909959.1 +2660 2914668.2 +2661 2919383.5 +2662 2924105 +2663 2928832.5 +2664 2933566.3 +2665 2938306.1 +2666 2943052.2 +2667 2947804.4 +2668 2952562.7 +2669 2957327.3 +2670 2962098 +2671 2966874.9 +2672 2971658 +2673 2976447.4 +2674 2981242.9 +2675 2986044.6 +2676 2990852.6 +2677 2995666.8 +2678 3000487.2 +2679 3005313.8 +2680 3010146.7 +2681 3014985.9 +2682 3019831.3 +2683 3024683 +2684 3029540.9 +2685 3034405.1 +2686 3039275.6 +2687 3044152.4 +2688 3049035.5 +2689 3053924.8 +2690 3058820.5 +2691 3063722.5 +2692 3068630.8 +2693 3073545.5 +2694 3078466.4 +2695 3083393.7 +2696 3088327.4 +2697 3093267.4 +2698 3098213.7 +2699 3103166.4 +2700 3108125.5 +2701 3113090.9 +2702 3118062.8 +2703 3123041 +2704 3128025.6 +2705 3133016.6 +2706 3138014 +2707 3143017.8 +2708 3148028 +2709 3153044.7 +2710 3158067.8 +2711 3163097.3 +2712 3168133.3 +2713 3173175.7 +2714 3178224.6 +2715 3183279.9 +2716 3188341.7 +2717 3193410 +2718 3198484.7 +2719 3203565.9 +2720 3208653.7 +2721 3213747.9 +2722 3218848.6 +2723 3223955.8 +2724 3229069.6 +2725 3234189.9 +2726 3239316.7 +2727 3244450 +2728 3249589.9 +2729 3254736.4 +2730 3259889.3 +2731 3265048.9 +2732 3270215 +2733 3275387.7 +2734 3280567 +2735 3285752.8 +2736 3290945.3 +2737 3296144.3 +2738 3301350 +2739 3306562.3 +2740 3311781.2 +2741 3317006.7 +2742 3322238.8 +2743 3327477.6 +2744 3332723 +2745 3337975.1 +2746 3343233.8 +2747 3348499.2 +2748 3353771.3 +2749 3359050 +2750 3364335.4 +2751 3369627.5 +2752 3374926.3 +2753 3380231.8 +2754 3385544 +2755 3390863 +2756 3396188.6 +2757 3401521 +2758 3406860.1 +2759 3412205.9 +2760 3417558.5 +2761 3422917.8 +2762 3428283.9 +2763 3433656.8 +2764 3439036.5 +2765 3444422.9 +2766 3449816.1 +2767 3455216.1 +2768 3460622.9 +2769 3466036.4 +2770 3471456.9 +2771 3476884.1 +2772 3482318.1 +2773 3487759 +2774 3493206.7 +2775 3498661.3 +2776 3504122.7 +2777 3509590.9 +2778 3515066.1 +2779 3520548 +2780 3526036.9 +2781 3531532.7 +2782 3537035.3 +2783 3542544.8 +2784 3548061.3 +2785 3553584.6 +2786 3559114.9 +2787 3564652.1 +2788 3570196.2 +2789 3575747.2 +2790 3581305.2 +2791 3586870.1 +2792 3592442 +2793 3598020.9 +2794 3603606.7 +2795 3609199.5 +2796 3614799.2 +2797 3620406 +2798 3626019.7 +2799 3631640.5 +2800 3637268.2 +2801 3642903 +2802 3648544.8 +2803 3654193.6 +2804 3659849.5 +2805 3665512.4 +2806 3671182.3 +2807 3676859.3 +2808 3682543.3 +2809 3688234.4 +2810 3693932.6 +2811 3699637.9 +2812 3705350.3 +2813 3711069.7 +2814 3716796.3 +2815 3722529.9 +2816 3728270.7 +2817 3734018.6 +2818 3739773.6 +2819 3745535.7 +2820 3751305 +2821 3757081.5 +2822 3762865 +2823 3768655.8 +2824 3774453.7 +2825 3780258.8 +2826 3786071.1 +2827 3791890.5 +2828 3797717.2 +2829 3803551 +2830 3809392.1 +2831 3815240.3 +2832 3821095.8 +2833 3826958.5 +2834 3832828.5 +2835 3838705.7 +2836 3844590.1 +2837 3850481.8 +2838 3856380.8 +2839 3862287 +2840 3868200.5 +2841 3874121.3 +2842 3880049.3 +2843 3885984.7 +2844 3891927.4 +2845 3897877.3 +2846 3903834.6 +2847 3909799.2 +2848 3915771.2 +2849 3921750.4 +2850 3927737 +2851 3933731 +2852 3939732.3 +2853 3945741 +2854 3951757.1 +2855 3957780.5 +2856 3963811.3 +2857 3969849.5 +2858 3975895.1 +2859 3981948.1 +2860 3988008.5 +2861 3994076.4 +2862 4000151.6 +2863 4006234.3 +2864 4012324.4 +2865 4018422 +2866 4024527 +2867 4030639.5 +2868 4036759.5 +2869 4042886.9 +2870 4049021.8 +2871 4055164.2 +2872 4061314.1 +2873 4067471.4 +2874 4073636.3 +2875 4079808.7 +2876 4085988.7 +2877 4092176.1 +2878 4098371.1 +2879 4104573.6 +2880 4110783.7 +2881 4117001.4 +2882 4123226.6 +2883 4129459.3 +2884 4135699.7 +2885 4141947.6 +2886 4148203.1 +2887 4154466.2 +2888 4160737 +2889 4167015.3 +2890 4173301.2 +2891 4179594.8 +2892 4185896 +2893 4192204.9 +2894 4198521.4 +2895 4204845.5 +2896 4211177.4 +2897 4217516.8 +2898 4223864 +2899 4230218.8 +2900 4236581.3 +2901 4242951.6 +2902 4249329.5 +2903 4255715.1 +2904 4262108.5 +2905 4268509.6 +2906 4274918.4 +2907 4281334.9 +2908 4287759.2 +2909 4294191.2 +2910 4300631 +2911 4307078.6 +2912 4313533.9 +2913 4319997.1 +2914 4326468 +2915 4332946.7 +2916 4339433.2 +2917 4345927.5 +2918 4352429.6 +2919 4358939.6 +2920 4365457.4 +2921 4371983 +2922 4378516.5 +2923 4385057.8 +2924 4391607 +2925 4398164 +2926 4404728.9 +2927 4411301.7 +2928 4417882.4 +2929 4424471 +2930 4431067.5 +2931 4437671.9 +2932 4444284.2 +2933 4450904.4 +2934 4457532.6 +2935 4464168.7 +2936 4470812.7 +2937 4477464.7 +2938 4484124.7 +2939 4490792.6 +2940 4497468.5 +2941 4504152.4 +2942 4510844.2 +2943 4517544.1 +2944 4524251.9 +2945 4530967.8 +2946 4537691.7 +2947 4544423.6 +2948 4551163.6 +2949 4557911.5 +2950 4564667.6 +2951 4571431.7 +2952 4578203.8 +2953 4584984 +2954 4591772.3 +2955 4598568.7 +2956 4605373.1 +2957 4612185.7 +2958 4619006.4 +2959 4625835.1 +2960 4632672 +2961 4639517 +2962 4646370.2 +2963 4653231.5 +2964 4660100.9 +2965 4666978.5 +2966 4673864.3 +2967 4680758.2 +2968 4687660.3 +2969 4694570.6 +2970 4701489.1 +2971 4708415.8 +2972 4715350.7 +2973 4722293.8 +2974 4729245.1 +2975 4736204.6 +2976 4743172.4 +2977 4750148.5 +2978 4757132.7 +2979 4764125.3 +2980 4771126.1 +2981 4778135.2 +2982 4785152.5 +2983 4792178.2 +2984 4799212.1 +2985 4806254.4 +2986 4813304.9 +2987 4820363.8 +2988 4827431 +2989 4834506.6 +2990 4841590.4 +2991 4848682.6 +2992 4855783.2 +2993 4862892.2 +2994 4870009.5 +2995 4877135.2 +2996 4884269.2 +2997 4891411.7 +2998 4898562.5 +2999 4905721.8 +3000 4912889.5 +3001 4920065.6 +3002 4927250.1 +3003 4934443.1 +3004 4941644.5 +3005 4948854.4 +3006 4956072.7 +3007 4963299.5 +3008 4970534.8 +3009 4977778.5 +3010 4985030.8 +3011 4992291.5 +3012 4999560.7 +3013 5006838.5 +3014 5014124.8 +3015 5021419.6 +3016 5028722.9 +3017 5036034.8 +3018 5043355.2 +3019 5050684.2 +3020 5058021.7 +3021 5065367.9 +3022 5072722.6 +3023 5080085.9 +3024 5087457.7 +3025 5094838.2 +3026 5102227.3 +3027 5109625 +3028 5117031.4 +3029 5124446.4 +3030 5131870 +3031 5139302.2 +3032 5146743.2 +3033 5154192.7 +3034 5161651 +3035 5169117.9 +3036 5176593.6 +3037 5184077.9 +3038 5191570.9 +3039 5199072.6 +3040 5206583.1 +3041 5214102.2 +3042 5221630.1 +3043 5229166.8 +3044 5236712.2 +3045 5244266.3 +3046 5251829.2 +3047 5259400.9 +3048 5266981.4 +3049 5274570.6 +3050 5282168.7 +3051 5289775.5 +3052 5297391.2 +3053 5305015.6 +3054 5312648.9 +3055 5320291 +3056 5327942 +3057 5335601.8 +3058 5343270.5 +3059 5350948 +3060 5358634.4 +3061 5366329.7 +3062 5374033.9 +3063 5381747 +3064 5389468.9 +3065 5397199.8 +3066 5404939.6 +3067 5412688.3 +3068 5420446 +3069 5428212.6 +3070 5435988.2 +3071 5443772.7 +3072 5451566.1 +3073 5459368.6 +3074 5467180 +3075 5475000.4 +3076 5482829.8 +3077 5490668.2 +3078 5498515.7 +3079 5506372.1 +3080 5514237.6 +3081 5522112.1 +3082 5529995.6 +3083 5537888.2 +3084 5545789.9 +3085 5553700.6 +3086 5561620.4 +3087 5569549.3 +3088 5577487.3 +3089 5585434.4 +3090 5593390.5 +3091 5601355.8 +3092 5609330.2 +3093 5617313.8 +3094 5625306.5 +3095 5633308.3 +3096 5641319.3 +3097 5649339.4 +3098 5657368.7 +3099 5665407.2 +3100 5673454.9 +3101 5681511.8 +3102 5689577.8 +3103 5697653.1 +3104 5705737.6 +3105 5713831.3 +3106 5721934.3 +3107 5730046.5 +3108 5738167.9 +3109 5746298.6 +3110 5754438.6 +3111 5762587.8 +3112 5770746.3 +3113 5778914.2 +3114 5787091.3 +3115 5795277.7 +3116 5803473.4 +3117 5811678.4 +3118 5819892.8 +3119 5828116.5 +3120 5836349.6 +3121 5844592 +3122 5852843.8 +3123 5861104.9 +3124 5869375.4 +3125 5877655.3 +3126 5885944.6 +3127 5894243.3 +3128 5902551.4 +3129 5910868.9 +3130 5919195.9 +3131 5927532.3 +3132 5935878.1 +3133 5944233.4 +3134 5952598.1 +3135 5960972.3 +3136 5969356 +3137 5977749.1 +3138 5986151.8 +3139 5994563.9 +3140 6002985.6 +3141 6011416.7 +3142 6019857.4 +3143 6028307.6 +3144 6036767.4 +3145 6045236.7 +3146 6053715.6 +3147 6062204 +3148 6070702 +3149 6079209.6 +3150 6087726.7 +3151 6096253.5 +3152 6104789.8 +3153 6113335.8 +3154 6121891.4 +3155 6130456.6 +3156 6139031.5 +3157 6147616 +3158 6156210.2 +3159 6164814 +3160 6173427.5 +3161 6182050.7 +3162 6190683.5 +3163 6199326.1 +3164 6207978.4 +3165 6216640.3 +3166 6225312 +3167 6233993.4 +3168 6242684.6 +3169 6251385.5 +3170 6260096.1 +3171 6268816.6 +3172 6277546.7 +3173 6286286.7 +3174 6295036.4 +3175 6303796 +3176 6312565.3 +3177 6321344.5 +3178 6330133.4 +3179 6338932.2 +3180 6347740.9 +3181 6356559.3 +3182 6365387.7 +3183 6374225.9 +3184 6383073.9 +3185 6391931.9 +3186 6400799.7 +3187 6409677.4 +3188 6418565 +3189 6427462.5 +3190 6436370 +3191 6445287.4 +3192 6454214.7 +3193 6463151.9 +3194 6472099.1 +3195 6481056.3 +3196 6490023.4 +3197 6499000.5 +3198 6507987.6 +3199 6516984.7 +3200 6525991.8 +3201 6535008.9 +3202 6544036.1 +3203 6553073.2 +3204 6562120.4 +3205 6571177.6 +3206 6580244.9 +3207 6589322.3 +3208 6598409.7 +3209 6607507.2 +3210 6616614.8 +3211 6625732.5 +3212 6634860.3 +3213 6643998.2 +3214 6653146.2 +3215 6662304.4 +3216 6671472.6 +3217 6680651.1 +3218 6689839.7 +3219 6699038.4 +3220 6708247.4 +3221 6717466.5 +3222 6726695.8 +3223 6735935.2 +3224 6745184.9 +3225 6754444.9 +3226 6763715 +3227 6772995.4 +3228 6782286 +3229 6791586.8 +3230 6800898 +3231 6810219.3 +3232 6819551 +3233 6828892.9 +3234 6838245.2 +3235 6847607.7 +3236 6856980.5 +3237 6866363.7 +3238 6875757.2 +3239 6885161 +3240 6894575.2 +3241 6903999.7 +3242 6913434.6 +3243 6922879.8 +3244 6932335.4 +3245 6941801.4 +3246 6951277.8 +3247 6960764.6 +3248 6970261.9 +3249 6979769.5 +3250 6989287.6 +3251 6998816.1 +3252 7008355 +3253 7017904.4 +3254 7027464.3 +3255 7037034.6 +3256 7046615.5 +3257 7056206.8 +3258 7065808.6 +3259 7075420.9 +3260 7085043.8 +3261 7094677.1 +3262 7104321 +3263 7113975.5 +3264 7123640.5 +3265 7133316 +3266 7143002.2 +3267 7152698.9 +3268 7162406.1 +3269 7172124 +3270 7181852.5 +3271 7191591.6 +3272 7201341.3 +3273 7211101.7 +3274 7220872.6 +3275 7230654.3 +3276 7240446.6 +3277 7250249.5 +3278 7260063.2 +3279 7269887.5 +3280 7279722.5 +3281 7289568.2 +3282 7299424.6 +3283 7309291.7 +3284 7319169.6 +3285 7329058.2 +3286 7338957.5 +3287 7348867.6 +3288 7358788.4 +3289 7368720.1 +3290 7378662.5 +3291 7388615.7 +3292 7398579.6 +3293 7408554.4 +3294 7418540 +3295 7428536.5 +3296 7438543.7 +3297 7448561.9 +3298 7458590.8 +3299 7468630.6 +3300 7478681.3 +3301 7488742.9 +3302 7498815.3 +3303 7508898.7 +3304 7518992.9 +3305 7529098.1 +3306 7539214.2 +3307 7549341.2 +3308 7559479.1 +3309 7569628 +3310 7579787.9 +3311 7589958.7 +3312 7600140.5 +3313 7610333.3 +3314 7620537.1 +3315 7630751.9 +3316 7640977.7 +3317 7651214.5 +3318 7661462.4 +3319 7671721.2 +3320 7681991.2 +3321 7692272.2 +3322 7702564.2 +3323 7712867.3 +3324 7723181.6 +3325 7733506.9 +3326 7743843.3 +3327 7754190.8 +3328 7764549.4 +3329 7774919.2 +3330 7785300.1 +3331 7795692.1 +3332 7806095.4 +3333 7816509.7 +3334 7826935.3 +3335 7837372 +3336 7847819.9 +3337 7858279 +3338 7868749.4 +3339 7879230.9 +3340 7889723.7 +3341 7900227.7 +3342 7910743 +3343 7921269.5 +3344 7931807.3 +3345 7942356.3 +3346 7952916.7 +3347 7963488.3 +3348 7974071.3 +3349 7984665.5 +3350 7995271.1 +3351 8005888 +3352 8016516.2 +3353 8027155.8 +3354 8037806.7 +3355 8048469 +3356 8059142.7 +3357 8069827.8 +3358 8080524.2 +3359 8091232.1 +3360 8101951.3 +3361 8112682 +3362 8123424.2 +3363 8134177.7 +3364 8144942.7 +3365 8155719.2 +3366 8166507.1 +3367 8177306.5 +3368 8188117.4 +3369 8198939.8 +3370 8209773.7 +3371 8220619.1 +3372 8231476 +3373 8242344.5 +3374 8253224.5 +3375 8264116 +3376 8275019.1 +3377 8285933.8 +3378 8296860.1 +3379 8307797.9 +3380 8318747.4 +3381 8329708.4 +3382 8340681.1 +3383 8351665.4 +3384 8362661.3 +3385 8373668.8 +3386 8384688 +3387 8395718.9 +3388 8406761.5 +3389 8417815.7 +3390 8428881.6 +3391 8439959.2 +3392 8451048.6 +3393 8462149.6 +3394 8473262.4 +3395 8484386.9 +3396 8495523.1 +3397 8506671.2 +3398 8517830.9 +3399 8529002.5 +3400 8540185.8 +3401 8551380.9 +3402 8562587.9 +3403 8573806.6 +3404 8585037.2 +3405 8596279.6 +3406 8607533.8 +3407 8618799.9 +3408 8630077.8 +3409 8641367.6 +3410 8652669.3 +3411 8663982.9 +3412 8675308.4 +3413 8686645.7 +3414 8697995 +3415 8709356.3 +3416 8720729.4 +3417 8732114.5 +3418 8743511.6 +3419 8754920.6 +3420 8766341.6 +3421 8777774.5 +3422 8789219.5 +3423 8800676.5 +3424 8812145.5 +3425 8823626.4 +3426 8835119.5 +3427 8846624.5 +3428 8858141.7 +3429 8869670.8 +3430 8881212.1 +3431 8892765.4 +3432 8904330.8 +3433 8915908.3 +3434 8927497.9 +3435 8939099.6 +3436 8950713.5 +3437 8962339.5 +3438 8973977.6 +3439 8985627.9 +3440 8997290.3 +3441 9008965 +3442 9020651.8 +3443 9032350.8 +3444 9044062 +3445 9055785.4 +3446 9067521 +3447 9079268.9 +3448 9091029 +3449 9102801.4 +3450 9114586 +3451 9126382.9 +3452 9138192 +3453 9150013.5 +3454 9161847.3 +3455 9173693.3 +3456 9185551.7 +3457 9197422.4 +3458 9209305.5 +3459 9221200.9 +3460 9233108.6 +3461 9245028.8 +3462 9256961.3 +3463 9268906.2 +3464 9280863.4 +3465 9292833.1 +3466 9304815.2 +3467 9316809.8 +3468 9328816.7 +3469 9340836.1 +3470 9352868 +3471 9364912.3 +3472 9376969.1 +3473 9389038.4 +3474 9401120.2 +3475 9413214.5 +3476 9425321.3 +3477 9437440.6 +3478 9449572.5 +3479 9461716.9 +3480 9473873.8 +3481 9486043.3 +3482 9498225.4 +3483 9510420.1 +3484 9522627.3 +3485 9534847.2 +3486 9547079.7 +3487 9559324.8 +3488 9571582.5 +3489 9583852.8 +3490 9596135.9 +3491 9608431.5 +3492 9620739.9 +3493 9633060.9 +3494 9645394.6 +3495 9657741.1 +3496 9670100.2 +3497 9682472 +3498 9694856.6 +3499 9707253.9 +3500 9719664 +3501 9732086.8 +3502 9744522.4 +3503 9756970.8 +3504 9769432 +3505 9781906 +3506 9794392.8 +3507 9806892.4 +3508 9819404.8 +3509 9831930.1 +3510 9844468.2 +3511 9857019.1 +3512 9869583 +3513 9882159.7 +3514 9894749.3 +3515 9907351.9 +3516 9919967.3 +3517 9932595.6 +3518 9945236.9 +3519 9957891.1 +3520 9970558.3 +3521 9983238.4 +3522 9995931.5 +3523 10008638 +3524 10021357 +3525 10034089 +3526 10046834 +3527 10059592 +3528 10072363 +3529 10085147 +3530 10097944 +3531 10110755 +3532 10123578 +3533 10136414 +3534 10149264 +3535 10162127 +3536 10175002 +3537 10187891 +3538 10200793 +3539 10213708 +3540 10226636 +3541 10239578 +3542 10252532 +3543 10265500 +3544 10278481 +3545 10291475 +3546 10304483 +3547 10317503 +3548 10330537 +3549 10343584 +3550 10356645 +3551 10369718 +3552 10382805 +3553 10395905 +3554 10409019 +3555 10422146 +3556 10435286 +3557 10448439 +3558 10461606 +3559 10474786 +3560 10487979 +3561 10501186 +3562 10514406 +3563 10527640 +3564 10540887 +3565 10554147 +3566 10567421 +3567 10580708 +3568 10594009 +3569 10607323 +3570 10620650 +3571 10633991 +3572 10647346 +3573 10660714 +3574 10674095 +3575 10687490 +3576 10700899 +3577 10714321 +3578 10727756 +3579 10741206 +3580 10754668 +3581 10768144 +3582 10781634 +3583 10795138 +3584 10808655 +3585 10822185 +3586 10835730 +3587 10849288 +3588 10862859 +3589 10876444 +3590 10890043 +3591 10903656 +3592 10917282 +3593 10930922 +3594 10944576 +3595 10958243 +3596 10971924 +3597 10985619 +3598 10999327 +3599 11013050 +3600 11026786 +3601 11040536 +3602 11054299 +3603 11068077 +3604 11081868 +3605 11095673 +3606 11109492 +3607 11123325 +3608 11137171 +3609 11151032 +3610 11164906 +3611 11178794 +3612 11192697 +3613 11206613 +3614 11220543 +3615 11234486 +3616 11248444 +3617 11262416 +3618 11276402 +3619 11290401 +3620 11304415 +3621 11318443 +3622 11332484 +3623 11346540 +3624 11360610 +3625 11374694 +3626 11388791 +3627 11402903 +3628 11417029 +3629 11431169 +3630 11445323 +3631 11459491 +3632 11473673 +3633 11487870 +3634 11502080 +3635 11516305 +3636 11530544 +3637 11544797 +3638 11559064 +3639 11573345 +3640 11587641 +3641 11601950 +3642 11616274 +3643 11630612 +3644 11644965 +3645 11659331 +3646 11673712 +3647 11688107 +3648 11702517 +3649 11716940 +3650 11731378 +3651 11745831 +3652 11760297 +3653 11774778 +3654 11789273 +3655 11803783 +3656 11818307 +3657 11832845 +3658 11847398 +3659 11861965 +3660 11876547 +3661 11891143 +3662 11905753 +3663 11920378 +3664 11935017 +3665 11949671 +3666 11964339 +3667 11979022 +3668 11993719 +3669 12008431 +3670 12023157 +3671 12037898 +3672 12052653 +3673 12067423 +3674 12082208 +3675 12097006 +3676 12111820 +3677 12126648 +3678 12141491 +3679 12156348 +3680 12171220 +3681 12186107 +3682 12201008 +3683 12215924 +3684 12230854 +3685 12245800 +3686 12260760 +3687 12275734 +3688 12290724 +3689 12305728 +3690 12320746 +3691 12335780 +3692 12350828 +3693 12365891 +3694 12380969 +3695 12396062 +3696 12411169 +3697 12426291 +3698 12441428 +3699 12456580 +3700 12471747 +3701 12486929 +3702 12502125 +3703 12517336 +3704 12532563 +3705 12547804 +3706 12563060 +3707 12578331 +3708 12593616 +3709 12608917 +3710 12624233 +3711 12639564 +3712 12654909 +3713 12670270 +3714 12685646 +3715 12701036 +3716 12716442 +3717 12731863 +3718 12747299 +3719 12762749 +3720 12778215 +3721 12793696 +3722 12809192 +3723 12824703 +3724 12840230 +3725 12855771 +3726 12871327 +3727 12886899 +3728 12902486 +3729 12918088 +3730 12933705 +3731 12949337 +3732 12964985 +3733 12980647 +3734 12996325 +3735 13012019 +3736 13027727 +3737 13043451 +3738 13059190 +3739 13074944 +3740 13090713 +3741 13106498 +3742 13122298 +3743 13138113 +3744 13153944 +3745 13169790 +3746 13185652 +3747 13201529 +3748 13217421 +3749 13233328 +3750 13249251 +3751 13265190 +3752 13281143 +3753 13297113 +3754 13313097 +3755 13329098 +3756 13345113 +3757 13361144 +3758 13377191 +3759 13393253 +3760 13409330 +3761 13425424 +3762 13441532 +3763 13457656 +3764 13473796 +3765 13489951 +3766 13506122 +3767 13522309 +3768 13538511 +3769 13554729 +3770 13570962 +3771 13587211 +3772 13603476 +3773 13619756 +3774 13636052 +3775 13652363 +3776 13668691 +3777 13685034 +3778 13701393 +3779 13717767 +3780 13734157 +3781 13750563 +3782 13766985 +3783 13783423 +3784 13799876 +3785 13816345 +3786 13832830 +3787 13849331 +3788 13865847 +3789 13882380 +3790 13898928 +3791 13915492 +3792 13932072 +3793 13948668 +3794 13965280 +3795 13981907 +3796 13998551 +3797 14015211 +3798 14031886 +3799 14048578 +3800 14065285 +3801 14082008 +3802 14098748 +3803 14115503 +3804 14132275 +3805 14149062 +3806 14165866 +3807 14182685 +3808 14199521 +3809 14216373 +3810 14233240 +3811 14250124 +3812 14267024 +3813 14283940 +3814 14300873 +3815 14317821 +3816 14334786 +3817 14351766 +3818 14368763 +3819 14385776 +3820 14402806 +3821 14419851 +3822 14436913 +3823 14453991 +3824 14471085 +3825 14488196 +3826 14505322 +3827 14522465 +3828 14539625 +3829 14556800 +3830 14573992 +3831 14591201 +3832 14608425 +3833 14625666 +3834 14642924 +3835 14660197 +3836 14677488 +3837 14694794 +3838 14712117 +3839 14729456 +3840 14746812 +3841 14764185 +3842 14781573 +3843 14798978 +3844 14816400 +3845 14833838 +3846 14851293 +3847 14868764 +3848 14886252 +3849 14903756 +3850 14921277 +3851 14938815 +3852 14956369 +3853 14973939 +3854 14991526 +3855 15009130 +3856 15026751 +3857 15044388 +3858 15062041 +3859 15079712 +3860 15097399 +3861 15115103 +3862 15132823 +3863 15150560 +3864 15168314 +3865 15186085 +3866 15203872 +3867 15221676 +3868 15239497 +3869 15257335 +3870 15275189 +3871 15293061 +3872 15310949 +3873 15328854 +3874 15346776 +3875 15364714 +3876 15382670 +3877 15400642 +3878 15418631 +3879 15436637 +3880 15454661 +3881 15472701 +3882 15490758 +3883 15508831 +3884 15526922 +3885 15545030 +3886 15563155 +3887 15581297 +3888 15599456 +3889 15617631 +3890 15635824 +3891 15654034 +3892 15672261 +3893 15690505 +3894 15708767 +3895 15727045 +3896 15745340 +3897 15763653 +3898 15781982 +3899 15800329 +3900 15818693 +3901 15837074 +3902 15855472 +3903 15873888 +3904 15892320 +3905 15910770 +3906 15929237 +3907 15947722 +3908 15966223 +3909 15984742 +3910 16003278 +3911 16021832 +3912 16040403 +3913 16058991 +3914 16077596 +3915 16096219 +3916 16114859 +3917 16133516 +3918 16152191 +3919 16170883 +3920 16189593 +3921 16208320 +3922 16227064 +3923 16245826 +3924 16264605 +3925 16283402 +3926 16302217 +3927 16321048 +3928 16339898 +3929 16358764 +3930 16377649 +3931 16396550 +3932 16415470 +3933 16434407 +3934 16453361 +3935 16472333 +3936 16491323 +3937 16510330 +3938 16529355 +3939 16548398 +3940 16567458 +3941 16586536 +3942 16605631 +3943 16624745 +3944 16643875 +3945 16663024 +3946 16682190 +3947 16701375 +3948 16720576 +3949 16739796 +3950 16759033 +3951 16778288 +3952 16797561 +3953 16816852 +3954 16836161 +3955 16855487 +3956 16874831 +3957 16894193 +3958 16913573 +3959 16932971 +3960 16952387 +3961 16971821 +3962 16991272 +3963 17010742 +3964 17030229 +3965 17049735 +3966 17069258 +3967 17088799 +3968 17108359 +3969 17127936 +3970 17147532 +3971 17167145 +3972 17186776 +3973 17206426 +3974 17226094 +3975 17245779 +3976 17265483 +3977 17285205 +3978 17304945 +3979 17324703 +3980 17344479 +3981 17364274 +3982 17384087 +3983 17403917 +3984 17423766 +3985 17443634 +3986 17463519 +3987 17483423 +3988 17503345 +3989 17523285 +3990 17543243 +3991 17563220 +3992 17583215 +3993 17603229 +3994 17623260 +3995 17643310 +3996 17663379 +3997 17683465 +3998 17703571 +3999 17723694 +4000 17743836 +4001 17763996 +4002 17784175 +4003 17804372 +4004 17824588 +4005 17844822 +4006 17865075 +4007 17885346 +4008 17905635 +4009 17925943 +4010 17946270 +4011 17966615 +4012 17986979 +4013 18007361 +4014 18027762 +4015 18048181 +4016 18068619 +4017 18089076 +4018 18109551 +4019 18130045 +4020 18150558 +4021 18171089 +4022 18191639 +4023 18212208 +4024 18232795 +4025 18253401 +4026 18274026 +4027 18294670 +4028 18315332 +4029 18336013 +4030 18356713 +4031 18377432 +4032 18398169 +4033 18418926 +4034 18439701 +4035 18460495 +4036 18481308 +4037 18502139 +4038 18522990 +4039 18543860 +4040 18564748 +4041 18585656 +4042 18606582 +4043 18627527 +4044 18648491 +4045 18669475 +4046 18690477 +4047 18711498 +4048 18732538 +4049 18753598 +4050 18774676 +4051 18795773 +4052 18816890 +4053 18838025 +4054 18859180 +4055 18880354 +4056 18901547 +4057 18922759 +4058 18943990 +4059 18965240 +4060 18986510 +4061 19007798 +4062 19029106 +4063 19050433 +4064 19071780 +4065 19093145 +4066 19114530 +4067 19135934 +4068 19157358 +4069 19178800 +4070 19200262 +4071 19221744 +4072 19243244 +4073 19264764 +4074 19286304 +4075 19307862 +4076 19329441 +4077 19351038 +4078 19372655 +4079 19394291 +4080 19415947 +4081 19437622 +4082 19459317 +4083 19481031 +4084 19502765 +4085 19524518 +4086 19546291 +4087 19568083 +4088 19589895 +4089 19611726 +4090 19633577 +4091 19655448 +4092 19677338 +4093 19699248 +4094 19721177 +4095 19743126 +4096 19765094 +4097 19787083 +4098 19809091 +4099 19831118 +4100 19853166 +4101 19875233 +4102 19897320 +4103 19919426 +4104 19941553 +4105 19963699 +4106 19985865 +4107 20008050 +4108 20030256 +4109 20052481 +4110 20074726 +4111 20096991 +4112 20119276 +4113 20141581 +4114 20163906 +4115 20186250 +4116 20208615 +4117 20230999 +4118 20253404 +4119 20275828 +4120 20298272 +4121 20320737 +4122 20343221 +4123 20365725 +4124 20388249 +4125 20410794 +4126 20433358 +4127 20455943 +4128 20478547 +4129 20501172 +4130 20523817 +4131 20546482 +4132 20569167 +4133 20591872 +4134 20614597 +4135 20637343 +4136 20660109 +4137 20682894 +4138 20705701 +4139 20728527 +4140 20751374 +4141 20774240 +4142 20797128 +4143 20820035 +4144 20842963 +4145 20865911 +4146 20888879 +4147 20911868 +4148 20934877 +4149 20957906 +4150 20980956 +4151 21004026 +4152 21027117 +4153 21050228 +4154 21073360 +4155 21096512 +4156 21119684 +4157 21142877 +4158 21166090 +4159 21189324 +4160 21212578 +4161 21235853 +4162 21259149 +4163 21282465 +4164 21305801 +4165 21329159 +4166 21352536 +4167 21375935 +4168 21399354 +4169 21422793 +4170 21446254 +4171 21469735 +4172 21493236 +4173 21516759 +4174 21540302 +4175 21563866 +4176 21587450 +4177 21611055 +4178 21634681 +4179 21658328 +4180 21681996 +4181 21705684 +4182 21729394 +4183 21753124 +4184 21776875 +4185 21800646 +4186 21824439 +4187 21848253 +4188 21872087 +4189 21895943 +4190 21919819 +4191 21943716 +4192 21967634 +4193 21991574 +4194 22015534 +4195 22039515 +4196 22063517 +4197 22087541 +4198 22111585 +4199 22135650 +4200 22159737 +4201 22183844 +4202 22207973 +4203 22232122 +4204 22256293 +4205 22280485 +4206 22304698 +4207 22328933 +4208 22353188 +4209 22377465 +4210 22401763 +4211 22426082 +4212 22450422 +4213 22474784 +4214 22499167 +4215 22523571 +4216 22547997 +4217 22572443 +4218 22596911 +4219 22621401 +4220 22645912 +4221 22670444 +4222 22694997 +4223 22719572 +4224 22744169 +4225 22768787 +4226 22793426 +4227 22818086 +4228 22842769 +4229 22867472 +4230 22892197 +4231 22916944 +4232 22941712 +4233 22966502 +4234 22991313 +4235 23016146 +4236 23041000 +4237 23065876 +4238 23090774 +4239 23115693 +4240 23140634 +4241 23165596 +4242 23190580 +4243 23215586 +4244 23240614 +4245 23265663 +4246 23290734 +4247 23315827 +4248 23340941 +4249 23366077 +4250 23391235 +4251 23416415 +4252 23441617 +4253 23466840 +4254 23492085 +4255 23517352 +4256 23542641 +4257 23567952 +4258 23593285 +4259 23618639 +4260 23644016 +4261 23669414 +4262 23694835 +4263 23720277 +4264 23745742 +4265 23771228 +4266 23796736 +4267 23822267 +4268 23847819 +4269 23873394 +4270 23898990 +4271 23924609 +4272 23950250 +4273 23975913 +4274 24001598 +4275 24027305 +4276 24053034 +4277 24078785 +4278 24104559 +4279 24130355 +4280 24156173 +4281 24182013 +4282 24207876 +4283 24233760 +4284 24259667 +4285 24285597 +4286 24311548 +4287 24337522 +4288 24363518 +4289 24389537 +4290 24415578 +4291 24441641 +4292 24467727 +4293 24493835 +4294 24519965 +4295 24546118 +4296 24572294 +4297 24598492 +4298 24624712 +4299 24650955 +4300 24677220 +4301 24703508 +4302 24729818 +4303 24756151 +4304 24782506 +4305 24808884 +4306 24835285 +4307 24861708 +4308 24888154 +4309 24914623 +4310 24941114 +4311 24967627 +4312 24994164 +4313 25020723 +4314 25047305 +4315 25073909 +4316 25100537 +4317 25127187 +4318 25153860 +4319 25180555 +4320 25207274 +4321 25234015 +4322 25260779 +4323 25287566 +4324 25314376 +4325 25341208 +4326 25368064 +4327 25394942 +4328 25421843 +4329 25448768 +4330 25475715 +4331 25502685 +4332 25529678 +4333 25556694 +4334 25583733 +4335 25610795 +4336 25637880 +4337 25664989 +4338 25692120 +4339 25719274 +4340 25746452 +4341 25773652 +4342 25800876 +4343 25828122 +4344 25855392 +4345 25882686 +4346 25910002 +4347 25937341 +4348 25964704 +4349 25992090 +4350 26019499 +4351 26046931 +4352 26074387 +4353 26101866 +4354 26129368 +4355 26156894 +4356 26184443 +4357 26212015 +4358 26239611 +4359 26267230 +4360 26294872 +4361 26322538 +4362 26350227 +4363 26377940 +4364 26405676 +4365 26433435 +4366 26461218 +4367 26489025 +4368 26516855 +4369 26544709 +4370 26572586 +4371 26600486 +4372 26628411 +4373 26656359 +4374 26684330 +4375 26712325 +4376 26740344 +4377 26768386 +4378 26796452 +4379 26824542 +4380 26852655 +4381 26880792 +4382 26908953 +4383 26937137 +4384 26965346 +4385 26993578 +4386 27021834 +4387 27050113 +4388 27078417 +4389 27106744 +4390 27135095 +4391 27163470 +4392 27191869 +4393 27220292 +4394 27248738 +4395 27277209 +4396 27305703 +4397 27334222 +4398 27362764 +4399 27391331 +4400 27419921 +4401 27448535 +4402 27477174 +4403 27505836 +4404 27534523 +4405 27563233 +4406 27591968 +4407 27620727 +4408 27649510 +4409 27678317 +4410 27707148 +4411 27736003 +4412 27764883 +4413 27793787 +4414 27822715 +4415 27851667 +4416 27880643 +4417 27909644 +4418 27938669 +4419 27967718 +4420 27996792 +4421 28025889 +4422 28055012 +4423 28084158 +4424 28113329 +4425 28142524 +4426 28171744 +4427 28200988 +4428 28230257 +4429 28259550 +4430 28288867 +4431 28318209 +4432 28347575 +4433 28376966 +4434 28406382 +4435 28435822 +4436 28465286 +4437 28494775 +4438 28524289 +4439 28553827 +4440 28583390 +4441 28612977 +4442 28642589 +4443 28672226 +4444 28701888 +4445 28731574 +4446 28761285 +4447 28791020 +4448 28820780 +4449 28850566 +4450 28880375 +4451 28910210 +4452 28940069 +4453 28969954 +4454 28999863 +4455 29029797 +4456 29059755 +4457 29089739 +4458 29119748 +4459 29149781 +4460 29179839 +4461 29209923 +4462 29240031 +4463 29270164 +4464 29300322 +4465 29330506 +4466 29360714 +4467 29390947 +4468 29421206 +4469 29451489 +4470 29481797 +4471 29512131 +4472 29542490 +4473 29572874 +4474 29603283 +4475 29633717 +4476 29664176 +4477 29694660 +4478 29725170 +4479 29755705 +4480 29786265 +4481 29816851 +4482 29847461 +4483 29878097 +4484 29908759 +4485 29939445 +4486 29970157 +4487 30000895 +4488 30031657 +4489 30062445 +4490 30093259 +4491 30124098 +4492 30154962 +4493 30185852 +4494 30216767 +4495 30247707 +4496 30278674 +4497 30309665 +4498 30340682 +4499 30371725 +4500 30402793 +4501 30433887 +4502 30465007 +4503 30496152 +4504 30527323 +4505 30558519 +4506 30589741 +4507 30620989 +4508 30652262 +4509 30683561 +4510 30714886 +4511 30746236 +4512 30777612 +4513 30809014 +4514 30840442 +4515 30871896 +4516 30903375 +4517 30934880 +4518 30966411 +4519 30997968 +4520 31029551 +4521 31061160 +4522 31092794 +4523 31124455 +4524 31156141 +4525 31187854 +4526 31219592 +4527 31251357 +4528 31283147 +4529 31314964 +4530 31346806 +4531 31378675 +4532 31410569 +4533 31442490 +4534 31474437 +4535 31506410 +4536 31538409 +4537 31570434 +4538 31602485 +4539 31634563 +4540 31666666 +4541 31698796 +4542 31730953 +4543 31763135 +4544 31795344 +4545 31827579 +4546 31859840 +4547 31892128 +4548 31924442 +4549 31956782 +4550 31989149 +4551 32021542 +4552 32053961 +4553 32086407 +4554 32118879 +4555 32151378 +4556 32183903 +4557 32216455 +4558 32249033 +4559 32281637 +4560 32314269 +4561 32346926 +4562 32379611 +4563 32412321 +4564 32445059 +4565 32477823 +4566 32510614 +4567 32543431 +4568 32576275 +4569 32609146 +4570 32642043 +4571 32674967 +4572 32707918 +4573 32740895 +4574 32773900 +4575 32806931 +4576 32839988 +4577 32873073 +4578 32906185 +4579 32939323 +4580 32972488 +4581 33005680 +4582 33038899 +4583 33072145 +4584 33105417 +4585 33138717 +4586 33172044 +4587 33205397 +4588 33238778 +4589 33272186 +4590 33305620 +4591 33339082 +4592 33372571 +4593 33406086 +4594 33439629 +4595 33473199 +4596 33506796 +4597 33540420 +4598 33574072 +4599 33607750 +4600 33641456 +4601 33675189 +4602 33708949 +4603 33742737 +4604 33776551 +4605 33810393 +4606 33844262 +4607 33878159 +4608 33912083 +4609 33946034 +4610 33980012 +4611 34014018 +4612 34048052 +4613 34082112 +4614 34116200 +4615 34150316 +4616 34184459 +4617 34218629 +4618 34252827 +4619 34287053 +4620 34321306 +4621 34355586 +4622 34389894 +4623 34424230 +4624 34458593 +4625 34492984 +4626 34527402 +4627 34561848 +4628 34596322 +4629 34630824 +4630 34665353 +4631 34699909 +4632 34734494 +4633 34769106 +4634 34803746 +4635 34838414 +4636 34873110 +4637 34907833 +4638 34942584 +4639 34977363 +4640 35012170 +4641 35047005 +4642 35081868 +4643 35116758 +4644 35151677 +4645 35186623 +4646 35221598 +4647 35256600 +4648 35291630 +4649 35326689 +4650 35361775 +4651 35396890 +4652 35432032 +4653 35467203 +4654 35502401 +4655 35537628 +4656 35572883 +4657 35608166 +4658 35643478 +4659 35678817 +4660 35714185 +4661 35749580 +4662 35785004 +4663 35820457 +4664 35855937 +4665 35891446 +4666 35926983 +4667 35962549 +4668 35998143 +4669 36033765 +4670 36069415 +4671 36105094 +4672 36140802 +4673 36176537 +4674 36212302 +4675 36248094 +4676 36283915 +4677 36319765 +4678 36355643 +4679 36391550 +4680 36427485 +4681 36463448 +4682 36499441 +4683 36535462 +4684 36571511 +4685 36607589 +4686 36643696 +4687 36679831 +4688 36715996 +4689 36752188 +4690 36788410 +4691 36824660 +4692 36860939 +4693 36897247 +4694 36933583 +4695 36969949 +4696 37006343 +4697 37042766 +4698 37079218 +4699 37115698 +4700 37152208 +4701 37188746 +4702 37225314 +4703 37261910 +4704 37298535 +4705 37335190 +4706 37371873 +4707 37408585 +4708 37445326 +4709 37482097 +4710 37518896 +4711 37555725 +4712 37592582 +4713 37629469 +4714 37666385 +4715 37703330 +4716 37740304 +4717 37777307 +4718 37814339 +4719 37851401 +4720 37888492 +4721 37925612 +4722 37962762 +4723 37999940 +4724 38037148 +4725 38074386 +4726 38111652 +4727 38148949 +4728 38186274 +4729 38223629 +4730 38261013 +4731 38298427 +4732 38335870 +4733 38373342 +4734 38410844 +4735 38448376 +4736 38485937 +4737 38523528 +4738 38561148 +4739 38598797 +4740 38636477 +4741 38674186 +4742 38711924 +4743 38749692 +4744 38787490 +4745 38825317 +4746 38863175 +4747 38901061 +4748 38938978 +4749 38976924 +4750 39014901 +4751 39052906 +4752 39090942 +4753 39129008 +4754 39167103 +4755 39205228 +4756 39243383 +4757 39281568 +4758 39319783 +4759 39358028 +4760 39396302 +4761 39434607 +4762 39472941 +4763 39511306 +4764 39549701 +4765 39588125 +4766 39626580 +4767 39665065 +4768 39703580 +4769 39742125 +4770 39780700 +4771 39819305 +4772 39857940 +4773 39896606 +4774 39935301 +4775 39974027 +4776 40012783 +4777 40051570 +4778 40090386 +4779 40129233 +4780 40168110 +4781 40207018 +4782 40245956 +4783 40284924 +4784 40323922 +4785 40362951 +4786 40402011 +4787 40441101 +4788 40480221 +4789 40519371 +4790 40558553 +4791 40597764 +4792 40637006 +4793 40676279 +4794 40715582 +4795 40754916 +4796 40794280 +4797 40833675 +4798 40873101 +4799 40912557 +4800 40952044 +4801 40991562 +4802 41031110 +4803 41070689 +4804 41110298 +4805 41149939 +4806 41189610 +4807 41229312 +4808 41269045 +4809 41308808 +4810 41348603 +4811 41388428 +4812 41428284 +4813 41468171 +4814 41508089 +4815 41548038 +4816 41588018 +4817 41628029 +4818 41668070 +4819 41708143 +4820 41748247 +4821 41788382 +4822 41828548 +4823 41868744 +4824 41908973 +4825 41949232 +4826 41989522 +4827 42029843 +4828 42070196 +4829 42110580 +4830 42150995 +4831 42191441 +4832 42231918 +4833 42272427 +4834 42312967 +4835 42353538 +4836 42394141 +4837 42434774 +4838 42475440 +4839 42516136 +4840 42556864 +4841 42597624 +4842 42638414 +4843 42679237 +4844 42720090 +4845 42760975 +4846 42801892 +4847 42842840 +4848 42883820 +4849 42924831 +4850 42965874 +4851 43006948 +4852 43048054 +4853 43089192 +4854 43130361 +4855 43171562 +4856 43212795 +4857 43254059 +4858 43295355 +4859 43336683 +4860 43378042 +4861 43419434 +4862 43460857 +4863 43502312 +4864 43543798 +4865 43585317 +4866 43626867 +4867 43668450 +4868 43710064 +4869 43751710 +4870 43793388 +4871 43835098 +4872 43876840 +4873 43918614 +4874 43960420 +4875 44002258 +4876 44044128 +4877 44086030 +4878 44127964 +4879 44169930 +4880 44211929 +4881 44253959 +4882 44296022 +4883 44338117 +4884 44380244 +4885 44422403 +4886 44464595 +4887 44506819 +4888 44549075 +4889 44591363 +4890 44633684 +4891 44676037 +4892 44718422 +4893 44760840 +4894 44803290 +4895 44845773 +4896 44888288 +4897 44930835 +4898 44973415 +4899 45016027 +4900 45058672 +4901 45101349 +4902 45144059 +4903 45186802 +4904 45229577 +4905 45272384 +4906 45315225 +4907 45358097 +4908 45401003 +4909 45443941 +4910 45486912 +4911 45529915 +4912 45572952 +4913 45616021 +4914 45659123 +4915 45702257 +4916 45745424 +4917 45788625 +4918 45831858 +4919 45875123 +4920 45918422 +4921 45961754 +4922 46005118 +4923 46048516 +4924 46091946 +4925 46135410 +4926 46178906 +4927 46222435 +4928 46265998 +4929 46309593 +4930 46353222 +4931 46396884 +4932 46440578 +4933 46484306 +4934 46528067 +4935 46571861 +4936 46615689 +4937 46659549 +4938 46703443 +4939 46747370 +4940 46791330 +4941 46835324 +4942 46879350 +4943 46923410 +4944 46967504 +4945 47011631 +4946 47055791 +4947 47099984 +4948 47144211 +4949 47188472 +4950 47232766 +4951 47277093 +4952 47321454 +4953 47365848 +4954 47410276 +4955 47454737 +4956 47499232 +4957 47543761 +4958 47588323 +4959 47632918 +4960 47677548 +4961 47722211 +4962 47766908 +4963 47811638 +4964 47856402 +4965 47901200 +4966 47946032 +4967 47990897 +4968 48035796 +4969 48080729 +4970 48125696 +4971 48170697 +4972 48215731 +4973 48260800 +4974 48305902 +4975 48351038 +4976 48396208 +4977 48441413 +4978 48486651 +4979 48531923 +4980 48577229 +4981 48622569 +4982 48667944 +4983 48713352 +4984 48758795 +4985 48804271 +4986 48849782 +4987 48895327 +4988 48940906 +4989 48986519 +4990 49032167 +4991 49077849 +4992 49123565 +4993 49169315 +4994 49215099 +4995 49260918 +4996 49306772 +4997 49352659 +4998 49398581 +4999 49444538 +5000 49490528 diff --git a/src/partfun/data/CS2-244.xml b/src/partfun/data/CS2-244.xml deleted file mode 100644 index 2c2cabedcd..0000000000 --- a/src/partfun/data/CS2-244.xml +++ /dev/null @@ -1,5007 +0,0 @@ - - - - -1 6.9065499 -2 13.464139 -3 20.025454 -4 26.587791 -5 33.150624 -6 39.713779 -7 46.277181 -8 52.840793 -9 59.404595 -10 65.968575 -11 72.532724 -12 79.097039 -13 85.661514 -14 92.226148 -15 98.790938 -16 105.35588 -17 111.92098 -18 118.48624 -19 125.05164 -20 131.6172 -21 138.18291 -22 144.74877 -23 151.31478 -24 157.88094 -25 164.44726 -26 171.01372 -27 177.58033 -28 184.1471 -29 190.71401 -30 197.28108 -31 203.8483 -32 210.41566 -33 216.98318 -34 223.55086 -35 230.11868 -36 236.68667 -37 243.25482 -38 249.82314 -39 256.39163 -40 262.96031 -41 269.52918 -42 276.09825 -43 282.66756 -44 289.23711 -45 295.80693 -46 302.37705 -47 308.94751 -48 315.51835 -49 322.08962 -50 328.66137 -51 335.23366 -52 341.80656 -53 348.38016 -54 354.95453 -55 361.52978 -56 368.106 -57 374.68333 -58 381.26188 -59 387.84178 -60 394.4232 -61 401.00628 -62 407.5912 -63 414.17813 -64 420.76727 -65 427.35883 -66 433.95301 -67 440.55005 -68 447.15018 -69 453.75364 -70 460.3607 -71 466.97163 -72 473.5867 -73 480.20621 -74 486.83046 -75 493.45975 -76 500.09441 -77 506.73476 -78 513.38114 -79 520.03389 -80 526.69337 -81 533.35994 -82 540.03396 -83 546.71582 -84 553.40589 -85 560.10457 -86 566.81224 -87 573.5293 -88 580.25617 -89 586.99325 -90 593.74096 -91 600.49971 -92 607.26993 -93 614.05205 -94 620.84649 -95 627.65369 -96 634.47409 -97 641.30811 -98 648.15621 -99 655.01882 -100 661.8964 -101 668.78938 -102 675.6982 -103 682.62333 -104 689.56521 -105 696.52428 -106 703.501 -107 710.49582 -108 717.50918 -109 724.54154 -110 731.59334 -111 738.66503 -112 745.75707 -113 752.8699 -114 760.00396 -115 767.15971 -116 774.33759 -117 781.53803 -118 788.76149 -119 796.0084 -120 803.27921 -121 810.57435 -122 817.89426 -123 825.23937 -124 832.61012 -125 840.00694 -126 847.43025 -127 854.8805 -128 862.35809 -129 869.86347 -130 877.39704 -131 884.95923 -132 892.55046 -133 900.17114 -134 907.8217 -135 915.50253 -136 923.21406 -137 930.95668 -138 938.73081 -139 946.53685 -140 954.37521 -141 962.24628 -142 970.15045 -143 978.08814 -144 986.05973 -145 994.06561 -146 1002.1062 -147 1010.1818 -148 1018.2929 -149 1026.4398 -150 1034.623 -151 1042.8428 -152 1051.0995 -153 1059.3936 -154 1067.7255 -155 1076.0954 -156 1084.5039 -157 1092.9511 -158 1101.4376 -159 1109.9637 -160 1118.5298 -161 1127.1361 -162 1135.7831 -163 1144.4712 -164 1153.2006 -165 1161.9718 -166 1170.7851 -167 1179.6408 -168 1188.5394 -169 1197.4811 -170 1206.4663 -171 1215.4953 -172 1224.5686 -173 1233.6864 -174 1242.8491 -175 1252.057 -176 1261.3105 -177 1270.6099 -178 1279.9556 -179 1289.3478 -180 1298.787 -181 1308.2735 -182 1317.8075 -183 1327.3894 -184 1337.0197 -185 1346.6985 -186 1356.4262 -187 1366.2032 -188 1376.0298 -189 1385.9062 -190 1395.833 -191 1405.8102 -192 1415.8384 -193 1425.9178 -194 1436.0487 -195 1446.2314 -196 1456.4664 -197 1466.7538 -198 1477.0941 -199 1487.4875 -200 1497.9343 -201 1508.435 -202 1518.9897 -203 1529.5989 -204 1540.2628 -205 1550.9817 -206 1561.756 -207 1572.586 -208 1583.472 -209 1594.4143 -210 1605.4133 -211 1616.4692 -212 1627.5823 -213 1638.753 -214 1649.9816 -215 1661.2684 -216 1672.6137 -217 1684.0178 -218 1695.4811 -219 1707.0038 -220 1718.5863 -221 1730.2288 -222 1741.9317 -223 1753.6953 -224 1765.5199 -225 1777.4059 -226 1789.3534 -227 1801.3629 -228 1813.4347 -229 1825.569 -230 1837.7662 -231 1850.0265 -232 1862.3504 -233 1874.738 -234 1887.1898 -235 1899.706 -236 1912.2869 -237 1924.9329 -238 1937.6442 -239 1950.4212 -240 1963.2642 -241 1976.1735 -242 1989.1494 -243 2002.1922 -244 2015.3022 -245 2028.4797 -246 2041.7252 -247 2055.0387 -248 2068.4208 -249 2081.8716 -250 2095.3916 -251 2108.9809 -252 2122.64 -253 2136.3691 -254 2150.1686 -255 2164.0388 -256 2177.9799 -257 2191.9924 -258 2206.0765 -259 2220.2325 -260 2234.4607 -261 2248.7615 -262 2263.1352 -263 2277.5821 -264 2292.1025 -265 2306.6968 -266 2321.3652 -267 2336.1081 -268 2350.9257 -269 2365.8185 -270 2380.7867 -271 2395.8307 -272 2410.9507 -273 2426.1472 -274 2441.4203 -275 2456.7705 -276 2472.198 -277 2487.7033 -278 2503.2865 -279 2518.9481 -280 2534.6883 -281 2550.5075 -282 2566.4061 -283 2582.3842 -284 2598.4423 -285 2614.5808 -286 2630.7998 -287 2647.0998 -288 2663.481 -289 2679.9439 -290 2696.4887 -291 2713.1157 -292 2729.8254 -293 2746.618 -294 2763.4939 -295 2780.4533 -296 2797.4967 -297 2814.6244 -298 2831.8367 -299 2849.1339 -300 2866.5163 -301 2883.9844 -302 2901.5385 -303 2919.1788 -304 2936.9058 -305 2954.7197 -306 2972.6209 -307 2990.6098 -308 3008.6867 -309 3026.8519 -310 3045.1058 -311 3063.4487 -312 3081.881 -313 3100.403 -314 3119.015 -315 3137.7175 -316 3156.5107 -317 3175.395 -318 3194.3708 -319 3213.4384 -320 3232.5981 -321 3251.8503 -322 3271.1954 -323 3290.6337 -324 3310.1656 -325 3329.7913 -326 3349.5114 -327 3369.326 -328 3389.2357 -329 3409.2407 -330 3429.3414 -331 3449.5382 -332 3469.8314 -333 3490.2213 -334 3510.7084 -335 3531.293 -336 3551.9755 -337 3572.7562 -338 3593.6355 -339 3614.6138 -340 3635.6914 -341 3656.8687 -342 3678.1461 -343 3699.5239 -344 3721.0025 -345 3742.5822 -346 3764.2636 -347 3786.0468 -348 3807.9323 -349 3829.9205 -350 3852.0117 -351 3874.2064 -352 3896.5048 -353 3918.9074 -354 3941.4146 -355 3964.0266 -356 3986.744 -357 4009.5671 -358 4032.4963 -359 4055.5318 -360 4078.6743 -361 4101.9239 -362 4125.2812 -363 4148.7464 -364 4172.3201 -365 4196.0025 -366 4219.794 -367 4243.6951 -368 4267.7061 -369 4291.8275 -370 4316.0596 -371 4340.4028 -372 4364.8575 -373 4389.4241 -374 4414.103 -375 4438.8946 -376 4463.7993 -377 4488.8175 -378 4513.9496 -379 4539.1959 -380 4564.557 -381 4590.0332 -382 4615.6249 -383 4641.3324 -384 4667.1563 -385 4693.097 -386 4719.1547 -387 4745.33 -388 4771.6232 -389 4798.0348 -390 4824.5651 -391 4851.2147 -392 4877.9838 -393 4904.8729 -394 4931.8824 -395 4959.0128 -396 4986.2644 -397 5013.6377 -398 5041.1331 -399 5068.751 -400 5096.4919 -401 5124.3561 -402 5152.344 -403 5180.4562 -404 5208.693 -405 5237.0548 -406 5265.5421 -407 5294.1554 -408 5322.8949 -409 5351.7612 -410 5380.7547 -411 5409.8759 -412 5439.1251 -413 5468.5028 -414 5498.0094 -415 5527.6454 -416 5557.4111 -417 5587.3072 -418 5617.3339 -419 5647.4917 -420 5677.781 -421 5708.2024 -422 5738.7562 -423 5769.4429 -424 5800.2629 -425 5831.2167 -426 5862.3048 -427 5893.5275 -428 5924.8853 -429 5956.3787 -430 5988.0081 -431 6019.7739 -432 6051.6767 -433 6083.7169 -434 6115.895 -435 6148.2113 -436 6180.6663 -437 6213.2606 -438 6245.9945 -439 6278.8686 -440 6311.8832 -441 6345.039 -442 6378.3362 -443 6411.7754 -444 6445.357 -445 6479.0815 -446 6512.9495 -447 6546.9612 -448 6581.1173 -449 6615.4182 -450 6649.8644 -451 6684.4562 -452 6719.1943 -453 6754.0791 -454 6789.111 -455 6824.2905 -456 6859.6182 -457 6895.0945 -458 6930.7198 -459 6966.4947 -460 7002.4196 -461 7038.4951 -462 7074.7215 -463 7111.0995 -464 7147.6294 -465 7184.3118 -466 7221.1471 -467 7258.1359 -468 7295.2787 -469 7332.5758 -470 7370.0279 -471 7407.6354 -472 7445.3988 -473 7483.3187 -474 7521.3954 -475 7559.6295 -476 7598.0216 -477 7636.572 -478 7675.2814 -479 7714.1502 -480 7753.1789 -481 7792.368 -482 7831.7181 -483 7871.2295 -484 7910.903 -485 7950.7389 -486 7990.7377 -487 8030.9001 -488 8071.2264 -489 8111.7172 -490 8152.3731 -491 8193.1945 -492 8234.1819 -493 8275.336 -494 8316.6571 -495 8358.1458 -496 8399.8027 -497 8441.6283 -498 8483.623 -499 8525.7874 -500 8568.1221 -501 8610.6276 -502 8653.3043 -503 8696.1529 -504 8739.1738 -505 8782.3677 -506 8825.7349 -507 8869.2761 -508 8912.9918 -509 8956.8825 -510 9000.9488 -511 9045.1913 -512 9089.6103 -513 9134.2066 -514 9178.9805 -515 9223.9328 -516 9269.0639 -517 9314.3743 -518 9359.8647 -519 9405.5355 -520 9451.3873 -521 9497.4208 -522 9543.6363 -523 9590.0345 -524 9636.6159 -525 9683.3811 -526 9730.3306 -527 9777.465 -528 9824.7849 -529 9872.2908 -530 9919.9832 -531 9967.8628 -532 10015.93 -533 10064.186 -534 10112.63 -535 10161.264 -536 10210.088 -537 10259.102 -538 10308.307 -539 10357.704 -540 10407.294 -541 10457.076 -542 10507.051 -543 10557.221 -544 10607.585 -545 10658.144 -546 10708.899 -547 10759.85 -548 10810.998 -549 10862.344 -550 10913.888 -551 10965.63 -552 11017.571 -553 11069.713 -554 11122.054 -555 11174.597 -556 11227.341 -557 11280.288 -558 11333.437 -559 11386.789 -560 11440.346 -561 11494.107 -562 11548.073 -563 11602.245 -564 11656.623 -565 11711.209 -566 11766.002 -567 11821.003 -568 11876.212 -569 11931.632 -570 11987.261 -571 12043.101 -572 12099.152 -573 12155.414 -574 12211.89 -575 12268.578 -576 12325.48 -577 12382.597 -578 12439.928 -579 12497.475 -580 12555.238 -581 12613.217 -582 12671.414 -583 12729.829 -584 12788.463 -585 12847.316 -586 12906.389 -587 12965.683 -588 13025.198 -589 13084.934 -590 13144.893 -591 13205.075 -592 13265.481 -593 13326.111 -594 13386.966 -595 13448.046 -596 13509.353 -597 13570.887 -598 13632.648 -599 13694.638 -600 13756.856 -601 13819.304 -602 13881.982 -603 13944.891 -604 14008.031 -605 14071.404 -606 14135.009 -607 14198.847 -608 14262.92 -609 14327.227 -610 14391.77 -611 14456.549 -612 14521.564 -613 14586.817 -614 14652.307 -615 14718.037 -616 14784.006 -617 14850.214 -618 14916.664 -619 14983.355 -620 15050.288 -621 15117.463 -622 15184.882 -623 15252.545 -624 15320.453 -625 15388.606 -626 15457.005 -627 15525.651 -628 15594.545 -629 15663.686 -630 15733.077 -631 15802.717 -632 15872.607 -633 15942.748 -634 16013.14 -635 16083.785 -636 16154.683 -637 16225.834 -638 16297.24 -639 16368.901 -640 16440.818 -641 16512.99 -642 16585.421 -643 16658.109 -644 16731.055 -645 16804.261 -646 16877.726 -647 16951.453 -648 17025.44 -649 17099.69 -650 17174.203 -651 17248.979 -652 17324.019 -653 17399.324 -654 17474.895 -655 17550.732 -656 17626.836 -657 17703.208 -658 17779.849 -659 17856.758 -660 17933.938 -661 18011.389 -662 18089.11 -663 18167.104 -664 18245.371 -665 18323.912 -666 18402.726 -667 18481.816 -668 18561.182 -669 18640.824 -670 18720.743 -671 18800.941 -672 18881.417 -673 18962.173 -674 19043.209 -675 19124.526 -676 19206.124 -677 19288.005 -678 19370.17 -679 19452.618 -680 19535.351 -681 19618.369 -682 19701.674 -683 19785.266 -684 19869.145 -685 19953.313 -686 20037.77 -687 20122.518 -688 20207.556 -689 20292.885 -690 20378.507 -691 20464.422 -692 20550.631 -693 20637.134 -694 20723.933 -695 20811.027 -696 20898.419 -697 20986.109 -698 21074.097 -699 21162.384 -700 21250.971 -701 21339.859 -702 21429.048 -703 21518.54 -704 21608.336 -705 21698.435 -706 21788.838 -707 21879.548 -708 21970.563 -709 22061.886 -710 22153.516 -711 22245.456 -712 22337.704 -713 22430.263 -714 22523.133 -715 22616.315 -716 22709.81 -717 22803.618 -718 22897.74 -719 22992.177 -720 23086.93 -721 23182 -722 23277.388 -723 23373.093 -724 23469.118 -725 23565.463 -726 23662.128 -727 23759.116 -728 23856.425 -729 23954.058 -730 24052.014 -731 24150.296 -732 24248.903 -733 24347.837 -734 24447.098 -735 24546.687 -736 24646.605 -737 24746.853 -738 24847.431 -739 24948.341 -740 25049.583 -741 25151.159 -742 25253.068 -743 25355.312 -744 25457.892 -745 25560.808 -746 25664.062 -747 25767.654 -748 25871.585 -749 25975.855 -750 26080.467 -751 26185.42 -752 26290.715 -753 26396.354 -754 26502.337 -755 26608.665 -756 26715.338 -757 26822.359 -758 26929.727 -759 27037.443 -760 27145.509 -761 27253.925 -762 27362.691 -763 27471.81 -764 27581.282 -765 27691.107 -766 27801.287 -767 27911.822 -768 28022.713 -769 28133.961 -770 28245.568 -771 28357.533 -772 28469.858 -773 28582.544 -774 28695.591 -775 28809 -776 28922.773 -777 29036.91 -778 29151.413 -779 29266.281 -780 29381.516 -781 29497.119 -782 29613.09 -783 29729.431 -784 29846.143 -785 29963.226 -786 30080.681 -787 30198.509 -788 30316.711 -789 30435.288 -790 30554.242 -791 30673.572 -792 30793.279 -793 30913.365 -794 31033.831 -795 31154.677 -796 31275.905 -797 31397.515 -798 31519.508 -799 31641.885 -800 31764.647 -801 31887.795 -802 32011.33 -803 32135.253 -804 32259.565 -805 32384.266 -806 32509.358 -807 32634.841 -808 32760.717 -809 32886.986 -810 33013.65 -811 33140.709 -812 33268.164 -813 33396.016 -814 33524.266 -815 33652.916 -816 33781.965 -817 33911.416 -818 34041.268 -819 34171.523 -820 34302.182 -821 34433.246 -822 34564.715 -823 34696.591 -824 34828.875 -825 34961.568 -826 35094.669 -827 35228.182 -828 35362.106 -829 35496.442 -830 35631.192 -831 35766.356 -832 35901.936 -833 36037.932 -834 36174.345 -835 36311.176 -836 36448.427 -837 36586.098 -838 36724.191 -839 36862.705 -840 37001.643 -841 37141.005 -842 37280.792 -843 37421.005 -844 37561.645 -845 37702.713 -846 37844.211 -847 37986.139 -848 38128.498 -849 38271.289 -850 38414.513 -851 38558.171 -852 38702.264 -853 38846.794 -854 38991.76 -855 39137.165 -856 39283.009 -857 39429.293 -858 39576.018 -859 39723.186 -860 39870.796 -861 40018.851 -862 40167.351 -863 40316.297 -864 40465.691 -865 40615.533 -866 40765.824 -867 40916.566 -868 41067.759 -869 41219.404 -870 41371.503 -871 41524.057 -872 41677.065 -873 41830.531 -874 41984.454 -875 42138.836 -876 42293.677 -877 42448.979 -878 42604.743 -879 42760.969 -880 42917.66 -881 43074.815 -882 43232.436 -883 43390.525 -884 43549.081 -885 43708.106 -886 43867.602 -887 44027.569 -888 44188.008 -889 44348.92 -890 44510.307 -891 44672.17 -892 44834.509 -893 44997.325 -894 45160.62 -895 45324.395 -896 45488.651 -897 45653.389 -898 45818.61 -899 45984.314 -900 46150.504 -901 46317.18 -902 46484.344 -903 46651.995 -904 46820.137 -905 46988.769 -906 47157.892 -907 47327.508 -908 47497.618 -909 47668.223 -910 47839.324 -911 48010.923 -912 48183.019 -913 48355.615 -914 48528.711 -915 48702.308 -916 48876.409 -917 49051.013 -918 49226.122 -919 49401.737 -920 49577.859 -921 49754.489 -922 49931.628 -923 50109.278 -924 50287.44 -925 50466.114 -926 50645.302 -927 50825.005 -928 51005.223 -929 51185.96 -930 51367.214 -931 51548.988 -932 51731.282 -933 51914.098 -934 52097.437 -935 52281.3 -936 52465.688 -937 52650.602 -938 52836.044 -939 53022.014 -940 53208.514 -941 53395.545 -942 53583.107 -943 53771.203 -944 53959.833 -945 54148.999 -946 54338.701 -947 54528.941 -948 54719.72 -949 54911.039 -950 55102.899 -951 55295.302 -952 55488.248 -953 55681.739 -954 55875.776 -955 56070.36 -956 56265.492 -957 56461.174 -958 56657.406 -959 56854.19 -960 57051.527 -961 57249.419 -962 57447.865 -963 57646.868 -964 57846.429 -965 58046.549 -966 58247.229 -967 58448.47 -968 58650.273 -969 58852.641 -970 59055.573 -971 59259.071 -972 59463.136 -973 59667.77 -974 59872.974 -975 60078.748 -976 60285.095 -977 60492.015 -978 60699.509 -979 60907.579 -980 61116.226 -981 61325.452 -982 61535.256 -983 61745.642 -984 61956.609 -985 62168.159 -986 62380.293 -987 62593.013 -988 62806.319 -989 63020.214 -990 63234.698 -991 63449.772 -992 63665.438 -993 63881.696 -994 64098.549 -995 64315.997 -996 64534.042 -997 64752.685 -998 64971.927 -999 65191.769 -1000 65412.213 -1001 65633.259 -1002 65854.91 -1003 66077.166 -1004 66300.029 -1005 66523.5 -1006 66747.579 -1007 66972.27 -1008 67197.571 -1009 67423.486 -1010 67650.015 -1011 67877.16 -1012 68104.921 -1013 68333.3 -1014 68562.299 -1015 68791.918 -1016 69022.159 -1017 69253.023 -1018 69484.511 -1019 69716.626 -1020 69949.367 -1021 70182.736 -1022 70416.735 -1023 70651.365 -1024 70886.627 -1025 71122.522 -1026 71359.052 -1027 71596.219 -1028 71834.022 -1029 72072.464 -1030 72311.546 -1031 72551.27 -1032 72791.635 -1033 73032.645 -1034 73274.3 -1035 73516.601 -1036 73759.55 -1037 74003.149 -1038 74247.397 -1039 74492.298 -1040 74737.851 -1041 74984.059 -1042 75230.923 -1043 75478.443 -1044 75726.622 -1045 75975.461 -1046 76224.961 -1047 76475.123 -1048 76725.949 -1049 76977.44 -1050 77229.597 -1051 77482.422 -1052 77735.916 -1053 77990.08 -1054 78244.916 -1055 78500.426 -1056 78756.61 -1057 79013.469 -1058 79271.006 -1059 79529.221 -1060 79788.116 -1061 80047.693 -1062 80307.952 -1063 80568.895 -1064 80830.523 -1065 81092.838 -1066 81355.841 -1067 81619.534 -1068 81883.917 -1069 82148.992 -1070 82414.761 -1071 82681.225 -1072 82948.386 -1073 83216.244 -1074 83484.801 -1075 83754.059 -1076 84024.018 -1077 84294.681 -1078 84566.048 -1079 84838.122 -1080 85110.902 -1081 85384.392 -1082 85658.592 -1083 85933.504 -1084 86209.128 -1085 86485.467 -1086 86762.522 -1087 87040.294 -1088 87318.785 -1089 87597.996 -1090 87877.928 -1091 88158.583 -1092 88439.963 -1093 88722.068 -1094 89004.9 -1095 89288.461 -1096 89572.753 -1097 89857.775 -1098 90143.53 -1099 90430.02 -1100 90717.245 -1101 91005.208 -1102 91293.909 -1103 91583.35 -1104 91873.533 -1105 92164.459 -1106 92456.129 -1107 92748.544 -1108 93041.707 -1109 93335.619 -1110 93630.281 -1111 93925.695 -1112 94221.861 -1113 94518.783 -1114 94816.46 -1115 95114.894 -1116 95414.088 -1117 95714.042 -1118 96014.758 -1119 96316.237 -1120 96618.48 -1121 96921.491 -1122 97225.268 -1123 97529.816 -1124 97835.133 -1125 98141.223 -1126 98448.087 -1127 98755.726 -1128 99064.141 -1129 99373.334 -1130 99683.307 -1131 99994.062 -1132 100305.6 -1133 100617.92 -1134 100931.03 -1135 101244.92 -1136 101559.6 -1137 101875.07 -1138 102191.34 -1139 102508.39 -1140 102826.25 -1141 103144.89 -1142 103464.34 -1143 103784.58 -1144 104105.63 -1145 104427.48 -1146 104750.13 -1147 105073.58 -1148 105397.85 -1149 105722.92 -1150 106048.8 -1151 106375.49 -1152 106703 -1153 107031.32 -1154 107360.45 -1155 107690.41 -1156 108021.18 -1157 108352.77 -1158 108685.19 -1159 109018.42 -1160 109352.49 -1161 109687.38 -1162 110023.1 -1163 110359.65 -1164 110697.03 -1165 111035.24 -1166 111374.29 -1167 111714.17 -1168 112054.89 -1169 112396.45 -1170 112738.86 -1171 113082.1 -1172 113426.19 -1173 113771.12 -1174 114116.9 -1175 114463.53 -1176 114811.01 -1177 115159.34 -1178 115508.53 -1179 115858.57 -1180 116209.46 -1181 116561.22 -1182 116913.83 -1183 117267.31 -1184 117621.65 -1185 117976.85 -1186 118332.92 -1187 118689.86 -1188 119047.67 -1189 119406.34 -1190 119765.89 -1191 120126.32 -1192 120487.62 -1193 120849.8 -1194 121212.85 -1195 121576.79 -1196 121941.61 -1197 122307.32 -1198 122673.91 -1199 123041.38 -1200 123409.75 -1201 123779 -1202 124149.15 -1203 124520.19 -1204 124892.13 -1205 125264.96 -1206 125638.7 -1207 126013.33 -1208 126388.86 -1209 126765.3 -1210 127142.65 -1211 127520.9 -1212 127900.06 -1213 128280.13 -1214 128661.11 -1215 129043 -1216 129425.81 -1217 129809.54 -1218 130194.18 -1219 130579.75 -1220 130966.23 -1221 131353.64 -1222 131741.98 -1223 132131.24 -1224 132521.43 -1225 132912.55 -1226 133304.61 -1227 133697.59 -1228 134091.51 -1229 134486.37 -1230 134882.17 -1231 135278.91 -1232 135676.59 -1233 136075.21 -1234 136474.78 -1235 136875.29 -1236 137276.76 -1237 137679.17 -1238 138082.54 -1239 138486.86 -1240 138892.14 -1241 139298.37 -1242 139705.57 -1243 140113.72 -1244 140522.84 -1245 140932.92 -1246 141343.96 -1247 141755.98 -1248 142168.96 -1249 142582.92 -1250 142997.84 -1251 143413.75 -1252 143830.63 -1253 144248.48 -1254 144667.32 -1255 145087.14 -1256 145507.94 -1257 145929.72 -1258 146352.5 -1259 146776.26 -1260 147201.01 -1261 147626.76 -1262 148053.49 -1263 148481.23 -1264 148909.96 -1265 149339.69 -1266 149770.42 -1267 150202.15 -1268 150634.89 -1269 151068.63 -1270 151503.38 -1271 151939.15 -1272 152375.92 -1273 152813.7 -1274 153252.51 -1275 153692.32 -1276 154133.16 -1277 154575.02 -1278 155017.9 -1279 155461.8 -1280 155906.73 -1281 156352.69 -1282 156799.67 -1283 157247.69 -1284 157696.74 -1285 158146.82 -1286 158597.95 -1287 159050.11 -1288 159503.31 -1289 159957.55 -1290 160412.83 -1291 160869.17 -1292 161326.55 -1293 161784.97 -1294 162244.45 -1295 162704.99 -1296 163166.57 -1297 163629.22 -1298 164092.92 -1299 164557.68 -1300 165023.51 -1301 165490.4 -1302 165958.35 -1303 166427.38 -1304 166897.47 -1305 167368.63 -1306 167840.87 -1307 168314.18 -1308 168788.57 -1309 169264.04 -1310 169740.58 -1311 170218.21 -1312 170696.93 -1313 171176.73 -1314 171657.62 -1315 172139.6 -1316 172622.67 -1317 173106.83 -1318 173592.09 -1319 174078.45 -1320 174565.91 -1321 175054.47 -1322 175544.13 -1323 176034.9 -1324 176526.77 -1325 177019.75 -1326 177513.84 -1327 178009.05 -1328 178505.37 -1329 179002.81 -1330 179501.36 -1331 180001.03 -1332 180501.83 -1333 181003.75 -1334 181506.8 -1335 182010.97 -1336 182516.28 -1337 183022.71 -1338 183530.28 -1339 184038.99 -1340 184548.83 -1341 185059.81 -1342 185571.94 -1343 186085.2 -1344 186599.61 -1345 187115.17 -1346 187631.88 -1347 188149.74 -1348 188668.75 -1349 189188.92 -1350 189710.24 -1351 190232.72 -1352 190756.37 -1353 191281.17 -1354 191807.14 -1355 192334.28 -1356 192862.58 -1357 193392.06 -1358 193922.71 -1359 194454.53 -1360 194987.53 -1361 195521.71 -1362 196057.06 -1363 196593.6 -1364 197131.33 -1365 197670.24 -1366 198210.34 -1367 198751.63 -1368 199294.11 -1369 199837.78 -1370 200382.66 -1371 200928.73 -1372 201476 -1373 202024.47 -1374 202574.15 -1375 203125.03 -1376 203677.12 -1377 204230.42 -1378 204784.93 -1379 205340.66 -1380 205897.61 -1381 206455.77 -1382 207015.15 -1383 207575.76 -1384 208137.59 -1385 208700.64 -1386 209264.93 -1387 209830.44 -1388 210397.19 -1389 210965.17 -1390 211534.39 -1391 212104.84 -1392 212676.54 -1393 213249.48 -1394 213823.67 -1395 214399.1 -1396 214975.78 -1397 215553.71 -1398 216132.89 -1399 216713.33 -1400 217295.03 -1401 217877.98 -1402 218462.2 -1403 219047.68 -1404 219634.43 -1405 220222.44 -1406 220811.72 -1407 221402.27 -1408 221994.1 -1409 222587.2 -1410 223181.58 -1411 223777.24 -1412 224374.19 -1413 224972.41 -1414 225571.92 -1415 226172.72 -1416 226774.82 -1417 227378.2 -1418 227982.88 -1419 228588.85 -1420 229196.12 -1421 229804.7 -1422 230414.58 -1423 231025.76 -1424 231638.25 -1425 232252.04 -1426 232867.15 -1427 233483.58 -1428 234101.32 -1429 234720.37 -1430 235340.75 -1431 235962.45 -1432 236585.47 -1433 237209.82 -1434 237835.5 -1435 238462.51 -1436 239090.85 -1437 239720.52 -1438 240351.54 -1439 240983.89 -1440 241617.58 -1441 242252.62 -1442 242889 -1443 243526.73 -1444 244165.81 -1445 244806.25 -1446 245448.03 -1447 246091.18 -1448 246735.68 -1449 247381.54 -1450 248028.77 -1451 248677.36 -1452 249327.32 -1453 249978.64 -1454 250631.34 -1455 251285.42 -1456 251940.87 -1457 252597.7 -1458 253255.9 -1459 253915.5 -1460 254576.47 -1461 255238.83 -1462 255902.59 -1463 256567.73 -1464 257234.27 -1465 257902.2 -1466 258571.53 -1467 259242.27 -1468 259914.4 -1469 260587.94 -1470 261262.89 -1471 261939.24 -1472 262617.01 -1473 263296.19 -1474 263976.79 -1475 264658.8 -1476 265342.24 -1477 266027.09 -1478 266713.38 -1479 267401.09 -1480 268090.23 -1481 268780.8 -1482 269472.8 -1483 270166.24 -1484 270861.12 -1485 271557.44 -1486 272255.21 -1487 272954.41 -1488 273655.07 -1489 274357.17 -1490 275060.73 -1491 275765.74 -1492 276472.21 -1493 277180.14 -1494 277889.53 -1495 278600.38 -1496 279312.7 -1497 280026.48 -1498 280741.74 -1499 281458.46 -1500 282176.67 -1501 282896.35 -1502 283617.51 -1503 284340.15 -1504 285064.27 -1505 285789.88 -1506 286516.98 -1507 287245.57 -1508 287975.66 -1509 288707.24 -1510 289440.32 -1511 290174.89 -1512 290910.98 -1513 291648.56 -1514 292387.65 -1515 293128.26 -1516 293870.37 -1517 294614 -1518 295359.14 -1519 296105.81 -1520 296853.99 -1521 297603.7 -1522 298354.94 -1523 299107.7 -1524 299861.99 -1525 300617.82 -1526 301375.18 -1527 302134.08 -1528 302894.52 -1529 303656.51 -1530 304420.03 -1531 305185.11 -1532 305951.73 -1533 306719.91 -1534 307489.64 -1535 308260.93 -1536 309033.77 -1537 309808.18 -1538 310584.15 -1539 311361.69 -1540 312140.8 -1541 312921.48 -1542 313703.73 -1543 314487.55 -1544 315272.96 -1545 316059.95 -1546 316848.51 -1547 317638.67 -1548 318430.41 -1549 319223.74 -1550 320018.67 -1551 320815.19 -1552 321613.31 -1553 322413.03 -1554 323214.35 -1555 324017.27 -1556 324821.81 -1557 325627.95 -1558 326435.7 -1559 327245.07 -1560 328056.06 -1561 328868.67 -1562 329682.89 -1563 330498.75 -1564 331316.23 -1565 332135.34 -1566 332956.08 -1567 333778.45 -1568 334602.46 -1569 335428.11 -1570 336255.4 -1571 337084.34 -1572 337914.92 -1573 338747.15 -1574 339581.04 -1575 340416.58 -1576 341253.77 -1577 342092.62 -1578 342933.14 -1579 343775.31 -1580 344619.16 -1581 345464.67 -1582 346311.86 -1583 347160.72 -1584 348011.25 -1585 348863.47 -1586 349717.36 -1587 350572.94 -1588 351430.21 -1589 352289.17 -1590 353149.81 -1591 354012.15 -1592 354876.19 -1593 355741.93 -1594 356609.37 -1595 357478.51 -1596 358349.36 -1597 359221.92 -1598 360096.19 -1599 360972.17 -1600 361849.87 -1601 362729.29 -1602 363610.44 -1603 364493.3 -1604 365377.9 -1605 366264.22 -1606 367152.28 -1607 368042.07 -1608 368933.6 -1609 369826.87 -1610 370721.88 -1611 371618.63 -1612 372517.14 -1613 373417.39 -1614 374319.4 -1615 375223.16 -1616 376128.68 -1617 377035.96 -1618 377945 -1619 378855.81 -1620 379768.39 -1621 380682.73 -1622 381598.86 -1623 382516.75 -1624 383436.43 -1625 384357.89 -1626 385281.13 -1627 386206.16 -1628 387132.97 -1629 388061.58 -1630 388991.99 -1631 389924.19 -1632 390858.19 -1633 391793.99 -1634 392731.6 -1635 393671.01 -1636 394612.24 -1637 395555.27 -1638 396500.13 -1639 397446.8 -1640 398395.29 -1641 399345.61 -1642 400297.75 -1643 401251.72 -1644 402207.52 -1645 403165.16 -1646 404124.63 -1647 405085.94 -1648 406049.09 -1649 407014.09 -1650 407980.94 -1651 408949.64 -1652 409920.18 -1653 410892.59 -1654 411866.85 -1655 412842.97 -1656 413820.96 -1657 414800.81 -1658 415782.53 -1659 416766.13 -1660 417751.59 -1661 418738.94 -1662 419728.16 -1663 420719.27 -1664 421712.26 -1665 422707.14 -1666 423703.91 -1667 424702.57 -1668 425703.13 -1669 426705.59 -1670 427709.95 -1671 428716.21 -1672 429724.38 -1673 430734.46 -1674 431746.46 -1675 432760.36 -1676 433776.19 -1677 434793.93 -1678 435813.6 -1679 436835.2 -1680 437858.72 -1681 438884.18 -1682 439911.57 -1683 440940.89 -1684 441972.16 -1685 443005.37 -1686 444040.52 -1687 445077.63 -1688 446116.68 -1689 447157.69 -1690 448200.65 -1691 449245.58 -1692 450292.46 -1693 451341.31 -1694 452392.13 -1695 453444.92 -1696 454499.68 -1697 455556.42 -1698 456615.14 -1699 457675.83 -1700 458738.52 -1701 459803.19 -1702 460869.85 -1703 461938.5 -1704 463009.15 -1705 464081.8 -1706 465156.45 -1707 466233.1 -1708 467311.76 -1709 468392.43 -1710 469475.11 -1711 470559.81 -1712 471646.52 -1713 472735.26 -1714 473826.02 -1715 474918.81 -1716 476013.63 -1717 477110.48 -1718 478209.37 -1719 479310.29 -1720 480413.26 -1721 481518.27 -1722 482625.32 -1723 483734.43 -1724 484845.59 -1725 485958.8 -1726 487074.07 -1727 488191.41 -1728 489310.81 -1729 490432.27 -1730 491555.81 -1731 492681.42 -1732 493809.1 -1733 494938.86 -1734 496070.71 -1735 497204.63 -1736 498340.65 -1737 499478.75 -1738 500618.95 -1739 501761.25 -1740 502905.64 -1741 504052.14 -1742 505200.74 -1743 506351.45 -1744 507504.27 -1745 508659.2 -1746 509816.25 -1747 510975.42 -1748 512136.71 -1749 513300.12 -1750 514465.67 -1751 515633.34 -1752 516803.15 -1753 517975.1 -1754 519149.19 -1755 520325.42 -1756 521503.79 -1757 522684.32 -1758 523866.99 -1759 525051.83 -1760 526238.81 -1761 527427.97 -1762 528619.28 -1763 529812.76 -1764 531008.41 -1765 532206.23 -1766 533406.23 -1767 534608.41 -1768 535812.77 -1769 537019.32 -1770 538228.05 -1771 539438.97 -1772 540652.09 -1773 541867.4 -1774 543084.91 -1775 544304.63 -1776 545526.55 -1777 546750.68 -1778 547977.02 -1779 549205.58 -1780 550436.35 -1781 551669.35 -1782 552904.57 -1783 554142.01 -1784 555381.69 -1785 556623.6 -1786 557867.74 -1787 559114.13 -1788 560362.76 -1789 561613.63 -1790 562866.75 -1791 564122.12 -1792 565379.74 -1793 566639.63 -1794 567901.77 -1795 569166.18 -1796 570432.85 -1797 571701.8 -1798 572973.01 -1799 574246.51 -1800 575522.28 -1801 576800.33 -1802 578080.67 -1803 579363.3 -1804 580648.21 -1805 581935.43 -1806 583224.94 -1807 584516.75 -1808 585810.86 -1809 587107.28 -1810 588406.02 -1811 589707.06 -1812 591010.42 -1813 592316.1 -1814 593624.1 -1815 594934.43 -1816 596247.09 -1817 597562.07 -1818 598879.4 -1819 600199.06 -1820 601521.06 -1821 602845.41 -1822 604172.1 -1823 605501.15 -1824 606832.55 -1825 608166.3 -1826 609502.42 -1827 610840.9 -1828 612181.74 -1829 613524.96 -1830 614870.55 -1831 616218.51 -1832 617568.85 -1833 618921.58 -1834 620276.69 -1835 621634.19 -1836 622994.08 -1837 624356.37 -1838 625721.05 -1839 627088.14 -1840 628457.63 -1841 629829.53 -1842 631203.84 -1843 632580.56 -1844 633959.7 -1845 635341.26 -1846 636725.25 -1847 638111.66 -1848 639500.5 -1849 640891.78 -1850 642285.49 -1851 643681.65 -1852 645080.24 -1853 646481.28 -1854 647884.78 -1855 649290.72 -1856 650699.12 -1857 652109.98 -1858 653523.31 -1859 654939.1 -1860 656357.36 -1861 657778.09 -1862 659201.29 -1863 660626.98 -1864 662055.15 -1865 663485.8 -1866 664918.94 -1867 666354.58 -1868 667792.71 -1869 669233.33 -1870 670676.46 -1871 672122.1 -1872 673570.24 -1873 675020.9 -1874 676474.07 -1875 677929.76 -1876 679387.97 -1877 680848.7 -1878 682311.96 -1879 683777.76 -1880 685246.09 -1881 686716.96 -1882 688190.37 -1883 689666.32 -1884 691144.82 -1885 692625.88 -1886 694109.48 -1887 695595.65 -1888 697084.38 -1889 698575.67 -1890 700069.53 -1891 701565.97 -1892 703064.97 -1893 704566.56 -1894 706070.73 -1895 707577.48 -1896 709086.82 -1897 710598.75 -1898 712113.28 -1899 713630.4 -1900 715150.13 -1901 716672.46 -1902 718197.41 -1903 719724.96 -1904 721255.13 -1905 722787.91 -1906 724323.32 -1907 725861.36 -1908 727402.02 -1909 728945.31 -1910 730491.24 -1911 732039.81 -1912 733591.03 -1913 735144.89 -1914 736701.39 -1915 738260.55 -1916 739822.37 -1917 741386.85 -1918 742953.98 -1919 744523.79 -1920 746096.26 -1921 747671.41 -1922 749249.24 -1923 750829.74 -1924 752412.93 -1925 753998.81 -1926 755587.37 -1927 757178.63 -1928 758772.59 -1929 760369.25 -1930 761968.61 -1931 763570.68 -1932 765175.46 -1933 766782.96 -1934 768393.17 -1935 770006.11 -1936 771621.77 -1937 773240.16 -1938 774861.28 -1939 776485.14 -1940 778111.74 -1941 779741.08 -1942 781373.16 -1943 783008 -1944 784645.58 -1945 786285.93 -1946 787929.03 -1947 789574.9 -1948 791223.54 -1949 792874.94 -1950 794529.12 -1951 796186.08 -1952 797845.82 -1953 799508.34 -1954 801173.65 -1955 802841.76 -1956 804512.66 -1957 806186.36 -1958 807862.86 -1959 809542.16 -1960 811224.28 -1961 812909.21 -1962 814596.95 -1963 816287.52 -1964 817980.91 -1965 819677.13 -1966 821376.18 -1967 823078.06 -1968 824782.78 -1969 826490.34 -1970 828200.75 -1971 829914.01 -1972 831630.12 -1973 833349.08 -1974 835070.91 -1975 836795.59 -1976 838523.15 -1977 840253.57 -1978 841986.87 -1979 843723.05 -1980 845462.11 -1981 847204.05 -1982 848948.88 -1983 850696.6 -1984 852447.22 -1985 854200.74 -1986 855957.16 -1987 857716.49 -1988 859478.73 -1989 861243.88 -1990 863011.95 -1991 864782.94 -1992 866556.86 -1993 868333.7 -1994 870113.48 -1995 871896.19 -1996 873681.84 -1997 875470.44 -1998 877261.98 -1999 879056.47 -2000 880853.92 -2001 882654.32 -2002 884457.69 -2003 886264.02 -2004 888073.32 -2005 889885.59 -2006 891700.84 -2007 893519.07 -2008 895340.28 -2009 897164.48 -2010 898991.67 -2011 900821.86 -2012 902655.04 -2013 904491.23 -2014 906330.42 -2015 908172.62 -2016 910017.84 -2017 911866.07 -2018 913717.33 -2019 915571.6 -2020 917428.91 -2021 919289.25 -2022 921152.62 -2023 923019.04 -2024 924888.49 -2025 926761 -2026 928636.55 -2027 930515.16 -2028 932396.83 -2029 934281.56 -2030 936169.36 -2031 938060.22 -2032 939954.16 -2033 941851.18 -2034 943751.27 -2035 945654.46 -2036 947560.73 -2037 949470.09 -2038 951382.55 -2039 953298.11 -2040 955216.77 -2041 957138.54 -2042 959063.42 -2043 960991.42 -2044 962922.53 -2045 964856.77 -2046 966794.14 -2047 968734.63 -2048 970678.26 -2049 972625.03 -2050 974574.94 -2051 976528 -2052 978484.2 -2053 980443.56 -2054 982406.08 -2055 984371.75 -2056 986340.59 -2057 988312.6 -2058 990287.79 -2059 992266.15 -2060 994247.69 -2061 996232.41 -2062 998220.33 -2063 1000211.4 -2064 1002205.7 -2065 1004203.2 -2066 1006203.9 -2067 1008207.8 -2068 1010215 -2069 1012225.3 -2070 1014238.9 -2071 1016255.6 -2072 1018275.7 -2073 1020298.9 -2074 1022325.4 -2075 1024355.1 -2076 1026388 -2077 1028424.2 -2078 1030463.7 -2079 1032506.4 -2080 1034552.4 -2081 1036601.6 -2082 1038654.1 -2083 1040709.8 -2084 1042768.9 -2085 1044831.2 -2086 1046896.8 -2087 1048965.7 -2088 1051037.9 -2089 1053113.3 -2090 1055192.1 -2091 1057274.2 -2092 1059359.5 -2093 1061448.2 -2094 1063540.2 -2095 1065635.5 -2096 1067734.2 -2097 1069836.1 -2098 1071941.4 -2099 1074050 -2100 1076162 -2101 1078277.3 -2102 1080395.9 -2103 1082517.9 -2104 1084643.3 -2105 1086772 -2106 1088904.1 -2107 1091039.5 -2108 1093178.3 -2109 1095320.5 -2110 1097466.1 -2111 1099615 -2112 1101767.3 -2113 1103923 -2114 1106082.1 -2115 1108244.7 -2116 1110410.6 -2117 1112579.9 -2118 1114752.6 -2119 1116928.7 -2120 1119108.3 -2121 1121291.3 -2122 1123477.7 -2123 1125667.5 -2124 1127860.8 -2125 1130057.5 -2126 1132257.6 -2127 1134461.2 -2128 1136668.3 -2129 1138878.8 -2130 1141092.8 -2131 1143310.2 -2132 1145531.1 -2133 1147755.4 -2134 1149983.3 -2135 1152214.6 -2136 1154449.4 -2137 1156687.7 -2138 1158929.5 -2139 1161174.7 -2140 1163423.5 -2141 1165675.8 -2142 1167931.6 -2143 1170190.9 -2144 1172453.7 -2145 1174720 -2146 1176989.9 -2147 1179263.3 -2148 1181540.2 -2149 1183820.7 -2150 1186104.7 -2151 1188392.2 -2152 1190683.3 -2153 1192978 -2154 1195276.2 -2155 1197578 -2156 1199883.3 -2157 1202192.2 -2158 1204504.7 -2159 1206820.8 -2160 1209140.4 -2161 1211463.7 -2162 1213790.5 -2163 1216120.9 -2164 1218454.9 -2165 1220792.5 -2166 1223133.8 -2167 1225478.6 -2168 1227827.1 -2169 1230179.2 -2170 1232534.9 -2171 1234894.2 -2172 1237257.2 -2173 1239623.8 -2174 1241994.1 -2175 1244368 -2176 1246745.5 -2177 1249126.7 -2178 1251511.6 -2179 1253900.1 -2180 1256292.3 -2181 1258688.2 -2182 1261087.7 -2183 1263490.9 -2184 1265897.8 -2185 1268308.4 -2186 1270722.7 -2187 1273140.7 -2188 1275562.4 -2189 1277987.8 -2190 1280416.9 -2191 1282849.7 -2192 1285286.2 -2193 1287726.5 -2194 1290170.5 -2195 1292618.2 -2196 1295069.7 -2197 1297524.9 -2198 1299983.8 -2199 1302446.5 -2200 1304912.9 -2201 1307383.1 -2202 1309857.1 -2203 1312334.8 -2204 1314816.3 -2205 1317301.6 -2206 1319790.7 -2207 1322283.5 -2208 1324780.1 -2209 1327280.6 -2210 1329784.8 -2211 1332292.8 -2212 1334804.6 -2213 1337320.2 -2214 1339839.7 -2215 1342363 -2216 1344890 -2217 1347421 -2218 1349955.7 -2219 1352494.3 -2220 1355036.7 -2221 1357583 -2222 1360133.1 -2223 1362687.1 -2224 1365244.9 -2225 1367806.6 -2226 1370372.2 -2227 1372941.6 -2228 1375514.9 -2229 1378092.1 -2230 1380673.2 -2231 1383258.1 -2232 1385847 -2233 1388439.7 -2234 1391036.4 -2235 1393637 -2236 1396241.4 -2237 1398849.8 -2238 1401462.1 -2239 1404078.4 -2240 1406698.5 -2241 1409322.6 -2242 1411950.7 -2243 1414582.7 -2244 1417218.6 -2245 1419858.5 -2246 1422502.3 -2247 1425150.1 -2248 1427801.8 -2249 1430457.6 -2250 1433117.3 -2251 1435781 -2252 1438448.6 -2253 1441120.3 -2254 1443795.9 -2255 1446475.5 -2256 1449159.2 -2257 1451846.8 -2258 1454538.5 -2259 1457234.2 -2260 1459933.8 -2261 1462637.6 -2262 1465345.3 -2263 1468057.1 -2264 1470772.9 -2265 1473492.7 -2266 1476216.6 -2267 1478944.6 -2268 1481676.6 -2269 1484412.6 -2270 1487152.8 -2271 1489897 -2272 1492645.2 -2273 1495397.6 -2274 1498154 -2275 1500914.5 -2276 1503679.2 -2277 1506447.9 -2278 1509220.7 -2279 1511997.6 -2280 1514778.6 -2281 1517563.8 -2282 1520353 -2283 1523146.4 -2284 1525943.9 -2285 1528745.6 -2286 1531551.3 -2287 1534361.3 -2288 1537175.3 -2289 1539993.6 -2290 1542815.9 -2291 1545642.5 -2292 1548473.2 -2293 1551308.1 -2294 1554147.1 -2295 1556990.4 -2296 1559837.8 -2297 1562689.4 -2298 1565545.2 -2299 1568405.2 -2300 1571269.4 -2301 1574137.8 -2302 1577010.4 -2303 1579887.3 -2304 1582768.3 -2305 1585653.6 -2306 1588543.1 -2307 1591436.9 -2308 1594334.9 -2309 1597237.1 -2310 1600143.6 -2311 1603054.4 -2312 1605969.4 -2313 1608888.6 -2314 1611812.2 -2315 1614740 -2316 1617672.1 -2317 1620608.4 -2318 1623549.1 -2319 1626494 -2320 1629443.3 -2321 1632396.8 -2322 1635354.7 -2323 1638316.9 -2324 1641283.4 -2325 1644254.2 -2326 1647229.3 -2327 1650208.8 -2328 1653192.5 -2329 1656180.7 -2330 1659173.2 -2331 1662170 -2332 1665171.2 -2333 1668176.7 -2334 1671186.6 -2335 1674200.9 -2336 1677219.6 -2337 1680242.6 -2338 1683270 -2339 1686301.8 -2340 1689338 -2341 1692378.6 -2342 1695423.6 -2343 1698473 -2344 1701526.8 -2345 1704585 -2346 1707647.6 -2347 1710714.7 -2348 1713786.2 -2349 1716862.2 -2350 1719942.5 -2351 1723027.4 -2352 1726116.7 -2353 1729210.4 -2354 1732308.6 -2355 1735411.2 -2356 1738518.4 -2357 1741630 -2358 1744746.1 -2359 1747866.6 -2360 1750991.7 -2361 1754121.2 -2362 1757255.3 -2363 1760393.8 -2364 1763536.9 -2365 1766684.5 -2366 1769836.6 -2367 1772993.2 -2368 1776154.4 -2369 1779320.1 -2370 1782490.3 -2371 1785665 -2372 1788844.4 -2373 1792028.2 -2374 1795216.7 -2375 1798409.6 -2376 1801607.2 -2377 1804809.3 -2378 1808016 -2379 1811227.3 -2380 1814443.2 -2381 1817663.7 -2382 1820888.8 -2383 1824118.4 -2384 1827352.7 -2385 1830591.6 -2386 1833835.1 -2387 1837083.3 -2388 1840336 -2389 1843593.4 -2390 1846855.5 -2391 1850122.1 -2392 1853393.5 -2393 1856669.4 -2394 1859950.1 -2395 1863235.4 -2396 1866525.3 -2397 1869820 -2398 1873119.3 -2399 1876423.3 -2400 1879732 -2401 1883045.3 -2402 1886363.4 -2403 1889686.2 -2404 1893013.7 -2405 1896345.9 -2406 1899682.8 -2407 1903024.4 -2408 1906370.8 -2409 1909721.9 -2410 1913077.7 -2411 1916438.3 -2412 1919803.7 -2413 1923173.7 -2414 1926548.6 -2415 1929928.2 -2416 1933312.6 -2417 1936701.7 -2418 1940095.7 -2419 1943494.4 -2420 1946897.9 -2421 1950306.2 -2422 1953719.3 -2423 1957137.2 -2424 1960559.9 -2425 1963987.4 -2426 1967419.7 -2427 1970856.9 -2428 1974298.9 -2429 1977745.7 -2430 1981197.4 -2431 1984653.9 -2432 1988115.3 -2433 1991581.5 -2434 1995052.6 -2435 1998528.6 -2436 2002009.4 -2437 2005495.1 -2438 2008985.7 -2439 2012481.2 -2440 2015981.5 -2441 2019486.8 -2442 2022996.9 -2443 2026512 -2444 2030032 -2445 2033556.9 -2446 2037086.7 -2447 2040621.4 -2448 2044161.1 -2449 2047705.7 -2450 2051255.3 -2451 2054809.8 -2452 2058369.3 -2453 2061933.7 -2454 2065503.1 -2455 2069077.5 -2456 2072656.8 -2457 2076241.1 -2458 2079830.4 -2459 2083424.7 -2460 2087024 -2461 2090628.3 -2462 2094237.6 -2463 2097851.9 -2464 2101471.2 -2465 2105095.6 -2466 2108725 -2467 2112359.4 -2468 2115998.8 -2469 2119643.3 -2470 2123292.9 -2471 2126947.5 -2472 2130607.1 -2473 2134271.8 -2474 2137941.6 -2475 2141616.5 -2476 2145296.4 -2477 2148981.5 -2478 2152671.6 -2479 2156366.8 -2480 2160067.1 -2481 2163772.5 -2482 2167483.1 -2483 2171198.7 -2484 2174919.5 -2485 2178645.4 -2486 2182376.5 -2487 2186112.7 -2488 2189854 -2489 2193600.5 -2490 2197352.1 -2491 2201108.9 -2492 2204870.8 -2493 2208638 -2494 2212410.3 -2495 2216187.8 -2496 2219970.4 -2497 2223758.3 -2498 2227551.4 -2499 2231349.7 -2500 2235153.1 -2501 2238961.8 -2502 2242775.8 -2503 2246594.9 -2504 2250419.3 -2505 2254248.9 -2506 2258083.7 -2507 2261923.8 -2508 2265769.2 -2509 2269619.8 -2510 2273475.6 -2511 2277336.8 -2512 2281203.2 -2513 2285074.9 -2514 2288951.9 -2515 2292834.1 -2516 2296721.7 -2517 2300614.6 -2518 2304512.7 -2519 2308416.2 -2520 2312325 -2521 2316239.2 -2522 2320158.6 -2523 2324083.4 -2524 2328013.5 -2525 2331949 -2526 2335889.8 -2527 2339836 -2528 2343787.6 -2529 2347744.5 -2530 2351706.8 -2531 2355674.4 -2532 2359647.5 -2533 2363625.9 -2534 2367609.8 -2535 2371599 -2536 2375593.6 -2537 2379593.7 -2538 2383599.1 -2539 2387610 -2540 2391626.4 -2541 2395648.1 -2542 2399675.3 -2543 2403707.9 -2544 2407746 -2545 2411789.6 -2546 2415838.6 -2547 2419893 -2548 2423953 -2549 2428018.4 -2550 2432089.3 -2551 2436165.7 -2552 2440247.6 -2553 2444335 -2554 2448427.9 -2555 2452526.3 -2556 2456630.2 -2557 2460739.7 -2558 2464854.7 -2559 2468975.2 -2560 2473101.2 -2561 2477232.8 -2562 2481370 -2563 2485512.7 -2564 2489661 -2565 2493814.8 -2566 2497974.2 -2567 2502139.2 -2568 2506309.8 -2569 2510486 -2570 2514667.7 -2571 2518855.1 -2572 2523048.1 -2573 2527246.7 -2574 2531450.9 -2575 2535660.7 -2576 2539876.2 -2577 2544097.3 -2578 2548324 -2579 2552556.4 -2580 2556794.5 -2581 2561038.2 -2582 2565287.5 -2583 2569542.6 -2584 2573803.3 -2585 2578069.7 -2586 2582341.8 -2587 2586619.6 -2588 2590903 -2589 2595192.2 -2590 2599487.1 -2591 2603787.7 -2592 2608094.1 -2593 2612406.1 -2594 2616723.9 -2595 2621047.5 -2596 2625376.7 -2597 2629711.8 -2598 2634052.6 -2599 2638399.1 -2600 2642751.4 -2601 2647109.5 -2602 2651473.4 -2603 2655843.1 -2604 2660218.5 -2605 2664599.8 -2606 2668986.8 -2607 2673379.7 -2608 2677778.4 -2609 2682182.9 -2610 2686593.2 -2611 2691009.3 -2612 2695431.3 -2613 2699859.2 -2614 2704292.9 -2615 2708732.4 -2616 2713177.8 -2617 2717629.1 -2618 2722086.2 -2619 2726549.3 -2620 2731018.2 -2621 2735493 -2622 2739973.7 -2623 2744460.3 -2624 2748952.8 -2625 2753451.2 -2626 2757955.6 -2627 2762465.8 -2628 2766982 -2629 2771504.2 -2630 2776032.3 -2631 2780566.3 -2632 2785106.3 -2633 2789652.3 -2634 2794204.2 -2635 2798762.1 -2636 2803325.9 -2637 2807895.8 -2638 2812471.7 -2639 2817053.5 -2640 2821641.3 -2641 2826235.2 -2642 2830835.1 -2643 2835441 -2644 2840052.9 -2645 2844670.9 -2646 2849294.9 -2647 2853924.9 -2648 2858561 -2649 2863203.1 -2650 2867851.3 -2651 2872505.6 -2652 2877166 -2653 2881832.4 -2654 2886504.9 -2655 2891183.5 -2656 2895868.3 -2657 2900559.1 -2658 2905256 -2659 2909959.1 -2660 2914668.2 -2661 2919383.5 -2662 2924105 -2663 2928832.5 -2664 2933566.3 -2665 2938306.1 -2666 2943052.2 -2667 2947804.4 -2668 2952562.7 -2669 2957327.3 -2670 2962098 -2671 2966874.9 -2672 2971658 -2673 2976447.4 -2674 2981242.9 -2675 2986044.6 -2676 2990852.6 -2677 2995666.8 -2678 3000487.2 -2679 3005313.8 -2680 3010146.7 -2681 3014985.9 -2682 3019831.3 -2683 3024683 -2684 3029540.9 -2685 3034405.1 -2686 3039275.6 -2687 3044152.4 -2688 3049035.5 -2689 3053924.8 -2690 3058820.5 -2691 3063722.5 -2692 3068630.8 -2693 3073545.5 -2694 3078466.4 -2695 3083393.7 -2696 3088327.4 -2697 3093267.4 -2698 3098213.7 -2699 3103166.4 -2700 3108125.5 -2701 3113090.9 -2702 3118062.8 -2703 3123041 -2704 3128025.6 -2705 3133016.6 -2706 3138014 -2707 3143017.8 -2708 3148028 -2709 3153044.7 -2710 3158067.8 -2711 3163097.3 -2712 3168133.3 -2713 3173175.7 -2714 3178224.6 -2715 3183279.9 -2716 3188341.7 -2717 3193410 -2718 3198484.7 -2719 3203565.9 -2720 3208653.7 -2721 3213747.9 -2722 3218848.6 -2723 3223955.8 -2724 3229069.6 -2725 3234189.9 -2726 3239316.7 -2727 3244450 -2728 3249589.9 -2729 3254736.4 -2730 3259889.3 -2731 3265048.9 -2732 3270215 -2733 3275387.7 -2734 3280567 -2735 3285752.8 -2736 3290945.3 -2737 3296144.3 -2738 3301350 -2739 3306562.3 -2740 3311781.2 -2741 3317006.7 -2742 3322238.8 -2743 3327477.6 -2744 3332723 -2745 3337975.1 -2746 3343233.8 -2747 3348499.2 -2748 3353771.3 -2749 3359050 -2750 3364335.4 -2751 3369627.5 -2752 3374926.3 -2753 3380231.8 -2754 3385544 -2755 3390863 -2756 3396188.6 -2757 3401521 -2758 3406860.1 -2759 3412205.9 -2760 3417558.5 -2761 3422917.8 -2762 3428283.9 -2763 3433656.8 -2764 3439036.5 -2765 3444422.9 -2766 3449816.1 -2767 3455216.1 -2768 3460622.9 -2769 3466036.4 -2770 3471456.9 -2771 3476884.1 -2772 3482318.1 -2773 3487759 -2774 3493206.7 -2775 3498661.3 -2776 3504122.7 -2777 3509590.9 -2778 3515066.1 -2779 3520548 -2780 3526036.9 -2781 3531532.7 -2782 3537035.3 -2783 3542544.8 -2784 3548061.3 -2785 3553584.6 -2786 3559114.9 -2787 3564652.1 -2788 3570196.2 -2789 3575747.2 -2790 3581305.2 -2791 3586870.1 -2792 3592442 -2793 3598020.9 -2794 3603606.7 -2795 3609199.5 -2796 3614799.2 -2797 3620406 -2798 3626019.7 -2799 3631640.5 -2800 3637268.2 -2801 3642903 -2802 3648544.8 -2803 3654193.6 -2804 3659849.5 -2805 3665512.4 -2806 3671182.3 -2807 3676859.3 -2808 3682543.3 -2809 3688234.4 -2810 3693932.6 -2811 3699637.9 -2812 3705350.3 -2813 3711069.7 -2814 3716796.3 -2815 3722529.9 -2816 3728270.7 -2817 3734018.6 -2818 3739773.6 -2819 3745535.7 -2820 3751305 -2821 3757081.5 -2822 3762865 -2823 3768655.8 -2824 3774453.7 -2825 3780258.8 -2826 3786071.1 -2827 3791890.5 -2828 3797717.2 -2829 3803551 -2830 3809392.1 -2831 3815240.3 -2832 3821095.8 -2833 3826958.5 -2834 3832828.5 -2835 3838705.7 -2836 3844590.1 -2837 3850481.8 -2838 3856380.8 -2839 3862287 -2840 3868200.5 -2841 3874121.3 -2842 3880049.3 -2843 3885984.7 -2844 3891927.4 -2845 3897877.3 -2846 3903834.6 -2847 3909799.2 -2848 3915771.2 -2849 3921750.4 -2850 3927737 -2851 3933731 -2852 3939732.3 -2853 3945741 -2854 3951757.1 -2855 3957780.5 -2856 3963811.3 -2857 3969849.5 -2858 3975895.1 -2859 3981948.1 -2860 3988008.5 -2861 3994076.4 -2862 4000151.6 -2863 4006234.3 -2864 4012324.4 -2865 4018422 -2866 4024527 -2867 4030639.5 -2868 4036759.5 -2869 4042886.9 -2870 4049021.8 -2871 4055164.2 -2872 4061314.1 -2873 4067471.4 -2874 4073636.3 -2875 4079808.7 -2876 4085988.7 -2877 4092176.1 -2878 4098371.1 -2879 4104573.6 -2880 4110783.7 -2881 4117001.4 -2882 4123226.6 -2883 4129459.3 -2884 4135699.7 -2885 4141947.6 -2886 4148203.1 -2887 4154466.2 -2888 4160737 -2889 4167015.3 -2890 4173301.2 -2891 4179594.8 -2892 4185896 -2893 4192204.9 -2894 4198521.4 -2895 4204845.5 -2896 4211177.4 -2897 4217516.8 -2898 4223864 -2899 4230218.8 -2900 4236581.3 -2901 4242951.6 -2902 4249329.5 -2903 4255715.1 -2904 4262108.5 -2905 4268509.6 -2906 4274918.4 -2907 4281334.9 -2908 4287759.2 -2909 4294191.2 -2910 4300631 -2911 4307078.6 -2912 4313533.9 -2913 4319997.1 -2914 4326468 -2915 4332946.7 -2916 4339433.2 -2917 4345927.5 -2918 4352429.6 -2919 4358939.6 -2920 4365457.4 -2921 4371983 -2922 4378516.5 -2923 4385057.8 -2924 4391607 -2925 4398164 -2926 4404728.9 -2927 4411301.7 -2928 4417882.4 -2929 4424471 -2930 4431067.5 -2931 4437671.9 -2932 4444284.2 -2933 4450904.4 -2934 4457532.6 -2935 4464168.7 -2936 4470812.7 -2937 4477464.7 -2938 4484124.7 -2939 4490792.6 -2940 4497468.5 -2941 4504152.4 -2942 4510844.2 -2943 4517544.1 -2944 4524251.9 -2945 4530967.8 -2946 4537691.7 -2947 4544423.6 -2948 4551163.6 -2949 4557911.5 -2950 4564667.6 -2951 4571431.7 -2952 4578203.8 -2953 4584984 -2954 4591772.3 -2955 4598568.7 -2956 4605373.1 -2957 4612185.7 -2958 4619006.4 -2959 4625835.1 -2960 4632672 -2961 4639517 -2962 4646370.2 -2963 4653231.5 -2964 4660100.9 -2965 4666978.5 -2966 4673864.3 -2967 4680758.2 -2968 4687660.3 -2969 4694570.6 -2970 4701489.1 -2971 4708415.8 -2972 4715350.7 -2973 4722293.8 -2974 4729245.1 -2975 4736204.6 -2976 4743172.4 -2977 4750148.5 -2978 4757132.7 -2979 4764125.3 -2980 4771126.1 -2981 4778135.2 -2982 4785152.5 -2983 4792178.2 -2984 4799212.1 -2985 4806254.4 -2986 4813304.9 -2987 4820363.8 -2988 4827431 -2989 4834506.6 -2990 4841590.4 -2991 4848682.6 -2992 4855783.2 -2993 4862892.2 -2994 4870009.5 -2995 4877135.2 -2996 4884269.2 -2997 4891411.7 -2998 4898562.5 -2999 4905721.8 -3000 4912889.5 -3001 4920065.6 -3002 4927250.1 -3003 4934443.1 -3004 4941644.5 -3005 4948854.4 -3006 4956072.7 -3007 4963299.5 -3008 4970534.8 -3009 4977778.5 -3010 4985030.8 -3011 4992291.5 -3012 4999560.7 -3013 5006838.5 -3014 5014124.8 -3015 5021419.6 -3016 5028722.9 -3017 5036034.8 -3018 5043355.2 -3019 5050684.2 -3020 5058021.7 -3021 5065367.9 -3022 5072722.6 -3023 5080085.9 -3024 5087457.7 -3025 5094838.2 -3026 5102227.3 -3027 5109625 -3028 5117031.4 -3029 5124446.4 -3030 5131870 -3031 5139302.2 -3032 5146743.2 -3033 5154192.7 -3034 5161651 -3035 5169117.9 -3036 5176593.6 -3037 5184077.9 -3038 5191570.9 -3039 5199072.6 -3040 5206583.1 -3041 5214102.2 -3042 5221630.1 -3043 5229166.8 -3044 5236712.2 -3045 5244266.3 -3046 5251829.2 -3047 5259400.9 -3048 5266981.4 -3049 5274570.6 -3050 5282168.7 -3051 5289775.5 -3052 5297391.2 -3053 5305015.6 -3054 5312648.9 -3055 5320291 -3056 5327942 -3057 5335601.8 -3058 5343270.5 -3059 5350948 -3060 5358634.4 -3061 5366329.7 -3062 5374033.9 -3063 5381747 -3064 5389468.9 -3065 5397199.8 -3066 5404939.6 -3067 5412688.3 -3068 5420446 -3069 5428212.6 -3070 5435988.2 -3071 5443772.7 -3072 5451566.1 -3073 5459368.6 -3074 5467180 -3075 5475000.4 -3076 5482829.8 -3077 5490668.2 -3078 5498515.7 -3079 5506372.1 -3080 5514237.6 -3081 5522112.1 -3082 5529995.6 -3083 5537888.2 -3084 5545789.9 -3085 5553700.6 -3086 5561620.4 -3087 5569549.3 -3088 5577487.3 -3089 5585434.4 -3090 5593390.5 -3091 5601355.8 -3092 5609330.2 -3093 5617313.8 -3094 5625306.5 -3095 5633308.3 -3096 5641319.3 -3097 5649339.4 -3098 5657368.7 -3099 5665407.2 -3100 5673454.9 -3101 5681511.8 -3102 5689577.8 -3103 5697653.1 -3104 5705737.6 -3105 5713831.3 -3106 5721934.3 -3107 5730046.5 -3108 5738167.9 -3109 5746298.6 -3110 5754438.6 -3111 5762587.8 -3112 5770746.3 -3113 5778914.2 -3114 5787091.3 -3115 5795277.7 -3116 5803473.4 -3117 5811678.4 -3118 5819892.8 -3119 5828116.5 -3120 5836349.6 -3121 5844592 -3122 5852843.8 -3123 5861104.9 -3124 5869375.4 -3125 5877655.3 -3126 5885944.6 -3127 5894243.3 -3128 5902551.4 -3129 5910868.9 -3130 5919195.9 -3131 5927532.3 -3132 5935878.1 -3133 5944233.4 -3134 5952598.1 -3135 5960972.3 -3136 5969356 -3137 5977749.1 -3138 5986151.8 -3139 5994563.9 -3140 6002985.6 -3141 6011416.7 -3142 6019857.4 -3143 6028307.6 -3144 6036767.4 -3145 6045236.7 -3146 6053715.6 -3147 6062204 -3148 6070702 -3149 6079209.6 -3150 6087726.7 -3151 6096253.5 -3152 6104789.8 -3153 6113335.8 -3154 6121891.4 -3155 6130456.6 -3156 6139031.5 -3157 6147616 -3158 6156210.2 -3159 6164814 -3160 6173427.5 -3161 6182050.7 -3162 6190683.5 -3163 6199326.1 -3164 6207978.4 -3165 6216640.3 -3166 6225312 -3167 6233993.4 -3168 6242684.6 -3169 6251385.5 -3170 6260096.1 -3171 6268816.6 -3172 6277546.7 -3173 6286286.7 -3174 6295036.4 -3175 6303796 -3176 6312565.3 -3177 6321344.5 -3178 6330133.4 -3179 6338932.2 -3180 6347740.9 -3181 6356559.3 -3182 6365387.7 -3183 6374225.9 -3184 6383073.9 -3185 6391931.9 -3186 6400799.7 -3187 6409677.4 -3188 6418565 -3189 6427462.5 -3190 6436370 -3191 6445287.4 -3192 6454214.7 -3193 6463151.9 -3194 6472099.1 -3195 6481056.3 -3196 6490023.4 -3197 6499000.5 -3198 6507987.6 -3199 6516984.7 -3200 6525991.8 -3201 6535008.9 -3202 6544036.1 -3203 6553073.2 -3204 6562120.4 -3205 6571177.6 -3206 6580244.9 -3207 6589322.3 -3208 6598409.7 -3209 6607507.2 -3210 6616614.8 -3211 6625732.5 -3212 6634860.3 -3213 6643998.2 -3214 6653146.2 -3215 6662304.4 -3216 6671472.6 -3217 6680651.1 -3218 6689839.7 -3219 6699038.4 -3220 6708247.4 -3221 6717466.5 -3222 6726695.8 -3223 6735935.2 -3224 6745184.9 -3225 6754444.9 -3226 6763715 -3227 6772995.4 -3228 6782286 -3229 6791586.8 -3230 6800898 -3231 6810219.3 -3232 6819551 -3233 6828892.9 -3234 6838245.2 -3235 6847607.7 -3236 6856980.5 -3237 6866363.7 -3238 6875757.2 -3239 6885161 -3240 6894575.2 -3241 6903999.7 -3242 6913434.6 -3243 6922879.8 -3244 6932335.4 -3245 6941801.4 -3246 6951277.8 -3247 6960764.6 -3248 6970261.9 -3249 6979769.5 -3250 6989287.6 -3251 6998816.1 -3252 7008355 -3253 7017904.4 -3254 7027464.3 -3255 7037034.6 -3256 7046615.5 -3257 7056206.8 -3258 7065808.6 -3259 7075420.9 -3260 7085043.8 -3261 7094677.1 -3262 7104321 -3263 7113975.5 -3264 7123640.5 -3265 7133316 -3266 7143002.2 -3267 7152698.9 -3268 7162406.1 -3269 7172124 -3270 7181852.5 -3271 7191591.6 -3272 7201341.3 -3273 7211101.7 -3274 7220872.6 -3275 7230654.3 -3276 7240446.6 -3277 7250249.5 -3278 7260063.2 -3279 7269887.5 -3280 7279722.5 -3281 7289568.2 -3282 7299424.6 -3283 7309291.7 -3284 7319169.6 -3285 7329058.2 -3286 7338957.5 -3287 7348867.6 -3288 7358788.4 -3289 7368720.1 -3290 7378662.5 -3291 7388615.7 -3292 7398579.6 -3293 7408554.4 -3294 7418540 -3295 7428536.5 -3296 7438543.7 -3297 7448561.9 -3298 7458590.8 -3299 7468630.6 -3300 7478681.3 -3301 7488742.9 -3302 7498815.3 -3303 7508898.7 -3304 7518992.9 -3305 7529098.1 -3306 7539214.2 -3307 7549341.2 -3308 7559479.1 -3309 7569628 -3310 7579787.9 -3311 7589958.7 -3312 7600140.5 -3313 7610333.3 -3314 7620537.1 -3315 7630751.9 -3316 7640977.7 -3317 7651214.5 -3318 7661462.4 -3319 7671721.2 -3320 7681991.2 -3321 7692272.2 -3322 7702564.2 -3323 7712867.3 -3324 7723181.6 -3325 7733506.9 -3326 7743843.3 -3327 7754190.8 -3328 7764549.4 -3329 7774919.2 -3330 7785300.1 -3331 7795692.1 -3332 7806095.4 -3333 7816509.7 -3334 7826935.3 -3335 7837372 -3336 7847819.9 -3337 7858279 -3338 7868749.4 -3339 7879230.9 -3340 7889723.7 -3341 7900227.7 -3342 7910743 -3343 7921269.5 -3344 7931807.3 -3345 7942356.3 -3346 7952916.7 -3347 7963488.3 -3348 7974071.3 -3349 7984665.5 -3350 7995271.1 -3351 8005888 -3352 8016516.2 -3353 8027155.8 -3354 8037806.7 -3355 8048469 -3356 8059142.7 -3357 8069827.8 -3358 8080524.2 -3359 8091232.1 -3360 8101951.3 -3361 8112682 -3362 8123424.2 -3363 8134177.7 -3364 8144942.7 -3365 8155719.2 -3366 8166507.1 -3367 8177306.5 -3368 8188117.4 -3369 8198939.8 -3370 8209773.7 -3371 8220619.1 -3372 8231476 -3373 8242344.5 -3374 8253224.5 -3375 8264116 -3376 8275019.1 -3377 8285933.8 -3378 8296860.1 -3379 8307797.9 -3380 8318747.4 -3381 8329708.4 -3382 8340681.1 -3383 8351665.4 -3384 8362661.3 -3385 8373668.8 -3386 8384688 -3387 8395718.9 -3388 8406761.5 -3389 8417815.7 -3390 8428881.6 -3391 8439959.2 -3392 8451048.6 -3393 8462149.6 -3394 8473262.4 -3395 8484386.9 -3396 8495523.1 -3397 8506671.2 -3398 8517830.9 -3399 8529002.5 -3400 8540185.8 -3401 8551380.9 -3402 8562587.9 -3403 8573806.6 -3404 8585037.2 -3405 8596279.6 -3406 8607533.8 -3407 8618799.9 -3408 8630077.8 -3409 8641367.6 -3410 8652669.3 -3411 8663982.9 -3412 8675308.4 -3413 8686645.7 -3414 8697995 -3415 8709356.3 -3416 8720729.4 -3417 8732114.5 -3418 8743511.6 -3419 8754920.6 -3420 8766341.6 -3421 8777774.5 -3422 8789219.5 -3423 8800676.5 -3424 8812145.5 -3425 8823626.4 -3426 8835119.5 -3427 8846624.5 -3428 8858141.7 -3429 8869670.8 -3430 8881212.1 -3431 8892765.4 -3432 8904330.8 -3433 8915908.3 -3434 8927497.9 -3435 8939099.6 -3436 8950713.5 -3437 8962339.5 -3438 8973977.6 -3439 8985627.9 -3440 8997290.3 -3441 9008965 -3442 9020651.8 -3443 9032350.8 -3444 9044062 -3445 9055785.4 -3446 9067521 -3447 9079268.9 -3448 9091029 -3449 9102801.4 -3450 9114586 -3451 9126382.9 -3452 9138192 -3453 9150013.5 -3454 9161847.3 -3455 9173693.3 -3456 9185551.7 -3457 9197422.4 -3458 9209305.5 -3459 9221200.9 -3460 9233108.6 -3461 9245028.8 -3462 9256961.3 -3463 9268906.2 -3464 9280863.4 -3465 9292833.1 -3466 9304815.2 -3467 9316809.8 -3468 9328816.7 -3469 9340836.1 -3470 9352868 -3471 9364912.3 -3472 9376969.1 -3473 9389038.4 -3474 9401120.2 -3475 9413214.5 -3476 9425321.3 -3477 9437440.6 -3478 9449572.5 -3479 9461716.9 -3480 9473873.8 -3481 9486043.3 -3482 9498225.4 -3483 9510420.1 -3484 9522627.3 -3485 9534847.2 -3486 9547079.7 -3487 9559324.8 -3488 9571582.5 -3489 9583852.8 -3490 9596135.9 -3491 9608431.5 -3492 9620739.9 -3493 9633060.9 -3494 9645394.6 -3495 9657741.1 -3496 9670100.2 -3497 9682472 -3498 9694856.6 -3499 9707253.9 -3500 9719664 -3501 9732086.8 -3502 9744522.4 -3503 9756970.8 -3504 9769432 -3505 9781906 -3506 9794392.8 -3507 9806892.4 -3508 9819404.8 -3509 9831930.1 -3510 9844468.2 -3511 9857019.1 -3512 9869583 -3513 9882159.7 -3514 9894749.3 -3515 9907351.9 -3516 9919967.3 -3517 9932595.6 -3518 9945236.9 -3519 9957891.1 -3520 9970558.3 -3521 9983238.4 -3522 9995931.5 -3523 10008638 -3524 10021357 -3525 10034089 -3526 10046834 -3527 10059592 -3528 10072363 -3529 10085147 -3530 10097944 -3531 10110755 -3532 10123578 -3533 10136414 -3534 10149264 -3535 10162127 -3536 10175002 -3537 10187891 -3538 10200793 -3539 10213708 -3540 10226636 -3541 10239578 -3542 10252532 -3543 10265500 -3544 10278481 -3545 10291475 -3546 10304483 -3547 10317503 -3548 10330537 -3549 10343584 -3550 10356645 -3551 10369718 -3552 10382805 -3553 10395905 -3554 10409019 -3555 10422146 -3556 10435286 -3557 10448439 -3558 10461606 -3559 10474786 -3560 10487979 -3561 10501186 -3562 10514406 -3563 10527640 -3564 10540887 -3565 10554147 -3566 10567421 -3567 10580708 -3568 10594009 -3569 10607323 -3570 10620650 -3571 10633991 -3572 10647346 -3573 10660714 -3574 10674095 -3575 10687490 -3576 10700899 -3577 10714321 -3578 10727756 -3579 10741206 -3580 10754668 -3581 10768144 -3582 10781634 -3583 10795138 -3584 10808655 -3585 10822185 -3586 10835730 -3587 10849288 -3588 10862859 -3589 10876444 -3590 10890043 -3591 10903656 -3592 10917282 -3593 10930922 -3594 10944576 -3595 10958243 -3596 10971924 -3597 10985619 -3598 10999327 -3599 11013050 -3600 11026786 -3601 11040536 -3602 11054299 -3603 11068077 -3604 11081868 -3605 11095673 -3606 11109492 -3607 11123325 -3608 11137171 -3609 11151032 -3610 11164906 -3611 11178794 -3612 11192697 -3613 11206613 -3614 11220543 -3615 11234486 -3616 11248444 -3617 11262416 -3618 11276402 -3619 11290401 -3620 11304415 -3621 11318443 -3622 11332484 -3623 11346540 -3624 11360610 -3625 11374694 -3626 11388791 -3627 11402903 -3628 11417029 -3629 11431169 -3630 11445323 -3631 11459491 -3632 11473673 -3633 11487870 -3634 11502080 -3635 11516305 -3636 11530544 -3637 11544797 -3638 11559064 -3639 11573345 -3640 11587641 -3641 11601950 -3642 11616274 -3643 11630612 -3644 11644965 -3645 11659331 -3646 11673712 -3647 11688107 -3648 11702517 -3649 11716940 -3650 11731378 -3651 11745831 -3652 11760297 -3653 11774778 -3654 11789273 -3655 11803783 -3656 11818307 -3657 11832845 -3658 11847398 -3659 11861965 -3660 11876547 -3661 11891143 -3662 11905753 -3663 11920378 -3664 11935017 -3665 11949671 -3666 11964339 -3667 11979022 -3668 11993719 -3669 12008431 -3670 12023157 -3671 12037898 -3672 12052653 -3673 12067423 -3674 12082208 -3675 12097006 -3676 12111820 -3677 12126648 -3678 12141491 -3679 12156348 -3680 12171220 -3681 12186107 -3682 12201008 -3683 12215924 -3684 12230854 -3685 12245800 -3686 12260760 -3687 12275734 -3688 12290724 -3689 12305728 -3690 12320746 -3691 12335780 -3692 12350828 -3693 12365891 -3694 12380969 -3695 12396062 -3696 12411169 -3697 12426291 -3698 12441428 -3699 12456580 -3700 12471747 -3701 12486929 -3702 12502125 -3703 12517336 -3704 12532563 -3705 12547804 -3706 12563060 -3707 12578331 -3708 12593616 -3709 12608917 -3710 12624233 -3711 12639564 -3712 12654909 -3713 12670270 -3714 12685646 -3715 12701036 -3716 12716442 -3717 12731863 -3718 12747299 -3719 12762749 -3720 12778215 -3721 12793696 -3722 12809192 -3723 12824703 -3724 12840230 -3725 12855771 -3726 12871327 -3727 12886899 -3728 12902486 -3729 12918088 -3730 12933705 -3731 12949337 -3732 12964985 -3733 12980647 -3734 12996325 -3735 13012019 -3736 13027727 -3737 13043451 -3738 13059190 -3739 13074944 -3740 13090713 -3741 13106498 -3742 13122298 -3743 13138113 -3744 13153944 -3745 13169790 -3746 13185652 -3747 13201529 -3748 13217421 -3749 13233328 -3750 13249251 -3751 13265190 -3752 13281143 -3753 13297113 -3754 13313097 -3755 13329098 -3756 13345113 -3757 13361144 -3758 13377191 -3759 13393253 -3760 13409330 -3761 13425424 -3762 13441532 -3763 13457656 -3764 13473796 -3765 13489951 -3766 13506122 -3767 13522309 -3768 13538511 -3769 13554729 -3770 13570962 -3771 13587211 -3772 13603476 -3773 13619756 -3774 13636052 -3775 13652363 -3776 13668691 -3777 13685034 -3778 13701393 -3779 13717767 -3780 13734157 -3781 13750563 -3782 13766985 -3783 13783423 -3784 13799876 -3785 13816345 -3786 13832830 -3787 13849331 -3788 13865847 -3789 13882380 -3790 13898928 -3791 13915492 -3792 13932072 -3793 13948668 -3794 13965280 -3795 13981907 -3796 13998551 -3797 14015211 -3798 14031886 -3799 14048578 -3800 14065285 -3801 14082008 -3802 14098748 -3803 14115503 -3804 14132275 -3805 14149062 -3806 14165866 -3807 14182685 -3808 14199521 -3809 14216373 -3810 14233240 -3811 14250124 -3812 14267024 -3813 14283940 -3814 14300873 -3815 14317821 -3816 14334786 -3817 14351766 -3818 14368763 -3819 14385776 -3820 14402806 -3821 14419851 -3822 14436913 -3823 14453991 -3824 14471085 -3825 14488196 -3826 14505322 -3827 14522465 -3828 14539625 -3829 14556800 -3830 14573992 -3831 14591201 -3832 14608425 -3833 14625666 -3834 14642924 -3835 14660197 -3836 14677488 -3837 14694794 -3838 14712117 -3839 14729456 -3840 14746812 -3841 14764185 -3842 14781573 -3843 14798978 -3844 14816400 -3845 14833838 -3846 14851293 -3847 14868764 -3848 14886252 -3849 14903756 -3850 14921277 -3851 14938815 -3852 14956369 -3853 14973939 -3854 14991526 -3855 15009130 -3856 15026751 -3857 15044388 -3858 15062041 -3859 15079712 -3860 15097399 -3861 15115103 -3862 15132823 -3863 15150560 -3864 15168314 -3865 15186085 -3866 15203872 -3867 15221676 -3868 15239497 -3869 15257335 -3870 15275189 -3871 15293061 -3872 15310949 -3873 15328854 -3874 15346776 -3875 15364714 -3876 15382670 -3877 15400642 -3878 15418631 -3879 15436637 -3880 15454661 -3881 15472701 -3882 15490758 -3883 15508831 -3884 15526922 -3885 15545030 -3886 15563155 -3887 15581297 -3888 15599456 -3889 15617631 -3890 15635824 -3891 15654034 -3892 15672261 -3893 15690505 -3894 15708767 -3895 15727045 -3896 15745340 -3897 15763653 -3898 15781982 -3899 15800329 -3900 15818693 -3901 15837074 -3902 15855472 -3903 15873888 -3904 15892320 -3905 15910770 -3906 15929237 -3907 15947722 -3908 15966223 -3909 15984742 -3910 16003278 -3911 16021832 -3912 16040403 -3913 16058991 -3914 16077596 -3915 16096219 -3916 16114859 -3917 16133516 -3918 16152191 -3919 16170883 -3920 16189593 -3921 16208320 -3922 16227064 -3923 16245826 -3924 16264605 -3925 16283402 -3926 16302217 -3927 16321048 -3928 16339898 -3929 16358764 -3930 16377649 -3931 16396550 -3932 16415470 -3933 16434407 -3934 16453361 -3935 16472333 -3936 16491323 -3937 16510330 -3938 16529355 -3939 16548398 -3940 16567458 -3941 16586536 -3942 16605631 -3943 16624745 -3944 16643875 -3945 16663024 -3946 16682190 -3947 16701375 -3948 16720576 -3949 16739796 -3950 16759033 -3951 16778288 -3952 16797561 -3953 16816852 -3954 16836161 -3955 16855487 -3956 16874831 -3957 16894193 -3958 16913573 -3959 16932971 -3960 16952387 -3961 16971821 -3962 16991272 -3963 17010742 -3964 17030229 -3965 17049735 -3966 17069258 -3967 17088799 -3968 17108359 -3969 17127936 -3970 17147532 -3971 17167145 -3972 17186776 -3973 17206426 -3974 17226094 -3975 17245779 -3976 17265483 -3977 17285205 -3978 17304945 -3979 17324703 -3980 17344479 -3981 17364274 -3982 17384087 -3983 17403917 -3984 17423766 -3985 17443634 -3986 17463519 -3987 17483423 -3988 17503345 -3989 17523285 -3990 17543243 -3991 17563220 -3992 17583215 -3993 17603229 -3994 17623260 -3995 17643310 -3996 17663379 -3997 17683465 -3998 17703571 -3999 17723694 -4000 17743836 -4001 17763996 -4002 17784175 -4003 17804372 -4004 17824588 -4005 17844822 -4006 17865075 -4007 17885346 -4008 17905635 -4009 17925943 -4010 17946270 -4011 17966615 -4012 17986979 -4013 18007361 -4014 18027762 -4015 18048181 -4016 18068619 -4017 18089076 -4018 18109551 -4019 18130045 -4020 18150558 -4021 18171089 -4022 18191639 -4023 18212208 -4024 18232795 -4025 18253401 -4026 18274026 -4027 18294670 -4028 18315332 -4029 18336013 -4030 18356713 -4031 18377432 -4032 18398169 -4033 18418926 -4034 18439701 -4035 18460495 -4036 18481308 -4037 18502139 -4038 18522990 -4039 18543860 -4040 18564748 -4041 18585656 -4042 18606582 -4043 18627527 -4044 18648491 -4045 18669475 -4046 18690477 -4047 18711498 -4048 18732538 -4049 18753598 -4050 18774676 -4051 18795773 -4052 18816890 -4053 18838025 -4054 18859180 -4055 18880354 -4056 18901547 -4057 18922759 -4058 18943990 -4059 18965240 -4060 18986510 -4061 19007798 -4062 19029106 -4063 19050433 -4064 19071780 -4065 19093145 -4066 19114530 -4067 19135934 -4068 19157358 -4069 19178800 -4070 19200262 -4071 19221744 -4072 19243244 -4073 19264764 -4074 19286304 -4075 19307862 -4076 19329441 -4077 19351038 -4078 19372655 -4079 19394291 -4080 19415947 -4081 19437622 -4082 19459317 -4083 19481031 -4084 19502765 -4085 19524518 -4086 19546291 -4087 19568083 -4088 19589895 -4089 19611726 -4090 19633577 -4091 19655448 -4092 19677338 -4093 19699248 -4094 19721177 -4095 19743126 -4096 19765094 -4097 19787083 -4098 19809091 -4099 19831118 -4100 19853166 -4101 19875233 -4102 19897320 -4103 19919426 -4104 19941553 -4105 19963699 -4106 19985865 -4107 20008050 -4108 20030256 -4109 20052481 -4110 20074726 -4111 20096991 -4112 20119276 -4113 20141581 -4114 20163906 -4115 20186250 -4116 20208615 -4117 20230999 -4118 20253404 -4119 20275828 -4120 20298272 -4121 20320737 -4122 20343221 -4123 20365725 -4124 20388249 -4125 20410794 -4126 20433358 -4127 20455943 -4128 20478547 -4129 20501172 -4130 20523817 -4131 20546482 -4132 20569167 -4133 20591872 -4134 20614597 -4135 20637343 -4136 20660109 -4137 20682894 -4138 20705701 -4139 20728527 -4140 20751374 -4141 20774240 -4142 20797128 -4143 20820035 -4144 20842963 -4145 20865911 -4146 20888879 -4147 20911868 -4148 20934877 -4149 20957906 -4150 20980956 -4151 21004026 -4152 21027117 -4153 21050228 -4154 21073360 -4155 21096512 -4156 21119684 -4157 21142877 -4158 21166090 -4159 21189324 -4160 21212578 -4161 21235853 -4162 21259149 -4163 21282465 -4164 21305801 -4165 21329159 -4166 21352536 -4167 21375935 -4168 21399354 -4169 21422793 -4170 21446254 -4171 21469735 -4172 21493236 -4173 21516759 -4174 21540302 -4175 21563866 -4176 21587450 -4177 21611055 -4178 21634681 -4179 21658328 -4180 21681996 -4181 21705684 -4182 21729394 -4183 21753124 -4184 21776875 -4185 21800646 -4186 21824439 -4187 21848253 -4188 21872087 -4189 21895943 -4190 21919819 -4191 21943716 -4192 21967634 -4193 21991574 -4194 22015534 -4195 22039515 -4196 22063517 -4197 22087541 -4198 22111585 -4199 22135650 -4200 22159737 -4201 22183844 -4202 22207973 -4203 22232122 -4204 22256293 -4205 22280485 -4206 22304698 -4207 22328933 -4208 22353188 -4209 22377465 -4210 22401763 -4211 22426082 -4212 22450422 -4213 22474784 -4214 22499167 -4215 22523571 -4216 22547997 -4217 22572443 -4218 22596911 -4219 22621401 -4220 22645912 -4221 22670444 -4222 22694997 -4223 22719572 -4224 22744169 -4225 22768787 -4226 22793426 -4227 22818086 -4228 22842769 -4229 22867472 -4230 22892197 -4231 22916944 -4232 22941712 -4233 22966502 -4234 22991313 -4235 23016146 -4236 23041000 -4237 23065876 -4238 23090774 -4239 23115693 -4240 23140634 -4241 23165596 -4242 23190580 -4243 23215586 -4244 23240614 -4245 23265663 -4246 23290734 -4247 23315827 -4248 23340941 -4249 23366077 -4250 23391235 -4251 23416415 -4252 23441617 -4253 23466840 -4254 23492085 -4255 23517352 -4256 23542641 -4257 23567952 -4258 23593285 -4259 23618639 -4260 23644016 -4261 23669414 -4262 23694835 -4263 23720277 -4264 23745742 -4265 23771228 -4266 23796736 -4267 23822267 -4268 23847819 -4269 23873394 -4270 23898990 -4271 23924609 -4272 23950250 -4273 23975913 -4274 24001598 -4275 24027305 -4276 24053034 -4277 24078785 -4278 24104559 -4279 24130355 -4280 24156173 -4281 24182013 -4282 24207876 -4283 24233760 -4284 24259667 -4285 24285597 -4286 24311548 -4287 24337522 -4288 24363518 -4289 24389537 -4290 24415578 -4291 24441641 -4292 24467727 -4293 24493835 -4294 24519965 -4295 24546118 -4296 24572294 -4297 24598492 -4298 24624712 -4299 24650955 -4300 24677220 -4301 24703508 -4302 24729818 -4303 24756151 -4304 24782506 -4305 24808884 -4306 24835285 -4307 24861708 -4308 24888154 -4309 24914623 -4310 24941114 -4311 24967627 -4312 24994164 -4313 25020723 -4314 25047305 -4315 25073909 -4316 25100537 -4317 25127187 -4318 25153860 -4319 25180555 -4320 25207274 -4321 25234015 -4322 25260779 -4323 25287566 -4324 25314376 -4325 25341208 -4326 25368064 -4327 25394942 -4328 25421843 -4329 25448768 -4330 25475715 -4331 25502685 -4332 25529678 -4333 25556694 -4334 25583733 -4335 25610795 -4336 25637880 -4337 25664989 -4338 25692120 -4339 25719274 -4340 25746452 -4341 25773652 -4342 25800876 -4343 25828122 -4344 25855392 -4345 25882686 -4346 25910002 -4347 25937341 -4348 25964704 -4349 25992090 -4350 26019499 -4351 26046931 -4352 26074387 -4353 26101866 -4354 26129368 -4355 26156894 -4356 26184443 -4357 26212015 -4358 26239611 -4359 26267230 -4360 26294872 -4361 26322538 -4362 26350227 -4363 26377940 -4364 26405676 -4365 26433435 -4366 26461218 -4367 26489025 -4368 26516855 -4369 26544709 -4370 26572586 -4371 26600486 -4372 26628411 -4373 26656359 -4374 26684330 -4375 26712325 -4376 26740344 -4377 26768386 -4378 26796452 -4379 26824542 -4380 26852655 -4381 26880792 -4382 26908953 -4383 26937137 -4384 26965346 -4385 26993578 -4386 27021834 -4387 27050113 -4388 27078417 -4389 27106744 -4390 27135095 -4391 27163470 -4392 27191869 -4393 27220292 -4394 27248738 -4395 27277209 -4396 27305703 -4397 27334222 -4398 27362764 -4399 27391331 -4400 27419921 -4401 27448535 -4402 27477174 -4403 27505836 -4404 27534523 -4405 27563233 -4406 27591968 -4407 27620727 -4408 27649510 -4409 27678317 -4410 27707148 -4411 27736003 -4412 27764883 -4413 27793787 -4414 27822715 -4415 27851667 -4416 27880643 -4417 27909644 -4418 27938669 -4419 27967718 -4420 27996792 -4421 28025889 -4422 28055012 -4423 28084158 -4424 28113329 -4425 28142524 -4426 28171744 -4427 28200988 -4428 28230257 -4429 28259550 -4430 28288867 -4431 28318209 -4432 28347575 -4433 28376966 -4434 28406382 -4435 28435822 -4436 28465286 -4437 28494775 -4438 28524289 -4439 28553827 -4440 28583390 -4441 28612977 -4442 28642589 -4443 28672226 -4444 28701888 -4445 28731574 -4446 28761285 -4447 28791020 -4448 28820780 -4449 28850566 -4450 28880375 -4451 28910210 -4452 28940069 -4453 28969954 -4454 28999863 -4455 29029797 -4456 29059755 -4457 29089739 -4458 29119748 -4459 29149781 -4460 29179839 -4461 29209923 -4462 29240031 -4463 29270164 -4464 29300322 -4465 29330506 -4466 29360714 -4467 29390947 -4468 29421206 -4469 29451489 -4470 29481797 -4471 29512131 -4472 29542490 -4473 29572874 -4474 29603283 -4475 29633717 -4476 29664176 -4477 29694660 -4478 29725170 -4479 29755705 -4480 29786265 -4481 29816851 -4482 29847461 -4483 29878097 -4484 29908759 -4485 29939445 -4486 29970157 -4487 30000895 -4488 30031657 -4489 30062445 -4490 30093259 -4491 30124098 -4492 30154962 -4493 30185852 -4494 30216767 -4495 30247707 -4496 30278674 -4497 30309665 -4498 30340682 -4499 30371725 -4500 30402793 -4501 30433887 -4502 30465007 -4503 30496152 -4504 30527323 -4505 30558519 -4506 30589741 -4507 30620989 -4508 30652262 -4509 30683561 -4510 30714886 -4511 30746236 -4512 30777612 -4513 30809014 -4514 30840442 -4515 30871896 -4516 30903375 -4517 30934880 -4518 30966411 -4519 30997968 -4520 31029551 -4521 31061160 -4522 31092794 -4523 31124455 -4524 31156141 -4525 31187854 -4526 31219592 -4527 31251357 -4528 31283147 -4529 31314964 -4530 31346806 -4531 31378675 -4532 31410569 -4533 31442490 -4534 31474437 -4535 31506410 -4536 31538409 -4537 31570434 -4538 31602485 -4539 31634563 -4540 31666666 -4541 31698796 -4542 31730953 -4543 31763135 -4544 31795344 -4545 31827579 -4546 31859840 -4547 31892128 -4548 31924442 -4549 31956782 -4550 31989149 -4551 32021542 -4552 32053961 -4553 32086407 -4554 32118879 -4555 32151378 -4556 32183903 -4557 32216455 -4558 32249033 -4559 32281637 -4560 32314269 -4561 32346926 -4562 32379611 -4563 32412321 -4564 32445059 -4565 32477823 -4566 32510614 -4567 32543431 -4568 32576275 -4569 32609146 -4570 32642043 -4571 32674967 -4572 32707918 -4573 32740895 -4574 32773900 -4575 32806931 -4576 32839988 -4577 32873073 -4578 32906185 -4579 32939323 -4580 32972488 -4581 33005680 -4582 33038899 -4583 33072145 -4584 33105417 -4585 33138717 -4586 33172044 -4587 33205397 -4588 33238778 -4589 33272186 -4590 33305620 -4591 33339082 -4592 33372571 -4593 33406086 -4594 33439629 -4595 33473199 -4596 33506796 -4597 33540420 -4598 33574072 -4599 33607750 -4600 33641456 -4601 33675189 -4602 33708949 -4603 33742737 -4604 33776551 -4605 33810393 -4606 33844262 -4607 33878159 -4608 33912083 -4609 33946034 -4610 33980012 -4611 34014018 -4612 34048052 -4613 34082112 -4614 34116200 -4615 34150316 -4616 34184459 -4617 34218629 -4618 34252827 -4619 34287053 -4620 34321306 -4621 34355586 -4622 34389894 -4623 34424230 -4624 34458593 -4625 34492984 -4626 34527402 -4627 34561848 -4628 34596322 -4629 34630824 -4630 34665353 -4631 34699909 -4632 34734494 -4633 34769106 -4634 34803746 -4635 34838414 -4636 34873110 -4637 34907833 -4638 34942584 -4639 34977363 -4640 35012170 -4641 35047005 -4642 35081868 -4643 35116758 -4644 35151677 -4645 35186623 -4646 35221598 -4647 35256600 -4648 35291630 -4649 35326689 -4650 35361775 -4651 35396890 -4652 35432032 -4653 35467203 -4654 35502401 -4655 35537628 -4656 35572883 -4657 35608166 -4658 35643478 -4659 35678817 -4660 35714185 -4661 35749580 -4662 35785004 -4663 35820457 -4664 35855937 -4665 35891446 -4666 35926983 -4667 35962549 -4668 35998143 -4669 36033765 -4670 36069415 -4671 36105094 -4672 36140802 -4673 36176537 -4674 36212302 -4675 36248094 -4676 36283915 -4677 36319765 -4678 36355643 -4679 36391550 -4680 36427485 -4681 36463448 -4682 36499441 -4683 36535462 -4684 36571511 -4685 36607589 -4686 36643696 -4687 36679831 -4688 36715996 -4689 36752188 -4690 36788410 -4691 36824660 -4692 36860939 -4693 36897247 -4694 36933583 -4695 36969949 -4696 37006343 -4697 37042766 -4698 37079218 -4699 37115698 -4700 37152208 -4701 37188746 -4702 37225314 -4703 37261910 -4704 37298535 -4705 37335190 -4706 37371873 -4707 37408585 -4708 37445326 -4709 37482097 -4710 37518896 -4711 37555725 -4712 37592582 -4713 37629469 -4714 37666385 -4715 37703330 -4716 37740304 -4717 37777307 -4718 37814339 -4719 37851401 -4720 37888492 -4721 37925612 -4722 37962762 -4723 37999940 -4724 38037148 -4725 38074386 -4726 38111652 -4727 38148949 -4728 38186274 -4729 38223629 -4730 38261013 -4731 38298427 -4732 38335870 -4733 38373342 -4734 38410844 -4735 38448376 -4736 38485937 -4737 38523528 -4738 38561148 -4739 38598797 -4740 38636477 -4741 38674186 -4742 38711924 -4743 38749692 -4744 38787490 -4745 38825317 -4746 38863175 -4747 38901061 -4748 38938978 -4749 38976924 -4750 39014901 -4751 39052906 -4752 39090942 -4753 39129008 -4754 39167103 -4755 39205228 -4756 39243383 -4757 39281568 -4758 39319783 -4759 39358028 -4760 39396302 -4761 39434607 -4762 39472941 -4763 39511306 -4764 39549701 -4765 39588125 -4766 39626580 -4767 39665065 -4768 39703580 -4769 39742125 -4770 39780700 -4771 39819305 -4772 39857940 -4773 39896606 -4774 39935301 -4775 39974027 -4776 40012783 -4777 40051570 -4778 40090386 -4779 40129233 -4780 40168110 -4781 40207018 -4782 40245956 -4783 40284924 -4784 40323922 -4785 40362951 -4786 40402011 -4787 40441101 -4788 40480221 -4789 40519371 -4790 40558553 -4791 40597764 -4792 40637006 -4793 40676279 -4794 40715582 -4795 40754916 -4796 40794280 -4797 40833675 -4798 40873101 -4799 40912557 -4800 40952044 -4801 40991562 -4802 41031110 -4803 41070689 -4804 41110298 -4805 41149939 -4806 41189610 -4807 41229312 -4808 41269045 -4809 41308808 -4810 41348603 -4811 41388428 -4812 41428284 -4813 41468171 -4814 41508089 -4815 41548038 -4816 41588018 -4817 41628029 -4818 41668070 -4819 41708143 -4820 41748247 -4821 41788382 -4822 41828548 -4823 41868744 -4824 41908973 -4825 41949232 -4826 41989522 -4827 42029843 -4828 42070196 -4829 42110580 -4830 42150995 -4831 42191441 -4832 42231918 -4833 42272427 -4834 42312967 -4835 42353538 -4836 42394141 -4837 42434774 -4838 42475440 -4839 42516136 -4840 42556864 -4841 42597624 -4842 42638414 -4843 42679237 -4844 42720090 -4845 42760975 -4846 42801892 -4847 42842840 -4848 42883820 -4849 42924831 -4850 42965874 -4851 43006948 -4852 43048054 -4853 43089192 -4854 43130361 -4855 43171562 -4856 43212795 -4857 43254059 -4858 43295355 -4859 43336683 -4860 43378042 -4861 43419434 -4862 43460857 -4863 43502312 -4864 43543798 -4865 43585317 -4866 43626867 -4867 43668450 -4868 43710064 -4869 43751710 -4870 43793388 -4871 43835098 -4872 43876840 -4873 43918614 -4874 43960420 -4875 44002258 -4876 44044128 -4877 44086030 -4878 44127964 -4879 44169930 -4880 44211929 -4881 44253959 -4882 44296022 -4883 44338117 -4884 44380244 -4885 44422403 -4886 44464595 -4887 44506819 -4888 44549075 -4889 44591363 -4890 44633684 -4891 44676037 -4892 44718422 -4893 44760840 -4894 44803290 -4895 44845773 -4896 44888288 -4897 44930835 -4898 44973415 -4899 45016027 -4900 45058672 -4901 45101349 -4902 45144059 -4903 45186802 -4904 45229577 -4905 45272384 -4906 45315225 -4907 45358097 -4908 45401003 -4909 45443941 -4910 45486912 -4911 45529915 -4912 45572952 -4913 45616021 -4914 45659123 -4915 45702257 -4916 45745424 -4917 45788625 -4918 45831858 -4919 45875123 -4920 45918422 -4921 45961754 -4922 46005118 -4923 46048516 -4924 46091946 -4925 46135410 -4926 46178906 -4927 46222435 -4928 46265998 -4929 46309593 -4930 46353222 -4931 46396884 -4932 46440578 -4933 46484306 -4934 46528067 -4935 46571861 -4936 46615689 -4937 46659549 -4938 46703443 -4939 46747370 -4940 46791330 -4941 46835324 -4942 46879350 -4943 46923410 -4944 46967504 -4945 47011631 -4946 47055791 -4947 47099984 -4948 47144211 -4949 47188472 -4950 47232766 -4951 47277093 -4952 47321454 -4953 47365848 -4954 47410276 -4955 47454737 -4956 47499232 -4957 47543761 -4958 47588323 -4959 47632918 -4960 47677548 -4961 47722211 -4962 47766908 -4963 47811638 -4964 47856402 -4965 47901200 -4966 47946032 -4967 47990897 -4968 48035796 -4969 48080729 -4970 48125696 -4971 48170697 -4972 48215731 -4973 48260800 -4974 48305902 -4975 48351038 -4976 48396208 -4977 48441413 -4978 48486651 -4979 48531923 -4980 48577229 -4981 48622569 -4982 48667944 -4983 48713352 -4984 48758795 -4985 48804271 -4986 48849782 -4987 48895327 -4988 48940906 -4989 48986519 -4990 49032167 -4991 49077849 -4992 49123565 -4993 49169315 -4994 49215099 -4995 49260918 -4996 49306772 -4997 49352659 -4998 49398581 -4999 49444538 -5000 49490528 - - - diff --git a/src/python_interface/gen_auto_py_groups.cpp b/src/python_interface/gen_auto_py_groups.cpp index 46476a7f06..49c3160487 100644 --- a/src/python_interface/gen_auto_py_groups.cpp +++ b/src/python_interface/gen_auto_py_groups.cpp @@ -22,6 +22,9 @@ void groups(const std::string& fname) { for (auto& [group, wsg] : wsgs) { hos << "NB_MAKE_OPAQUE(Array<" << group << ">);\n"; + if (wsg.map_type) { + hos << "NB_MAKE_OPAQUE(" << group << ");\n"; + } } std::string_view newline = "\n"; diff --git a/src/python_interface/py_jac.cpp b/src/python_interface/py_jac.cpp index eaae990c77..3be77896f7 100644 --- a/src/python_interface/py_jac.cpp +++ b/src/python_interface/py_jac.cpp @@ -91,7 +91,7 @@ x : Vector target(line); line.def( "model_state", - [](const Jacobian::LineTarget& t, const ArrayOfAbsorptionBand& f) { + [](const Jacobian::LineTarget& t, const AbsorptionBands& f) { Vector x(t.x_size); t.set_state(x, f, t.type); return x; @@ -107,7 +107,7 @@ x : Vector Parameters ---------- -t : ArrayOfAbsorptionBand +t : AbsorptionBands The absorption data container Returns diff --git a/src/python_interface/py_lbl.cpp b/src/python_interface/py_lbl.cpp index 14f90545c3..ce1f731d2f 100644 --- a/src/python_interface/py_lbl.cpp +++ b/src/python_interface/py_lbl.cpp @@ -1,9 +1,11 @@ #include +#include #include #include #include #include #include +#include #include #include @@ -286,80 +288,98 @@ void py_lbl(py::module_& m) try { ll.doc() = "A list of absorption lines"; vector_interface(ll); - py::class_(m, "AbsorptionBandData") - .def_rw("lines", &lbl::band_data::lines, "The lines in the band") + py::class_ ab(m, "AbsorptionBand"); + ab.def_rw("lines", &lbl::band_data::lines, "The lines in the band") .def_rw("lineshape", &lbl::band_data::lineshape, "The lineshape type") .def_rw("cutoff", &lbl::band_data::cutoff, "The cutoff type") .def_rw("cutoff_value", &lbl::band_data::cutoff_value, - "The cutoff value [Hz]") - .PythonInterfaceBasicRepresentation(lbl::band_data) - .doc() = "Data for an absorption band"; + "The cutoff value [Hz]"); + workspace_group_interface(ab); - py::class_ absd(m, "AbsorptionBand"); - workspace_group_interface(absd); - absd.def_rw("data", - &AbsorptionBand::data, - ":class:`~pyarts.arts.AbsorptionBandData` The band data") - .def_rw("key", - &AbsorptionBand::key, - ":class:`~pyarts.arts.QuantumIdentifier` The key to the band"); - - auto aoab = - py::bind_vector( - m, "ArrayOfAbsorptionBand"); + auto aoab = py::bind_map( + m, "AbsorptionBands"); workspace_group_interface(aoab); - vector_interface(aoab); - aoab.def( - "__getitem__", - [](ArrayOfAbsorptionBand& x, - const QuantumIdentifier& key) -> std::shared_ptr { - for (auto& v : x) { - if (v.key == key) { - return {&v.data, [](void*) {}}; - } - } - return std::make_shared(); - }, - py::rv_policy::reference_internal, - py::keep_alive<0, 1>(), - ":class:`~pyarts.arts.AbsorptionBandData`") - .def( - "__setitem__", - [](ArrayOfAbsorptionBand& x, - const QuantumIdentifier& key, - const lbl::band_data& y) { - for (auto& v : x) { - if (v.key == key) { - v.data = y; - return; - } - } - x.emplace_back(key, y); - }, - py::rv_policy::reference_internal, - py::keep_alive<0, 1>(), - ":class:`~pyarts.arts.AbsorptionBandData`"); aoab.def("__getitem__", - [](const ArrayOfAbsorptionBand& x, - const lbl::line_key& key) -> Numeric { return key.get_value(x); }) + [](const AbsorptionBands& x, const lbl::line_key& key) -> Numeric { + return key.get_value(x); + }) .def("__setitem__", - [](ArrayOfAbsorptionBand& x, const lbl::line_key& key, Numeric v) { + [](AbsorptionBands& x, const lbl::line_key& key, Numeric v) { key.get_value(x) = v; }); + aoab.def( + "merge", + [](AbsorptionBands& self, + const AbsorptionBands& other) -> std::pair { + Size added = 0, updated = 0; + + for (const auto& [key, band] : other) { + auto [it, newband] = self.try_emplace(key, band); + + if (newband) { + added += band.size(); + } else { + for (auto& line : band.lines) { + if (it->second.merge(line)) { + added++; + } else { + updated++; + } + } + } + } + return {added, updated}; + }, + R"(Merge the other absorption bands into this + +If the key in the other absorption bands already exists in this, the lines with the same local +quantum numbers are overwritten by those of the other absorption bands. + +Parameters +---------- +other : AbsorptionBands + The other absorption bands to merge into this +)", + "other"_a); + aoab.def( + "clear_linemixing", + [](AbsorptionBands& self) { + Size sum = 0; + for (auto& [_, band] : self) { + for (auto& line : band.lines) { + for (auto& lsm : line.ls.single_models) { + sum += lsm.remove_variables(); + } + } + } + return sum; + }, + R"(Clear the linemixing data from all bands by removing it from the inner line shape models + +Returns +------- +int : The number of removed variables +)"); + + py::class_ led(m, "LinemixingEcsData"); + workspace_group_interface(led); lbl.def( "equivalent_lines", [](const AbsorptionBand& band, + const QuantumIdentifier& qid, const LinemixingEcsData& ecs_data, const AtmPoint& atm, const Vector& T) { lbl::voigt::ecs::ComputeData com_data({}, atm); - const auto K = band.data.front().ls.one_by_one - ? band.data.front().ls.single_models.size() + const auto K = band.front().ls.one_by_one + ? band.front().ls.single_models.size() : 1; - const auto N = band.data.size(); + const auto N = band.size(); const auto M = T.size(); auto eqv_str = ComplexTensor3(M, K, N); @@ -368,9 +388,9 @@ void py_lbl(py::module_& m) try { equivalent_values(eqv_str, eqv_val, com_data, - band.key, - band.data, - ecs_data.data.at(band.key.Isotopologue()), + qid, + band, + ecs_data.data.at(qid.Isotopologue()), atm, T); @@ -378,22 +398,10 @@ void py_lbl(py::module_& m) try { }, "Compute equivalent lines for a given band", "band"_a, + "qid"_a, "ecs_data"_a, "atm"_a, "T"_a); - - lbl.def( - "Q", - [](py::object t, SpeciesIsotope isot) { - return vectorize( - [isot](Numeric T) { return PartitionFunctions::Q(T, isot); }, t); - }, - "Partition function", - "T"_a, - "isotopologue"_a); - - py::class_ led(m, "LinemixingEcsData"); - workspace_group_interface(led); } catch (std::exception& e) { throw std::runtime_error( var_string("DEV ERROR:\nCannot initialize lbl\n", e.what())); diff --git a/src/python_interface/py_quantum.cpp b/src/python_interface/py_quantum.cpp index 89e1fec08e..2650413c90 100644 --- a/src/python_interface/py_quantum.cpp +++ b/src/python_interface/py_quantum.cpp @@ -6,8 +6,11 @@ #include #include +#include + #include "hpy_arts.h" #include "hpy_vector.h" +#include "nanobind/nanobind.h" #include "py_macros.h" namespace Python { @@ -58,6 +61,38 @@ void py_quantum(py::module_& m) try { py::class_(m, "QuantumNumberValueList") .def(py::init<>()) .def(py::init()) + .def( + "__len__", + [](QuantumNumberValueList& x) { return x.values.size(); }, + "Number of values") + .def( + "__iter__", + [](QuantumNumberValueList& x) { + return py::make_iterator( + py::type(), + "iterator", + x.values.begin(), + x.values.end()); + }, + py::keep_alive<0, 1>(), + "Iterate over the values") + .def("__getitem__", + [](QuantumNumberValueList& x, QuantumNumberType y) { + if (not x.has(y)) throw std::out_of_range(std::format("{}", y)); + return x[y]; + }) + .def("__getitem__", + [](QuantumNumberValueList& x, Size y) { + if (x.values.size() <= y) + throw std::out_of_range(std::format("{}", y)); + return x.values[y]; + }) + .def("__setitem__", + [](QuantumNumberValueList& x, Size y, QuantumNumberValue z) { + if (x.values.size() <= y) + throw std::out_of_range(std::format("{}", y)); + return x.values[y] = z; + }) .PythonInterfaceCopyValue(QuantumNumberValueList) .def( "get", @@ -106,6 +141,39 @@ qn : ~pyarts.arts.QuantumNumberValue .def(py::init()) .PythonInterfaceCopyValue(QuantumNumberLocalState) .PythonInterfaceBasicRepresentation(QuantumNumberLocalState) + .def( + "__len__", + [](QuantumNumberLocalState& x) { return x.val.values.size(); }, + "Number of values") + .def( + "__iter__", + [](QuantumNumberLocalState& x) { + return py::make_iterator( + py::type(), + "iterator", + x.val.values.begin(), + x.val.values.end()); + }, + py::keep_alive<0, 1>(), + "Iterate over the values") + .def("__getitem__", + [](QuantumNumberLocalState& x, QuantumNumberType y) { + if (not x.val.has(y)) + throw std::out_of_range(std::format("{}", y)); + return x.val[y]; + }) + .def("__getitem__", + [](QuantumNumberLocalState& x, Size y) { + if (x.val.values.size() <= y) + throw std::out_of_range(std::format("{}", y)); + return x.val.values[y]; + }) + .def("__setitem__", + [](QuantumNumberLocalState& x, Size y, QuantumNumberValue z) { + if (x.val.values.size() <= y) + throw std::out_of_range(std::format("{}", y)); + return x.val.values[y] = z; + }) .def_rw( "state", &QuantumNumberLocalState::val, diff --git a/src/python_interface/py_species.cpp b/src/python_interface/py_species.cpp index c2f6faa414..1c50b90a7b 100644 --- a/src/python_interface/py_species.cpp +++ b/src/python_interface/py_species.cpp @@ -278,6 +278,17 @@ Returns } } }); + b1.def_static( + "all_isotopologues", + []() { + ArrayOfArrayOfSpeciesTag out; + for (auto& x : Species::Isotopologues) { + if (not is_normal_isotopologue(x)) continue; + out.emplace_back(Array{SpeciesTag(x)}); + } + return out; + }, + "Return a list of all species tags"); py::implicitly_convertible>, ArrayOfArrayOfSpeciesTag>(); b1.def("__init__", [](ArrayOfArrayOfSpeciesTag* s, py::list l) { diff --git a/src/tests/run_partfun.cc b/src/tests/run_partfun.cc index 0610cd1b1b..e61312b13a 100644 --- a/src/tests/run_partfun.cc +++ b/src/tests/run_partfun.cc @@ -15,12 +15,12 @@ int main(int argn, char** argv) try { for (auto& spec: specs) { auto& v = Species::Isotopologues[Species::find_species_index(spec)]; - std::cerr << v.FullName() << ' '; - std::cerr << PartitionFunctions::Q(T, v) << '\n'; + std::cout << v.FullName() << ' '; + std::cout << PartitionFunctions::Q(T, v) << '\n'; } return EXIT_SUCCESS; -} catch(...) { - std::cerr << "FAILED\n"; +} catch(std::exception& e) { + std::cerr << "Failed with error:\n" << e.what() << '\n'; return EXIT_FAILURE; } \ No newline at end of file diff --git a/src/workspace_groups.cpp b/src/workspace_groups.cpp index 3f8511859d..58eaea39ce 100644 --- a/src/workspace_groups.cpp +++ b/src/workspace_groups.cpp @@ -16,10 +16,10 @@ internal_workspace_groups_creator() { "Contains all information about bands of related absorption lines\n", }; - wsg_data["ArrayOfAbsorptionBand"] = { - .file = "lbl.h", - .desc = "A list of *AbsorptionBand*\n", - .array_depth = 2, + wsg_data["AbsorptionBands"] = { + .file = "lbl.h", + .desc = "A map of *QuantumIdentifier* to *AbsorptionBand*\n", + .map_type = true, }; wsg_data["Agenda"] = { @@ -34,166 +34,138 @@ internal_workspace_groups_creator() { }; wsg_data["ArrayOfAbsorptionLines"] = { - .file = "absorptionlines.h", - .desc = "A list of *AbsorptionLines*\n", - .array_depth = 1, + .file = "absorptionlines.h", + .desc = "A list of *AbsorptionLines*\n", }; wsg_data["ArrayOfArrayOfAbsorptionLines"] = { - .file = "absorptionlines.h", - .desc = "A list of *ArrayOfAbsorptionLines*\n", - .array_depth = 2, + .file = "absorptionlines.h", + .desc = "A list of *ArrayOfAbsorptionLines*\n", }; wsg_data["ArrayOfAgenda"] = { - .file = "workspace_agenda_class.h", - .desc = "A list of *Agenda*\n", - .array_depth = 1, + .file = "workspace_agenda_class.h", + .desc = "A list of *Agenda*\n", }; wsg_data["ArrayOfArrayOfGriddedField1"] = { - .file = "matpack.h", - .desc = "A list of *ArrayOfGriddedField1*\n", - .array_depth = 2, + .file = "matpack.h", + .desc = "A list of *ArrayOfGriddedField1*\n", }; wsg_data["ArrayOfArrayOfGriddedField2"] = { - .file = "matpack.h", - .desc = "A list of *ArrayOfGriddedField2*\n", - .array_depth = 2, + .file = "matpack.h", + .desc = "A list of *ArrayOfGriddedField2*\n", }; wsg_data["ArrayOfArrayOfGriddedField3"] = { - .file = "matpack.h", - .desc = "A list of *ArrayOfGriddedField3*\n", - .array_depth = 2, + .file = "matpack.h", + .desc = "A list of *ArrayOfGriddedField3*\n", }; wsg_data["ArrayOfArrayOfIndex"] = { - .file = "matpack.h", - .desc = "A list of *ArrayOfIndex*\n", - .array_depth = 2, + .file = "matpack.h", + .desc = "A list of *ArrayOfIndex*\n", }; wsg_data["ArrayOfArrayOfMatrix"] = { - .file = "matpack.h", - .desc = "A list of *ArrayOfMatrix*\n", - .array_depth = 2, + .file = "matpack.h", + .desc = "A list of *ArrayOfMatrix*\n", }; wsg_data["ArrayOfArrayOfScatteringMetaData"] = { - .file = "optproperties.h", - .desc = "A list of *ArrayOfScatteringMetaData*\n", - .array_depth = 2, + .file = "optproperties.h", + .desc = "A list of *ArrayOfScatteringMetaData*\n", }; wsg_data["ArrayOfArrayOfSingleScatteringData"] = { - .file = "optproperties.h", - .desc = "A list of *ArrayOfSingleScatteringData*\n", - .array_depth = 2, + .file = "optproperties.h", + .desc = "A list of *ArrayOfSingleScatteringData*\n", }; wsg_data["ArrayOfArrayOfSpeciesTag"] = { - .file = "species_tags.h", - .desc = "A list of *ArrayOfSpeciesTag*\n", - .array_depth = 2, + .file = "species_tags.h", + .desc = "A list of *ArrayOfSpeciesTag*\n", }; wsg_data["ArrayOfArrayOfString"] = { - .file = "mystring.h", - .desc = "A list of *ArrayOfString*\n", - .array_depth = 2, + .file = "mystring.h", + .desc = "A list of *ArrayOfString*\n", }; wsg_data["ArrayOfArrayOfTensor3"] = { - .file = "matpack.h", - .desc = "A list of *ArrayOfTensor3*\n", - .array_depth = 2, + .file = "matpack.h", + .desc = "A list of *ArrayOfTensor3*\n", }; wsg_data["ArrayOfArrayOfTensor6"] = { - .file = "matpack.h", - .desc = "A list of *ArrayOfTensor6*\n", - .array_depth = 2, + .file = "matpack.h", + .desc = "A list of *ArrayOfTensor6*\n", }; wsg_data["ArrayOfArrayOfTime"] = { - .file = "artstime.h", - .desc = "A list of *ArrayOfTime*\n", - .array_depth = 2, + .file = "artstime.h", + .desc = "A list of *ArrayOfTime*\n", }; wsg_data["ArrayOfArrayOfVector"] = { - .file = "matpack.h", - .desc = "A list of *ArrayOfVector*\n", - .array_depth = 2, + .file = "matpack.h", + .desc = "A list of *ArrayOfVector*\n", }; wsg_data["ArrayOfAtmPoint"] = { - .file = "atm.h", - .desc = "A list of *AtmPoint*\n", - .array_depth = 1, + .file = "atm.h", + .desc = "A list of *AtmPoint*\n", }; wsg_data["ArrayOfCIARecord"] = { - .file = "cia.h", - .desc = "A list of *CIARecord*\n", - .array_depth = 1, + .file = "cia.h", + .desc = "A list of *CIARecord*\n", }; wsg_data["ArrayOfGriddedField1"] = { - .file = "matpack.h", - .desc = "A list of *GriddedField1*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *GriddedField1*\n", }; wsg_data["ArrayOfGriddedField2"] = { - .file = "matpack.h", - .desc = "A list of *GriddedField2*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *GriddedField2*\n", }; wsg_data["ArrayOfGriddedField1Named"] = { - .file = "matpack.h", - .desc = "A list of *GriddedField1Named*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *GriddedField1Named*\n", }; wsg_data["ArrayOfNamedGriddedField2"] = { - .file = "matpack.h", - .desc = "A list of *NamedGriddedField2*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *NamedGriddedField2*\n", }; wsg_data["ArrayOfGriddedField3"] = { - .file = "matpack.h", - .desc = "A list of *GriddedField3*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *GriddedField3*\n", }; wsg_data["ArrayOfGriddedField4"] = { - .file = "matpack.h", - .desc = "A list of *GriddedField4*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *GriddedField4*\n", }; wsg_data["ArrayOfIndex"] = { - .file = "matpack.h", - .desc = "A list of *Index*\n", - .array_depth = 1, - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A list of *Index*\n", }; wsg_data["ArrayOfMatrix"] = { - .file = "matpack.h", - .desc = "A list of *Matrix*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Matrix*\n", }; wsg_data["ArrayOfQuantumIdentifier"] = { - .file = "quantum_numbers.h", - .desc = "A list of *QuantumIdentifier*\n", - .array_depth = 1, + .file = "quantum_numbers.h", + .desc = "A list of *QuantumIdentifier*\n", }; wsg_data["ArrayOfScatteringSpecies"] = { @@ -202,15 +174,13 @@ internal_workspace_groups_creator() { }; wsg_data["ArrayOfScatteringMetaData"] = { - .file = "optproperties.h", - .desc = "A list of *ScatteringMetaData*\n", - .array_depth = 1, + .file = "optproperties.h", + .desc = "A list of *ScatteringMetaData*\n", }; wsg_data["ArrayOfSingleScatteringData"] = { - .file = "optproperties.h", - .desc = "A list of *SingleScatteringData*\n", - .array_depth = 1, + .file = "optproperties.h", + .desc = "A list of *SingleScatteringData*\n", }; wsg_data["SpeciesTag"] = { @@ -223,18 +193,15 @@ about the isotopologue, the absorption scheme, and the frequency limits }; wsg_data["ArrayOfSpeciesTag"] = { - .file = "species_tags.h", - .desc = R"--(A list of *SpeciesTag* + .file = "species_tags.h", + .desc = R"--(A list of *SpeciesTag* )--", - .array_depth = 1, - .skip_pyinit = true, }; wsg_data["SurfaceKey"] = { - .file = "enumsSurfaceKey.h", - .desc = R"--(A surface key + .file = "enumsSurfaceKey.h", + .desc = R"--(A surface key )--", - .skip_pyinit = true, }; wsg_data["SurfaceTypeTag"] = { @@ -250,44 +217,38 @@ about the isotopologue, the absorption scheme, and the frequency limits }; wsg_data["ArrayOfSpeciesEnum"] = { - .file = "species.h", - .desc = R"--(A list of *SpeciesEnum* + .file = "species.h", + .desc = R"--(A list of *SpeciesEnum* )--", - .array_depth = 1, }; wsg_data["SpeciesEnum"] = { - .file = "enumsSpeciesEnum.h", - .desc = R"--(An atmospheric species + .file = "enumsSpeciesEnum.h", + .desc = R"--(An atmospheric species )--", - .skip_pyinit = true, }; wsg_data["AtmKey"] = { - .file = "enumsAtmKey.h", - .desc = R"--(An atmospheric key + .file = "enumsAtmKey.h", + .desc = R"--(An atmospheric key )--", - .skip_pyinit = true, }; wsg_data["LineShapeModelVariable"] = { - .file = "enumsLineShapeModelVariable.h", - .desc = R"--(A line shape model parameter + .file = "enumsLineShapeModelVariable.h", + .desc = R"--(A line shape model parameter )--", - .skip_pyinit = true, }; wsg_data["LineByLineVariable"] = { - .file = "enumsLineByLineVariable.h", - .desc = R"--(An line-by-line variable parameter + .file = "enumsLineByLineVariable.h", + .desc = R"--(An line-by-line variable parameter )--", - .skip_pyinit = true, }; wsg_data["ArrayOfSparse"] = { - .file = "matpack_sparse.h", - .desc = "A list of *Sparse*\n", - .array_depth = 1, + .file = "matpack_sparse.h", + .desc = "A list of *Sparse*\n", }; wsg_data["Sun"] = { @@ -301,63 +262,53 @@ longitude in the sky of the planet and the type)-x-", }; wsg_data["ArrayOfSun"] = { - .file = "sun.h", - .desc = "A list of *Sun*\n", - .array_depth = 1, + .file = "sun.h", + .desc = "A list of *Sun*\n", }; wsg_data["ArrayOfString"] = { - .file = "mystring.h", - .desc = "A list of *String*\n", - .array_depth = 1, + .file = "mystring.h", + .desc = "A list of *String*\n", }; wsg_data["ArrayOfTelsemAtlas"] = { - .file = "matpack.h", - .desc = "A list of *TelsemAtlas*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *TelsemAtlas*\n", }; wsg_data["ArrayOfTensor3"] = { - .file = "matpack.h", - .desc = "A list of *Tensor3*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Tensor3*\n", }; wsg_data["ArrayOfTensor4"] = { - .file = "matpack.h", - .desc = "A list of *Tensor4*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Tensor4*\n", }; wsg_data["ArrayOfTensor5"] = { - .file = "matpack.h", - .desc = "A list of *Tensor5*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Tensor5*\n", }; wsg_data["ArrayOfTensor6"] = { - .file = "matpack.h", - .desc = "A list of *Tensor6*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Tensor6*\n", }; wsg_data["ArrayOfTensor7"] = { - .file = "matpack.h", - .desc = "A list of *Tensor7*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Tensor7*\n", }; wsg_data["ArrayOfTime"] = { - .file = "matpack.h", - .desc = "A list of *Time*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Time*\n", }; wsg_data["ArrayOfVector"] = { - .file = "matpack.h", - .desc = "A list of *Vector*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Vector*\n", }; wsg_data["XsecRecord"] = { @@ -374,7 +325,6 @@ These cross-section records contains information about the valid temperature and pressure ranges as well as well as the fitting coefficients used to compute and interpolate the cross-section to other temperatures and pressures )--", - .array_depth = 1, }; wsg_data["AtmField"] = { @@ -534,10 +484,9 @@ Both the data and the grid may be named }; wsg_data["Index"] = { - .file = "matpack.h", - .desc = "A 64 bit signed integer type\n", - .value_type = true, - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A 64 bit signed integer type\n", + .value_type = true, }; wsg_data["LinemixingEcsData"] = { @@ -553,9 +502,8 @@ Both the data and the grid may be named }; wsg_data["Matrix"] = { - .file = "matpack.h", - .desc = "A 2 dimensional array of *Numeric*\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A 2 dimensional array of *Numeric*\n", }; wsg_data["DisortBDRF"] = { @@ -569,10 +517,9 @@ Both the data and the grid may be named }; wsg_data["Numeric"] = { - .file = "matpack.h", - .desc = "IEEE 754 binary64 floating point number\n", - .value_type = true, - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "IEEE 754 binary64 floating point number\n", + .value_type = true, }; wsg_data["PredefinedModelData"] = { @@ -659,33 +606,28 @@ if it is contained in the Atlas and NAN otherwise. }; wsg_data["Tensor3"] = { - .file = "matpack.h", - .desc = "A 3 dimensional array of *Numeric*\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A 3 dimensional array of *Numeric*\n", }; wsg_data["Tensor4"] = { - .file = "matpack.h", - .desc = "A 4 dimensional array of *Numeric*\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A 4 dimensional array of *Numeric*\n", }; wsg_data["Tensor5"] = { - .file = "matpack.h", - .desc = "A 5 dimensional array of *Numeric*\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A 5 dimensional array of *Numeric*\n", }; wsg_data["Tensor6"] = { - .file = "matpack.h", - .desc = "A 6 dimensional array of *Numeric*\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A 6 dimensional array of *Numeric*\n", }; wsg_data["Tensor7"] = { - .file = "matpack.h", - .desc = "A 7 dimensional array of *Numeric*\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A 7 dimensional array of *Numeric*\n", }; wsg_data["Time"] = { @@ -700,9 +642,8 @@ if it is contained in the Atlas and NAN otherwise. }; wsg_data["Vector"] = { - .file = "matpack.h", - .desc = "A 1 dimensional array of *Numeric*\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A 1 dimensional array of *Numeric*\n", }; wsg_data["VibrationalEnergyLevels"] = { @@ -712,8 +653,8 @@ if it is contained in the Atlas and NAN otherwise. // rtepack types wsg_data["Propmat"] = { - .file = "rtepack.h", - .desc = R"--(A single propagation matrix. + .file = "rtepack.h", + .desc = R"--(A single propagation matrix. Due to the properties of a propagation matrix, only 7 independents need be stored. The propagation matrix is thus represented as: @@ -732,85 +673,71 @@ the first 4 elements of *Stokvec* for pure clearsky radiative transfers. This type is also related to *Muelmat* because it is computed often as the exponent of this term multiplied by a negative distance. )--", - .is_simple_contiguous = true, }; wsg_data["Muelmat"] = { - .file = "rtepack.h", - .desc = "A single Mueller 4x4 matrix.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A single Mueller 4x4 matrix.\n", }; wsg_data["Stokvec"] = { - .file = "rtepack.h", - .desc = "A single Stokes vector (of length 4).\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A single Stokes vector (of length 4).\n", }; wsg_data["PropmatVector"] = { - .file = "rtepack.h", - .desc = "A vector of *Propmat*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A vector of *Propmat*.\n", }; wsg_data["MuelmatVector"] = { - .file = "rtepack.h", - .desc = "A vector of *Muelmat*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A vector of *Muelmat*.\n", }; wsg_data["StokvecVector"] = { - .file = "rtepack.h", - .desc = "A vector of *Stokvec*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A vector of *Stokvec*.\n", }; wsg_data["PropmatMatrix"] = { - .file = "rtepack.h", - .desc = "A matrix of *Propmat*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A matrix of *Propmat*.\n", }; wsg_data["MuelmatMatrix"] = { - .file = "rtepack.h", - .desc = "A matrix of *Muelmat*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A matrix of *Muelmat*.\n", }; wsg_data["MuelmatTensor3"] = { - .file = "rtepack.h", - .desc = "A *Tensor3* of *Muelmat*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A *Tensor3* of *Muelmat*.\n", }; wsg_data["StokvecMatrix"] = { - .file = "rtepack.h", - .desc = "A matrix of *Stokvec*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A matrix of *Stokvec*.\n", }; wsg_data["StokvecTensor3"] = { - .file = "rtepack.h", - .desc = "A *Tensor3* but of *Stokvec*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A *Tensor3* but of *Stokvec*.\n", }; wsg_data["StokvecTensor4"] = { - .file = "rtepack.h", - .desc = "A *Tensor4* but of *Stokvec*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A *Tensor4* but of *Stokvec*.\n", }; wsg_data["StokvecTensor5"] = { - .file = "rtepack.h", - .desc = "A *Tensor5* but of *Stokvec*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A *Tensor5* but of *Stokvec*.\n", }; wsg_data["StokvecTensor6"] = { - .file = "rtepack.h", - .desc = "A *Tensor6* but of *Stokvec*.\n", - .is_simple_contiguous = true, + .file = "rtepack.h", + .desc = "A *Tensor6* but of *Stokvec*.\n", }; wsg_data["StokvecGriddedField6"] = { @@ -820,87 +747,73 @@ of this term multiplied by a negative distance. }; wsg_data["ArrayOfPropmatVector"] = { - .file = "rtepack.h", - .desc = "A list of *PropmatVector*.\n", - .array_depth = 1, + .file = "rtepack.h", + .desc = "A list of *PropmatVector*.\n", }; wsg_data["ArrayOfMuelmatVector"] = { - .file = "rtepack.h", - .desc = "A list of *MuelmatVector*.\n", - .array_depth = 1, + .file = "rtepack.h", + .desc = "A list of *MuelmatVector*.\n", }; wsg_data["ArrayOfStokvecVector"] = { - .file = "rtepack.h", - .desc = "A list of *StokvecVector*.\n", - .array_depth = 1, + .file = "rtepack.h", + .desc = "A list of *StokvecVector*.\n", }; wsg_data["ArrayOfPropmatMatrix"] = { - .file = "rtepack.h", - .desc = "A list of *PropmatMatrix*.\n", - .array_depth = 1, + .file = "rtepack.h", + .desc = "A list of *PropmatMatrix*.\n", }; wsg_data["ArrayOfMuelmatMatrix"] = { - .file = "rtepack.h", - .desc = "A list of *MuelmatMatrix*.\n", - .array_depth = 1, + .file = "rtepack.h", + .desc = "A list of *MuelmatMatrix*.\n", }; wsg_data["ArrayOfMuelmatTensor3"] = { - .file = "rtepack.h", - .desc = "A list of *MuelmatTensor3*.\n", - .array_depth = 1, + .file = "rtepack.h", + .desc = "A list of *MuelmatTensor3*.\n", }; wsg_data["ArrayOfStokvecMatrix"] = { - .file = "rtepack.h", - .desc = "A list of *StokvecMatrix*.\n", - .array_depth = 1, + .file = "rtepack.h", + .desc = "A list of *StokvecMatrix*.\n", }; wsg_data["ArrayOfStokvecTensor3"] = { - .file = "rtepack.h", - .desc = "A list of *StokvecTensor3*.\n", - .array_depth = 1, + .file = "rtepack.h", + .desc = "A list of *StokvecTensor3*.\n", }; wsg_data["ArrayOfArrayOfPropmatVector"] = { - .file = "rtepack.h", - .desc = "A list of *ArrayOfPropmatVector*.\n", - .array_depth = 2, + .file = "rtepack.h", + .desc = "A list of *ArrayOfPropmatVector*.\n", }; wsg_data["ArrayOfArrayOfMuelmatVector"] = { - .file = "rtepack.h", - .desc = "A list of *ArrayOfMuelmatVector*.\n", - .array_depth = 2, + .file = "rtepack.h", + .desc = "A list of *ArrayOfMuelmatVector*.\n", }; wsg_data["ArrayOfArrayOfStokvecVector"] = { - .file = "rtepack.h", - .desc = "A list of *ArrayOfStokvecVector*.\n", - .array_depth = 2, + .file = "rtepack.h", + .desc = "A list of *ArrayOfStokvecVector*.\n", }; wsg_data["ArrayOfArrayOfPropmatMatrix"] = { - .file = "rtepack.h", - .desc = "A list of *ArrayOfPropmatMatrix*.\n", - .array_depth = 2, + .file = "rtepack.h", + .desc = "A list of *ArrayOfPropmatMatrix*.\n", }; wsg_data["ArrayOfArrayOfMuelmatMatrix"] = { - .file = "rtepack.h", - .desc = "A list of *ArrayOfMuelmatMatrix*.\n", - .array_depth = 2, + .file = "rtepack.h", + .desc = "A list of *ArrayOfMuelmatMatrix*.\n", }; wsg_data["ArrayOfArrayOfStokvecMatrix"] = { - .file = "rtepack.h", - .desc = "A list of *ArrayOfStokvecMatrix*.\n", - .array_depth = 2, + .file = "rtepack.h", + .desc = "A list of *ArrayOfStokvecMatrix*.\n", }; wsg_data["NumericUnaryOperator"] = { @@ -965,57 +878,48 @@ radiation. }; wsg_data["ArrayOfPropagationPathPoint"] = { - .file = "path_point.h", - .desc = "A list of *PropagationPathPoint*.\n", - .array_depth = 1, + .file = "path_point.h", + .desc = "A list of *PropagationPathPoint*.\n", }; wsg_data["ArrayOfArrayOfPropagationPathPoint"] = { - .file = "path_point.h", - .desc = "A list of *ArrayOfPropagationPathPoint*.\n", - .array_depth = 2, + .file = "path_point.h", + .desc = "A list of *ArrayOfPropagationPathPoint*.\n", }; wsg_data["ArrayOfArrayOfArrayOfPropagationPathPoint"] = { - .file = "path_point.h", - .desc = "A list of *ArrayOfArrayOfPropagationPathPoint*.\n", - .array_depth = 3, + .file = "path_point.h", + .desc = "A list of *ArrayOfArrayOfPropagationPathPoint*.\n", }; wsg_data["Vector3"] = { - .file = "matpack.h", - .desc = "A fixed-size 3D version of *Vector*.\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A fixed-size 3D version of *Vector*.\n", }; wsg_data["Vector2"] = { - .file = "matpack.h", - .desc = "A fixed-size 2D version of *Vector*.\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A fixed-size 2D version of *Vector*.\n", }; wsg_data["ArrayOfVector3"] = { - .file = "matpack.h", - .desc = "A list of *Vector3*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Vector3*\n", }; wsg_data["ArrayOfVector2"] = { - .file = "matpack.h", - .desc = "A list of *Vector2*\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *Vector2*\n", }; wsg_data["AscendingGrid"] = { - .file = "matpack.h", - .desc = "A sorted grid of always ascending values.\n", - .is_simple_contiguous = true, + .file = "matpack.h", + .desc = "A sorted grid of always ascending values.\n", }; wsg_data["ArrayOfAscendingGrid"] = { - .file = "matpack.h", - .desc = "A list of *AscendingGrid*.\n", - .array_depth = 1, + .file = "matpack.h", + .desc = "A list of *AscendingGrid*.\n", }; wsg_data["SpectralRadianceOperator"] = { @@ -1033,21 +937,18 @@ line-of-sight to get the corresponding spectral radiance. }; wsg_data["ArrayOfSpeciesIsotope"] = { - .file = "isotopologues.h", - .desc = "List of *SpeciesIsotope*.\n", - .array_depth = 1, + .file = "isotopologues.h", + .desc = "List of *SpeciesIsotope*.\n", }; wsg_data["SensorPosLos"] = { - .file = "obsel.h", - .desc = "A position and line-of-sight of a sensor.\n", - .is_simple_contiguous = true, + .file = "obsel.h", + .desc = "A position and line-of-sight of a sensor.\n", }; wsg_data["SensorPosLosVector"] = { - .file = "obsel.h", - .desc = "Vector of *SensorPosLos*.\n", - .is_simple_contiguous = true, + .file = "obsel.h", + .desc = "Vector of *SensorPosLos*.\n", }; wsg_data["SensorObsel"] = { @@ -1066,9 +967,8 @@ well as the sampling device's polarization response. }; wsg_data["ArrayOfSensorObsel"] = { - .file = "obsel.h", - .desc = "List of *SensorObsel*.\n", - .array_depth = 1, + .file = "obsel.h", + .desc = "List of *SensorObsel*.\n", }; wsg_data["DisortSettings"] = { diff --git a/src/workspace_groups.h b/src/workspace_groups.h index d288c42b54..542737a34b 100644 --- a/src/workspace_groups.h +++ b/src/workspace_groups.h @@ -13,11 +13,8 @@ struct WorkspaceGroupRecord { //! Set to true if python must treat this as a value bool value_type{false}; - //! Set to true if this is a simple contiguous array (simple means of one of the basic types of C++, i.e., double or int or similiar) - bool is_simple_contiguous{false}; - - //! Set to true if this cannot be automatically initialized in python - bool skip_pyinit{false}; + //! Set to true if the type is a map of some type + bool map_type{false}; }; const std::unordered_map& diff --git a/src/workspace_methods.cpp b/src/workspace_methods.cpp index 1734c03060..0d1daf42b2 100644 --- a/src/workspace_methods.cpp +++ b/src/workspace_methods.cpp @@ -1976,15 +1976,14 @@ See *SpeciesEnum* for valid ``species`` }; wsm_data["jacobian_targetsAddAtmosphere"] = { - .desc = R"--(Sets an atmospheric target + .desc = R"--(Sets an atmospheric target )--", - .author = {"Richard Larsson"}, - .out = {"jacobian_targets"}, - .in = {"jacobian_targets"}, - .gin = {"target", "d"}, - .gin_type = - {"AtmKey,SpeciesEnum,SpeciesIsotope,QuantumIdentifier", - "Numeric"}, + .author = {"Richard Larsson"}, + .out = {"jacobian_targets"}, + .in = {"jacobian_targets"}, + .gin = {"target", "d"}, + .gin_type = {"AtmKey,SpeciesEnum,SpeciesIsotope,QuantumIdentifier", + "Numeric"}, .gin_value = {std::nullopt, Numeric{0.1}}, .gin_desc = {"The target of interest", @@ -2021,6 +2020,78 @@ See *SpeciesIsotope* for valid ``species`` "The perturbation used in methods that cannot compute derivatives analytically"}, }; + wsm_data["absorption_bandsReadHITRAN"] = { + .desc = + R"--(Reads HITRAN data from a file. + +The HITRAN file is assumed sorted in frequency, with each line record +filling up one line of text. + +If the full 160-char line record is consumed without reaching the end of the line, +qns' and qns'' are assumed appended with default HITRANonline format. + +You may pass an inclusive frequency range to limit what is read. This will limit +the data read to the range [fmin, fmax]. All data before fmin is limited to parsing +just up until the frequency, and the database is returned if the fmax frequency is +exceeded. + +The optional parameter ``einstein_coefficient`` is used to indicate if it is to +be computed from the line strength, or simply read from the Hitran data. + +.. warning:: + Several HITRAN lines has Einstein coefficients that will not reproduce the results + of pure line strength simulations. If the option is set to read the Einstein + coefficicent ("A") instead of computing it ("S") the program will throw an error + if missing data is encountered. For the computed Einstein coeffcient, if the upper + degeneracy is missing, it will be set to either - (2J+1) or -1 if J is not a local + quantum number. Note that this will also make the Einstein coefficient negative. + This should not affect the simulation, but it is a warning that the data is not + complete. +)--", + .author = {"Richard Larsson"}, + .out = {"absorption_bands"}, + .in = {}, + .gin = {"file", + "frequency_range", + "line_strength_option", + "compute_zeeman_parameters"}, + .gin_type = {"String", "Vector2", "String", "Index"}, + .gin_value = {std::nullopt, + Vector2{-std::numeric_limits::infinity(), + std::numeric_limits::infinity()}, + String{"S"}, + Index{1}}, + .gin_desc = + {"Filename", + "Frequency range selection", + "Whether the Hitran line strenght or the Hitran Einstein coefficient is used, the latter has historically been less reliable", + "Compute the Zeeman parameters from the HITRAN data (will not activate Zeeman calculations, this must be done manually afterwards)"}, + }; + + wsm_data["absorption_bandsLineMixingAdaptation"] = { + .desc = + R"--(Adapts select band to use ordered Line mixing coefficients. + +This is an experimental feature and might not work. + +The computations of line mixing are done on the grid of temperatures provided. +)--", + .author = {"Richard Larsson"}, + .out = {"absorption_bands"}, + .in = {"absorption_bands", "ecs_data", "atmospheric_point"}, + .gin = {"temperatures", + "band_key", + "rosenkranz_fit_order", + "polynomial_fit_degree"}, + .gin_type = {"AscendingGrid", "QuantumIdentifier", "Index", "Index"}, + .gin_value = {std::nullopt, std::nullopt, Index{1}, Index{3}}, + .gin_desc = + {"The temperatures to use for the internal fitting", + "The band to adapt", + "The degree of Rosenkranz coefficients (1 for just fitting y, 2 for fitting also g and dv)", + "The highest order of the polynomial fit (2 means square, 3 means cubic, etc)"}, + }; + wsm_data["absorption_bandsSelectFrequency"] = { .desc = R"--(Remove all lines/bands that strictly falls outside a frequency range @@ -2144,7 +2215,8 @@ variables are not considered }; wsm_data["ray_pathGeometricUplooking"] = { - .desc = R"--(Wraps *ray_pathGeometric* for straight uplooking paths from the surface altitude at the position + .desc = + R"--(Wraps *ray_pathGeometric* for straight uplooking paths from the surface altitude at the position )--", .author = {"Richard Larsson"}, .out = {"ray_path"}, @@ -2156,7 +2228,8 @@ variables are not considered }; wsm_data["ray_pathGeometricDownlooking"] = { - .desc = R"--(Wraps *ray_pathGeometric* for straight downlooking paths from the top-of-the-atmosphere altitude + .desc = + R"--(Wraps *ray_pathGeometric* for straight downlooking paths from the top-of-the-atmosphere altitude )--", .author = {"Richard Larsson"}, .out = {"ray_path"}, @@ -2767,11 +2840,11 @@ See *SpeciesIsotope* for valid ``species`` The core calculations happens inside the *spectral_radiance_operator*. )--", - .author = {"Richard Larsson"}, - .out = {"measurement_vector"}, - .in = {"measurement_sensor", - "spectral_radiance_operator", - "ray_path_observer_agenda"}, + .author = {"Richard Larsson"}, + .out = {"measurement_vector"}, + .in = {"measurement_sensor", + "spectral_radiance_operator", + "ray_path_observer_agenda"}, .pass_workspace = true, }; @@ -2783,14 +2856,14 @@ The core calculations happens inside the *spectral_radiance_observer_agenda*. User choices of *spectral_radiance_unit* does not adversely affect this method. )--", - .author = {"Richard Larsson"}, - .out = {"measurement_vector", "measurement_jacobian"}, - .in = {"measurement_sensor", - "jacobian_targets", - "atmospheric_field", - "surface_field", - "spectral_radiance_unit", - "spectral_radiance_observer_agenda"}, + .author = {"Richard Larsson"}, + .out = {"measurement_vector", "measurement_jacobian"}, + .in = {"measurement_sensor", + "jacobian_targets", + "atmospheric_field", + "surface_field", + "spectral_radiance_unit", + "spectral_radiance_observer_agenda"}, .pass_workspace = true, }; @@ -2822,12 +2895,11 @@ All elements share position, line-of-sight, and frequency grid. Note that this means you only get "half" a Gaussian channel for the outermost channels. )--", - .author = {"Richard Larsson"}, - .out = {"measurement_sensor"}, - .in = {"frequency_grid"}, - .gin = {"fwhm", "pos", "los", "pol"}, - .gin_type = - {"Vector, Numeric", "Vector3", "Vector2", "Stokvec"}, + .author = {"Richard Larsson"}, + .out = {"measurement_sensor"}, + .in = {"frequency_grid"}, + .gin = {"fwhm", "pos", "los", "pol"}, + .gin_type = {"Vector, Numeric", "Vector3", "Vector2", "Stokvec"}, .gin_value = {std::nullopt, std::nullopt, std::nullopt, @@ -3419,13 +3491,13 @@ Description of the special input arguments: .desc = R"--(Uses Set the FOV to the sun input for Disort calculations. )--", - .author = {"Richard Larsson"}, - .out = {"disort_settings"}, - .in = {"disort_settings", - "frequency_grid", - "surface_field", - "sun", - "ray_path_point"}, + .author = {"Richard Larsson"}, + .out = {"disort_settings"}, + .in = {"disort_settings", + "frequency_grid", + "surface_field", + "sun", + "ray_path_point"}, }; wsm_data["disort_settingsNoLayerThermalEmission"] = { @@ -3460,9 +3532,9 @@ Note that you must have set the optical thickness before calling this. .desc = R"(Space radiation into Disort is isotropic cosmic background radiation. )", - .author = {"Richard Larsson"}, - .out = {"disort_settings"}, - .in = {"disort_settings", "frequency_grid"}, + .author = {"Richard Larsson"}, + .out = {"disort_settings"}, + .in = {"disort_settings", "frequency_grid"}, }; wsm_data["disort_settingsNoSurfaceEmission"] = { @@ -3477,12 +3549,12 @@ Note that you must have set the optical thickness before calling this. .desc = R"(Surface radiation into Disort is isotropic from surface temperature. )", - .author = {"Richard Larsson"}, - .out = {"disort_settings"}, - .in = {"disort_settings", - "frequency_grid", - "ray_path_point", - "surface_field"}, + .author = {"Richard Larsson"}, + .out = {"disort_settings"}, + .in = {"disort_settings", + "frequency_grid", + "ray_path_point", + "surface_field"}, }; wsm_data["disort_settingsNoLegendre"] = { @@ -3621,17 +3693,16 @@ Note that you must have set the optical thickness before calling this. }; wsm_data["RetrievalAddAtmosphere"] = { - .desc = R"(Add atmospheric property the retrieval setup. + .desc = R"(Add atmospheric property the retrieval setup. )", - .author = {"Richard Larsson"}, - .out = {"jacobian_targets", "covariance_matrix_diagonal_blocks"}, - .in = {"jacobian_targets", "covariance_matrix_diagonal_blocks"}, - .gin = {"species", "matrix", "inverse", "d"}, - .gin_type = - {"AtmKey,SpeciesEnum,SpeciesIsotope,QuantumIdentifier", - "BlockMatrix", - "BlockMatrix", - "Numeric"}, + .author = {"Richard Larsson"}, + .out = {"jacobian_targets", "covariance_matrix_diagonal_blocks"}, + .in = {"jacobian_targets", "covariance_matrix_diagonal_blocks"}, + .gin = {"species", "matrix", "inverse", "d"}, + .gin_type = {"AtmKey,SpeciesEnum,SpeciesIsotope,QuantumIdentifier", + "BlockMatrix", + "BlockMatrix", + "Numeric"}, .gin_value = {std::nullopt, std::nullopt, BlockMatrix{}, Numeric{0.1}}, .gin_desc = {"The property added to the retrieval system", diff --git a/src/workspace_variables.cpp b/src/workspace_variables.cpp index 84feee020e..4059e4bd87 100644 --- a/src/workspace_variables.cpp +++ b/src/workspace_variables.cpp @@ -7,7 +7,7 @@ internal_workspace_variables() { wsv_data["absorption_bands"] = { .desc = R"--(Bands of absorption lines for LBL calculations. )--", - .type = "ArrayOfAbsorptionBand", + .type = "AbsorptionBands", }; wsv_data["absorption_cia_data"] = { diff --git a/src/xml_io_array_macro.h b/src/xml_io_array_macro.h index 30b71f1b8c..b429cff03a 100644 --- a/src/xml_io_array_macro.h +++ b/src/xml_io_array_macro.h @@ -24,12 +24,11 @@ void xml_read(std::istream &is_xml, T &at, bifstream *pbifs) try { Index n; try { - for (n = 0; n < nelem; n++) - xml_read_from_stream(is_xml, at[n], pbifs); + for (n = 0; n < nelem; n++) xml_read_from_stream(is_xml, at[n], pbifs); } catch (const std::runtime_error &e) { std::ostringstream os; - os << "Error reading " - << WorkspaceGroupInfo>::name << ": " + os << "Error reading " << WorkspaceGroupInfo>::name + << ": " << "\n Element: " << n << "\n" << e.what(); throw std::runtime_error(os.str()); @@ -41,11 +40,14 @@ void xml_read(std::istream &is_xml, T &at, bifstream *pbifs) try { throw std::runtime_error( var_string("Failed reading routine for ", WorkspaceGroupInfo>::name, - "\nError reads:\n", e.what())); + "\nError reads:\n", + e.what())); } template -void xml_write(std::ostream &os_xml, const T &at, bofstream *pbofs, +void xml_write(std::ostream &os_xml, + const T &at, + bofstream *pbofs, const String &name) try { const static String subtype{ WorkspaceGroupInfo>::name}; @@ -54,8 +56,7 @@ void xml_write(std::ostream &os_xml, const T &at, bofstream *pbofs, ArtsXMLTag close_tag; open_tag.set_name("Array"); - if (name.length()) - open_tag.add_attribute("name", name); + if (name.length()) open_tag.add_attribute("name", name); open_tag.add_attribute("type", subtype); open_tag.add_attribute("nelem", static_cast(at.size())); @@ -74,17 +75,19 @@ void xml_write(std::ostream &os_xml, const T &at, bofstream *pbofs, throw std::runtime_error( var_string("Failed saving routine for ", WorkspaceGroupInfo>::name, - "\nError reads:\n", e.what())); + "\nError reads:\n", + e.what())); } //! Helper macro for when both Array and T are ARTS groups -#define TMPL_XML_READ_WRITE_STREAM_ARRAY(T) \ - void xml_read_from_stream(std::istream &is_xml, T &at, bifstream *pbifs) { \ - xml_read(is_xml, at, pbifs); \ - } \ - \ - void xml_write_to_stream(std::ostream &os_xml, const T &at, bofstream *pbofs, \ - const String &name) { \ - xml_write(os_xml, at, pbofs, name); \ +#define TMPL_XML_READ_WRITE_STREAM_ARRAY(T) \ + void xml_read_from_stream(std::istream &is_xml, T &at, bifstream *pbifs) { \ + xml_read(is_xml, at, pbifs); \ + } \ + \ + void xml_write_to_stream(std::ostream &os_xml, \ + const T &at, \ + bofstream *pbofs, \ + const String &name) { \ + xml_write(os_xml, at, pbofs, name); \ } - \ No newline at end of file diff --git a/src/xml_io_array_types.cc b/src/xml_io_array_types.cc index 53827ac25c..2918ae9483 100644 --- a/src/xml_io_array_types.cc +++ b/src/xml_io_array_types.cc @@ -413,6 +413,5 @@ TMPL_XML_READ_WRITE_STREAM_ARRAY(ArrayOfGriddedField1Named) TMPL_XML_READ_WRITE_STREAM_ARRAY(ArrayOfAscendingGrid) TMPL_XML_READ_WRITE_STREAM_ARRAY(ArrayOfVector2) TMPL_XML_READ_WRITE_STREAM_ARRAY(ArrayOfVector3) -TMPL_XML_READ_WRITE_STREAM_ARRAY(ArrayOfAbsorptionBand) TMPL_XML_READ_WRITE_STREAM_ARRAY(ArrayOfSpeciesIsotope) TMPL_XML_READ_WRITE_STREAM_ARRAY(ArrayOfSensorObsel) diff --git a/src/xml_io_arts_types.h b/src/xml_io_arts_types.h index 22f85d77c3..06584dac2c 100644 --- a/src/xml_io_arts_types.h +++ b/src/xml_io_arts_types.h @@ -52,7 +52,6 @@ TMPL_XML_READ_WRITE_STREAM(ScatteringSpecies) TMPL_XML_READ_WRITE_STREAM(SpeciesTag) TMPL_XML_READ_WRITE_STREAM(AbsorptionBand) -TMPL_XML_READ_WRITE_STREAM(ArrayOfAbsorptionBand) TMPL_XML_READ_WRITE_STREAM(AbsorptionLines) TMPL_XML_READ_WRITE_STREAM(Agenda) TMPL_XML_READ_WRITE_STREAM(AtmField) diff --git a/src/xml_io_compound_types.cc b/src/xml_io_compound_types.cc index f350a9412c..d63cc83819 100644 --- a/src/xml_io_compound_types.cc +++ b/src/xml_io_compound_types.cc @@ -2535,41 +2535,6 @@ void xml_write_to_stream(std::ostream& os_xml, os_xml << '\n'; } -void xml_read_from_stream(std::istream& is_xml, - AbsorptionBand& data, - bifstream* pbifs) try { - ArtsXMLTag open_tag; - open_tag.read_from_stream(is_xml); - open_tag.check_name("AbsorptionBand"); - - xml_read_from_stream(is_xml, data.key, pbifs); - xml_read_from_stream(is_xml, data.data, pbifs); - - ArtsXMLTag close_tag; - close_tag.read_from_stream(is_xml); - close_tag.check_name("/AbsorptionBand"); -} -ARTS_METHOD_ERROR_CATCH - -void xml_write_to_stream(std::ostream& os_xml, - const AbsorptionBand& data, - bofstream* pbofs, - const String& name) { - ArtsXMLTag open_tag; - open_tag.set_name("AbsorptionBand"); - if (name.length()) open_tag.add_attribute("name", name); - open_tag.write_to_stream(os_xml); - os_xml << '\n'; - - xml_write_to_stream(os_xml, data.key, pbofs, ""); - xml_write_to_stream(os_xml, data.data, pbofs, ""); - - ArtsXMLTag close_tag; - close_tag.set_name("/AbsorptionBand"); - close_tag.write_to_stream(os_xml); - os_xml << '\n'; -} - //=== LinemixingEcsData ========================================= struct meta_data { String name; diff --git a/src/xml_io_map_types.cc b/src/xml_io_map_types.cc new file mode 100644 index 0000000000..019b659983 --- /dev/null +++ b/src/xml_io_map_types.cc @@ -0,0 +1,80 @@ +#include +#include + +#include + +template +void xml_write(std::ostream& os_xml, + const std::unordered_map& map, + bofstream* pbofs, + const String& name) { + const static String valtype{WorkspaceGroupInfo::name}; + const static String keytype{WorkspaceGroupInfo::name}; + + ArtsXMLTag open_tag; + ArtsXMLTag close_tag; + + open_tag.set_name("Map"); + if (name.length()) open_tag.add_attribute("name", name); + + open_tag.add_attribute("type", valtype); + open_tag.add_attribute("key", keytype); + open_tag.add_attribute("nelem", static_cast(map.size())); + + open_tag.write_to_stream(os_xml); + os_xml << '\n'; + + for (const auto& [key, value] : map) { + xml_write_to_stream(os_xml, key, pbofs, ""); + xml_write_to_stream(os_xml, value, pbofs, ""); + } + + close_tag.set_name("/Map"); + close_tag.write_to_stream(os_xml); + + os_xml << '\n'; +} + +template +void xml_read(std::istream& is_xml, + std::unordered_map& map, + bifstream* pbifs) { + const static String valtype{WorkspaceGroupInfo::name}; + const static String keytype{WorkspaceGroupInfo::name}; + + ArtsXMLTag tag; + Index nelem; + + tag.read_from_stream(is_xml); + tag.check_name("Map"); + tag.check_attribute("type", valtype); + tag.check_attribute("key", keytype); + + tag.get_attribute_value("nelem", nelem); + map.reserve(nelem); + + Index n; + for (n = 0; n < nelem; n++) { + Key key; + xml_read_from_stream(is_xml, key, pbifs); + xml_read_from_stream(is_xml, map[std::move(key)], pbifs); + } + + tag.read_from_stream(is_xml); + tag.check_name("/Map"); +} + +//! Helper macro for Map types +#define TMPL_XML_READ_WRITE_STREAM_MAP(T) \ + void xml_read_from_stream(std::istream& is_xml, T& map, bifstream* pbifs) { \ + xml_read(is_xml, map, pbifs); \ + } \ + \ + void xml_write_to_stream(std::ostream& os_xml, \ + const T& map, \ + bofstream* pbofs, \ + const String& name) { \ + xml_write(os_xml, map, pbofs, name); \ + } + +TMPL_XML_READ_WRITE_STREAM_MAP(AbsorptionBands) diff --git a/tests/core/jac/model_state_atm.py b/tests/core/jac/model_state_atm.py index 17bc32f026..3a67acee84 100644 --- a/tests/core/jac/model_state_atm.py +++ b/tests/core/jac/model_state_atm.py @@ -67,8 +67,8 @@ def ops(ws, op): ws.absorption_bandsSelectFrequency(fmin=100e9, fmax=120e9, by_line=1) ws.absorption_bandsSetZeeman(species="O2-66", fmin=118e9, fmax=119e9) -while len(ws.absorption_bands) != 1: - ws.absorption_bands.pop() +bandkey = "O2-66 ElecStateLabel X X Lambda 0 0 S 1 1 v 0 0" +ws.absorption_bands = {bandkey: ws.absorption_bands[bandkey]} # %% Temperature and pressure and VMR and ratios diff --git a/tests/core/lbl/ecs_co2.py b/tests/core/lbl/ecs_co2.py index 1c512f5e9c..2ef34dcf8d 100644 --- a/tests/core/lbl/ecs_co2.py +++ b/tests/core/lbl/ecs_co2.py @@ -1,107 +1,16 @@ import pyarts import numpy as np +import matplotlib.pyplot as plt -def polyfit(x, y, plot=True): - pfit = np.polyfit(x, y, deg=3) - return pfit +def calc(ws, lineshape=None): + if lineshape is not None: + ws.absorption_bands[bandkey].lineshape = lineshape + ws.propagation_matrixInit() + ws.propagation_matrixAddLines() + return 1.0 * ws.propagation_matrix[:, 0] -def fieldfit(x, f, plot=False): - fpfit = [] - for i in range(f.shape[1]): - fpfit.append([]) - for j in range(f.shape[2]): - fpfit[-1].append(polyfit(x, f[:, i, j], plot)) - return np.array(fpfit) - - -def lblvals(band, T, T0=296): - Q = pyarts.arts.lbl.Q(T, band.key.isotopologue) - lbl_str = [] - lbl_val = [] - - f0 = 0 - for line in band.data.lines: - assert line.f0 >= f0, f"Previous f0 {f0} larger than current f0 {line.f0}" - f0 = line.f0 - - lbl_str.append( - line.s(T, Q) * pyarts.arts.constants.c**2 / (8 * pyarts.arts.constants.pi) - ) - lbl_val.append([]) - for i in range(len(line.ls.single_models)): - ls = line.ls.single_models[i] - lbl_val[-1].append( - line.f0 - + ls.D0(T0, T, ws.atmospheric_point.pressure) - + 1j * ls.G0(T0, T, ws.atmospheric_point.pressure) - ) - - return np.array(lbl_str), np.array(lbl_val) - - -def eqvvals(band, T): - band.data.lineshape = "VP_ECS_HARTMANN" - for line in band.data.lines: - line.ls.one_by_one = True - - eqv_str, eqv_val = pyarts.arts.lbl.equivalent_lines( - band, ws.ecs_data, ws.atmospheric_point, T - ) - eqv_val = np.array(eqv_val) - eqv_str = np.array(eqv_str) - a = 2 - idx = np.argsort(eqv_val.real, axis=a) - eqv_val_sorted = np.take_along_axis(eqv_val, idx, axis=a) - eqv_str_sorted = np.take_along_axis(eqv_str, idx, axis=a) - return eqv_val_sorted, eqv_str_sorted - - -def lmvalues(lbl_str, lbl_val, eqv_val_sorted, eqv_str_sorted, p): - lm_val = eqv_val_sorted - lbl_val.T - lm_str = 1.0 * eqv_str_sorted - lm_str[:, 0] /= lbl_str.T - lm_str[:, 0] -= 1.0 - lm_str[:, 1] /= lbl_str.T - - foffset = lm_val.real / p**2 - goffset = lm_val.imag / p**3 - soffset = lm_str.real / p**2 - yoffset = lm_str.imag / p - return foffset, goffset, soffset, yoffset - - -def fullfit(band, T, p): - fo, go, so, yo = lmvalues(*lblvals(band, T), *eqvvals(band, T), p) - return fieldfit(T, fo), fieldfit(T, go), fieldfit(T, so), fieldfit(T, yo) - - -def adaptband(band, T, p, second_order=False): - ff, gf, sf, yf = fullfit(band, T, p) - - for i in range(ff.shape[0]): - for j in range(ff.shape[1]): - band.data.lines[j].ls.single_models[i]["Y"] = pyarts.arts.TemperatureModel( - "POLY", yf[i, j][::-1] - ) - if second_order: - band.data.lines[j].ls.single_models[i]["G"] = ( - pyarts.arts.TemperatureModel("POLY", sf[i, j][::-1]) - ) - band.data.lines[j].ls.single_models[i]["DV"] = ( - pyarts.arts.TemperatureModel("POLY", ff[i, j][::-1]) - ) - - band.data.lineshape = "VP_LTE" - return band - - -# WARNING: If arts-cat-data has been updated, this maybe should change -# it offsets the band so that we hit an "adaptable" band with less than N lines -di = 1 -N = 60 - ws = pyarts.Workspace() ws.absorption_speciesSet(species=["CO2-626"]) ws.ReadCatalogData() @@ -127,36 +36,40 @@ def adaptband(band, T, p, second_order=False): f2c = pyarts.arts.convert.freq2kaycm -# This is a speed-up thing -for i in range(len(ws.absorption_bands)): - if len(ws.absorption_bands[i].data.lines) < N: - band = pyarts.arts.AbsorptionBand(ws.absorption_bands[i + di]) - break - -ws.absorption_bands = [band] +bandkey = "CO2-626 ElecStateLabel X X kronigParity f f l2 2 2 parity NODEF + r 2 1 v1 1 0 v2 2 2 v3 1 0" +ws.absorption_bands = {bandkey: ws.absorption_bands[bandkey]} ws.frequency_grid = np.linspace( - ws.absorption_bands[0].data.lines[0].f0 * 0.9, - ws.absorption_bands[0].data.lines[-1].f0 * 1.1, - 10001, -) # around the band - -# VP LTE NO LINE MIXING -ws.propagation_matrixInit() -ws.propagation_matrixAddLines() -pm_lte = 1.0 * ws.propagation_matrix[:].T[0] - -T = np.linspace(200, 320, 8) -band = adaptband(band, T, p) -ws.absorption_bands = [band] - -ws.propagation_matrixInit() -ws.propagation_matrixAddLines() -pm_adapted_lte = 1.0 * ws.propagation_matrix[:].T[0] - -band.data.lineshape = "VP_ECS_HARTMANN" -ws.absorption_bands = [band] -ws.propagation_matrixInit() -ws.propagation_matrixAddLines() -pm_full = 1.0 * ws.propagation_matrix[:].T[0] - -assert np.all(pm_adapted_lte > 0), "Adaptation failed" + ws.absorption_bands[bandkey].lines[0].f0 * 0.8, + 1.2 * ws.absorption_bands[bandkey].lines[-1].f0, + 1001, +) + +plt.clf() + +# Online data +plt.semilogy(ws.frequency_grid / 1e9, calc(ws), label="Online", lw=3) + +# ECS data +plt.semilogy(ws.frequency_grid / 1e9, calc(ws, "VP_ECS_HARTMANN"), label="ECS") + +# Remove line mixing +ws.absorption_bands.clear_linemixing() +plt.semilogy( + ws.frequency_grid / 1e9, calc(ws, "VP_LTE"), label="No linemixing" +) + +# 1st order line mixing +ws.absorption_bands[bandkey].lineshape = "VP_ECS_HARTMANN" +ws.absorption_bandsLineMixingAdaptation( + temperatures=np.linspace(200, 350, 16), + band_key=bandkey, + rosenkranz_fit_order=1, +) +plt.semilogy( + ws.frequency_grid / 1e9, + calc(ws, "VP_LTE"), + "--", + label="1st Order Rosenkranz", +) + +plt.legend() diff --git a/tests/core/lbl/ecs_o2.py b/tests/core/lbl/ecs_o2.py index dd2ed2487d..c53cb450e3 100644 --- a/tests/core/lbl/ecs_o2.py +++ b/tests/core/lbl/ecs_o2.py @@ -12,10 +12,20 @@ ws.absorption_bandsKeepID(id=bandkey) t = [] -for a in ws.absorption_bands[0].data.lines: +for a in ws.absorption_bands[bandkey].lines: if a.f0 > 5e9 and a.f0 < 120e9: t.append(a) -ws.absorption_bands[0].data.lines = t +ws.absorption_bands[bandkey].lines = t + + +def calc(ws, lineshape=None): + if lineshape is not None: + ws.absorption_bands[bandkey].lineshape = lineshape + ws.propagation_matrixInit() + ws.propagation_matrixAddLines() + ws.propagation_matrixAddPredefined() + return 1.0 * ws.propagation_matrix[:, 0] + ws.WignerInit() ws.frequency_grid = np.linspace(20e9, 140e9, 10001) # around the band @@ -38,50 +48,52 @@ ws.ecs_dataAddMakarov2020() ws.ecs_dataAddMeanAir(vmrs=[1], species=["N2"]) -ws.absorption_bands[0].data.lineshape = "VP_ECS_MAKAROV" -ws.propagation_matrixInit() -ws.propagation_matrixAddLines() -ws.propagation_matrixAddPredefined() plt.clf() -plt.semilogy(ws.frequency_grid/1e9, ws.propagation_matrix[:, 0]) - -ws.ReadCatalogData() - -bandkey = "O2-66 ElecStateLabel X X Lambda 0 0 S 1 1 v 0 0" -ws.absorption_bandsSelectFrequency(fmax=1200e9) -ws.absorption_bandsKeepID(id=bandkey) - -t = [] -for a in ws.absorption_bands[0].data.lines: - if a.f0 > 5e9 and a.f0 < 120e9: - t.append(a) -ws.absorption_bands[0].data.lines = t - -ws.propagation_matrixInit() -ws.propagation_matrixAddLines() -ws.propagation_matrixAddPredefined() - -plt.semilogy(ws.frequency_grid/1e9, ws.propagation_matrix[:, 0], ':') - -for line in ws.absorption_bands[0].data.lines: - line.ls.remove("Y") - line.ls.remove("G") - line.ls.remove("DV") - -ws.propagation_matrixInit() -ws.propagation_matrixAddLines() -ws.propagation_matrixAddPredefined() - -plt.semilogy(ws.frequency_grid/1e9, ws.propagation_matrix[:, 0]) - +# Online data +plt.semilogy(ws.frequency_grid / 1e9, calc(ws), label="Online", lw=3) + +# ECS data +plt.semilogy(ws.frequency_grid / 1e9, calc(ws, "VP_ECS_MAKAROV"), label="ECS") + +# Remove line mixing +ws.absorption_bands.clear_linemixing() +plt.semilogy( + ws.frequency_grid / 1e9, calc(ws, "VP_LTE"), label="No linemixing" +) + +# 1st order line mixing +ws.absorption_bands[bandkey].lineshape = "VP_ECS_MAKAROV" +ws.absorption_bandsLineMixingAdaptation( + temperatures=np.linspace(200, 350, 16), + band_key=bandkey, + rosenkranz_fit_order=1, +) +plt.semilogy( + ws.frequency_grid / 1e9, + calc(ws, "VP_LTE"), + "--", + label="1st Order Rosenkranz", +) + +# 2nd order line mixing +ws.absorption_bands[bandkey].lineshape = "VP_ECS_MAKAROV" +ws.absorption_bandsLineMixingAdaptation( + temperatures=np.linspace(200, 350, 16), + band_key=bandkey, + rosenkranz_fit_order=2, +) +plt.semilogy( + ws.frequency_grid / 1e9, + calc(ws, "VP_LTE"), + ":", + label="2nd Order Rosenkranz", +) + +# Using PWR98 ws.absorption_speciesSet(species=["O2-PWR98", "H2O-PWR98"]) ws.ReadCatalogData() -ws.propagation_matrixInit() -ws.propagation_matrixAddPredefined() -plt.semilogy(ws.frequency_grid/1e9, ws.propagation_matrix[:, 0], ":") - - +plt.semilogy(ws.frequency_grid / 1e9, calc(ws), label="PWR98") -plt.legend(["ECS", "ONLINE", "NO-LM", "PWR"]) +plt.legend() diff --git a/tests/core/zeeman/spectral_radiance_jacobian_magnetic_field.py b/tests/core/zeeman/spectral_radiance_jacobian_magnetic_field.py index 6a2ea6741b..969d5dfdce 100644 --- a/tests/core/zeeman/spectral_radiance_jacobian_magnetic_field.py +++ b/tests/core/zeeman/spectral_radiance_jacobian_magnetic_field.py @@ -23,7 +23,9 @@ ws.absorption_bandsSetZeeman(species="O2-66", fmin=118e9, fmax=119e9) ws.WignerInit() -ws.absorption_bands.pop() +bandkey = "O2-66 ElecStateLabel X X Lambda 0 0 S 1 1 v 0 0" +ws.absorption_bands = {bandkey: ws.absorption_bands[bandkey]} + # %% Use the automatic agenda setter for propagation matrix calculations ws.propagation_matrix_agendaAuto() diff --git a/tests/hitran/read.py b/tests/hitran/read.py new file mode 100644 index 0000000000..954aa58363 --- /dev/null +++ b/tests/hitran/read.py @@ -0,0 +1,94 @@ +import pyarts +import numpy as np +import os + + +def create_local(gfn, lfn): + """ Simple helper method to regenerate this data in case necessary """ + assert gfn != lfn, "Please use separate filenames" + + with open(gfn, "r") as a: + line = a.readline() + single_lines = {} + while line != "": + spec = line[:3] + if spec not in single_lines: + single_lines[spec] = line + line = a.readline() + + with open(lfn, "w") as a: + for isot in single_lines: + a.write(single_lines[isot]) + + +DIR = "lines" +local_fn = "single_line.par" + +ws = pyarts.Workspace() +ws.absorption_bandsReadHITRAN(file="/Users/richard/Work/hitran.par.txt") +ws.absorption_bandsSaveSplit(dir=DIR) + +# create_local("a-full-hitran-to-extract-from.par", local_fn) + +# ws = pyarts.Workspace() + +# ws.absorption_bandsReadHITRAN(file=local_fn) +# tmp = pyarts.arts.AbsorptionBands(ws.absorption_bands) +# ws.absorption_bandsSaveSplit(dir=DIR) +# ws.absorption_bands = {} +# ws.absorption_bandsReadSplit(dir=DIR) + +# simple_attrs = ["a", "f0", "e0", "gu", "gl"] + +# for key in tmp: +# assert key in ws.absorption_bands, "Missing isotopologue key after read" + +# assert len(ws.absorption_bands[key].lines) == len(tmp[key].lines) +# assert len(tmp[key].lines) == 1 + +# l1 = ws.absorption_bands[key].lines[0] +# l2 = tmp[key].lines[0] + +# # Check pure numeric values are reproduced +# for attr in simple_attrs: +# assert np.allclose(getattr(l1, attr), getattr(l2, attr)), ( +# f"Attribute '{attr}' not close " +# + f"l1.{attr}={getattr(l1, attr)} vs l2.{attr}={getattr(l2, attr)}" +# ) + +# # Check Zeeman effect is reproduced +# assert np.allclose(l1.z.gl, l2.z.gl), "Bad Zeeman GL" +# assert np.allclose(l1.z.gu, l2.z.gu), "Bad Zeeman GU" +# assert l1.z.on == l2.z.on + +# # Check that the line shape is correct +# assert np.allclose(l1.ls.one_by_one, l2.ls.one_by_one) +# assert np.allclose(l1.ls.T0, l2.ls.T0) +# assert len(l1.ls.single_models) == len(l2.ls.single_models) +# for i in range(len(l1.ls.single_models)): +# lsm1 = l1.ls.single_models[i] +# lsm2 = l2.ls.single_models[i] +# assert lsm1.species == lsm2.species +# assert len(lsm1.data) == len(lsm2.data) + +# for j in range(len(lsm1.data)): +# lsmd1 = lsm1.data[j] +# lsmd2 = lsm2.data[j] +# assert lsmd1[0] == lsmd2[0] +# assert lsmd1[1].type == lsmd2[1].type +# assert np.allclose(lsmd1[1].data, lsmd2[1].data) + +# # Check quantum numbers +# qn1 = l1.qn +# qn2 = l2.qn +# assert len(qn1) == len(qn2) +# for q1, q2 in zip(qn1, qn2): +# assert q1.type == q2.type +# assert q1.low == q2.low +# assert q1.upp == q2.upp + +# # CLEAN-UP on success +# for fn in os.listdir(DIR): +# path = os.path.join(DIR, fn) +# os.remove(path) +# os.rmdir(DIR) diff --git a/tests/hitran/single_line.par b/tests/hitran/single_line.par new file mode 100644 index 0000000000..9012f2286f --- /dev/null +++ b/tests/hitran/single_line.par @@ -0,0 +1,140 @@ + 73 0.000000644 7.691E-46 5.715E-30.03540.038 770.63500.720.000000 X 0 X 0 21.5 Q 23Q 23 20.5d75262049 912 9 4 0 44.0 42.0 ElecStateLabel=X;Lambda=0;S=1;v=0;J=23;N=23;F#nuclearSpinRef:O2=21.5 ElecStateLabel=X;Lambda=0;S=1;v=0;J=23;N=23;F#nuclearSpinRef:O2=20.5 + 71 0.000001000 1.869E-49 1.013E-31.03460.034 4383.25070.720.000000 X 0 X 0 Q 55Q 55 g65222030 912 9 4 0 111.0 111.0 ElecStateLabel=X;Lambda=0;S=1;v=0;J=55;N=55 ElecStateLabel=X;Lambda=0;S=1;v=0;J=55;N=55 + 81 0.000001000 6.550E-40 3.190E-29.06210.068 161.03200.630.000000 X3/2 0 X3/2 0 3.5 Q 4.5e 4.5005440 8 8 8 3 1 0 8.0 10.0 ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=4.5;F#nuclearSpinRef:N1=3.5;parity=-;kronigParity=f ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=4.5;F#nuclearSpinRef:N1=4.5;parity=+;kronigParity=e +201 0.000001 1.073E-36 2.385E-25.09560.533 548.86310.520.000000 0 0 0 0 0 0 0 0 0 0 0 0 14 6 8 14 6 9 655440 4 2 2 1 2 0 29.0 29.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=14;Ka=6;Kc=8 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=14;Ka=6;Kc=9 +281 0.000001901 1.298E-36 1.637E-25.05940.099 672.98580.580.000000 0 0 0 0 0 0 0 0 12 6 0A- 12 6 0A+ 935430 5 4 2 3 1 0 200.0 200.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l=0;vibSym=A-;J=12;K=6 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l=0;vibSym=A+;J=12;K=6 +203 0.000016 1.945E-35 5.322E-21.11160.530 88.06420.830.000000 0 0 0 0 0 0 0 0 0 0 0 0 3 3 0 3 3 1 654320 4 2 2 1 2 0 21.0 21.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=3;Ka=3;Kc=0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=3;Ka=3;Kc=1 + 83 0.000016455 1.609E-38 1.137E-23.06830.074 124.82000.740.000000 X3/2 0 X3/2 0 1.5 Q 1.5e 1.59554401010 8 3 1 0 4.0 4.0 ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=1.5;F#nuclearSpinRef:N1=1.5;parity=+;kronigParity=f ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=1.5;F#nuclearSpinRef:N1=1.5;parity=-;kronigParity=e +202 0.000019 1.483E-34 8.410E-21.11160.530 88.15420.830.000000 0 0 0 0 0 0 0 0 0 0 0 0 3 3 0 3 3 1 654320 4 2 2 1 2 0 42.0 42.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=3;Ka=3;Kc=0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=3;Ka=3;Kc=1 + 82 0.000026018 2.357E-37 7.533E-23.06830.074 124.84960.740.000000 X3/2 0 X3/2 0 2.0 Q 1.5e 2.07554401010 8 3 1 0 5.0 5.0 ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=1.5;F#nuclearSpinRef:N1=2.0;parity=+;kronigParity=f ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=1.5;F#nuclearSpinRef:N1=2.0;parity=-;kronigParity=e + 15 0.000134 2.672E-38 2.275E-19.05330.410 608.47270.790.000060 0 0 0 0 0 0 5 5 0 5 5 1 5622205041 7833348 66.0 66.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=5;Ka=5;Kc=0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=5;Ka=5;Kc=1 + 16 0.000379 1.055E-39 1.652E-17.04180.329 1747.96860.790.000110 0 0 0 0 0 0 11 7 4 11 7 5 3622205041 7833348 828.0 828.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=11;Ka=7;Kc=4 ElecStateLabel=X;v1=0;v2=0;v3=0;J=11;Ka=7;Kc=5 +441 0.000436 6.330E-31 1.804E-16.10000.100 222.71760.750.000000 0000001 0 0 1 0000001 0 0 1 Q 1e 632220 3 3 1 1 1 0 18.0 18.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;v7=1;l5=0;l6=0;l7=1;J=1;parity=+;kronigParity=f ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;v7=1;l5=0;l6=0;l7=1;J=1;parity=-;kronigParity=e + 14 0.000726 6.613E-33 2.711E-16.06950.428 402.32950.790.000240 0 0 0 0 0 0 4 4 0 4 4 1 5322205041 7833348 54.0 54.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=4;Ka=4;Kc=0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=4;Ka=4;Kc=1 + 61 0.001063 1.358E-36 8.643E-24.06500.079 62.87570.730.000000 0 0 0 0 1A1 0 0 0 0 1A1 3F2 1 3F1 1 534330453738 7 1 0 21.0 21.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibSym=A1;J=3;rovibSym=F2;n=1;alpha=1 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibSym=A1;J=3;rovibSym=F1;n=1;alpha=1 +131 0.002967 1.077E-31 8.525E-18.04000.300 608.19630.660.000000 X1/2 0 X1/2 0 4.0 QQ 4.5ef 5.0603110 4 4 2 1 1 0 9.0 11.0 ElecStateLabel=X;Lambda=1;Omega=0.5;S=0.5;v=0;J=4.5;F#nuclearSpinRef:H1=4.0;parity=+;kronigParity=e ElecStateLabel=X;Lambda=1;Omega=0.5;S=0.5;v=0;J=4.5;F#nuclearSpinRef:H1=5.0;parity=-;kronigParity=f +121 0.006730636 4.120E-29 5.233E-13.10260.800 100.62690.820.000000 GROUND GROUND 15 14 1 14 15 14 2 14 9522202020 3 3 2 0 29.0 29.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=15;Ka=14;Kc=1;F=14 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=15;Ka=14;Kc=2;F=14 +133 0.009943 2.343E-31 1.216E-13.09500.300 0.00060.660.000000 X3/2 0 X3/2 0 1.5 QQ 1.5fe 2.5603110 4 4 2 1 1 0 4.0 6.0 ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=1.5;F#nuclearSpinRef:H1=1.5;parity=+;kronigParity=f ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=1.5;F#nuclearSpinRef:H1=2.5;parity=-;kronigParity=e +232 0.014332 1.216E-29 3.913E-12.14770.573 708.84490.780.000000 0 1 1 0 0 1 1 0 Q 1e 44555013 7 2 1 1 0 36.0 36.0 ElecStateLabel=X;v1=0;v2=1;l2=1;v3=0;J=1;kronigParity=f ElecStateLabel=X;v1=0;v2=1;l2=1;v3=0;J=1;parity=-;kronigParity=e +182 0.014605 9.339E-30 4.596E-13.0915.1000 319.71750.530.000000 X1/2 0 X1/2 0 1 Q 0.5e 2600200 2 2 2 0 1 0 3.0 5.0 ElecStateLabel=X;Lambda=1;Omega=0.5;S=0.5;v=0;J=0.5;F#nuclearSpinRef:Cl1=1;parity=-;kronigParity=f ElecStateLabel=X;Lambda=1;Omega=0.5;S=0.5;v=0;J=0.5;F#nuclearSpinRef:Cl1=2;parity=+;kronigParity=e +231 0.014975 1.211E-27 4.585E-12.14770.573 714.93560.780.000000 0 1 1 0 0 1 1 0 Q 1e 685550 7 3 2 1 1 0 18.0 18.0 ElecStateLabel=X;v1=0;v2=1;l2=1;v3=0;J=1;kronigParity=f ElecStateLabel=X;v1=0;v2=1;l2=1;v3=0;J=1;parity=-;kronigParity=e + 91 0.017394 8.597E-29 3.349E-13.09580.400 583.16670.750.000000 0 0 0 0 0 0 39 7 33 38 8 30 6544001110 3 2 0 0 79.0 77.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=39;Ka=7;Kc=33 ElecStateLabel=X;v1=0;v2=0;v3=0;J=38;Ka=8;Kc=30 +391 0.019265 1.245E-29 2.991E-13.10000.400 235.71200.750.000000 V12 V12 3 1 A- 3 1 A+ 502220 2 2 1 1 1 0 14.0 14.0 ElecStateLabel=X;v12=1;J=3;K=1;rovibSym=A- ElecStateLabel=X;v12=1;J=3;K=1;rovibSym=A+ + 31 0.026341376 5.484E-29 1.383E-13.07060.095 495.51740.810.000000 0 0 0 0 0 0 31 5 27 32 4 28 8565504058 6 2 4 0 63.0 65.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=31;Ka=5;Kc=27 ElecStateLabel=X;v1=0;v2=0;v3=0;J=32;Ka=4;Kc=28 +181 0.027700 1.059E-28 1.864E-12.0915.1000 319.69020.530.000000 X1/2 0 X1/2 0 2 Q 0.5e 1600200 2 2 2 0 1 0 5.0 3.0 ElecStateLabel=X;Lambda=1;Omega=0.5;S=0.5;v=0;J=0.5;F#nuclearSpinRef:Cl1=2;parity=-;kronigParity=f ElecStateLabel=X;Lambda=1;Omega=0.5;S=0.5;v=0;J=0.5;F#nuclearSpinRef:Cl1=1;parity=+;kronigParity=e + 62 0.031765 5.400E-34 5.865E-17.05130.072 690.05010.750.000000 0 0 0 0 1A1 0 0 0 0 1A1 11F1 3 11F2 3 5323331111 4 1 1 1 138.0 138.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibSym=A1;J=11;rovibSym=F1;n=1;alpha=3 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibSym=A1;J=11;rovibSym=F2;n=1;alpha=3 +471 0.039673 4.137E-34 7.823E-16.07000.1001857.545290.700.000000 0 0 0 0 0 0A1' 0 0 0 0 0 0A1' 83 57 A1" 82 54 A1' 431110 3 3 1 1 1 0 167.0 165.0 ElecStateLabel=X;Ka=83;Kc=57 ElecStateLabel=X;Ka=82;Kc=54 +251 0.043110 7.522E-28 8.373E-12.10000.300 407.73960.750.000000 0 0 002 0 0 0 0 004 0 0 21 1 20 20 2 18 352210 4 3 1 1 1 0 43.0 41.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v5=0;v6=0;J=21;Ka=1;Kc=20;n=0;tau=2 ElecStateLabel=X;v1=0;v2=0;v3=0;v5=0;v6=0;J=20;Ka=2;Kc=18;n=0;tau=4 + 12 0.052626 2.395E-33 1.724E-12.09460.412 1914.88090.73-.002760 0 1 0 0 1 0 5 1 5 4 2 2 534253807294713152 11.0 9.0 ElecStateLabel=X;v1=0;v2=1;v3=0;J=5;Ka=1;Kc=5 ElecStateLabel=X;v1=0;v2=1;v3=0;J=4;Ka=2;Kc=2 +431 0.052674 1.266E-30 5.198E-14.10000.200 636.04640.750.000000 000000010 f u 000001000 f g 0 0 1 0 1 0 0 0 P 8f 642220 1 1 0 0 0 0 45.0 51.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;v7=0;v8=1;v9=0;l6=0;l7=0;l8=1;l9=0;vibInv=u;J=7;parity=+;kronigParity=f ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=1;v7=0;v8=0;v9=0;l6=1;l7=0;l8=0;l9=0;vibInv=g;J=8;parity=-;kronigParity=f +132 0.052846 1.119E-28 1.236E-11.09500.300 0.00180.660.000000 X3/2 0 X3/2 0 1.0 QQ 1.5fe 2.0603110 4 4 2 1 1 0 3.0 5.0 ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=1.5;F#nuclearSpinRef:H1=1.0;parity=+;kronigParity=f ElecStateLabel=X;Lambda=1;Omega=1.5;S=0.5;v=0;J=1.5;F#nuclearSpinRef:H1=2.0;parity=-;kronigParity=e +111 0.058210 1.440E-30 4.575E-12.06550.500 2310.23460.750.000000 0000 00 0 A2" 0000 00 0 A1' 15 3 a A1"A2' 15 3 s A2"A2" 544420 8 8 6 2 1 0 372.0 372.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l3=0;l4=0;l=0;vibInv=a;vibSym=A2";J=15;K=3;rotSym=A1";rovibSym=A2' ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l3=0;l4=0;l=0;vibInv=s;vibSym=A1';J=15;K=3;rotSym=A2";rovibSym=A2" + 11 0.072049 1.875E-30 4.668E-12.09460.391 1922.82890.730.002760 0 1 0 0 1 0 4 2 2 5 1 5 534253807294713152 9.0 11.0 ElecStateLabel=X;v1=0;v2=1;v3=0;J=4;Ka=2;Kc=2 ElecStateLabel=X;v1=0;v2=1;v3=0;J=5;Ka=1;Kc=5 +411 0.092560454 7.590E-28 6.438E-12.16661.603 408.69190.720.000000 V8 V8 12 1 1E 12 -1 1E 772210 2 2 3 3 2 0 150.0 150.0 ElecStateLabel=X;v8=1;l=1;J=12;K=1;rovibSym=E ElecStateLabel=X;v8=1;l=1;J=12;rovibSym=E + 92 0.103174 4.900E-28 6.785E-11.10060.475 202.80130.750.000000 0 0 0 0 0 0 23 4 20 22 5 17 6544001110 3 2 0 0 47.0 45.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=23;Ka=4;Kc=20 ElecStateLabel=X;v1=0;v2=0;v3=0;J=22;Ka=5;Kc=17 +122 0.137898002 1.202E-28 3.948E-10.11880.800 36.99160.890.000000 GROUND GROUND 9 8 1 9 8 2 8522202020 3 3 2 0 76.0 76.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=9;Ka=8;Kc=1 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=9;Ka=8;Kc=2 + 93 0.142169 1.656E-28 1.871E-10.10040.482 203.50350.750.000000 0 0 0 0 0 0 22 5 17 23 4 20 4544001211 3 2 0 0 180.0 188.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=22;Ka=5;Kc=17 ElecStateLabel=X;v1=0;v2=0;v3=0;J=23;Ka=4;Kc=20 +371 0.154886 5.256E-26 6.021E-10.06000.150 263.99230.670.000000 0 0 0 0 0 0 26 1 26 27 0 27 460200 1 1 1 1 0 0 424.0 440.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=26;Ka=1;Kc=26 ElecStateLabel=X;v1=0;v2=0;v3=0;J=27;Ka=0;Kc=27 + 94 0.165166 4.669E-29 3.642E-10.10520.408 19.15560.750.000000 0 0 0 0 0 0 6 2 5 7 1 6 4544001211 3 2 0 0 13.0 15.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=6;Ka=2;Kc=5 ElecStateLabel=X;v1=0;v2=0;v3=0;J=7;Ka=1;Kc=6 +331 0.172756 1.721E-26 4.507E-10.13080.300 25.33640.670.000000 0 0 0 0 0 0 2 1 1 2+ 2 1 2 2+664200 4 2 6 1 0 0 5.0 5.0 ElecStateLabel=X;S=0.5;v1=0;v2=0;v3=0;J=2.5;N=2;Ka=1;Kc=1;F#nuclearSpinRef:H1=2 ElecStateLabel=X;S=0.5;v1=0;v2=0;v3=0;J=2.5;N=2;Ka=1;Kc=2;F#nuclearSpinRef:H1=2 +112 0.196210 1.224E-30 2.653E-10.06550.500 1747.41580.750.000000 0 0 0 0 a 0 0 0 0 s 13 3 13 3 6544201720 6 2 1 0 216.0 216.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibInv=a;J=13;K=3 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibInv=s;J=13;K=3 + 35 0.212814 8.238E-31 8.114E-11.07800.103 127.47330.780.000000 0 0 0 0 0 0 15 3 13 17.5 16 2 14 18.5 6565501518 6 2 4 0 36.0 38.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=15;Ka=3;Kc=13;F#nuclearSpinRef:O2=17.5 ElecStateLabel=X;v1=0;v2=0;v3=0;J=16;Ka=2;Kc=14;F#nuclearSpinRef:O2=18.5 +372 0.247001 1.308E-25 2.434E-09.06000.150 262.85160.670.000000 0 0 0 0 0 0 26 1 26 27 0 27 460200 1 1 1 1 0 0 424.0 440.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=26;Ka=1;Kc=26 ElecStateLabel=X;v1=0;v2=0;v3=0;J=27;Ka=0;Kc=27 + 34 0.289037 1.154E-30 3.146E-10.08780.106 7.86120.760.000000 0 0 0 0 0 0 4 0 4 4.5 3 1 3 3.5 6565501518 6 2 4 0 10.0 8.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=4;Ka=0;Kc=4;F#nuclearSpinRef:O3=4.5 ElecStateLabel=X;v1=0;v2=0;v3=0;J=3;Ka=1;Kc=3;F#nuclearSpinRef:O3=3.5 + 17 0.364230 1.050E-32 5.736E-10.09700.537 74.14200.620.000000 0 0 0 0 0 0 3 1 3 2 2 0 5625205141 97835 0 63.0 45.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=3;Ka=1;Kc=3 ElecStateLabel=X;v1=0;v2=0;v3=0;J=2;Ka=2;Kc=0 +503 0.371398062 1.882E-27 1.823E-08.05860.057 10.55120.710.000000 X 0 X 0 R 1Q 1 632210 2 2 1 1 1 0 3.0 3.0 ElecStateLabel=X;Lambda=0;S=1;v=0;J=1;N=2 ElecStateLabel=X;Lambda=0;S=1;v=0;J=1;N=1 +192 0.395796 5.377E-27 3.318E-09.10810.150 0.00000.500.000000 0 0 0 0 0 0 0 0 R 0 655500 913 4 2 0 0 3.0 1.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=0 +194 0.400605 9.922E-28 3.438E-09.10810.150 0.00000.500.000000 0 0 0 0 0 0 0 0 R 0 655500 913 4 2 0 0 12.0 4.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=0 +193 0.404408 1.434E-27 3.538E-09.10810.150 0.00000.500.000000 0 0 0 0 0 0 0 0 R 0 655500 913 4 2 0 0 6.0 2.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=0 +191 0.405713 1.306E-25 3.570E-09.10810.150 0.00000.500.000000 0 0 0 0 0 0 0 0 R 0 655500 913 4 2 0 0 3.0 1.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=0 +501 0.415766113 2.167E-29 2.616E-08.05860.057 2273.88560.710.000000 X 2 X 2 R 1Q 1 632210 2 2 1 1 1 0 3.0 3.0 ElecStateLabel=X;Lambda=0;S=1;v=2;J=1;N=2 ElecStateLabel=X;Lambda=0;S=1;v=2;J=1;N=1 +502 0.417784706 5.551E-26 2.581E-08.05860.057 10.55180.710.000000 X 0 X 0 R 1Q 1 632210 2 2 1 1 1 0 3.0 3.0 ElecStateLabel=X;Lambda=0;S=1;v=0;J=1;N=2 ElecStateLabel=X;Lambda=0;S=1;v=0;J=1;N=1 + 13 0.451496 5.840E-29 4.318E-10.09000.385 445.79340.78-.000880 0 0 0 0 0 0 6 1 6 5 2 3 563335803683662144 234.0 198.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=6;Ka=1;Kc=6 ElecStateLabel=X;v1=0;v2=0;v3=0;J=5;Ka=2;Kc=3 +101 0.497999 4.310E-27 3.777E-10.07920.095 30.38920.740.000000 0 0 0 0 0 0 7 1 7 6.5- 8 0 8 7.5-305233 2 2 8 2 2 1 14.0 16.0 ElecStateLabel=X;S=0.5;v1=0;v2=0;v3=0;J=6.5;N=7;Ka=1;Kc=7;F#nuclearSpinRef:N1=6.5 ElecStateLabel=X;S=0.5;v1=0;v2=0;v3=0;J=7.5;N=8;Ka=0;Kc=8;F#nuclearSpinRef:N1=7.5 + 24 0.757206 1.751E-34 1.656E-14.09490.127 0.00000.690.000478 0 0 0 01 0 0 0 01 2.5 R 0e 2.5666663 428 9 9 711 6.0 6.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1;F#nuclearSpinRef:O1=2.5;r=1;kronigParity=e ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=0;F#nuclearSpinRef:O1=2.5;r=1;parity=+;kronigParity=e +195 0.761173 1.706E-27 2.824E-08.10640.153 0.38060.500.000000 0 0 0 0 0 0 0 0 R 1 655500 913 4 2 0 0 5.0 3.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=2 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1 + 44 0.791154 1.022E-28 1.245E-09.09860.127 0.00000.750.000000 0 0 0 0 0 0 0 0 R 0e 636650 9 6 3 1 1 0 27.0 9.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1;kronigParity=e ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=0;parity=+;kronigParity=e + 41 0.838022 6.980E-26 1.700E-09.09620.117 0.00000.690.000021 0 0 0 0 0 0 0 0 R 0 005544 0 0 5 3 3 3 27.0 9.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=0 +242 0.872753 1.227E-25 5.108E-07.12240.494 0.00000.750.000000 GROUND GROUND 1 0 0A 1.5 0 0 0A 1.5654640 6 7 4 5 2 0 16.0 16.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l=0;J=1;K=0;rovibSym=A;F#nuclearSpinRef:Cl1=1.5 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l=0;J=0;K=0;rovibSym=A;F#nuclearSpinRef:Cl1=1.5 +241 0.886304 3.933E-25 5.234E-07.12300.619 0.00000.750.000000 GROUND GROUND 1 0 0A 1.5 0 0 0A 1.5654740 6 7 4 5 2 0 16.0 16.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l=0;J=1;K=0;rovibSym=A;F#nuclearSpinRef:Cl1=1.5 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l=0;J=0;K=0;rovibSym=A;F#nuclearSpinRef:Cl1=1.5 + 32 0.920900 4.692E-28 7.184E-09.08150.105 55.99220.770.000000 0 0 0 0 0 0 11 1 10 10 2 9 006550 113 6 2 4 0 23.0 21.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=11;Ka=1;Kc=10 ElecStateLabel=X;v1=0;v2=0;v3=0;J=10;Ka=2;Kc=9 +211 1.080800 6.090E-24 2.130E-07.10000.150 170.08460.700.000000 0 0 0 0 0 0 17 1 17 18 0 18 452220 3 2 2 1 1 0 280.0 296.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=17;Ka=1;Kc=17 ElecStateLabel=X;v1=0;v2=0;v3=0;J=18;Ka=0;Kc=18 + 33 1.176800 7.212E-28 1.461E-08.08230.105 49.10070.770.000000 0 0 0 0 0 0 10 1 9 9 2 8 006550 113 6 2 4 0 21.0 19.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=10;Ka=1;Kc=9 ElecStateLabel=X;v1=0;v2=0;v3=0;J=9;Ka=2;Kc=8 +212 1.432700 3.380E-24 4.920E-07.10000.150 167.12860.700.000000 0 0 0 0 0 0 17 1 17 18 0 18 452220 3 2 2 1 1 0 280.0 296.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=17;Ka=1;Kc=17 ElecStateLabel=X;v1=0;v2=0;v3=0;J=18;Ka=0;Kc=18 + 23 1.472734 1.131E-32 8.010E-14.09030.123 0.77530.690.000814 0 0 0 01 0 0 0 01 R 1e 3466632330 9 9 711 5.0 3.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=2;r=1;kronigParity=e ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1;r=1;parity=-;kronigParity=e +463 1.531794 1.681E-27 1.400E-06.08600.096 1236.31590.750.000000 1 1 R 0 632210 1 1 1 1 1 0 6.0 2.0 ElecStateLabel=X;v=1;J=1 ElecStateLabel=X;v=1;J=0 +461 1.586773 1.635E-33 1.390E-06.08600.096 5010.91690.750.000000 4 4 R 0 632210 1 1 1 1 1 0 3.0 1.0 ElecStateLabel=X;v=4;J=1 ElecStateLabel=X;v=4;J=0 +462 1.596453 6.611E-27 1.580E-06.08600.096 1262.02620.750.000000 1 1 R 0 632210 1 1 1 1 1 0 3.0 1.0 ElecStateLabel=X;v=1;J=1 ElecStateLabel=X;v=1;J=0 +464 1.608977 1.178E-27 1.620E-06.08600.096 1266.94360.750.000000 1 1 R 0 632210 1 1 1 1 1 0 12.0 4.0 ElecStateLabel=X;v=1;J=1 ElecStateLabel=X;v=1;J=0 + 72 1.69166328 7.985E-32 5.234E-10.03460.034 2002.97590.720.000000 X 0 X 0 Q 38R 37 d742220492212 9 4 0 77.0 75.0 ElecStateLabel=X;Lambda=0;S=1;v=0;J=38;N=38 ElecStateLabel=X;Lambda=0;S=1;v=0;J=37;N=38 +263 1.983050 9.166E-31 8.169E-11.11140.197 0.00000.750.000000 000 0 0 0 0+ 000 0 0 0 0+ R 0e 6366401917 2 1 1 0 18.0 6.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;l4=0;l5=0;vibRefl=+;J=1;parity=-;kronigParity=e ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;l4=0;l5=0;vibRefl=+;J=0;parity=+;kronigParity=e +233 2.870485 3.485E-24 2.233E-05.14770.573 0.00000.780.000000 0 0 0 0 0 0 0 0 R 0 685550 3 1 2 1 1 0 12.0 4.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=1 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=0 + 25 2.945424 1.014E-33 7.316E-13.08620.118 4.45950.690.000875 0 0 0 01 0 0 0 01 R 3e 3466632330 9 9 711 18.0 14.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=4;r=1;kronigParity=e ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=3;r=1;parity=-;kronigParity=e +311 2.985300 5.030E-26 1.583E-09.07130.161 359.36600.750.000000 0 0 0 0 0 0 7 1 6 6 4 3 344700 2 2 9 3 0 0 45.0 39.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=7;Ka=1;Kc=6 ElecStateLabel=X;v1=0;v2=0;v3=0;J=6;Ka=4;Kc=3 +452 3.2268002.948E-111 5.407E-16.05000.05036402.14040.750.000000 17 17 R 0 440000 2 2 0 0 0 0 18.0 6.0 ElecStateLabel=X;v=17;J=1 ElecStateLabel=X;v=17;J=0 + 55 3.401910 9.883E-43 5.752E-09.08030.087 6058.97350.76-.000479 3 3 R 0 475663 5 8 5 5 1 8 6.0 2.0 ElecStateLabel=X;v=3;J=1 ElecStateLabel=X;v=3;J=0 + 56 3.484504 1.311E-43 5.835E-09.08030.087 6131.47920.76-.000479 3 3 R 0 475663 5 8 5 5 1 8 36.0 12.0 ElecStateLabel=X;v=3;J=1 ElecStateLabel=X;v=3;J=0 + 52 3.545069 1.027E-45 4.606E-10.08030.087 8232.62700.76-.000479 4 4 R 0 475663 5 8 5 5 1 8 6.0 2.0 ElecStateLabel=X;v=4;J=1 ElecStateLabel=X;v=4;J=0 + 53 3.564356 4.532E-41 5.902E-09.08030.087 6200.77050.76-.000479 3 3 R 0 475663 5 8 5 5 1 8 3.0 1.0 ElecStateLabel=X;v=3;J=1 ElecStateLabel=X;v=3;J=0 + 54 3.646855 6.030E-42 5.956E-09.08030.087 6271.51590.76-.000479 3 3 R 0 475663 5 8 5 5 1 8 18.0 6.0 ElecStateLabel=X;v=3;J=1 ElecStateLabel=X;v=3;J=0 + 51 3.705026 2.354E-44 2.868E-10.08030.087 8414.46930.76-.000479 4 4 R 0 475663 5 8 5 5 1 8 3.0 1.0 ElecStateLabel=X;v=4;J=1 ElecStateLabel=X;v=4;J=0 +361 3.975871 4.152E-23 9.002E-07.06000.050 0.00000.500.000000 0 0 R 0 651100 3 2 1 1 0 0 9.0 3.0 ElecStateLabel=X;v=0;J=1 ElecStateLabel=X;v=0;J=0 + 43 4.858000 4.720E-26 4.646E-07.08810.110 12.14600.710.000207 0 0 0 0 0 0 0 0 R 5 005544 0 0 5 3 3 3 78.0 66.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=6 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=5 + 42 5.028000 5.220E-26 5.182E-07.08810.110 12.56900.710.000207 0 0 0 0 0 0 0 0 R 5 005544 0 0 5 3 3 3 78.0 66.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=6 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=5 +154 5.341824 3.251E-96 1.462E-05.09760.22833252.31610.740.000000 22 22 R 0 223450 9 4 4 1 2 0 36.0 12.0 ElecStateLabel=X;v=22;J=1 ElecStateLabel=X;v=22;J=0 +153 5.345199 8.976E-96 1.457E-05.09760.22833277.71500.740.000000 22 22 R 0 223440 9 4 4 1 2 0 36.0 12.0 ElecStateLabel=X;v=22;J=1 ElecStateLabel=X;v=22;J=0 +313 5.600900 2.080E-23 1.461E-04.09660.193 13.73900.750.000000 0 0 0 0 0 0 1 1 0 1 0 1 344400 2 2 9 6 0 0 36.0 36.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=1;Ka=1;Kc=0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=1;Ka=0;Kc=1 +312 5.614600 3.770E-24 4.729E-06.09660.193 13.74200.750.000000 0 0 0 0 0 0 1 1 0 1 0 1 344400 2 2 9 6 0 0 9.0 9.0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=1;Ka=1;Kc=0 ElecStateLabel=X;v1=0;v2=0;v3=0;J=1;Ka=0;Kc=1 +172 5.887799 3.120E-42 4.234E-06.07610.088 7594.14830.500.000000 5 5 R 0 363223 4 3 2 1 0 0 54.0 18.0 ElecStateLabel=X;v=5;J=1 ElecStateLabel=X;v=5;J=0 +164 7.656152 5.100E-44 3.676E-05.12300.119 8739.23080.500.000000 5 5 R 0 363300 6 3 1 2 0 0 36.0 12.0 ElecStateLabel=X;v=5;J=1 ElecStateLabel=X;v=5;J=0 +163 7.660578 5.189E-44 3.682E-05.12300.119 8741.70530.500.000000 5 5 R 0 363300 6 3 1 2 0 0 36.0 12.0 ElecStateLabel=X;v=5;J=1 ElecStateLabel=X;v=5;J=0 + 63 7.760179 5.677E-30 1.499E-09.06760.087 0.00000.630.000000 GROUND GROUND 1 0 A2 0 0 A1 665520413034 4 1 0 36.0 12.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=1;K=0;rovibSym=A2 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=0;K=0;rovibSym=A1 +151 8.836032 1.849E-93 4.386E-05.08580.22234241.06880.740.003701 17 17 R 0 255454 9 4 2 1 2 2 24.0 8.0 ElecStateLabel=X;v=17;J=1 ElecStateLabel=X;v=17;J=0 +152 8.839794 6.252E-94 4.415E-05.08580.21834230.52050.740.003701 17 17 R 0 485454 9 4 2 1 2 2 24.0 8.0 ElecStateLabel=X;v=17;J=1 ElecStateLabel=X;v=17;J=0 + 26 9.086146 1.156E-33 6.124E-12.07740.105 50.01930.680.000563 0 0 0 01 0 0 0 01 R 11e 3466632330 9 9 711 300.0 276.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=12;r=1;kronigParity=e ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=11;r=1;parity=-;kronigParity=e +321 10.018282 3.953E-22 2.996E-04.10000.400 67.63520.750.000000 GROUND GROUND 14 1 14 13 1 13 462220 3 3 1 1 1 0 116.0 108.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=14;Ka=1;Kc=14 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=13;Ka=1;Kc=13 +171 10.345787 5.738E-51 2.049E-05.07610.08813881.13290.500.004900 7 7 R 0 224423 4 3 2 1 0 2 36.0 12.0 ElecStateLabel=X;v=7;J=1 ElecStateLabel=X;v=7;J=0 +222 11.541466 1.064E-36 4.581E-03.06630.066 0.00000.810.000000 0 0 S 0q 344440 4 3 2 1 1 0 36.0 36.0 ElecStateLabel=X;v=0;J=2 ElecStateLabel=X;v=0;J=0 +221 11.833113 2.595E-39 6.351E-18.06630.066 2329.91160.810.000000 1 1 S 0q 344440 4 3 2 1 1 0 30.0 6.0 ElecStateLabel=X;v=1;J=2 ElecStateLabel=X;v=1;J=0 +162 13.418764 9.537E-55 2.043E-04.12300.13215997.23980.500.000000 7 7 R 0 373400 6 3 1 1 0 0 24.0 8.0 ElecStateLabel=X;v=7;J=1 ElecStateLabel=X;v=7;J=0 +161 13.422373 9.710E-55 2.044E-04.12300.13215999.32610.500.000000 7 7 R 0 373400 6 3 1 1 0 0 24.0 8.0 ElecStateLabel=X;v=7;J=1 ElecStateLabel=X;v=7;J=0 +142 13.620106 9.829E-97 1.149E-03.10370.60134633.95040.500.000000 15 15 R 0 263310 5 3 4 1 0 0 18.0 6.0 ElecStateLabel=X;v=15;J=1 ElecStateLabel=X;v=15;J=0 +261 13.624350 1.628E-28 1.843E-06.04500.081 3056.99230.750.000000 000 1 1 1-1+ u 000 2 0 2 0 g P 39e 4555402118 2 1 1 0 231.0 237.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=1;v5=1;l4=1;l5=-1;vibInv=u;vibRefl=+;J=38;parity=+;kronigParity=e ElecStateLabel=X;v1=0;v2=0;v3=0;v4=2;v5=0;l4=2;l5=0;vibInv=g;J=39;parity=-;kronigParity=e +451 15.604400 2.218E-96 9.394E-18.00110.00130296.13140.680.000107 4 3 O 22q 352220 1 1 2 3 2 2 41.0 45.0 ElecStateLabel=X;v=4;J=20 ElecStateLabel=X;v=3;J=22 +534 19.354149 1.338E-30 1.139E-05.07170.088 3144.36790.750.000000 0 1 1 1 1 3 1 0 P110 334440 1 1 1 1 1 0 438.0 442.0 ElecStateLabel=X;v1=0;v2=1;l2=1;v3=1;J=109 ElecStateLabel=X;v1=1;v2=3;l2=1;v3=0;J=110 +141 24.128849 5.475E-97 6.019E-03.10370.60136903.99950.570.012000 12 12 R 0 265442 5 3 4 1 1 1 12.0 4.0 ElecStateLabel=X;v=12;J=1 ElecStateLabel=X;v=12;J=0 +531 31.540651 1.391E-30 4.972E-06.06680.080 3826.20150.730.000000 0 1 1 1 1 3 1 0 P134 334440 1 1 1 1 1 0 267.0 269.0 ElecStateLabel=X;v1=0;v2=1;l2=1;v3=1;J=133 ElecStateLabel=X;v1=1;v2=3;l2=1;v3=0;J=134 +341 68.716470 9.577E-23 1.740E-05.05000.000 158.26871.000.000000 0 0 501000 1 1 1 0 0 0 1.0 3.0 config=1s2.2s2.2p4;term=3P0;L=1;S=1;J=0 config=1s2.2s2.2p4;term=3P1;L=1;S=1;J=1 + 21 158.301811 1.115E-30 2.266E-06.06940.089 3341.63500.730.000190 2 1 1 03 0 1 1 11 P 29f 3666632029 9 9 711 57.0 59.0 ElecStateLabel=X;v1=2;v2=1;l2=1;v3=0;J=28;r=3;kronigParity=f ElecStateLabel=X;v1=0;v2=1;l2=1;v3=1;J=29;r=1;parity=+;kronigParity=f +532 198.951636 1.052E-30 1.294E-04.06520.077 3464.92570.720.000000 0 0 0 1 2 0 0 0 P143 334440 1 1 1 1 1 0 285.0 287.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=1;J=142 ElecStateLabel=X;v1=2;v2=0;l2=0;v3=0;J=143 +481 200.771600 1.009e-24 6.431e-02.08000.100 2532.74700.750.000000 0 0 0 0 3 1 0 0 0 0 2 0 P114e 533110 1 1 1 0 0 0 1362.0 1374.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=3;l=1;J=113;parity=-;kronigParity=e ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=2;l=0;J=114;parity=+;kronigParity=e +271 225.044600 8.874E-28 6.192E-07.07300.115 1027.40210.990.000000 3V4 2V4 27 3 0A34 26 3 0A12 354430 9 8 6 2 4 0 880.0 848.0 ElecStateLabel=X;v4=3;l=0;J=27;K=3;rovibSym=A3+A4 ElecStateLabel=X;v4=2;l=0;J=26;K=3;rovibSym=A1+A2 +272 285.210300 1.599E-28 5.831E-06.07100.111 1063.03891.190.000000 V4 GROUND 40 1 0 E2 40 1 0 E1 354430 9 8 6 2 4 0 648.0 648.0 ElecStateLabel=X;v4=1;l=0;J=40;K=1;rovibSym=E2 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l=0;J=40;K=1;rovibSym=E1 + 22 332.649788 1.210E-30 8.972E-05.06680.078 3015.73270.750.000430 2 0 0 02 0 0 0 11 P 43e 3665632231 9 9 711 170.0 174.0 ElecStateLabel=X;v1=2;v2=0;l2=0;v3=0;J=42;r=2;kronigParity=e ElecStateLabel=X;v1=0;v2=0;l2=0;v3=1;J=43;r=1;parity=-;kronigParity=e + 27 482.813836 1.060E-30 1.647E-02.06470.071 2378.06880.73-.000655 1 1 1 02 1 0 0 01 P 54e 3755532431 9 9 711 107.0 109.0 ElecStateLabel=X;v1=1;v2=1;l2=1;v3=0;J=53;r=2;kronigParity=e ElecStateLabel=X;v1=1;v2=0;l2=0;v3=0;J=54;r=1;parity=+;kronigParity=e + 28 498.616965 1.042E-30 1.845E-02.06700.079 2000.81500.75-.000698 1 1 1 02 1 0 0 01 P 42e 3765632432 9 9 711 498.0 510.0 ElecStateLabel=X;v1=1;v2=1;l2=1;v3=0;J=41;r=2;kronigParity=e ElecStateLabel=X;v1=1;v2=0;l2=0;v3=0;J=42;r=1;parity=+;kronigParity=e + 29 535.383728 1.120E-30 4.694E-02.08010.109 1398.01770.68-.000513 1 1 1 02 1 0 0 01 Q 9e 3766632431 9 9 711 399.0 399.0 ElecStateLabel=X;v1=1;v2=1;l2=1;v3=0;J=9;r=2;kronigParity=f ElecStateLabel=X;v1=1;v2=0;l2=0;v3=0;J=9;r=1;parity=-;kronigParity=e + 20 539.620340 1.100E-30 8.853E-02.06870.087 1644.03760.74-.000730 1 1 1 02 0 2 2 01 P 32e 3766632431 9 9 711 126.0 130.0 ElecStateLabel=X;v1=1;v2=1;l2=1;v3=0;J=31;r=2;kronigParity=e ElecStateLabel=X;v1=0;v2=2;l2=2;v3=0;J=32;r=1;parity=+;kronigParity=e + 2A 549.472745 2.397E-31 1.049E-01.06890.088 1636.80050.74-.000741 1 1 1 02 0 2 2 01 P 31e 3466632330 9 9 711 732.0 756.0 ElecStateLabel=X;v1=1;v2=1;l2=1;v3=0;J=30;r=2;kronigParity=e ElecStateLabel=X;v1=0;v2=2;l2=2;v3=0;J=31;r=1;parity=-;kronigParity=e + 45 550.955520 2.302E-25 5.040E-02.06810.080 804.55850.77-.000330 0 1 1 0 0 0 0 0 P 44e 465544 6 5 5 3 3 3 4698.0 4806.0 ElecStateLabel=X;v1=0;v2=1;l2=1;v3=0;J=43;kronigParity=e ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=44;parity=+;kronigParity=e + 2B 575.852870 1.010E-30 2.621E-01.06830.085 1080.25840.74-.000711 1 0 0 02 0 1 1 01 P 34e 3766632431 9 9 711 2814.0 2898.0 ElecStateLabel=X;v1=1;v2=0;l2=0;v3=0;J=33;r=2;kronigParity=e ElecStateLabel=X;v1=0;v2=1;l2=1;v3=0;J=34;r=1;parity=+;kronigParity=e +533 611.203827 1.172E-29 4.858E-01.06390.075 3946.10510.710.000000 1 0 0 1 0 0 0 1 P150 334440 1 1 1 1 1 0 1196.0 1204.0 ElecStateLabel=X;v1=1;v2=0;l2=0;v3=1;J=149 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=1;J=150 +262 613.536460 3.820E-26 1.574E+00.04500.081 2918.47070.75-.001000 000 0 1 0 1 000 0 0 0 0+ P 50e 445543 3 3 2 1 1 1 792.0 808.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=1;l4=0;l5=1;J=49;parity=-;kronigParity=e ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;l4=0;l5=0;vibRefl=+;J=50;parity=+;kronigParity=e +382 614.740436 1.219E-25 3.888E-01.08190.124 1728.03230.760.000000 V10 GROUND 21 17 4 22 18 5 444220 5 5 2 3 2 0 860.0 540.0 ElecStateLabel=X;v10=1;J=21;Ka=17;Kc=4 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=22;Ka=18;Kc=5 +381 620.057948 5.238E-29 1.789E-07.08130.116 1025.06720.760.000000 V7 GROUND 24 6 18 24 11 14 002020 4 4 2 2 2 0 147.0 147.0 ElecStateLabel=X;v7=1;J=24;Ka=6;Kc=18 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=24;Ka=11;Kc=14 +525 648.357804 1.185E-24 1.013E-02.06000.068 1126.77220.750.000000 0 0 0 1 1F2 0 0 0 0 1A1 19A2 2 20A1 2 432320 1 1 1 1 1 0 195.0 205.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=1;vibSym=F2;J=19;rovibSym=A2;n=1;alpha=2 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibSym=A1;J=20;rovibSym=A1;n=1;alpha=2 +521 648.783846 5.379E-24 9.779E-03.06000.068 1126.77220.750.000000 0 0 0 1 1F2 0 0 0 0 1A1 19A2 2 20A1 2 432320 1 1 1 1 1 0 195.0 205.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=1;vibSym=F2;J=19;rovibSym=A2;n=1;alpha=2 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibSym=A1;J=20;rovibSym=A1;n=1;alpha=2 +524 649.004577 1.131E-24 9.688E-03.06000.068 1126.77220.750.000000 0 0 0 1 1F2 0 0 0 0 1A1 19A2 2 20A1 2 432320 1 1 1 1 1 0 1950.0 2050.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=1;vibSym=F2;J=19;rovibSym=A2;n=1;alpha=2 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibSym=A1;J=20;rovibSym=A1;n=1;alpha=2 +522 649.232394 4.019E-24 9.746E-03.06000.068 1126.77220.750.000000 0 0 0 1 1F2 0 0 0 0 1A1 19A2 2 20A1 2 432320 1 1 1 1 1 0 195.0 205.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=1;vibSym=F2;J=19;rovibSym=A2;n=1;alpha=2 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibSym=A1;J=20;rovibSym=A1;n=1;alpha=2 +523 649.705409 2.959E-24 9.604E-03.06000.068 1126.77220.750.000000 0 0 0 1 1F2 0 0 0 0 1A1 19A2 2 20A1 2 432320 1 1 1 1 1 0 195.0 205.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=1;vibSym=F2;J=19;rovibSym=A2;n=1;alpha=2 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;vibSym=A1;J=20;rovibSym=A1;n=1;alpha=2 +292 686.730618 1.232E-26 1.493E-03.08450.175 1586.89150.940.000000 0 0 0 0 0 1 0 0 0 0 0 0 80 8 72 81 9 72 442220 8 6 1 0 0 0 483.0 489.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=1;J=80;Ka=8;Kc=72 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=81;Ka=9;Kc=72 +541 693.022430 9.988E-29 8.211E-02.08630.100 3570.84090.750.000000 V6 GROUND 54 23 A1 55 24 A2 444420 1 1 1 1 1 0 2616.0 2664.0 ElecStateLabel=X;v6=1;J=54;K=23;rovibSym=A1 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=55;K=24;rovibSym=A2 +291 696.561748 1.024E-26 2.480E-01.08450.175 2712.72100.940.000000 0 0 0 0 0 1 0 0 0 0 0 0 98 22 77 99 23 77 452220 8 4 1 0 0 0 591.0 597.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=1;J=98;Ka=22;Kc=77 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=99;Ka=23;Kc=77 +491 793.148628 1.010e-25 1.379E-01.08000.300 1308.92860.750.000000 0 0 0 0 1 0 0 0 0 0 0 0 89 53 37 90 55 36 453310 1 1 1 1 0 0 537.0 905.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=1;v6=0;J=89;Ka=53;Kc=37 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=90;Ka=55;Kc=36 +401 794.403140 1.010E-26 2.402E-02.09040.153 2451.07580.860.000000 V6 GROUND 39 19 1E 40 20 0E 355420 1 1 1 1 1 0 1264.0 1264.0 ElecStateLabel=X;v6=1;l=1;J=39;K=19;rovibSym=E ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l=0;J=40;K=20;rovibSym=E +402 795.083120 1.120E-26 2.482E-02.09030.158 2424.38780.860.000000 V6 GROUND 38 19 1E 39 20 0E 355420 1 1 1 1 1 0 1232.0 1232.0 ElecStateLabel=X;v6=1;l=1;J=38;K=19;rovibSym=E ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;l=0;J=39;K=20;rovibSym=E +492 800.973439 1.220e-25 6.678E-02.08000.300 1240.77250.750.000000 0 0 0 0 1 0 0 0 0 0 0 0 98 39 59 99 41 58 453310 1 1 1 1 0 0 3152.0 3184.0 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=1;v6=0;J=98;Ka=39;Kc=59 ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;J=99;Ka=41;Kc=58 + 64 959.393990 3.211E-29 1.390E-02.03600.055 1599.20050.63-.001867 V6 GROUND 18 11 E 19 10 E 344220423134 4 1 0 888.0 936.0 ElecStateLabel=X;v6=1;J=18;K=11;rovibSym=E ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=19;K=10;rovibSym=E +511 1067.375090 1.280E-23 3.767E-01.06640.324 1362.33480.75-.001000 V6 GROUND 20 14 A 21 15 A 455322 1 1 1 1 1 1 328.0 344.0 ElecStateLabel=X;v6=1;J=20;K=14;rovibSym=A ElecStateLabel=X;v1=0;v2=0;v3=0;v4=0;J=21;K=15;rovibSym=A +102 1500.728577 2.004E-26 4.537E+01.07270.095 2434.22110.67-.001590 0 0 1 0 0 0 65 9 56 + 66 9 57 +3522321310 8 2 2 3 264.0 268.0 ElecStateLabel=X;S=0.5;v1=0;v2=0;v3=1;J=65.5;N=65;Ka=9;Kc=56 ElecStateLabel=X;S=0.5;v1=0;v2=0;v3=0;J=66.5;N=66;Ka=9;Kc=57 +196 1951.796742 3.258E-26 1.365E+02.07620.091 2401.55490.300.000000 0 0 0 1 0 0 0 0 P110 3355401115 4 3 1 0 438.0 442.0 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=1;J=109 ElecStateLabel=X;v1=0;v2=0;l2=0;v3=0;J=110