From 5860fb5de8bf6c7e0ce0b8a4ea9d7776da020601 Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Mon, 9 Dec 2024 12:59:54 +0100 Subject: [PATCH 01/14] initial_commit --- examples/database/rod/README.md | 58 + examples/database/rod/rod_file_1000679.rod | 1248 +++++++++++++++++ examples/witec/txt/README.md | 4 +- src/pynxtools_raman/README.md | 9 + src/pynxtools_raman/__init__.py | 17 + .../config/config_file_rod.json | 46 + .../config/config_file_witec.json | 64 + src/pynxtools_raman/reader.py | 540 ++++--- src/pynxtools_raman/rod/__init__.py | 17 + src/pynxtools_raman/rod/rod_reader.py | 161 +++ src/pynxtools_raman/witec/__init__.py | 17 + src/pynxtools_raman/witec/witec_reader.py | 101 ++ tests/data/rod/config_file_rod.json | 46 + tests/data/rod/example.nxs | Bin 0 -> 53376 bytes tests/data/rod/rod_file_1000679.rod | 1248 +++++++++++++++++ tests/data/witec/config_file.json | 64 + tests/data/witec/eln_data.yaml | 124 ++ tests/data/witec/example.nxs | Bin 0 -> 77480 bytes tests/test_reader.py | 26 +- 19 files changed, 3473 insertions(+), 317 deletions(-) create mode 100644 examples/database/rod/README.md create mode 100644 examples/database/rod/rod_file_1000679.rod create mode 100644 src/pynxtools_raman/README.md create mode 100644 src/pynxtools_raman/config/config_file_rod.json create mode 100644 src/pynxtools_raman/config/config_file_witec.json create mode 100644 src/pynxtools_raman/rod/__init__.py create mode 100644 src/pynxtools_raman/rod/rod_reader.py create mode 100644 src/pynxtools_raman/witec/__init__.py create mode 100644 src/pynxtools_raman/witec/witec_reader.py create mode 100644 tests/data/rod/config_file_rod.json create mode 100644 tests/data/rod/example.nxs create mode 100644 tests/data/rod/rod_file_1000679.rod create mode 100644 tests/data/witec/config_file.json create mode 100644 tests/data/witec/eln_data.yaml create mode 100644 tests/data/witec/example.nxs diff --git a/examples/database/rod/README.md b/examples/database/rod/README.md new file mode 100644 index 0000000..7de5a12 --- /dev/null +++ b/examples/database/rod/README.md @@ -0,0 +1,58 @@ +## WITEC example Raman Multiformat Reader +This is an example file to convert a .rod file from the [Raman Open Databse](https://solsa.crystallography.net/rod/) to a NeXus file. + +## How to use +- 1. Go into the root folder of this repository (default "pynxtools-raman") +- 2. Copy and paste: + ``` + dataconverter examples/database/rod/rod_file_1000679.rod src/pynxtools_raman/config/config_file_rod.json --reader raman --nxdl NXraman --output examples/database/rod/rod_example_neuxs.nxs + ``` +- 3. Inspect the created NeXus file. Some warnings may be present. + +## Yet unassigned fields / ToDo-List: + +### Publication Data +{'_publ_author_name': ["'Kanzaki, M.'", "'Xue, X.'", "'Amalberti, J.'", "'Zhang, Q.'"], +'_publ_section_title': 'Raman and NMR spectroscopic characterization of high-pressure K-cymrite (KAlSi3O8 H2O) and its anhydrous form (kokchetavite) : K-cymrite', +'_journal_name_full': "'Journal of Mineralogical and Petrological Sciences'", +'_journal_page_first': '114', +'_journal_page_last': '119', +'_journal_paper_doi': '10.2465/jmps.111020i', +'_journal_volume': '114', +'_journal_year': '2012', + +### ROD data +'_rod_data_source.file': 'k-cymrite.rod', +'_rod_data_source.block': '/var/www/html/rod/tmp/uploads/1571122279.3252-A619ABAF81C5BA8B.rod', +'_rod_database.code': '1000679', + + + +### RAMAN data +'_raman_measurement_device.configuration': 'simple', # other options triple, other ? Does not make snse trippme monochromator, filter? +'_raman_measurement_device.resolution': '1', # given in 1/cm. But no field in NXoptical_spec +'_raman_measurement_device.microscope_system': 'dispersive', # dispersive FTIR or other +'_raman_determination.method': 'experimental', # can not yet be described in NeXus +'_raman_measurement.range_min': '50.000', # not yet in NeXus +'_raman_measurement.range_max': '1400.643', # Not yet in NeXus +'_raman_measurement_device_calibration.standard': 'other', # description of device calibration +'_raman_measurement_device_calibration.standard_details': 'Plasma lines are used.', + +'_raman_measurement_device.direction_polarization': 'unoriented', # does not make really sense. Only specific entries could be used in NeXus +'_raman_measurement_device.location': "'Institute for Planetary Materials, Okayama University'", + +### SAMPLE +'_cod_original_formula_sum': "'O9 Si3 Al K H2'", +But there is also: (#BUT) +'_raman_measurement.environment_details': 'The sample was measured in air.', #BUT '_raman_measurement.environment': 'Air', was included! +'_chemical_formula_sum': "'Al H2 K O9 Si3'", #BUT '_chemical_formula_structural': "'NaAlSi3O8 H2O'", +'_chemical_name_mineral': 'K-cymrite', # BUT'_chemical_name_systematic': "'hydrous sodium alumino-silicate'", +'_chemical_compound_source': "'synthesized at 5 GPa and 800 C'", + +'_[local]_chemical_compound_color': 'white', should go to + +### NXfit? +'_raman_measurement.background_subtraction': 'no', +'_raman_measurement.background_subtraction_details': 'No background subtraction method was applied.', +'_raman_measurement.baseline_correction': 'no', +'_raman_measurement.baseline_correction_details': 'No baseline correction method was applied.', \ No newline at end of file diff --git a/examples/database/rod/rod_file_1000679.rod b/examples/database/rod/rod_file_1000679.rod new file mode 100644 index 0000000..e55ceb8 --- /dev/null +++ b/examples/database/rod/rod_file_1000679.rod @@ -0,0 +1,1248 @@ +#------------------------------------------------------------------------------ +#$Date: 2019-10-15 09:51:56 +0300 (Tue, 15 Oct 2019) $ +#$Revision: 1378 $ +#$URL: svn://172.16.1.102/rod/cif/1/00/06/1000679.rod $ +#------------------------------------------------------------------------------ +# +# This file is available in the Raman Open Database (ROD), +# http://solsa.crystallography.net/rod/ +# +# All data on this site have been placed in the public domain by the +# contributors. +# +data_1000679 +loop_ +_publ_author_name +'Kanzaki, M.' +'Xue, X.' +'Amalberti, J.' +'Zhang, Q.' +_publ_section_title +; + Raman and NMR spectroscopic characterization of high-pressure K-cymrite + (KAlSi3O8 H2O) and its anhydrous form (kokchetavite) : K-cymrite +; +_journal_name_full +'Journal of Mineralogical and Petrological Sciences' +_journal_page_first 114 +_journal_page_last 119 +_journal_paper_doi 10.2465/jmps.111020i +_journal_volume 114 +_journal_year 2012 +_chemical_compound_source 'synthesized at 5 GPa and 800 C' +_chemical_formula_structural 'NaAlSi3O8 H2O' +_chemical_formula_sum 'Al H2 K O9 Si3' +_chemical_name_mineral K-cymrite +_chemical_name_systematic 'hydrous sodium alumino-silicate' +_cod_original_formula_sum 'O9 Si3 Al K H2' +_raman_determination.method experimental +_[local]_chemical_compound_color white +_[local]_chemical_compound_state powder +_raman_measurement_device.location +'Institute for Planetary Materials, Okayama University' +_raman_measurement_device.company 'home made' +_raman_measurement_device.model 'Semrock filter system' +_raman_measurement_device.optics_type microscope +_raman_measurement_device.microscope_system dispersive +_raman_measurement_device.microscope_objective_magnification 50 +_raman_measurement_device.microscope_numerical_aperture 0.55 +_raman_measurement_device.excitation_laser_type argon +_raman_measurement_device.excitation_laser_wavelength 488 +_raman_measurement_device.configuration simple +_raman_measurement_device.resolution 1 +_raman_measurement_device.power_on_sample 60 +_raman_measurement_device.direction_polarization unoriented +_raman_measurement_device.spot_size 1.0 +_raman_measurement_device.diffraction_grating 1200 +_raman_measurement.environment Air +_raman_measurement.environment_details +; + The sample was measured in air. +; +_raman_measurement.temperature 300 +_raman_measurement.pressure 100 +_raman_measurement.background_subtraction no +_raman_measurement.background_subtraction_details +; + No background subtraction method was applied. +; +_raman_measurement.baseline_correction no +_raman_measurement.baseline_correction_details +; + No baseline correction method was applied. +; +_raman_measurement_device_calibration.standard other +_raman_measurement_device_calibration.standard_details +; +Plasma lines are used. +; +_raman_measurement.integration_time 300 +_raman_measurement.datetime_initiated 2011-09-07 +_raman_measurement.range_min 50.000 +_raman_measurement.range_max 1400.643 +_rod_data_source.file k-cymrite.rod +_rod_data_source.block +/var/www/html/rod/tmp/uploads/1571122279.3252-A619ABAF81C5BA8B.rod +_rod_database.code 1000679 +loop_ +_raman_spectrum.raman_shift +_raman_spectrum.intensity +50.000 429 +51.262 438 +52.523 441 +53.785 439 +55.046 437 +56.307 433 +57.567 434 +58.828 438 +60.088 435 +61.349 431 +62.609 430 +63.869 432 +65.128 440 +66.388 435 +67.647 440 +68.906 433 +70.165 440 +71.424 447 +72.683 442 +73.941 453 +75.200 461 +76.458 459 +77.716 470 +78.974 481 +80.231 495 +81.489 515 +82.746 531 +84.003 564 +85.260 575 +86.517 588 +87.773 597 +89.030 615 +90.286 621 +91.542 641 +92.798 646 +94.054 657 +95.309 642 +96.565 661 +97.820 655 +99.075 685 +100.330 697 +101.585 712 +102.839 747 +104.093 798 +105.348 844 +106.602 916 +107.855 993 +109.109 1106 +110.363 1283 +111.616 1471 +112.869 1616 +114.122 1651 +115.375 1579 +116.627 1408 +117.880 1243 +119.132 1111 +120.384 992 +121.636 928 +122.888 849 +124.139 806 +125.391 750 +126.642 749 +127.893 724 +129.144 696 +130.395 687 +131.645 680 +132.896 664 +134.146 661 +135.396 646 +136.646 640 +137.896 631 +139.145 645 +140.394 640 +141.644 623 +142.893 635 +144.141 613 +145.390 617 +146.639 614 +147.887 614 +149.135 617 +150.383 612 +151.631 612 +152.878 602 +154.126 611 +155.373 616 +156.620 612 +157.867 605 +159.114 607 +160.361 608 +161.607 593 +162.853 589 +164.099 584 +165.345 586 +166.591 585 +167.837 574 +169.082 575 +170.327 574 +171.572 561 +172.817 555 +174.062 560 +175.306 559 +176.551 555 +177.795 544 +179.039 556 +180.283 542 +181.527 541 +182.770 539 +184.013 529 +185.257 538 +186.500 543 +187.742 540 +188.985 537 +190.228 538 +191.470 545 +192.712 537 +193.954 540 +195.196 538 +196.437 534 +197.679 538 +198.920 534 +200.161 522 +201.402 542 +202.643 530 +203.884 536 +205.124 532 +206.364 524 +207.604 529 +208.844 526 +210.084 528 +211.324 529 +212.563 523 +213.802 529 +215.041 526 +216.280 524 +217.519 524 +218.758 524 +219.996 520 +221.234 519 +222.472 517 +223.710 521 +224.948 519 +226.185 521 +227.423 521 +228.660 517 +229.897 523 +231.134 514 +232.371 514 +233.607 516 +234.843 527 +236.080 517 +237.316 522 +238.551 518 +239.787 516 +241.023 514 +242.258 520 +243.493 504 +244.728 513 +245.963 517 +247.197 512 +248.432 515 +249.666 526 +250.900 522 +252.134 519 +253.368 530 +254.602 517 +255.835 521 +257.068 513 +258.302 516 +259.535 510 +260.767 528 +262.000 522 +263.232 515 +264.465 520 +265.697 517 +266.929 521 +268.160 515 +269.392 518 +270.623 523 +271.855 519 +273.086 525 +274.317 534 +275.547 525 +276.778 531 +278.008 528 +279.239 529 +280.469 531 +281.699 528 +282.928 534 +284.158 527 +285.387 527 +286.616 522 +287.846 528 +289.074 532 +290.303 525 +291.532 531 +292.760 518 +293.988 516 +295.216 520 +296.444 522 +297.672 524 +298.899 521 +300.127 515 +301.354 527 +302.581 523 +303.808 533 +305.035 530 +306.261 522 +307.487 534 +308.714 534 +309.940 526 +311.165 522 +312.391 529 +313.617 529 +314.842 528 +316.067 529 +317.292 527 +318.517 536 +319.742 532 +320.966 538 +322.190 540 +323.415 539 +324.639 544 +325.862 540 +327.086 527 +328.309 546 +329.533 533 +330.756 540 +331.979 543 +333.202 553 +334.424 545 +335.647 550 +336.869 554 +338.091 552 +339.313 562 +340.535 562 +341.757 572 +342.978 566 +344.199 567 +345.421 583 +346.642 580 +347.862 595 +349.083 596 +350.303 601 +351.524 621 +352.744 619 +353.964 628 +355.184 643 +356.403 658 +357.623 675 +358.842 698 +360.061 713 +361.280 735 +362.499 768 +363.717 784 +364.936 838 +366.154 905 +367.372 916 +368.590 1001 +369.808 1087 +371.025 1177 +372.243 1269 +373.460 1394 +374.677 1546 +375.894 1659 +377.111 1790 +378.328 1869 +379.544 1920 +380.760 1921 +381.976 1871 +383.192 1800 +384.408 1697 +385.624 1610 +386.839 1476 +388.054 1366 +389.269 1276 +390.484 1190 +391.699 1119 +392.914 1058 +394.128 989 +395.342 948 +396.556 920 +397.770 877 +398.984 859 +400.198 826 +401.411 798 +402.624 778 +403.838 762 +405.050 738 +406.263 722 +407.476 723 +408.688 705 +409.900 686 +411.113 680 +412.324 675 +413.536 663 +414.748 636 +415.959 627 +417.171 619 +418.382 617 +419.593 606 +420.803 604 +422.014 589 +423.224 589 +424.435 580 +425.645 569 +426.855 580 +428.064 571 +429.274 560 +430.483 568 +431.693 561 +432.902 562 +434.111 565 +435.319 559 +436.528 545 +437.736 552 +438.945 550 +440.153 556 +441.361 562 +442.568 553 +443.776 548 +444.983 548 +446.191 550 +447.398 547 +448.605 541 +449.812 550 +451.018 552 +452.225 544 +453.431 552 +454.637 548 +455.843 543 +457.049 548 +458.254 549 +459.460 549 +460.665 553 +461.870 544 +463.075 545 +464.280 542 +465.484 534 +466.689 543 +467.893 541 +469.097 543 +470.301 541 +471.505 541 +472.709 540 +473.912 550 +475.115 552 +476.318 543 +477.521 541 +478.724 531 +479.927 536 +481.129 533 +482.332 532 +483.534 530 +484.736 521 +485.937 525 +487.139 529 +488.341 526 +489.542 529 +490.743 523 +491.944 524 +493.145 526 +494.345 523 +495.546 515 +496.746 530 +497.946 524 +499.146 517 +500.346 527 +501.546 533 +502.745 529 +503.945 531 +505.144 530 +506.343 533 +507.542 542 +508.740 539 +509.939 559 +511.137 560 +512.335 564 +513.533 574 +514.731 570 +515.929 569 +517.126 560 +518.324 553 +519.521 553 +520.718 550 +521.915 542 +523.111 528 +524.308 526 +525.504 525 +526.700 516 +527.896 512 +529.092 508 +530.288 512 +531.483 503 +532.679 519 +533.874 512 +535.069 510 +536.264 498 +537.459 502 +538.653 503 +539.848 496 +541.042 515 +542.236 502 +543.430 506 +544.623 505 +545.817 504 +547.010 502 +548.204 500 +549.397 499 +550.590 508 +551.782 501 +552.975 500 +554.167 501 +555.360 505 +556.552 505 +557.744 496 +558.935 503 +560.127 510 +561.318 501 +562.510 498 +563.701 505 +564.892 495 +566.082 508 +567.273 498 +568.464 501 +569.654 509 +570.844 497 +572.034 501 +573.224 506 +574.413 504 +575.603 500 +576.792 503 +577.981 500 +579.170 495 +580.359 497 +581.548 498 +582.736 513 +583.924 498 +585.113 502 +586.301 507 +587.488 508 +588.676 499 +589.864 497 +591.051 499 +592.238 500 +593.425 497 +594.612 494 +595.799 497 +596.985 497 +598.172 499 +599.358 497 +600.544 497 +601.730 499 +602.915 499 +604.101 498 +605.286 496 +606.472 500 +607.657 497 +608.842 494 +610.026 505 +611.211 495 +612.395 500 +613.579 498 +614.764 504 +615.947 498 +617.131 501 +618.315 504 +619.498 504 +620.682 499 +621.865 500 +623.048 497 +624.230 494 +625.413 493 +626.595 495 +627.778 499 +628.960 498 +630.142 496 +631.324 501 +632.505 501 +633.687 497 +634.868 493 +636.049 493 +637.230 500 +638.411 495 +639.592 497 +640.772 499 +641.953 497 +643.133 491 +644.313 506 +645.493 494 +646.672 492 +647.852 500 +649.031 492 +650.210 503 +651.389 503 +652.568 501 +653.747 495 +654.926 499 +656.104 500 +657.282 491 +658.460 496 +659.638 495 +660.816 493 +661.994 497 +663.171 495 +664.348 492 +665.525 496 +666.702 492 +667.879 496 +669.056 487 +670.232 494 +671.408 499 +672.585 499 +673.761 495 +674.936 492 +676.112 496 +677.287 493 +678.463 493 +679.638 489 +680.813 498 +681.988 493 +683.162 491 +684.337 489 +685.511 489 +686.686 487 +687.860 491 +689.033 503 +690.207 496 +691.381 495 +692.554 494 +693.727 491 +694.900 492 +696.073 493 +697.246 489 +698.419 499 +699.591 495 +700.763 498 +701.935 492 +703.107 497 +704.279 493 +705.451 489 +706.622 492 +707.793 490 +708.965 492 +710.136 500 +711.306 504 +712.477 494 +713.648 500 +714.818 497 +715.988 503 +717.158 503 +718.328 494 +719.498 504 +720.667 501 +721.836 501 +723.006 504 +724.175 501 +725.344 497 +726.512 493 +727.681 501 +728.849 500 +730.017 496 +731.186 496 +732.353 497 +733.521 500 +734.689 495 +735.856 502 +737.023 506 +738.191 504 +739.358 506 +740.524 497 +741.691 508 +742.857 502 +744.024 500 +745.190 506 +746.356 502 +747.522 506 +748.687 507 +749.853 500 +751.018 510 +752.183 511 +753.348 508 +754.513 502 +755.678 508 +756.843 504 +758.007 508 +759.171 511 +760.335 500 +761.499 507 +762.663 509 +763.827 503 +764.990 509 +766.153 510 +767.316 503 +768.479 515 +769.642 511 +770.805 517 +771.967 508 +773.129 508 +774.292 503 +775.454 510 +776.615 508 +777.777 510 +778.939 516 +780.100 510 +781.261 510 +782.422 511 +783.583 502 +784.744 508 +785.904 521 +787.065 507 +788.225 509 +789.385 511 +790.545 509 +791.705 503 +792.864 506 +794.024 512 +795.183 518 +796.342 508 +797.501 511 +798.660 524 +799.819 510 +800.977 522 +802.135 519 +803.294 517 +804.452 513 +805.609 517 +806.767 512 +807.925 510 +809.082 526 +810.239 523 +811.396 526 +812.553 530 +813.710 524 +814.866 529 +816.023 536 +817.179 534 +818.335 541 +819.491 543 +820.647 546 +821.803 553 +822.958 559 +824.113 570 +825.268 569 +826.423 585 +827.578 601 +828.733 610 +829.887 620 +831.042 616 +832.196 637 +833.350 621 +834.504 619 +835.658 615 +836.811 610 +837.965 595 +839.118 581 +840.271 560 +841.424 566 +842.577 561 +843.729 554 +844.882 538 +846.034 540 +847.186 534 +848.338 527 +849.490 530 +850.642 521 +851.793 522 +852.944 525 +854.096 519 +855.247 525 +856.397 513 +857.548 513 +858.699 511 +859.849 510 +860.999 508 +862.149 508 +863.299 505 +864.449 504 +865.599 510 +866.748 510 +867.897 511 +869.047 514 +870.195 508 +871.344 506 +872.493 508 +873.641 509 +874.790 510 +875.938 510 +877.086 513 +878.234 506 +879.382 504 +880.529 513 +881.676 511 +882.824 503 +883.971 507 +885.118 506 +886.264 505 +887.411 506 +888.558 508 +889.704 501 +890.850 514 +891.996 502 +893.142 502 +894.287 507 +895.433 507 +896.578 505 +897.723 506 +898.868 508 +900.013 507 +901.158 502 +902.303 490 +903.447 500 +904.591 507 +905.735 501 +906.879 500 +908.023 501 +909.167 501 +910.310 513 +911.453 504 +912.597 515 +913.740 502 +914.882 503 +916.025 509 +917.168 503 +918.310 505 +919.452 503 +920.594 511 +921.736 505 +922.878 511 +924.019 500 +925.161 503 +926.302 502 +927.443 502 +928.584 507 +929.725 504 +930.865 507 +932.006 506 +933.146 508 +934.286 506 +935.426 501 +936.566 511 +937.706 505 +938.846 503 +939.985 502 +941.124 509 +942.263 513 +943.402 506 +944.541 512 +945.679 509 +946.818 506 +947.956 510 +949.094 500 +950.232 519 +951.370 514 +952.508 517 +953.645 511 +954.783 509 +955.920 512 +957.057 514 +958.194 510 +959.330 507 +960.467 505 +961.603 505 +962.740 510 +963.876 501 +965.012 518 +966.147 513 +967.283 513 +968.419 512 +969.554 509 +970.689 519 +971.824 511 +972.959 515 +974.094 517 +975.228 515 +976.362 518 +977.497 522 +978.631 526 +979.765 514 +980.898 534 +982.032 528 +983.165 531 +984.299 531 +985.432 528 +986.565 533 +987.698 540 +988.830 526 +989.963 542 +991.095 536 +992.227 533 +993.359 548 +994.491 532 +995.623 544 +996.755 538 +997.886 540 +999.017 544 +1000.148 542 +1001.279 546 +1002.410 547 +1003.541 553 +1004.671 543 +1005.802 546 +1006.932 547 +1008.062 542 +1009.192 546 +1010.321 543 +1011.451 538 +1012.580 543 +1013.710 542 +1014.839 540 +1015.968 545 +1017.096 531 +1018.225 538 +1019.354 531 +1020.482 532 +1021.610 526 +1022.738 531 +1023.866 528 +1024.994 531 +1026.121 530 +1027.249 527 +1028.376 533 +1029.503 533 +1030.630 528 +1031.757 527 +1032.883 529 +1034.010 524 +1035.136 525 +1036.262 525 +1037.388 526 +1038.514 525 +1039.640 533 +1040.765 528 +1041.891 531 +1043.016 531 +1044.141 533 +1045.266 535 +1046.390 537 +1047.515 532 +1048.640 527 +1049.764 538 +1050.888 541 +1052.012 540 +1053.136 533 +1054.259 544 +1055.383 547 +1056.506 542 +1057.630 545 +1058.753 542 +1059.876 539 +1060.998 550 +1062.121 541 +1063.243 547 +1064.366 544 +1065.488 549 +1066.610 543 +1067.732 545 +1068.853 560 +1069.975 559 +1071.096 552 +1072.217 548 +1073.338 547 +1074.459 541 +1075.580 545 +1076.701 546 +1077.821 538 +1078.941 551 +1080.061 547 +1081.181 554 +1082.301 554 +1083.421 551 +1084.540 549 +1085.660 545 +1086.779 545 +1087.898 552 +1089.017 551 +1090.136 558 +1091.254 555 +1092.373 550 +1093.491 567 +1094.609 564 +1095.727 569 +1096.845 571 +1097.963 571 +1099.080 571 +1100.197 573 +1101.315 570 +1102.432 572 +1103.549 589 +1104.665 572 +1105.782 577 +1106.898 569 +1108.015 579 +1109.131 569 +1110.247 572 +1111.363 572 +1112.478 567 +1113.594 571 +1114.709 572 +1115.824 564 +1116.940 567 +1118.054 566 +1119.169 571 +1120.284 563 +1121.398 558 +1122.513 559 +1123.627 560 +1124.741 560 +1125.855 547 +1126.968 544 +1128.082 566 +1129.195 550 +1130.308 551 +1131.421 552 +1132.534 543 +1133.647 548 +1134.760 544 +1135.872 530 +1136.985 549 +1138.097 544 +1139.209 545 +1140.321 533 +1141.432 548 +1142.544 540 +1143.655 542 +1144.766 533 +1145.877 535 +1146.988 531 +1148.099 526 +1149.210 536 +1150.320 529 +1151.431 539 +1152.541 535 +1153.651 529 +1154.761 529 +1155.870 523 +1156.980 527 +1158.089 526 +1159.199 531 +1160.308 531 +1161.417 530 +1162.525 538 +1163.634 527 +1164.743 530 +1165.851 531 +1166.959 516 +1168.067 529 +1169.175 523 +1170.283 526 +1171.390 530 +1172.498 530 +1173.605 522 +1174.712 527 +1175.819 531 +1176.926 522 +1178.033 531 +1179.139 535 +1180.246 525 +1181.352 528 +1182.458 520 +1183.564 518 +1184.670 527 +1185.775 524 +1186.881 529 +1187.986 519 +1189.091 534 +1190.196 533 +1191.301 520 +1192.406 527 +1193.510 516 +1194.614 520 +1195.719 516 +1196.823 524 +1197.927 517 +1199.031 519 +1200.134 505 +1201.238 520 +1202.341 512 +1203.444 514 +1204.547 514 +1205.650 519 +1206.753 522 +1207.855 520 +1208.958 519 +1210.060 517 +1211.162 522 +1212.264 518 +1213.366 512 +1214.468 514 +1215.569 517 +1216.670 517 +1217.772 518 +1218.873 518 +1219.974 518 +1221.074 523 +1222.175 526 +1223.275 523 +1224.376 526 +1225.476 515 +1226.576 514 +1227.676 521 +1228.775 514 +1229.875 519 +1230.974 522 +1232.074 517 +1233.173 511 +1234.272 523 +1235.370 522 +1236.469 511 +1237.568 519 +1238.666 519 +1239.764 517 +1240.862 512 +1241.960 507 +1243.058 515 +1244.155 523 +1245.253 515 +1246.350 517 +1247.447 515 +1248.544 516 +1249.641 523 +1250.738 516 +1251.834 513 +1252.931 519 +1254.027 530 +1255.123 517 +1256.219 524 +1257.315 518 +1258.410 521 +1259.506 508 +1260.601 524 +1261.696 515 +1262.791 515 +1263.886 506 +1264.981 513 +1266.075 518 +1267.170 516 +1268.264 516 +1269.358 514 +1270.452 524 +1271.546 513 +1272.640 516 +1273.733 514 +1274.827 516 +1275.920 517 +1277.013 516 +1278.106 519 +1279.199 518 +1280.291 520 +1281.384 524 +1282.476 515 +1283.568 514 +1284.660 516 +1285.752 523 +1286.844 521 +1287.935 524 +1289.027 515 +1290.118 528 +1291.209 527 +1292.300 528 +1293.391 520 +1294.482 524 +1295.572 529 +1296.662 523 +1297.753 522 +1298.843 526 +1299.933 515 +1301.022 524 +1302.112 527 +1303.202 522 +1304.291 528 +1305.380 533 +1306.469 521 +1307.558 526 +1308.647 529 +1309.735 534 +1310.824 530 +1311.912 531 +1313.000 529 +1314.088 530 +1315.176 524 +1316.263 522 +1317.351 540 +1318.438 527 +1319.526 527 +1320.613 531 +1321.700 526 +1322.786 531 +1323.873 532 +1324.960 520 +1326.046 535 +1327.132 525 +1328.218 532 +1329.304 530 +1330.390 544 +1331.475 539 +1332.561 536 +1333.646 535 +1334.731 535 +1335.816 535 +1336.901 536 +1337.986 540 +1339.070 543 +1340.155 532 +1341.239 544 +1342.323 534 +1343.407 538 +1344.491 536 +1345.574 541 +1346.658 543 +1347.741 547 +1348.824 540 +1349.907 542 +1350.990 540 +1352.073 545 +1353.156 544 +1354.238 548 +1355.320 548 +1356.403 544 +1357.485 543 +1358.566 552 +1359.648 538 +1360.730 549 +1361.811 528 +1362.892 537 +1363.974 545 +1365.055 540 +1366.135 541 +1367.216 543 +1368.297 549 +1369.377 540 +1370.457 548 +1371.537 547 +1372.617 535 +1373.697 539 +1374.777 540 +1375.856 542 +1376.935 541 +1378.015 547 +1379.094 530 +1380.173 535 +1381.251 532 +1382.330 542 +1383.408 534 +1384.487 532 +1385.565 537 +1386.643 536 +1387.721 530 +1388.798 543 +1389.876 537 +1390.953 531 +1392.031 526 +1393.108 536 +1394.185 534 +1395.261 544 +1396.338 539 +1397.415 532 +1398.491 528 +1399.567 534 +1400.643 529 diff --git a/examples/witec/txt/README.md b/examples/witec/txt/README.md index e791602..141b6a0 100644 --- a/examples/witec/txt/README.md +++ b/examples/witec/txt/README.md @@ -7,6 +7,6 @@ data file (eln_data.yaml) to a NeXus file. - 1. Go into the root folder of this repository (default "pynxtools-raman") - 2. Copy and paste: ``` - dataconverter examples/witec/txt/eln_data.yaml examples/witec/txt/Si-wafer-Raman-Spectrum-1.txt examples/witec/txt/config_file.json --reader raman_multi --nxdl NXraman --output examples/witec/txt/new_output.nxs + dataconverter examples/witec/txt/eln_data.yaml examples/witec/txt/Si-wafer-Raman-Spectrum-1.txt src/pynxtools_raman/config/config_file_witec.json --reader raman --nxdl NXraman --output examples/witec/txt/witec_example_neuxs.nxs ``` -- 3. A new file should be created at "examples/witec/txt/new_output.nxs". \ No newline at end of file +- 3. A new file should be created at "examples/witec/txt/witec_example_neuxs.nxs". \ No newline at end of file diff --git a/src/pynxtools_raman/README.md b/src/pynxtools_raman/README.md new file mode 100644 index 0000000..ae39aaf --- /dev/null +++ b/src/pynxtools_raman/README.md @@ -0,0 +1,9 @@ +## Multiformat data reader for Raman spectroscopy data +This is example data for writing a new data reader based on the [`MultiFormatReader`](https://github.com/FAIRmat-NFDI/pynxtools/blob/master/src/pynxtools/dataconverter/readers/multi/reader.py) from scratch. A how-to guide to implement this reader is available [here](https://fairmat-nfdi.github.io/pynxtools/how-tos/use-multi-format-reader.html) + +## This file types are currently supported: +- Witec Alpha Raman microscope - via ELN file (.yaml) and .txt data file + + +## Examples +Examples can be found in the example folder in the root of this repository. \ No newline at end of file diff --git a/src/pynxtools_raman/__init__.py b/src/pynxtools_raman/__init__.py index e69de29..db96892 100644 --- a/src/pynxtools_raman/__init__.py +++ b/src/pynxtools_raman/__init__.py @@ -0,0 +1,17 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# diff --git a/src/pynxtools_raman/config/config_file_rod.json b/src/pynxtools_raman/config/config_file_rod.json new file mode 100644 index 0000000..ed49f98 --- /dev/null +++ b/src/pynxtools_raman/config/config_file_rod.json @@ -0,0 +1,46 @@ +{ + "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@data:_raman_measurement_device.direction_polarization", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@data:_raman_measurement_device.excitation_laser_wavelength", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "nm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@data:_raman_measurement_device.power_on_sample", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "mW", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent": "@data:_raman_measurement_device.spot_size", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent/@units": "µm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability":"nominal", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "s", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@data:_raman_measurement.integration_time", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type":"single-channel", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@data:_raman_measurement_device.excitation_laser_type", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor":"@data:_raman_measurement_device.company", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@data:_raman_measurement_device.model", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@data:_raman_measurement_device.optics_type", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@data:_raman_measurement_device.microscope_objective_magnification", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@data:_raman_measurement_device.microscope_numerical_aperture", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@data:_raman_measurement_device.diffraction_grating", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "lines/mm", + "/ENTRY[entry]/SAMPLE[sample]/name":"@data:_chemical_name_systematic", + "/ENTRY[entry]/SAMPLE[sample]/physical_form":"@data:_[local]_chemical_compound_state", + "/ENTRY[entry]/SAMPLE[sample]/chemical_formula":"@data:_chemical_formula_structural", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[medium]/sample_medium":"@data:_raman_measurement.environment", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/measurement":"temperature", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value":"@data:_raman_measurement.temperature", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value/@units":"K", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/measurement":"pressure", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value":"@data:_raman_measurement.pressure", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value/@units":"kPa", + "/ENTRY[entry]/definition/@url": "Remove_this_if_pynxtools_issue_#469_is_solved", + "/ENTRY[entry]/experiment_type": "Raman spectroscopy", + "/ENTRY[entry]/raman_experiment_type": "other", + "/ENTRY[entry]/title": "@data:_chemical_name_mineral", + "/ENTRY[entry]/start_time": "@data:_raman_measurement.datetime_initiated", + "/ENTRY[entry]/@default": "data", + "/ENTRY[entry]/DATA[data]/@signal": "y_values", + "/ENTRY[entry]/DATA[data]/y_values": "@data:_raman_spectrum.intensity", + "/ENTRY[entry]/DATA[data]/y_values/@units": "arb. units", + "/ENTRY[entry]/DATA[data]/y_values/@long_name": "Intensity", + "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "Raman Shift", + "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:_raman_spectrum.raman_shift", + "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" + } + diff --git a/src/pynxtools_raman/config/config_file_witec.json b/src/pynxtools_raman/config/config_file_witec.json new file mode 100644 index 0000000..25af024 --- /dev/null +++ b/src/pynxtools_raman/config/config_file_witec.json @@ -0,0 +1,64 @@ +{ + "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/associated_source": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/serial_number": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_number": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/gain_setting": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/vendor": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/device_information/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/attached_to": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/measurement": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value/@units": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", + "/ENTRY[entry]/USER[user]/address": "@eln", + "/ENTRY[entry]/USER[user]/affiliation": "@eln", + "/ENTRY[entry]/USER[user]/email": "@eln", + "/ENTRY[entry]/USER[user]/name": "@eln", + "/ENTRY[entry]/experiment_description": "@eln", + "/ENTRY[entry]/experiment_type": "@eln", + "/ENTRY[entry]/raman_experiment_type": "@eln", + "/ENTRY[entry]/title": "@eln", + "/ENTRY[entry]/start_time": "@eln", + "/ENTRY[entry]/definition": "@eln", + "/ENTRY[entry]/definition/@url": "@eln", + "/ENTRY[entry]/@default": "data", + "/ENTRY[entry]/DATA[data]/@signal": "y_values", + "/ENTRY[entry]/DATA[data]/y_values": "@data:data/y_values", + "/ENTRY[entry]/DATA[data]/x_values": "@data:data/x_values", + "/ENTRY[entry]/DATA[data]/y_values/@units": "@eln:/ENTRY[entry]/data/unit_y", + "/ENTRY[entry]/DATA[data]/x_values/@units": "@eln:/ENTRY[entry]/data/unit_x", + "/ENTRY[entry]/DATA[data]/y_values/@long_name": "@eln:/ENTRY[entry]/data/longname_y", + "/ENTRY[entry]/DATA[data]/x_values/@long_name": "@eln:/ENTRY[entry]/data/longname_x", + "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "@eln:/ENTRY[entry]/data/longname_x_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:data/x_values_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" + } + diff --git a/src/pynxtools_raman/reader.py b/src/pynxtools_raman/reader.py index f446aea..5841ae6 100644 --- a/src/pynxtools_raman/reader.py +++ b/src/pynxtools_raman/reader.py @@ -1,300 +1,240 @@ -from typing import Any, Tuple -from typing import Dict - -import math -import os -from importlib.metadata import PackageNotFoundError, version -from typing import Any, Tuple - -import numpy as np -import pandas as pd -import yaml -from pynxtools import get_nexus_version, get_nexus_version_hash -from pynxtools.dataconverter.helpers import extract_atom_types -from pynxtools.dataconverter.readers.base.reader import BaseReader -from pynxtools.dataconverter.readers.utils import FlattenSettings, flatten_and_replace - - -from pynxtools.dataconverter.readers.base.reader import BaseReader - -# Still hardcoded parameters: -# "spectrum_data_x" <- name of X data array -# "spectrum_data_x_Raman" <- name of generated X data array in Raman reference frame -# "spectrum_data_y" <- Name of y data array -# "filename" - -DEFAULT_HEADER = {"sep": "\t", "skip": 0} - - -CONVERT_DICT = { - "unit": "@units", - "detector": "detector_TYPE[detector_DU970BV]", # "detector": "detector_TYPE[detector_DU970BV]", sollte auch passen mit "detector": "DETECTOR[detector_DU970BV]", - "source_532nmlaser": "SOURCE[source_532nmlaser]", - "beam_532nmlaser": "beam_TYPE[beam_532nmlaser]", - "incident_beam": "beam_incident", # this entry can be removed from NXraman definition, as at least one beam was made required in NXopt after the workshop - "Data": "DATA[data]", - "instrument": "INSTRUMENT[instrument]", - "sample": "SAMPLE[sample_PET_or_PS]", - "user": "USER[user]", - "spectrum_data_y": "DATA[data]/spectrum_data_y", - "spectrum_data_x": "DATA[data]/spectrum_data_x", - "spectrum_data_y_unit": "DATA[data]/spectrum_data_y/@units", - "spectrum_data_x_unit": "DATA[data]/spectrum_data_x/@units", - "spectrum_data_y_longname": "DATA[data]/spectrum_data_y/@long_name", - "spectrum_data_x_longname": "DATA[data]/spectrum_data_x/@long_name", - "source_type": "type", - "device_information": "FABRICATION[device_information]", - "monochromator": "MONOCHROMATOR[monochromator]", - "objective_lens": "LENS_OPT[objective_lens]", -} - -CONFIG_KEYS = [ - "colnames", - "filename", - "filename_image1", - "filename_image2", - "filename_reference", - "plot_name_y", - "plot_name_x", - "sep", - "skip", - "unit_y", - "unit_x", -] - -REPLACE_NESTED: Dict[str, str] = {} -# REPLACE_NESTED = { -# # "instrument": "INSTRUMENT[instrument]", -# } - - -def load_header(filename, default): - """load the yaml description file, and apply defaults from - the defalut dict for all keys not found from the file. - Parameters: - filename: a yaml file containing the definitions - default_header: predefined default values - Returns: - a dict containing the loaded information - """ - - with open(filename, "rt", encoding="utf8") as file: - header = yaml.safe_load(file) - - clean_header = header - - for key, value in default.items(): - if key not in clean_header: - clean_header[key] = value - - if "sep" in header: - clean_header["sep"] = header["sep"].encode("utf-8").decode("unicode_escape") - - return clean_header - - -def load_as_pandas_array(my_file, header): - """Load a CSV output file using the header dict. - Use the fields: colnames, skip and sep from the header - to instruct the csv reader about: - colnames -- column names - skip -- how many lines to skip - sep -- separator character in the file - Parameters: - my_file string, file name - header dict header read from a yaml file - Returns: - A pandas array is returned. - """ - required_parameters = ("colnames", "skip", "sep") - for required_parameter in required_parameters: - if required_parameter not in header: - raise ValueError("colnames, skip and sep are required header parameters!") - - if not os.path.isfile(my_file): - raise IOError(f"File not found error: {my_file}") - - whole_data = pd.read_csv( - my_file, - # use header = None and names to define custom column names - header=None, - encoding="latin", - names=header["colnames"], - skiprows=header["skip"], - delimiter=header["sep"], - ) - return whole_data - - -def populate_header_dict(file_paths): - """This function creates and populates the header dictionary - reading one or more yaml file. - Parameters: - file_paths a list of file paths to be read - Returns: - a dict merging the content of all files - """ - - header = DEFAULT_HEADER - - for file_path in file_paths: - if os.path.splitext(file_path)[1].lower() in [".yaml", ".yml"]: - header = load_header(file_path, header) - if "filename" not in header: - raise KeyError("filename is missing from", file_path) - data_file = os.path.join(os.path.split(file_path)[0], header["filename"]) - - # if the path is not right, try the path provided directly - if not os.path.isfile(data_file): - data_file = header["filename"] - - return header, data_file - - -def populate_template_dict(header, template): - """The template dictionary is then populated according to the content of header dictionary.""" - - eln_data_dict = flatten_and_replace( - FlattenSettings( - dic=header, - convert_dict=CONVERT_DICT, - replace_nested=REPLACE_NESTED, - ignore_keys=CONFIG_KEYS, - ) - ) - - template.update(eln_data_dict) - - return template - - -def header_labels(header): - """Define data labels (column names)""" - - labels = {"CCD_cts": []} - for key, val in labels.items(): - val.append(f"{key}") - return labels - - -def data_array(whole_data, data_index): - """User defined variables to produce slices of the whole data set""" - - axis_label = whole_data.keys()[data_index] - - length_data_entries = len(whole_data[axis_label]) - my_data_array = np.empty([length_data_entries]) - - my_data_array[:] = whole_data[axis_label].to_numpy().astype("float64") - - return my_data_array - - -class RamanReader(BaseReader): - """ - Reader for my method.... - PLEASE UPDATE - """ - - supported_nxdls = ["NXraman"] - - @staticmethod - def populate_header_dict_with_datasets(file_paths): - """This is a raman-specific processing of data. - The procedure is the following: - - the header dictionary is initialized reading a yaml file - - the data are read from header["filename"] and saved in a pandas object - - an array is shaped according to application definition in a 5D array (numpy array) - - the array is saved in a HDF5 file as a dataset - - virtual datasets instances are created in the header dictionary, - referencing to data in the created HDF5 file. - - the header is finally returned, ready to be parsed in the final template dictionary - """ - header, data_file = populate_header_dict(file_paths) - - if os.path.isfile(data_file): - whole_data = load_as_pandas_array(data_file, header) - else: - # this we have tried, we should throw an error... - whole_data = load_as_pandas_array(header["filename"], header) - - # As the specific name of beam entries in unknown, extract all beam names from instrument level - list_of_beams = [] - for i in header["instrument"].keys(): - # look for all entries in instrument, add only if the first letters are like "beam_" - if len(i) > 4: - if i[:5] == "beam_": - list_of_beams.append(i) - light_source_name = list_of_beams[0] - laser_wavelength = header["instrument"][light_source_name][ - "incident_wavelength" - ]["value"] - - def transform_nm_to_wavenumber(lambda_laser, lambda_measurement): - return -(1e7 / lambda_measurement - 1e7 / lambda_laser) - - measured_wavelengths = whole_data["wavelength"].to_numpy() - - # Add the new created data to the panda data frame - data_x_Raman = transform_nm_to_wavenumber( - laser_wavelength * np.ones(len(measured_wavelengths)), measured_wavelengths - ) - whole_data["DATA[data]/spectrum_data_x_Raman"] = data_x_Raman - - labels = header_labels(header) - - def add_data_to_header(data_set, data_column_index, name): - header[str(name)] = data_array(data_set, data_column_index) - - # add specific data parts to the header of the file - add_data_to_header(whole_data, 0, "spectrum_data_x") - add_data_to_header(whole_data, 1, "spectrum_data_y") - add_data_to_header(whole_data, 2, "DATA[data]/spectrum_data_x_Raman") - - if "atom_types" not in header["sample"]: - header["atom_types"] = extract_atom_types( - header["sample"]["chemical_formula"] - ) - - return header, labels - - def read( - self, - template: dict = None, - file_paths: Tuple[str] = None, - objects: Tuple[Any] = None, - ) -> dict: - """Reads data from given file and returns a filled template dictionary. - A handlings of virtual datasets is implemented: - virtual dataset are created inside the final NeXus file. - The template entry is filled with a dictionary containing the following keys: - - link: the path of the external data file and the path of desired dataset inside it - - shape: numpy array slice object (according to array slice notation) - """ - - if not file_paths: - raise IOError("No input files were given to raman Reader.") - - # The header dictionary is filled with entries. - header, labels = RamanReader.populate_header_dict_with_datasets(file_paths) - # The template dictionary is filled - template = populate_template_dict(header, template) - - # assign main axis for data entry - template[f"/ENTRY[entry]/DATA[data]/@signal"] = f"spectrum_data_y" - template[f"/ENTRY[entry]/DATA[data]/@axes"] = f"spectrum_data_x_Raman" - - # add unit and long name for calculated Raman data - template[f"/ENTRY[entry]/DATA[data]/spectrum_data_x_Raman/@units"] = "1/cm" - template[f"/ENTRY[entry]/DATA[data]/spectrum_data_x_Raman/@long_name"] = ( - f"Raman Shift" - ) - - return template - - -# This has to be set to allow the convert script to use this reader. Set it to "MyDataReader". -READER = RamanReader - -# pynxtools will call: -# data = data_reader().read(template=Template(template), file_paths=input_file, **kwargs) +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +"""An example reader implementation based on the MultiFormatReader.""" + +import copy +import logging +import datetime +from typing import Dict, Any +from pathlib import Path +from typing import Any, Dict, List, Tuple # Optional, Union, Set + +from pynxtools.dataconverter.readers.multi.reader import MultiFormatReader +from pynxtools.dataconverter.readers.utils import parse_yml + + +from pynxtools_raman.rod.rod_reader import RodParser +from pynxtools_raman.witec.witec_reader import post_process_witec +from pynxtools_raman.witec.witec_reader import parse_txt_file + + +logger = logging.getLogger("pynxtools") + +CONVERT_DICT: Dict[str, str] = {} + +REPLACE_NESTED: Dict[str, str] = {} + + +class RamanReader(MultiFormatReader): + """MyDataReader implementation for the DataConverter to convert mydata to NeXus.""" + + supported_nxdls = ["NXraman"] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.raman_data_dicts: List[Dict[str, Any]] = [] + self.raman_data: Dict[str, Any] = {} + self.eln_data: Dict[str, Any] = {} + self.config_file: Path + + self.meta_data = None + + self.extensions = { + ".yml": self.handle_eln_file, + ".yaml": self.handle_eln_file, + ".txt": self.handle_txt_file, + ".json": self.set_config_file, + ".rod": self.handle_rod_file, + } + + # only required if multiple file types are present + # for ext in RamanReader.__prmt_file_ext__: + # self.extensions[ext] = self.handle_data_file + + def set_config_file(self, file_path: Path) -> Dict[str, Any]: + if self.config_file is not None: + logger.info( + f"Config file already set. Replaced by the new file {file_path}." + ) + self.config_file = file_path + return {} + + def handle_eln_file(self, file_path: str) -> Dict[str, Any]: + self.eln_data = parse_yml( + file_path, + convert_dict=CONVERT_DICT, + parent_key="/ENTRY[entry]", + ) + + return {} + + def get_attr(self, key: str, path: str) -> Any: + """ + Get the metadata that was stored in the main file. + """ + return self.get_metadata(self.raman_data, path, self.callbacks.entry_name) + + def read( + self, + template: dict = None, + file_paths: Tuple[str] = None, + objects: Tuple[Any] = None, + **kwargs, + ) -> dict: + template = super().read(template, file_paths, objects, suppress_warning=True) + # set default data + + template["/@default"] = "entry" + + return template + + def handle_rod_file(self, filepath) -> Dict[str, Any]: + # specify default config file for rod files + reader_dir = Path(__file__).parent + self.config_file = reader_dir.joinpath("config", "config_file_rod.json") # pylint: disable=invalid-type-comment + + rod = RodParser() + # read the rod file + rod.get_cif_file_content(filepath) + # get the key and value pairs from the rod file + self.raman_data = rod.extract_keys_and_values_from_cif() + + self.meta_data = copy.deepcopy(self.raman_data) + self.meta_data_length = len(self.meta_data) + + # This changes all uppercase string elements to lowercase string elements for the given key, within a given key value pair + key_to_make_value_lower_case = "_raman_measurement.environment" + self.raman_data[key_to_make_value_lower_case] = self.raman_data.get( + key_to_make_value_lower_case + ).lower() + + # transform the string into a datetime object + time_key = "_raman_measurement.datetime_initiated" + date_time_str = self.raman_data.get(time_key) + date_time_obj = datetime.datetime.strptime(date_time_str, "%Y-%m-%d") + # assume UTC for .rod data, as this is not specified in detail + tzinfo = datetime.timezone.utc + if isinstance(date_time_obj, datetime.datetime): + if tzinfo is not None: + # Apply the specified timezone to the datetime object + date_time_obj = date_time_obj.replace(tzinfo=tzinfo) + + # assign the dictionary the corrrected date format + self.raman_data[time_key] = date_time_obj.isoformat() + + # remove capitalization + objective_type_key = "_raman_measurement_device.optics_type" + self.raman_data[objective_type_key] = self.raman_data.get( + objective_type_key + ).lower() + # set a valid raman NXDL value, but only if it matches one of the correct ones: + objective_type_list = ["objective", "lens", "glass fiber", "none"] + if self.raman_data.get(objective_type_key) not in objective_type_list: + self.raman_data[objective_type_key] = "other" + + return {} + + def handle_txt_file(self, filepath): + """ + Read a .txt file from Witec Alpha Raman spectrometer and save the header and measurement data. + """ + + self.raman_data = parse_txt_file(self, filepath) + self.post_process = post_process_witec.__get__(self, RamanReader) + + return {} + + def get_eln_data(self, key: str, path: str) -> Any: + """ + Returns data from the eln file. This is done via the file: "config_file.json". + There are two suations: + 1. The .json file has only a key assigned + 2. The .json file has a key AND a value assigned. + The assigned value should be a "path", which reflects another entry in the eln file. + This acts as eln_path redirection, which is used for example to assign flexible + parameters from the eln_file (units, axisnames, etc.) + """ + if self.eln_data is None: + return None + + # Use the path to get the eln_data (this refers to the 2. case) + if len(path) > 0: + return self.eln_data.get(path) + + # If no path is assigned, use directly the given key to extract + # the eln data/value (this refers to the 1. case) + + # Filtering list, for NeXus concepts which use mixed notation of + # upper and lowercase to ensure correct NXclass labeling. + upper_and_lower_mixed_nexus_concepts = [ + "/detector_TYPE[", + "/beam_TYPE[", + "/source_TYPE[", + "/polfilter_TYPE[", + "/spectral_filter_TYPE[", + "/temp_control_TYPE[", + "/software_TYPE[", + "/LENS_OPT[", + ] + if self.eln_data.get(key) is None: + # filter for mixed concept names + for string in upper_and_lower_mixed_nexus_concepts: + key = key.replace(string, "/[") + # add only characters, if they are lower case and if they are not "[" or "]" + result = "".join( + [char for char in key if not (char.isupper() or char in "[]")] + ) + # Filter as well for + result = result.replace("entry", f"ENTRY[{self.callbacks.entry_name}]") + + if self.eln_data.get(result) is not None: + return self.eln_data.get(result) + else: + logger.warning( + f"No key found during eln_data processsing for key '{key}' after it's modification to '{result}'." + ) + return self.eln_data.get(key) + + def get_data(self, key: str, path: str) -> Any: + """ + Returns the data from a .rod file (Raman Open Database), which was trasnferred into a dictionary. + """ + + value = self.raman_data.get(path) + + # to calculate Raman shift for Witec Alpha from eln data + # if key == "/ENTRY[entry]/DATA[data]/x_values_raman": + # witec_laser_wavelength = self.eln_data.get("/ENTRY[entry]/instrument/beam_incident/wavelength") + # return None + if self.meta_data: + print(self.raman_data.keys()) + print(key, "##",path) + # delete the respective used path/key from the metadata file + # use later the remaining objects in meta data file for postprocessing + # to add the remainin elements to NXcollection + + if value is not None: + try: + return float(value) + except (ValueError, TypeError): + return self.raman_data.get(path) + else: + logger.warning(f"No axis name corresponding to the path {path}.") + + +READER = RamanReader diff --git a/src/pynxtools_raman/rod/__init__.py b/src/pynxtools_raman/rod/__init__.py new file mode 100644 index 0000000..db96892 --- /dev/null +++ b/src/pynxtools_raman/rod/__init__.py @@ -0,0 +1,17 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# diff --git a/src/pynxtools_raman/rod/rod_reader.py b/src/pynxtools_raman/rod/rod_reader.py new file mode 100644 index 0000000..ac1e957 --- /dev/null +++ b/src/pynxtools_raman/rod/rod_reader.py @@ -0,0 +1,161 @@ +from typing import List, Dict, Any, Union +import gemmi # for cif file handling + +from pathlib import Path + + +class RodParser: + """ + This class provides the ultilieies to read in a .rod file with "get_cif_file_content". + Then extract all data via "extract_keys_and_values_from_cif" into a dictionary. + """ + + def __init__(self, *args, **kwargs): + self.cif_doc = None + self.cif_block = None + self.lines = [] + self.n_headerlines = 12 + + def _read_lines(self, file: Union[str, Path]): + """ + Read all lines from the input files. + """ + with open(file, encoding="utf-8") as utf8_file: + lines = utf8_file.readlines() + + return lines + + def get_cif_file_content(self, file_path): + doc = gemmi.cif.read_file(file_path) + block = doc.sole_block() # extract main block of cif file + self.cif_doc = doc + self.cif_block = block + self.lines = self._read_lines(file_path) + + def get_string_position(self, string_element: str, check_only_pos_zero=False): + line_positions_of_str_element = [] + + rod_lines = self.lines + if check_only_pos_zero: + for line_number, lines in enumerate(rod_lines): + if string_element in lines[0]: + line_positions_of_str_element.append(line_number) + else: + if rod_lines is None: + print("rod_lines_is_none") + else: + for line_number, lines in enumerate(rod_lines): + if string_element in lines: + line_positions_of_str_element.append(line_number) + return line_positions_of_str_element + + def get_keys_and_loop_boolean(self, key_positions, key_pos_in_loops): + cif_key_loop_boolean_dict = {} + for key_pos in key_positions: + # go through all key_positions (i.e. line number) + # and check two cases: These lines are part of a loop or + # they are not part of a loop + # If they are in a loop, assign the bool value required for read + # out of the value from the key (i.e set =True) + if key_pos in key_pos_in_loops: + # remove linebreaks to ensure right assignment in values for input keys + cif_key_loop_boolean_dict[self.lines[key_pos].replace("\n", "")] = True + if key_pos not in key_pos_in_loops: + # some keys have their values on the same line, some on other lines + # Extract only the key, as this is always avaialble. + # Use the key later to get the respective values + if " " in self.lines[key_pos]: + key, value = self.lines[key_pos].split(maxsplit=1) + cif_key_loop_boolean_dict[key] = False + else: + # If only the key is on the line, without its value, extract only the key, + # Remove possible linebreaks for clarity with .replace() + cif_key_loop_boolean_dict[self.lines[key_pos].replace("\n", "")] = ( + False + ) + + if len(key_positions) == len(cif_key_loop_boolean_dict): + return cif_key_loop_boolean_dict + else: + print(".cif file parsing warning: Not all cif-keys were parsed.") + return cif_key_loop_boolean_dict + + def key_pos_after_loop(self, loop_pos_lists, key_pos_list): + loop_key_positons = [] + for loop_pos_list in loop_pos_lists: + counter = 1 + while loop_pos_list + counter in key_pos_list: + if ( + counter >= 100 + ): # implemented to avoid infinite loop, how to do better? + raise IndexError + loop_key_positons.append(loop_pos_list + counter) + counter += 1 + + return loop_key_positons + + def get_cif_value_from_key( + self, value_key: str, is_cif_loop_value=False + ) -> Union[str, list]: + """ + Parse the top-level Prodigy export settings into a dict. + + Parameters + ---------- + value_key : str + name of the key value, which is used for extraction + + is_cif_loop_value : boolean + if the key value, is part of a loop structure, this has to be set + correctly to extracat the respective array-like values + + Returns + ------- + output_list : str, list or np.array + Values, list, or np.array which is assigned to the respective key in the cif file + + """ + + block = self.cif_block # extract main block of cif file + if not is_cif_loop_value: # is single value via _key = value + value = block.find_value(value_key) + # perform processing if string is not single line value + if value.count("\n") > 0: + value = value.replace(";\n", "") + value = value.replace("\n;", "") + if value.count("\n") > 0: + value = value.replace("\n", " ") + return value.lstrip() # remove leading space if it is present + if value.count("\n") == 0: + return value + if is_cif_loop_value: # if block like value via loop_ = [....] + output_list = [] + for element in block.find_loop(value_key): + output_list.append(element) + # try: # try to conver tto numpy array + # output_list = np.array(output_list, dtype=float) + # return output_list + try: # try to conver tto numpy array + output_list_float = [float(item) for item in output_list] + return output_list_float + except ValueError: # default string output if not convertable to float + return output_list + return None + + def extract_keys_and_values_from_cif(self): + loop_positions = self.get_string_position("loop_\n") + key_pos_non_loop = self.get_string_position("_", check_only_pos_zero=True) + key_pos_in_loops = self.key_pos_after_loop(loop_positions, key_pos_non_loop) + cif_key_dict_with_loop_boolean = self.get_keys_and_loop_boolean( + key_pos_non_loop, key_pos_in_loops + ) + + # create a dictionary, and extract all the values by using the keys in correct formatting + cif_dict_key_value_pair_dict = {} + for key in cif_key_dict_with_loop_boolean: + bool_loop_value = cif_key_dict_with_loop_boolean[key] + cif_dict_key_value_pair_dict[key] = self.get_cif_value_from_key( + key, is_cif_loop_value=bool_loop_value + ) + + return cif_dict_key_value_pair_dict diff --git a/src/pynxtools_raman/witec/__init__.py b/src/pynxtools_raman/witec/__init__.py new file mode 100644 index 0000000..db96892 --- /dev/null +++ b/src/pynxtools_raman/witec/__init__.py @@ -0,0 +1,17 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# diff --git a/src/pynxtools_raman/witec/witec_reader.py b/src/pynxtools_raman/witec/witec_reader.py new file mode 100644 index 0000000..ab82de1 --- /dev/null +++ b/src/pynxtools_raman/witec/witec_reader.py @@ -0,0 +1,101 @@ +import logging +from abc import ABC, abstractmethod +from typing import Any, Dict, List, Union +import numpy as np + + +logger = logging.getLogger("pynxtools") + + +def parse_txt_file(self, filepath): + """ + Read a .txt file from Witec Alpha Raman spectrometer and return a data dictionary + which contains Raman shift and Intensity + """ + with open(filepath, "r") as file: + lines = file.readlines() + + # Initialize dictionaries to hold header and data sections + header_dict = {} + data = [] + line_count = 0 + data_mini_header_length = None + + # Track current section + current_section = None + + for line in lines: + line_count += 1 + # Remove any leading/trailing whitespace + line = line.strip() + # Go through the lines and define two different regions "Header" and + # "Data", as these need different methods to extract the data. + if line.startswith("[Header]"): + current_section = "header" + continue + elif line.startswith("[Data]"): + data_mini_header_length = line_count + 2 + current_section = "data" + + continue + + # Parse the header section + if current_section == "header" and "=" in line: + key, value = line.split("=", 1) + header_dict[key.strip()] = value.strip() + + # Parse the data section + elif current_section == "data" and "," in line: + # The header is set excactly until the float-like column data starts + # Rework this later to extract full metadata + if line_count <= data_mini_header_length: + if line.startswith("[Header]"): + logger.info( + f"[Header] elements in the file {filepath}, are not parsed yet. Consider adden the respective functionality." + ) + if line_count > data_mini_header_length: + values = line.split(",") + data.append([float(values[0].strip()), float(values[1].strip())]) + + # Transform: [[A, B], [C, D], [E, F]] into [[A, C, E], [B, D, F]] + data = [list(item) for item in zip(*data)] + + # assign column data with keys + data_dict = {"data/x_values": data[0], "data/y_values": data[1]} + return data_dict + + +def post_process_witec(self) -> None: + """ + Post process the Raman data to add the Raman Shift from input laser wavelength and + data wavelengths. + """ + + def transform_nm_to_wavenumber(lambda_laser, lambda_measurement): + stokes_raman_shift = -( + 1e7 / np.array(lambda_measurement) - 1e7 / np.array(lambda_laser) + ) + # return a list as output + return stokes_raman_shift.tolist() + + def get_incident_wavelength_from_NXraman(): + substring = "/beam_incident/wavelength" + + # Find matching keys with contain this substring + wavelength_keys = [key for key in self.eln_data if substring in key] + # Filter the matching keys for the strings, which contain this substring at the end only + filtered_list = [ + string for string in wavelength_keys if string.endswith(substring) + ] + # get the laser wavelength + laser_wavelength = self.eln_data.get(filtered_list[0]) + return laser_wavelength + + laser_wavelength = get_incident_wavelength_from_NXraman() + + x_values_raman = transform_nm_to_wavenumber( + laser_wavelength, self.raman_data["data/x_values"] + ) + + # update the data dictionary + self.raman_data["data/x_values_raman"] = x_values_raman diff --git a/tests/data/rod/config_file_rod.json b/tests/data/rod/config_file_rod.json new file mode 100644 index 0000000..ed49f98 --- /dev/null +++ b/tests/data/rod/config_file_rod.json @@ -0,0 +1,46 @@ +{ + "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@data:_raman_measurement_device.direction_polarization", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@data:_raman_measurement_device.excitation_laser_wavelength", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "nm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@data:_raman_measurement_device.power_on_sample", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "mW", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent": "@data:_raman_measurement_device.spot_size", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent/@units": "µm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability":"nominal", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "s", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@data:_raman_measurement.integration_time", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type":"single-channel", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@data:_raman_measurement_device.excitation_laser_type", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor":"@data:_raman_measurement_device.company", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@data:_raman_measurement_device.model", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@data:_raman_measurement_device.optics_type", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@data:_raman_measurement_device.microscope_objective_magnification", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@data:_raman_measurement_device.microscope_numerical_aperture", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@data:_raman_measurement_device.diffraction_grating", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "lines/mm", + "/ENTRY[entry]/SAMPLE[sample]/name":"@data:_chemical_name_systematic", + "/ENTRY[entry]/SAMPLE[sample]/physical_form":"@data:_[local]_chemical_compound_state", + "/ENTRY[entry]/SAMPLE[sample]/chemical_formula":"@data:_chemical_formula_structural", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[medium]/sample_medium":"@data:_raman_measurement.environment", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/measurement":"temperature", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value":"@data:_raman_measurement.temperature", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value/@units":"K", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/measurement":"pressure", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value":"@data:_raman_measurement.pressure", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value/@units":"kPa", + "/ENTRY[entry]/definition/@url": "Remove_this_if_pynxtools_issue_#469_is_solved", + "/ENTRY[entry]/experiment_type": "Raman spectroscopy", + "/ENTRY[entry]/raman_experiment_type": "other", + "/ENTRY[entry]/title": "@data:_chemical_name_mineral", + "/ENTRY[entry]/start_time": "@data:_raman_measurement.datetime_initiated", + "/ENTRY[entry]/@default": "data", + "/ENTRY[entry]/DATA[data]/@signal": "y_values", + "/ENTRY[entry]/DATA[data]/y_values": "@data:_raman_spectrum.intensity", + "/ENTRY[entry]/DATA[data]/y_values/@units": "arb. units", + "/ENTRY[entry]/DATA[data]/y_values/@long_name": "Intensity", + "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "Raman Shift", + "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:_raman_spectrum.raman_shift", + "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" + } + diff --git a/tests/data/rod/example.nxs b/tests/data/rod/example.nxs new file mode 100644 index 0000000000000000000000000000000000000000..6e24ecce8f789588a2920d9a46b2e58df82cbf78 GIT binary patch literal 53376 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 Date: Mon, 9 Dec 2024 13:05:44 +0100 Subject: [PATCH 02/14] add mani and pyproject --- MANIFEST.in | 2 +- pyproject.toml | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 223de30..8a23522 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,4 @@ prune * exclude * -recursive-include src/pynxtools_raman *.py +recursive-include src/pynxtools_raman *.py *.json include pyproject.toml README.md dev-requirements.txt \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 098c152..7dff382 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,13 +22,12 @@ classifiers = [ "Operating System :: OS Independent", ] dependencies = [ - "pynxtools>=0.7.0" + "pynxtools>=0.7.0", + "gemmi>=0.6.7" ] [project.entry-points."pynxtools.reader"] raman = "pynxtools_raman.reader:RamanReader" -raman_multi = "pynxtools_raman_multiformat.reader:RamanReaderMulti" - [tool.setuptools.packages.find] where = [ "src", From 7257bf2f646fb5a53571a90239e0956a0ef05a66 Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Mon, 9 Dec 2024 13:16:18 +0100 Subject: [PATCH 03/14] ruff --- pyproject.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 7dff382..8080cc9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,11 +28,16 @@ dependencies = [ [project.entry-points."pynxtools.reader"] raman = "pynxtools_raman.reader:RamanReader" + [tool.setuptools.packages.find] where = [ "src", ] +[tool.setuptools.package-data] +pynxtools_raman = ["*.json"] + + [project.urls] "Homepage" = "https://github.com/FAIRmat-NFDI/pynxtools-raman" "Bug Tracker" = "https://github.com/FAIRmat-NFDI/pynxtools-raman/issues" From 8c0dd86e9aa49bdb8f6ef66e327ce956b6e3ae19 Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Mon, 9 Dec 2024 13:19:30 +0100 Subject: [PATCH 04/14] ruff3 --- src/pynxtools_raman/reader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pynxtools_raman/reader.py b/src/pynxtools_raman/reader.py index 5841ae6..f7751d3 100644 --- a/src/pynxtools_raman/reader.py +++ b/src/pynxtools_raman/reader.py @@ -223,7 +223,7 @@ def get_data(self, key: str, path: str) -> Any: # return None if self.meta_data: print(self.raman_data.keys()) - print(key, "##",path) + print(key, "##", path) # delete the respective used path/key from the metadata file # use later the remaining objects in meta data file for postprocessing # to add the remainin elements to NXcollection From a07369e2deef48ef9ff423e45cb8f3ba9f735570 Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Mon, 9 Dec 2024 13:25:46 +0100 Subject: [PATCH 05/14] add tests data --- .gitignore | 2 +- tests/data/PS-or-PET-Raman-Spectrum-2.csv | 1617 ----------------- tests/data/config_file.json | 1 - tests/data/eln_data.yaml | 132 -- tests/data/example.nxs | Bin 75896 -> 0 bytes .../Si-wafer-Raman-Spectrum-1.txt} | 2 +- tests/data/witec/config_file.json | 64 - 7 files changed, 2 insertions(+), 1816 deletions(-) delete mode 100644 tests/data/PS-or-PET-Raman-Spectrum-2.csv delete mode 100644 tests/data/config_file.json delete mode 100644 tests/data/eln_data.yaml delete mode 100644 tests/data/example.nxs rename tests/data/{Si-wafer-Raman-Spectrum-1.csv => witec/Si-wafer-Raman-Spectrum-1.txt} (97%) delete mode 100644 tests/data/witec/config_file.json diff --git a/.gitignore b/.gitignore index 5d24723..58f23fa 100644 --- a/.gitignore +++ b/.gitignore @@ -199,7 +199,7 @@ cython_debug/ .pyenv *.pyc *.txt -!tests/data-multi/.txt +!tests/data/witec/*.txt !examples/witec/txt/*.txt !requirements.txt !dev-requirements.txt diff --git a/tests/data/PS-or-PET-Raman-Spectrum-2.csv b/tests/data/PS-or-PET-Raman-Spectrum-2.csv deleted file mode 100644 index d79dae4..0000000 --- a/tests/data/PS-or-PET-Raman-Spectrum-2.csv +++ /dev/null @@ -1,1617 +0,0 @@ -//Exported ASCII-File -[Header] -FileName = J:\Raman-spectroscopy-microscopy\Data\2024-06-20-CD-cover-test\Petri-dish-test.wip -GraphName = Spectrum--003--Spec.Data 1 -SizeX = 1 -SizeY = 1 -SizeGraph = 1600 -PositionUnit = µm -PositionX = 2.3283064365387E-8 -PositionY = 2.3283064365387E-8 -PositionZ = 0 -XAxisUnit = nm -DataUnit = CCD cts - -[Data] -X-Axis,Spectrum--003--Spec.Data 1 -nm,CCD cts - 5.307816803E+02, 2.885499878E+02 - 5.308650650E+02, 2.890000000E+02 - 5.309484482E+02, 2.884500122E+02 - 5.310318301E+02, 2.918500061E+02 - 5.311152107E+02, 2.927000122E+02 - 5.311985898E+02, 2.938999939E+02 - 5.312819676E+02, 2.972000122E+02 - 5.313653440E+02, 3.024500122E+02 - 5.314487190E+02, 3.067500000E+02 - 5.315320927E+02, 3.168999939E+02 - 5.316154650E+02, 3.318500061E+02 - 5.316988358E+02, 3.795000000E+02 - 5.317822054E+02, 5.512500000E+02 - 5.318655735E+02, 1.227000000E+03 - 5.319489403E+02, 2.992649902E+03 - 5.320323056E+02, 5.961399902E+03 - 5.321156696E+02, 1.143665039E+04 - 5.321990322E+02, 1.935719922E+04 - 5.322823935E+02, 2.579740039E+04 - 5.323657533E+02, 2.985725000E+04 - 5.324491118E+02, 2.385040039E+04 - 5.325324688E+02, 1.441050000E+04 - 5.326158245E+02, 8.862049805E+03 - 5.326991788E+02, 4.755450195E+03 - 5.327825318E+02, 2.066449951E+03 - 5.328658833E+02, 8.219000244E+02 - 5.329492334E+02, 4.181499939E+02 - 5.330325822E+02, 3.272000122E+02 - 5.331159295E+02, 3.077000122E+02 - 5.331992755E+02, 3.002500000E+02 - 5.332826200E+02, 2.985499878E+02 - 5.333659632E+02, 2.950499878E+02 - 5.334493050E+02, 2.928500061E+02 - 5.335326454E+02, 2.917500000E+02 - 5.336159844E+02, 2.888500061E+02 - 5.336993220E+02, 2.886000061E+02 - 5.337826582E+02, 2.872999878E+02 - 5.338659930E+02, 2.867000122E+02 - 5.339493264E+02, 2.875000000E+02 - 5.340326584E+02, 2.865499878E+02 - 5.341159890E+02, 2.865499878E+02 - 5.341993182E+02, 2.862000122E+02 - 5.342826460E+02, 2.865499878E+02 - 5.343659725E+02, 2.861499939E+02 - 5.344492975E+02, 2.881499939E+02 - 5.345326211E+02, 2.855000000E+02 - 5.346159433E+02, 2.870000000E+02 - 5.346992641E+02, 2.860000000E+02 - 5.347825834E+02, 2.887000122E+02 - 5.348659014E+02, 2.872500000E+02 - 5.349492180E+02, 2.881000061E+02 - 5.350325332E+02, 2.893999939E+02 - 5.351158469E+02, 2.908999939E+02 - 5.351991593E+02, 2.932000122E+02 - 5.352824702E+02, 2.977500000E+02 - 5.353657797E+02, 2.993500061E+02 - 5.354490879E+02, 3.052500000E+02 - 5.355323946E+02, 3.113999939E+02 - 5.356156999E+02, 3.244500122E+02 - 5.356990037E+02, 3.401000061E+02 - 5.357823062E+02, 3.705000000E+02 - 5.358656073E+02, 4.163999939E+02 - 5.359489069E+02, 4.871499939E+02 - 5.360322051E+02, 6.118499756E+02 - 5.361155019E+02, 7.997000122E+02 - 5.361987973E+02, 1.097900024E+03 - 5.362820913E+02, 1.533449951E+03 - 5.363653838E+02, 2.148250000E+03 - 5.364486749E+02, 2.884100098E+03 - 5.365319647E+02, 3.548600098E+03 - 5.366152529E+02, 4.130649902E+03 - 5.366985398E+02, 4.478649902E+03 - 5.367818252E+02, 4.736750000E+03 - 5.368651093E+02, 4.932299805E+03 - 5.369483918E+02, 5.016750000E+03 - 5.370316730E+02, 4.921750000E+03 - 5.371149528E+02, 4.863750000E+03 - 5.371982311E+02, 4.794450195E+03 - 5.372815080E+02, 4.710100098E+03 - 5.373647834E+02, 4.692100098E+03 - 5.374480574E+02, 4.605500000E+03 - 5.375313300E+02, 4.529549805E+03 - 5.376146012E+02, 4.495799805E+03 - 5.376978710E+02, 4.451299805E+03 - 5.377811393E+02, 4.362750000E+03 - 5.378644061E+02, 4.338149902E+03 - 5.379476716E+02, 4.461600098E+03 - 5.380309356E+02, 4.636450195E+03 - 5.381141982E+02, 4.808899902E+03 - 5.381974593E+02, 5.022350098E+03 - 5.382807190E+02, 5.295299805E+03 - 5.383639773E+02, 5.488000000E+03 - 5.384472341E+02, 5.630299805E+03 - 5.385304895E+02, 5.773549805E+03 - 5.386137434E+02, 5.961899902E+03 - 5.386969960E+02, 6.129750000E+03 - 5.387802470E+02, 5.974750000E+03 - 5.388634967E+02, 5.660899902E+03 - 5.389467448E+02, 5.262149902E+03 - 5.390299916E+02, 4.671350098E+03 - 5.391132369E+02, 4.130049805E+03 - 5.391964808E+02, 3.519449951E+03 - 5.392797232E+02, 2.943149902E+03 - 5.393629641E+02, 2.517949951E+03 - 5.394462037E+02, 2.255399902E+03 - 5.395294417E+02, 2.070850098E+03 - 5.396126784E+02, 1.919449951E+03 - 5.396959135E+02, 1.853500000E+03 - 5.397791473E+02, 1.780900024E+03 - 5.398623795E+02, 1.694150024E+03 - 5.399456104E+02, 1.663150024E+03 - 5.400288397E+02, 1.657599976E+03 - 5.401120677E+02, 1.627000000E+03 - 5.401952941E+02, 1.592900024E+03 - 5.402785192E+02, 1.586199951E+03 - 5.403617427E+02, 1.543099976E+03 - 5.404449648E+02, 1.482099976E+03 - 5.405281855E+02, 1.438400024E+03 - 5.406114047E+02, 1.371000000E+03 - 5.406946224E+02, 1.289099976E+03 - 5.407778387E+02, 1.233849976E+03 - 5.408610535E+02, 1.200449951E+03 - 5.409442669E+02, 1.181150024E+03 - 5.410274788E+02, 1.151849976E+03 - 5.411106892E+02, 1.128199951E+03 - 5.411938982E+02, 1.118449951E+03 - 5.412771057E+02, 1.134000000E+03 - 5.413603118E+02, 1.146449951E+03 - 5.414435164E+02, 1.165449951E+03 - 5.415267195E+02, 1.182000000E+03 - 5.416099212E+02, 1.197449951E+03 - 5.416931214E+02, 1.209349976E+03 - 5.417763201E+02, 1.217099976E+03 - 5.418595173E+02, 1.251400024E+03 - 5.419427131E+02, 1.237900024E+03 - 5.420259075E+02, 1.230099976E+03 - 5.421091003E+02, 1.200750000E+03 - 5.421922917E+02, 1.152849976E+03 - 5.422754816E+02, 1.141300049E+03 - 5.423586701E+02, 1.133400024E+03 - 5.424418570E+02, 1.099599976E+03 - 5.425250425E+02, 1.091050049E+03 - 5.426082265E+02, 1.099949951E+03 - 5.426914091E+02, 1.102650024E+03 - 5.427745902E+02, 1.097900024E+03 - 5.428577698E+02, 1.116050049E+03 - 5.429409479E+02, 1.160349976E+03 - 5.430241245E+02, 1.207000000E+03 - 5.431072997E+02, 1.247050049E+03 - 5.431904734E+02, 1.313949951E+03 - 5.432736456E+02, 1.376199951E+03 - 5.433568163E+02, 1.463150024E+03 - 5.434399855E+02, 1.531800049E+03 - 5.435231533E+02, 1.589900024E+03 - 5.436063195E+02, 1.668849976E+03 - 5.436894843E+02, 1.734500000E+03 - 5.437726476E+02, 1.798699951E+03 - 5.438558095E+02, 1.893050049E+03 - 5.439389698E+02, 2.043199951E+03 - 5.440221287E+02, 2.115949951E+03 - 5.441052860E+02, 2.093050049E+03 - 5.441884419E+02, 2.000750000E+03 - 5.442715963E+02, 1.869300049E+03 - 5.443547492E+02, 1.759900024E+03 - 5.444379006E+02, 1.648849976E+03 - 5.445210505E+02, 1.523750000E+03 - 5.446041989E+02, 1.420550049E+03 - 5.446873459E+02, 1.371550049E+03 - 5.447704913E+02, 1.310949951E+03 - 5.448536352E+02, 1.265949951E+03 - 5.449367777E+02, 1.225849976E+03 - 5.450199187E+02, 1.215900024E+03 - 5.451030581E+02, 1.192199951E+03 - 5.451861961E+02, 1.143099976E+03 - 5.452693325E+02, 1.114849976E+03 - 5.453524675E+02, 1.073050049E+03 - 5.454356010E+02, 1.026849976E+03 - 5.455187329E+02, 9.814000244E+02 - 5.456018634E+02, 9.269000244E+02 - 5.456849924E+02, 8.931500244E+02 - 5.457681199E+02, 8.630999756E+02 - 5.458512458E+02, 8.542500000E+02 - 5.459343703E+02, 8.440000000E+02 - 5.460174932E+02, 8.400999756E+02 - 5.461006147E+02, 8.291500244E+02 - 5.461837346E+02, 8.226500244E+02 - 5.462668531E+02, 8.200000000E+02 - 5.463499700E+02, 8.230000000E+02 - 5.464330854E+02, 8.262000122E+02 - 5.465161993E+02, 8.175999756E+02 - 5.465993118E+02, 8.234500122E+02 - 5.466824227E+02, 8.185999756E+02 - 5.467655320E+02, 8.357500000E+02 - 5.468486399E+02, 8.427999878E+02 - 5.469317463E+02, 8.477500000E+02 - 5.470148511E+02, 8.617999878E+02 - 5.470979545E+02, 8.689000244E+02 - 5.471810563E+02, 8.847000122E+02 - 5.472641566E+02, 8.990499878E+02 - 5.473472554E+02, 9.212500000E+02 - 5.474303527E+02, 9.490499878E+02 - 5.475134485E+02, 9.722500000E+02 - 5.475965427E+02, 1.006200012E+03 - 5.476796354E+02, 1.038750000E+03 - 5.477627266E+02, 1.115349976E+03 - 5.478458163E+02, 1.205849976E+03 - 5.479289045E+02, 1.310599976E+03 - 5.480119911E+02, 1.351300049E+03 - 5.480950762E+02, 1.338500000E+03 - 5.481781598E+02, 1.301250000E+03 - 5.482612419E+02, 1.262800049E+03 - 5.483443225E+02, 1.221750000E+03 - 5.484274015E+02, 1.229949951E+03 - 5.485104790E+02, 1.219250000E+03 - 5.485935550E+02, 1.184199951E+03 - 5.486766294E+02, 1.156199951E+03 - 5.487597023E+02, 1.147250000E+03 - 5.488427737E+02, 1.127849976E+03 - 5.489258436E+02, 1.099750000E+03 - 5.490089119E+02, 1.089250000E+03 - 5.490919787E+02, 1.068550049E+03 - 5.491750440E+02, 1.049300049E+03 - 5.492581077E+02, 1.031650024E+03 - 5.493411699E+02, 1.003500000E+03 - 5.494242306E+02, 9.862000122E+02 - 5.495072897E+02, 9.755999756E+02 - 5.495903473E+02, 9.689000244E+02 - 5.496734034E+02, 9.758499756E+02 - 5.497564579E+02, 9.811500244E+02 - 5.498395109E+02, 9.804000244E+02 - 5.499225623E+02, 1.001400024E+03 - 5.500056123E+02, 1.049849976E+03 - 5.500886606E+02, 1.145199951E+03 - 5.501717075E+02, 1.402949951E+03 - 5.502547528E+02, 2.135199951E+03 - 5.503377965E+02, 3.789149902E+03 - 5.504208387E+02, 5.510000000E+03 - 5.505038794E+02, 5.614000000E+03 - 5.505869185E+02, 4.155000000E+03 - 5.506699561E+02, 2.499649902E+03 - 5.507529921E+02, 1.663400024E+03 - 5.508360266E+02, 1.319750000E+03 - 5.509190595E+02, 1.124300049E+03 - 5.510020909E+02, 9.824500122E+02 - 5.510851207E+02, 8.962500000E+02 - 5.511681490E+02, 8.572999878E+02 - 5.512511758E+02, 8.140999756E+02 - 5.513342010E+02, 7.836500244E+02 - 5.514172246E+02, 7.710499878E+02 - 5.515002467E+02, 7.580000000E+02 - 5.515832672E+02, 7.608499756E+02 - 5.516662862E+02, 7.522999878E+02 - 5.517493036E+02, 7.477500000E+02 - 5.518323195E+02, 7.397000122E+02 - 5.519153338E+02, 7.298499756E+02 - 5.519983466E+02, 7.344500122E+02 - 5.520813578E+02, 7.367999878E+02 - 5.521643674E+02, 7.345999756E+02 - 5.522473755E+02, 7.295000000E+02 - 5.523303821E+02, 7.278499756E+02 - 5.524133870E+02, 7.364000244E+02 - 5.524963904E+02, 7.531500244E+02 - 5.525793923E+02, 7.641500244E+02 - 5.526623926E+02, 8.027000122E+02 - 5.527453913E+02, 8.622500000E+02 - 5.528283885E+02, 9.282000122E+02 - 5.529113840E+02, 9.807500000E+02 - 5.529943781E+02, 9.814500122E+02 - 5.530773705E+02, 9.266500244E+02 - 5.531603614E+02, 8.445999756E+02 - 5.532433508E+02, 8.106500244E+02 - 5.533263385E+02, 8.061500244E+02 - 5.534093247E+02, 8.195000000E+02 - 5.534923093E+02, 8.394000244E+02 - 5.535752924E+02, 8.567999878E+02 - 5.536582739E+02, 9.155000000E+02 - 5.537412538E+02, 1.004450012E+03 - 5.538242321E+02, 1.155699951E+03 - 5.539072089E+02, 1.391800049E+03 - 5.539901841E+02, 1.672650024E+03 - 5.540731577E+02, 1.884449951E+03 - 5.541561298E+02, 2.041650024E+03 - 5.542391002E+02, 2.145199951E+03 - 5.543220691E+02, 2.261850098E+03 - 5.544050364E+02, 2.444449951E+03 - 5.544880022E+02, 2.693449951E+03 - 5.545709663E+02, 2.937750000E+03 - 5.546539289E+02, 3.033300049E+03 - 5.547368899E+02, 3.052399902E+03 - 5.548198493E+02, 2.978000000E+03 - 5.549028071E+02, 2.858800049E+03 - 5.549857634E+02, 2.772300049E+03 - 5.550687181E+02, 2.609949951E+03 - 5.551516711E+02, 2.453850098E+03 - 5.552346226E+02, 2.429649902E+03 - 5.553175726E+02, 2.587449951E+03 - 5.554005209E+02, 2.909800049E+03 - 5.554834676E+02, 3.393949951E+03 - 5.555664128E+02, 4.023000000E+03 - 5.556493563E+02, 4.587149902E+03 - 5.557322983E+02, 5.077200195E+03 - 5.558152387E+02, 5.219850098E+03 - 5.558981775E+02, 4.852250000E+03 - 5.559811147E+02, 4.222549805E+03 - 5.560640503E+02, 3.593800049E+03 - 5.561469843E+02, 3.015850098E+03 - 5.562299168E+02, 2.601399902E+03 - 5.563128476E+02, 2.303199951E+03 - 5.563957769E+02, 2.020449951E+03 - 5.564787045E+02, 1.765150024E+03 - 5.565616305E+02, 1.544199951E+03 - 5.566445550E+02, 1.389300049E+03 - 5.567274778E+02, 1.351099976E+03 - 5.568103991E+02, 1.413349976E+03 - 5.568933188E+02, 1.515449951E+03 - 5.569762368E+02, 1.682500000E+03 - 5.570591533E+02, 1.920949951E+03 - 5.571420681E+02, 2.142949951E+03 - 5.572249814E+02, 2.209850098E+03 - 5.573078930E+02, 2.144500000E+03 - 5.573908031E+02, 1.941900024E+03 - 5.574737115E+02, 1.761699951E+03 - 5.575566184E+02, 1.637550049E+03 - 5.576395236E+02, 1.561099976E+03 - 5.577224272E+02, 1.527400024E+03 - 5.578053292E+02, 1.526849976E+03 - 5.578882296E+02, 1.528849976E+03 - 5.579711284E+02, 1.511550049E+03 - 5.580540256E+02, 1.499800049E+03 - 5.581369212E+02, 1.509550049E+03 - 5.582198152E+02, 1.489599976E+03 - 5.583027076E+02, 1.444250000E+03 - 5.583855983E+02, 1.420550049E+03 - 5.584684874E+02, 1.425449951E+03 - 5.585513750E+02, 1.423349976E+03 - 5.586342609E+02, 1.436300049E+03 - 5.587171452E+02, 1.480599976E+03 - 5.588000278E+02, 1.507550049E+03 - 5.588829089E+02, 1.580300049E+03 - 5.589657884E+02, 1.691900024E+03 - 5.590486662E+02, 1.858800049E+03 - 5.591315424E+02, 2.016699951E+03 - 5.592144170E+02, 2.097399902E+03 - 5.592972899E+02, 2.025099976E+03 - 5.593801613E+02, 1.811000000E+03 - 5.594630310E+02, 1.618349976E+03 - 5.595458991E+02, 1.469000000E+03 - 5.596287656E+02, 1.360349976E+03 - 5.597116305E+02, 1.297000000E+03 - 5.597944937E+02, 1.237650024E+03 - 5.598773553E+02, 1.215599976E+03 - 5.599602153E+02, 1.215849976E+03 - 5.600430736E+02, 1.201900024E+03 - 5.601259304E+02, 1.221900024E+03 - 5.602087855E+02, 1.273650024E+03 - 5.602916389E+02, 1.301699951E+03 - 5.603744908E+02, 1.316050049E+03 - 5.604573410E+02, 1.312650024E+03 - 5.605401896E+02, 1.325349976E+03 - 5.606230365E+02, 1.343050049E+03 - 5.607058818E+02, 1.360650024E+03 - 5.607887255E+02, 1.397250000E+03 - 5.608715676E+02, 1.481650024E+03 - 5.609544080E+02, 1.559750000E+03 - 5.610372468E+02, 1.612099976E+03 - 5.611200839E+02, 1.650000000E+03 - 5.612029194E+02, 1.661550049E+03 - 5.612857533E+02, 1.683949951E+03 - 5.613685855E+02, 1.793949951E+03 - 5.614514161E+02, 2.003150024E+03 - 5.615342451E+02, 2.328350098E+03 - 5.616170724E+02, 2.778600098E+03 - 5.616998981E+02, 3.542600098E+03 - 5.617827221E+02, 4.720799805E+03 - 5.618655445E+02, 6.096450195E+03 - 5.619483652E+02, 8.438400391E+03 - 5.620311843E+02, 1.522095020E+04 - 5.621140018E+02, 2.903200000E+04 - 5.621968176E+02, 4.121889844E+04 - 5.622796318E+02, 4.081889844E+04 - 5.623624443E+02, 2.786294922E+04 - 5.624452552E+02, 1.374734961E+04 - 5.625280644E+02, 6.410899902E+03 - 5.626108720E+02, 3.734600098E+03 - 5.626936779E+02, 2.872300049E+03 - 5.627764822E+02, 2.947449951E+03 - 5.628592848E+02, 3.823500000E+03 - 5.629420858E+02, 5.796500000E+03 - 5.630248851E+02, 8.779950195E+03 - 5.631076827E+02, 1.168565039E+04 - 5.631904788E+02, 1.276184961E+04 - 5.632732731E+02, 1.152490039E+04 - 5.633560658E+02, 8.574799805E+03 - 5.634388569E+02, 5.910899902E+03 - 5.635216463E+02, 4.294549805E+03 - 5.636044340E+02, 3.373649902E+03 - 5.636872201E+02, 2.894750000E+03 - 5.637700045E+02, 2.630199951E+03 - 5.638527872E+02, 2.495899902E+03 - 5.639355683E+02, 2.445149902E+03 - 5.640183478E+02, 2.474699951E+03 - 5.641011255E+02, 2.518699951E+03 - 5.641839016E+02, 2.593300049E+03 - 5.642666761E+02, 2.669550049E+03 - 5.643494489E+02, 2.753199951E+03 - 5.644322200E+02, 2.808649902E+03 - 5.645149894E+02, 2.805699951E+03 - 5.645977572E+02, 2.738250000E+03 - 5.646805233E+02, 2.656250000E+03 - 5.647632878E+02, 2.587500000E+03 - 5.648460506E+02, 2.496500000E+03 - 5.649288117E+02, 2.487350098E+03 - 5.650115711E+02, 2.473600098E+03 - 5.650943289E+02, 2.480399902E+03 - 5.651770850E+02, 2.508100098E+03 - 5.652598394E+02, 2.506000000E+03 - 5.653425922E+02, 2.467850098E+03 - 5.654253433E+02, 2.286300049E+03 - 5.655080927E+02, 2.049800049E+03 - 5.655908404E+02, 1.841650024E+03 - 5.656735865E+02, 1.693400024E+03 - 5.657563308E+02, 1.591300049E+03 - 5.658390735E+02, 1.494650024E+03 - 5.659218146E+02, 1.391199951E+03 - 5.660045539E+02, 1.303000000E+03 - 5.660872916E+02, 1.227599976E+03 - 5.661700276E+02, 1.179949951E+03 - 5.662527619E+02, 1.163300049E+03 - 5.663354945E+02, 1.169349976E+03 - 5.664182255E+02, 1.218900024E+03 - 5.665009547E+02, 1.272099976E+03 - 5.665836823E+02, 1.381949951E+03 - 5.666664082E+02, 1.565849976E+03 - 5.667491324E+02, 1.880750000E+03 - 5.668318549E+02, 2.351199951E+03 - 5.669145758E+02, 3.158149902E+03 - 5.669972949E+02, 4.325850098E+03 - 5.670800124E+02, 5.385149902E+03 - 5.671627282E+02, 5.467350098E+03 - 5.672454423E+02, 4.858700195E+03 - 5.673281546E+02, 3.966199951E+03 - 5.674108654E+02, 3.294250000E+03 - 5.674935744E+02, 3.005850098E+03 - 5.675762817E+02, 3.008000000E+03 - 5.676589873E+02, 3.307000000E+03 - 5.677416913E+02, 3.995000000E+03 - 5.678243935E+02, 5.161250000E+03 - 5.679070940E+02, 6.456000000E+03 - 5.679897929E+02, 7.136049805E+03 - 5.680724900E+02, 7.102700195E+03 - 5.681551855E+02, 6.933500000E+03 - 5.682378793E+02, 7.028350098E+03 - 5.683205713E+02, 7.389700195E+03 - 5.684032617E+02, 7.819000000E+03 - 5.684859503E+02, 8.050100098E+03 - 5.685686373E+02, 8.044950195E+03 - 5.686513226E+02, 7.692600098E+03 - 5.687340061E+02, 6.943149902E+03 - 5.688166880E+02, 6.001750000E+03 - 5.688993681E+02, 5.018899902E+03 - 5.689820466E+02, 4.141500000E+03 - 5.690647233E+02, 3.516300049E+03 - 5.691473983E+02, 3.107250000E+03 - 5.692300717E+02, 2.875250000E+03 - 5.693127433E+02, 2.676649902E+03 - 5.693954132E+02, 2.518800049E+03 - 5.694780814E+02, 2.371550049E+03 - 5.695607479E+02, 2.169949951E+03 - 5.696434127E+02, 2.000349976E+03 - 5.697260758E+02, 1.907250000E+03 - 5.698087371E+02, 1.862800049E+03 - 5.698913968E+02, 1.820250000E+03 - 5.699740547E+02, 1.805650024E+03 - 5.700567109E+02, 1.771150024E+03 - 5.701393654E+02, 1.743050049E+03 - 5.702220182E+02, 1.736949951E+03 - 5.703046693E+02, 1.707500000E+03 - 5.703873187E+02, 1.664849976E+03 - 5.704699663E+02, 1.629550049E+03 - 5.705526123E+02, 1.621650024E+03 - 5.706352565E+02, 1.623150024E+03 - 5.707178990E+02, 1.608900024E+03 - 5.708005397E+02, 1.572849976E+03 - 5.708831788E+02, 1.571400024E+03 - 5.709658161E+02, 1.586699951E+03 - 5.710484517E+02, 1.609849976E+03 - 5.711310856E+02, 1.600050049E+03 - 5.712137177E+02, 1.599550049E+03 - 5.712963482E+02, 1.653500000E+03 - 5.713789769E+02, 1.734400024E+03 - 5.714616039E+02, 1.799599976E+03 - 5.715442291E+02, 1.860250000E+03 - 5.716268526E+02, 1.938949951E+03 - 5.717094744E+02, 2.035099976E+03 - 5.717920945E+02, 2.088100098E+03 - 5.718747129E+02, 2.153300049E+03 - 5.719573295E+02, 2.231149902E+03 - 5.720399443E+02, 2.279300049E+03 - 5.721225575E+02, 2.296899902E+03 - 5.722051689E+02, 2.363149902E+03 - 5.722877786E+02, 2.477500000E+03 - 5.723703865E+02, 2.602449951E+03 - 5.724529928E+02, 2.769850098E+03 - 5.725355972E+02, 2.893600098E+03 - 5.726182000E+02, 2.999699951E+03 - 5.727008010E+02, 3.094550049E+03 - 5.727834003E+02, 3.062500000E+03 - 5.728659978E+02, 3.012399902E+03 - 5.729485936E+02, 2.898600098E+03 - 5.730311876E+02, 2.661750000E+03 - 5.731137800E+02, 2.442300049E+03 - 5.731963705E+02, 2.237050049E+03 - 5.732789594E+02, 2.091949951E+03 - 5.733615465E+02, 2.020449951E+03 - 5.734441318E+02, 1.962800049E+03 - 5.735267154E+02, 1.890400024E+03 - 5.736092973E+02, 1.844650024E+03 - 5.736918774E+02, 1.856849976E+03 - 5.737744557E+02, 1.849800049E+03 - 5.738570324E+02, 1.836599976E+03 - 5.739396072E+02, 1.853550049E+03 - 5.740221804E+02, 1.864000000E+03 - 5.741047517E+02, 1.832250000E+03 - 5.741873214E+02, 1.797699951E+03 - 5.742698892E+02, 1.719349976E+03 - 5.743524554E+02, 1.621250000E+03 - 5.744350197E+02, 1.472199951E+03 - 5.745175824E+02, 1.324199951E+03 - 5.746001432E+02, 1.216099976E+03 - 5.746827023E+02, 1.130300049E+03 - 5.747652597E+02, 1.080699951E+03 - 5.748478153E+02, 1.026300049E+03 - 5.749303692E+02, 1.015099976E+03 - 5.750129213E+02, 1.030449951E+03 - 5.750954716E+02, 1.042550049E+03 - 5.751780202E+02, 1.058650024E+03 - 5.752605670E+02, 1.048000000E+03 - 5.753431120E+02, 1.004250000E+03 - 5.754256553E+02, 9.836500244E+02 - 5.755081969E+02, 9.706500244E+02 - 5.755907367E+02, 9.514500122E+02 - 5.756732747E+02, 9.563499756E+02 - 5.757558109E+02, 9.557500000E+02 - 5.758383454E+02, 9.624000244E+02 - 5.759208781E+02, 9.975000000E+02 - 5.760034091E+02, 1.072500000E+03 - 5.760859383E+02, 1.191949951E+03 - 5.761684657E+02, 1.400150024E+03 - 5.762509914E+02, 1.699050049E+03 - 5.763335152E+02, 2.073699951E+03 - 5.764160374E+02, 2.402250000E+03 - 5.764985577E+02, 2.729850098E+03 - 5.765810763E+02, 3.080250000E+03 - 5.766635931E+02, 3.368350098E+03 - 5.767461081E+02, 3.545600098E+03 - 5.768286214E+02, 3.466250000E+03 - 5.769111329E+02, 3.121149902E+03 - 5.769936426E+02, 2.556750000E+03 - 5.770761506E+02, 1.984949951E+03 - 5.771586567E+02, 1.542800049E+03 - 5.772411611E+02, 1.305400024E+03 - 5.773236637E+02, 1.143199951E+03 - 5.774061646E+02, 1.060349976E+03 - 5.774886636E+02, 1.020500000E+03 - 5.775711609E+02, 9.949500122E+02 - 5.776536564E+02, 9.580999756E+02 - 5.777361502E+02, 9.364000244E+02 - 5.778186421E+02, 9.293499756E+02 - 5.779011323E+02, 9.509000244E+02 - 5.779836206E+02, 9.625000000E+02 - 5.780661072E+02, 1.000150024E+03 - 5.781485920E+02, 1.061849976E+03 - 5.782310751E+02, 1.082349976E+03 - 5.783135563E+02, 1.061750000E+03 - 5.783960358E+02, 1.002549988E+03 - 5.784785134E+02, 9.417999878E+02 - 5.785609893E+02, 9.104000244E+02 - 5.786434634E+02, 8.990000000E+02 - 5.787259357E+02, 8.944000244E+02 - 5.788084062E+02, 8.970000000E+02 - 5.788908749E+02, 8.959000244E+02 - 5.789733419E+02, 8.942500000E+02 - 5.790558070E+02, 9.100499878E+02 - 5.791382704E+02, 8.961500244E+02 - 5.792207319E+02, 9.048499756E+02 - 5.793031917E+02, 9.100999756E+02 - 5.793856497E+02, 9.098499756E+02 - 5.794681058E+02, 9.030499878E+02 - 5.795505602E+02, 9.199500122E+02 - 5.796330128E+02, 9.206500244E+02 - 5.797154636E+02, 9.287500000E+02 - 5.797979126E+02, 9.317500000E+02 - 5.798803597E+02, 9.298499756E+02 - 5.799628051E+02, 9.427999878E+02 - 5.800452487E+02, 9.527000122E+02 - 5.801276905E+02, 9.519000244E+02 - 5.802101305E+02, 9.550000000E+02 - 5.802925687E+02, 9.830499878E+02 - 5.803750051E+02, 1.015700012E+03 - 5.804574396E+02, 1.037300049E+03 - 5.805398724E+02, 1.091599976E+03 - 5.806223034E+02, 1.157599976E+03 - 5.807047325E+02, 1.252800049E+03 - 5.807871599E+02, 1.378349976E+03 - 5.808695854E+02, 1.582750000E+03 - 5.809520092E+02, 1.932449951E+03 - 5.810344311E+02, 2.662399902E+03 - 5.811168512E+02, 3.664250000E+03 - 5.811992695E+02, 4.407450195E+03 - 5.812816860E+02, 4.596250000E+03 - 5.813641007E+02, 4.154850098E+03 - 5.814465136E+02, 3.670149902E+03 - 5.815289246E+02, 3.764949951E+03 - 5.816113339E+02, 4.826899902E+03 - 5.816937413E+02, 6.725100098E+03 - 5.817761469E+02, 8.975049805E+03 - 5.818585508E+02, 1.070804980E+04 - 5.819409527E+02, 1.059575000E+04 - 5.820233529E+02, 8.568000000E+03 - 5.821057513E+02, 6.103850098E+03 - 5.821881478E+02, 4.029500000E+03 - 5.822705425E+02, 2.747850098E+03 - 5.823529354E+02, 2.070750000E+03 - 5.824353265E+02, 1.693250000E+03 - 5.825177157E+02, 1.461349976E+03 - 5.826001031E+02, 1.363349976E+03 - 5.826824888E+02, 1.316050049E+03 - 5.827648725E+02, 1.249500000E+03 - 5.828472545E+02, 1.165699951E+03 - 5.829296346E+02, 1.092300049E+03 - 5.830120129E+02, 1.039550049E+03 - 5.830943894E+02, 1.010900024E+03 - 5.831767641E+02, 9.955999756E+02 - 5.832591369E+02, 9.797000122E+02 - 5.833415079E+02, 9.782500000E+02 - 5.834238771E+02, 9.544000244E+02 - 5.835062444E+02, 9.382000122E+02 - 5.835886099E+02, 9.404500122E+02 - 5.836709736E+02, 9.422999878E+02 - 5.837533354E+02, 9.159000244E+02 - 5.838356954E+02, 9.042500000E+02 - 5.839180536E+02, 9.083499756E+02 - 5.840004099E+02, 9.219000244E+02 - 5.840827645E+02, 9.062999878E+02 - 5.841651171E+02, 9.109000244E+02 - 5.842474680E+02, 9.253499756E+02 - 5.843298170E+02, 9.375499878E+02 - 5.844121641E+02, 9.510499878E+02 - 5.844945094E+02, 9.577000122E+02 - 5.845768529E+02, 9.629000244E+02 - 5.846591946E+02, 9.544000244E+02 - 5.847415344E+02, 9.375999756E+02 - 5.848238723E+02, 9.245499878E+02 - 5.849062084E+02, 9.157500000E+02 - 5.849885427E+02, 9.106500244E+02 - 5.850708751E+02, 9.052000122E+02 - 5.851532057E+02, 8.995499878E+02 - 5.852355345E+02, 8.689500122E+02 - 5.853178614E+02, 8.448499756E+02 - 5.854001864E+02, 8.392000122E+02 - 5.854825096E+02, 8.515000000E+02 - 5.855648310E+02, 8.580000000E+02 - 5.856471505E+02, 8.495999756E+02 - 5.857294681E+02, 8.410999756E+02 - 5.858117839E+02, 8.308499756E+02 - 5.858940979E+02, 8.232000122E+02 - 5.859764100E+02, 8.272000122E+02 - 5.860587203E+02, 8.342500000E+02 - 5.861410287E+02, 8.532000122E+02 - 5.862233352E+02, 8.610999756E+02 - 5.863056399E+02, 8.556500244E+02 - 5.863879427E+02, 8.492999878E+02 - 5.864702437E+02, 8.528499756E+02 - 5.865525429E+02, 8.417999878E+02 - 5.866348401E+02, 8.391500244E+02 - 5.867171355E+02, 8.504000244E+02 - 5.867994291E+02, 8.526500244E+02 - 5.868817208E+02, 8.454500122E+02 - 5.869640106E+02, 8.445499878E+02 - 5.870462986E+02, 8.432999878E+02 - 5.871285847E+02, 8.324000244E+02 - 5.872108690E+02, 8.386500244E+02 - 5.872931513E+02, 8.426500244E+02 - 5.873754319E+02, 8.531500244E+02 - 5.874577105E+02, 8.450000000E+02 - 5.875399873E+02, 8.447000122E+02 - 5.876222622E+02, 8.425000000E+02 - 5.877045353E+02, 8.390499878E+02 - 5.877868065E+02, 8.350999756E+02 - 5.878690758E+02, 8.362999878E+02 - 5.879513433E+02, 8.535999756E+02 - 5.880336089E+02, 8.434000244E+02 - 5.881158726E+02, 8.446500244E+02 - 5.881981345E+02, 8.560499878E+02 - 5.882803944E+02, 8.459000244E+02 - 5.883626526E+02, 8.475000000E+02 - 5.884449088E+02, 8.545499878E+02 - 5.885271632E+02, 8.503499756E+02 - 5.886094156E+02, 8.640499878E+02 - 5.886916663E+02, 8.724500122E+02 - 5.887739150E+02, 8.803499756E+02 - 5.888561619E+02, 8.954500122E+02 - 5.889384068E+02, 9.092000122E+02 - 5.890206499E+02, 8.981500244E+02 - 5.891028912E+02, 9.051500244E+02 - 5.891851305E+02, 8.871500244E+02 - 5.892673680E+02, 8.947000122E+02 - 5.893496036E+02, 8.947999878E+02 - 5.894318373E+02, 8.935999756E+02 - 5.895140691E+02, 8.794500122E+02 - 5.895962991E+02, 8.657000122E+02 - 5.896785271E+02, 8.457500000E+02 - 5.897607533E+02, 8.430999756E+02 - 5.898429776E+02, 8.375999756E+02 - 5.899252000E+02, 8.397500000E+02 - 5.900074205E+02, 8.404000244E+02 - 5.900896392E+02, 8.459000244E+02 - 5.901718559E+02, 8.505000000E+02 - 5.902540708E+02, 8.484000244E+02 - 5.903362838E+02, 8.455499878E+02 - 5.904184948E+02, 8.519500122E+02 - 5.905007040E+02, 8.414500122E+02 - 5.905829113E+02, 8.262000122E+02 - 5.906651167E+02, 8.314000244E+02 - 5.907473203E+02, 8.431500244E+02 - 5.908295219E+02, 8.402500000E+02 - 5.909117216E+02, 8.309000244E+02 - 5.909939194E+02, 8.356500244E+02 - 5.910761154E+02, 8.421500244E+02 - 5.911583094E+02, 8.530999756E+02 - 5.912405016E+02, 8.572000122E+02 - 5.913226918E+02, 8.535499878E+02 - 5.914048802E+02, 8.565000000E+02 - 5.914870666E+02, 8.561500244E+02 - 5.915692512E+02, 8.532999878E+02 - 5.916514338E+02, 8.514500122E+02 - 5.917336146E+02, 8.412500000E+02 - 5.918157934E+02, 8.507500000E+02 - 5.918979704E+02, 8.423499756E+02 - 5.919801454E+02, 8.396500244E+02 - 5.920623186E+02, 8.519500122E+02 - 5.921444898E+02, 8.636500244E+02 - 5.922266592E+02, 8.602500000E+02 - 5.923088266E+02, 8.585999756E+02 - 5.923909921E+02, 8.752999878E+02 - 5.924731557E+02, 8.842000122E+02 - 5.925553174E+02, 8.922999878E+02 - 5.926374772E+02, 8.967999878E+02 - 5.927196351E+02, 9.101500244E+02 - 5.928017911E+02, 9.105499878E+02 - 5.928839451E+02, 9.004500122E+02 - 5.929660973E+02, 9.055999756E+02 - 5.930482475E+02, 9.239500122E+02 - 5.931303959E+02, 9.515000000E+02 - 5.932125423E+02, 9.470999756E+02 - 5.932946868E+02, 9.315499878E+02 - 5.933768294E+02, 9.128499756E+02 - 5.934589701E+02, 9.149500122E+02 - 5.935411088E+02, 9.212000122E+02 - 5.936232457E+02, 9.180499878E+02 - 5.937053806E+02, 9.142999878E+02 - 5.937875136E+02, 9.105000000E+02 - 5.938696447E+02, 9.163499756E+02 - 5.939517738E+02, 9.248499756E+02 - 5.940339011E+02, 9.387000122E+02 - 5.941160264E+02, 9.445499878E+02 - 5.941981498E+02, 9.379000244E+02 - 5.942802713E+02, 9.247500000E+02 - 5.943623908E+02, 9.229000244E+02 - 5.944445085E+02, 9.282500000E+02 - 5.945266242E+02, 9.229000244E+02 - 5.946087379E+02, 9.187000122E+02 - 5.946908498E+02, 8.979000244E+02 - 5.947729597E+02, 8.922999878E+02 - 5.948550677E+02, 8.904500122E+02 - 5.949371738E+02, 8.984500122E+02 - 5.950192779E+02, 9.035999756E+02 - 5.951013801E+02, 9.075999756E+02 - 5.951834804E+02, 9.076500244E+02 - 5.952655788E+02, 9.018499756E+02 - 5.953476752E+02, 8.965499878E+02 - 5.954297697E+02, 8.965499878E+02 - 5.955118622E+02, 8.963499756E+02 - 5.955939528E+02, 9.012000122E+02 - 5.956760415E+02, 9.026500244E+02 - 5.957581283E+02, 9.009000244E+02 - 5.958402131E+02, 9.015499878E+02 - 5.959222960E+02, 8.987000122E+02 - 5.960043769E+02, 8.924500122E+02 - 5.960864559E+02, 8.939500122E+02 - 5.961685330E+02, 9.029000244E+02 - 5.962506081E+02, 8.965999756E+02 - 5.963326813E+02, 9.101500244E+02 - 5.964147525E+02, 9.107000122E+02 - 5.964968218E+02, 9.182999878E+02 - 5.965788892E+02, 9.192500000E+02 - 5.966609546E+02, 9.224000244E+02 - 5.967430180E+02, 9.144000244E+02 - 5.968250796E+02, 9.158499756E+02 - 5.969071391E+02, 9.069500122E+02 - 5.969891968E+02, 9.100499878E+02 - 5.970712525E+02, 9.041500244E+02 - 5.971533062E+02, 9.094000244E+02 - 5.972353580E+02, 9.137000122E+02 - 5.973174078E+02, 9.179500122E+02 - 5.973994557E+02, 9.230000000E+02 - 5.974815017E+02, 9.277500000E+02 - 5.975635457E+02, 9.184000244E+02 - 5.976455877E+02, 9.125999756E+02 - 5.977276278E+02, 9.202000122E+02 - 5.978096659E+02, 9.393499756E+02 - 5.978917021E+02, 9.485000000E+02 - 5.979737363E+02, 9.423499756E+02 - 5.980557686E+02, 9.352999878E+02 - 5.981377989E+02, 9.350999756E+02 - 5.982198273E+02, 9.336500244E+02 - 5.983018537E+02, 9.282000122E+02 - 5.983838781E+02, 9.244500122E+02 - 5.984659006E+02, 9.337999878E+02 - 5.985479212E+02, 9.372500000E+02 - 5.986299397E+02, 9.417999878E+02 - 5.987119563E+02, 9.464500122E+02 - 5.987939710E+02, 9.348499756E+02 - 5.988759837E+02, 9.315999756E+02 - 5.989579944E+02, 9.432500000E+02 - 5.990400032E+02, 9.590000000E+02 - 5.991220099E+02, 9.627000122E+02 - 5.992040148E+02, 9.517999878E+02 - 5.992860176E+02, 9.464000244E+02 - 5.993680185E+02, 9.510999756E+02 - 5.994500175E+02, 9.492999878E+02 - 5.995320144E+02, 9.567000122E+02 - 5.996140094E+02, 9.578499756E+02 - 5.996960025E+02, 9.520499878E+02 - 5.997779935E+02, 9.585499878E+02 - 5.998599826E+02, 9.713499756E+02 - 5.999419697E+02, 9.815000000E+02 - 6.000239548E+02, 9.772500000E+02 - 6.001059380E+02, 9.688499756E+02 - 6.001879192E+02, 9.724500122E+02 - 6.002698984E+02, 9.662000122E+02 - 6.003518757E+02, 9.597500000E+02 - 6.004338510E+02, 9.637500000E+02 - 6.005158243E+02, 9.851500244E+02 - 6.005977956E+02, 9.749000244E+02 - 6.006797649E+02, 9.697500000E+02 - 6.007617323E+02, 9.684500122E+02 - 6.008436977E+02, 9.724000244E+02 - 6.009256611E+02, 9.864500122E+02 - 6.010076225E+02, 9.894500122E+02 - 6.010895819E+02, 9.867999878E+02 - 6.011715394E+02, 9.897000122E+02 - 6.012534949E+02, 9.825999756E+02 - 6.013354484E+02, 9.857000122E+02 - 6.014173999E+02, 9.848499756E+02 - 6.014993494E+02, 9.868499756E+02 - 6.015812970E+02, 9.833499756E+02 - 6.016632425E+02, 9.860999756E+02 - 6.017451861E+02, 9.904500122E+02 - 6.018271277E+02, 9.944000244E+02 - 6.019090673E+02, 9.992999878E+02 - 6.019910049E+02, 1.020250000E+03 - 6.020729405E+02, 1.015299988E+03 - 6.021548741E+02, 1.019549988E+03 - 6.022368058E+02, 1.013049988E+03 - 6.023187354E+02, 1.011650024E+03 - 6.024006631E+02, 1.017099976E+03 - 6.024825887E+02, 1.030949951E+03 - 6.025645124E+02, 1.026250000E+03 - 6.026464341E+02, 1.011650024E+03 - 6.027283538E+02, 1.015250000E+03 - 6.028102714E+02, 1.040050049E+03 - 6.028921871E+02, 1.048449951E+03 - 6.029741008E+02, 1.028900024E+03 - 6.030560125E+02, 1.019849976E+03 - 6.031379222E+02, 1.027300049E+03 - 6.032198299E+02, 1.041300049E+03 - 6.033017356E+02, 1.032949951E+03 - 6.033836393E+02, 1.005450012E+03 - 6.034655410E+02, 9.943499756E+02 - 6.035474407E+02, 1.014200012E+03 - 6.036293384E+02, 1.019500000E+03 - 6.037112341E+02, 1.036250000E+03 - 6.037931277E+02, 1.033949951E+03 - 6.038750194E+02, 1.010799988E+03 - 6.039569091E+02, 1.004950012E+03 - 6.040387968E+02, 1.013700012E+03 - 6.041206824E+02, 1.013799988E+03 - 6.042025661E+02, 1.029699951E+03 - 6.042844477E+02, 1.031550049E+03 - 6.043663273E+02, 1.017299988E+03 - 6.044482050E+02, 1.005549988E+03 - 6.045300806E+02, 1.005650024E+03 - 6.046119542E+02, 1.020650024E+03 - 6.046938258E+02, 1.042949951E+03 - 6.047756954E+02, 1.046699951E+03 - 6.048575629E+02, 1.050750000E+03 - 6.049394285E+02, 1.033949951E+03 - 6.050212920E+02, 1.031000000E+03 - 6.051031535E+02, 1.024599976E+03 - 6.051850130E+02, 1.039949951E+03 - 6.052668705E+02, 1.053750000E+03 - 6.053487260E+02, 1.050650024E+03 - 6.054305795E+02, 1.041750000E+03 - 6.055124309E+02, 1.034949951E+03 - 6.055942803E+02, 1.034699951E+03 - 6.056761277E+02, 1.034949951E+03 - 6.057579731E+02, 1.053699951E+03 - 6.058398164E+02, 1.060000000E+03 - 6.059216578E+02, 1.058150024E+03 - 6.060034971E+02, 1.054150024E+03 - 6.060853344E+02, 1.055800049E+03 - 6.061671696E+02, 1.057599976E+03 - 6.062490029E+02, 1.044400024E+03 - 6.063308341E+02, 1.055099976E+03 - 6.064126633E+02, 1.050449951E+03 - 6.064944904E+02, 1.064300049E+03 - 6.065763156E+02, 1.086849976E+03 - 6.066581387E+02, 1.109449951E+03 - 6.067399597E+02, 1.144449951E+03 - 6.068217788E+02, 1.149550049E+03 - 6.069035958E+02, 1.130750000E+03 - 6.069854108E+02, 1.135949951E+03 - 6.070672237E+02, 1.139349976E+03 - 6.071490346E+02, 1.122550049E+03 - 6.072308435E+02, 1.091949951E+03 - 6.073126504E+02, 1.098500000E+03 - 6.073944552E+02, 1.092400024E+03 - 6.074762580E+02, 1.109150024E+03 - 6.075580587E+02, 1.098800049E+03 - 6.076398574E+02, 1.096449951E+03 - 6.077216541E+02, 1.097550049E+03 - 6.078034487E+02, 1.101050049E+03 - 6.078852413E+02, 1.117400024E+03 - 6.079670319E+02, 1.134900024E+03 - 6.080488204E+02, 1.129199951E+03 - 6.081306069E+02, 1.123250000E+03 - 6.082123913E+02, 1.115349976E+03 - 6.082941737E+02, 1.117199951E+03 - 6.083759540E+02, 1.122800049E+03 - 6.084577323E+02, 1.137150024E+03 - 6.085395086E+02, 1.137500000E+03 - 6.086212828E+02, 1.161400024E+03 - 6.087030550E+02, 1.160650024E+03 - 6.087848251E+02, 1.148349976E+03 - 6.088665931E+02, 1.133650024E+03 - 6.089483592E+02, 1.141050049E+03 - 6.090301232E+02, 1.157900024E+03 - 6.091118851E+02, 1.166300049E+03 - 6.091936450E+02, 1.161000000E+03 - 6.092754028E+02, 1.161599976E+03 - 6.093571586E+02, 1.159050049E+03 - 6.094389123E+02, 1.152300049E+03 - 6.095206640E+02, 1.157199951E+03 - 6.096024136E+02, 1.158550049E+03 - 6.096841611E+02, 1.147650024E+03 - 6.097659066E+02, 1.151400024E+03 - 6.098476501E+02, 1.156800049E+03 - 6.099293915E+02, 1.160199951E+03 - 6.100111308E+02, 1.161099976E+03 - 6.100928681E+02, 1.167250000E+03 - 6.101746033E+02, 1.175500000E+03 - 6.102563365E+02, 1.174550049E+03 - 6.103380676E+02, 1.166050049E+03 - 6.104197967E+02, 1.166150024E+03 - 6.105015236E+02, 1.168050049E+03 - 6.105832486E+02, 1.167949951E+03 - 6.106649714E+02, 1.178050049E+03 - 6.107466922E+02, 1.181699951E+03 - 6.108284109E+02, 1.181650024E+03 - 6.109101276E+02, 1.180800049E+03 - 6.109918422E+02, 1.194000000E+03 - 6.110735548E+02, 1.200250000E+03 - 6.111552652E+02, 1.201349976E+03 - 6.112369736E+02, 1.221699951E+03 - 6.113186800E+02, 1.227750000E+03 - 6.114003842E+02, 1.226849976E+03 - 6.114820864E+02, 1.224099976E+03 - 6.115637866E+02, 1.236849976E+03 - 6.116454846E+02, 1.268449951E+03 - 6.117271806E+02, 1.277599976E+03 - 6.118088745E+02, 1.276050049E+03 - 6.118905664E+02, 1.278900024E+03 - 6.119722561E+02, 1.288900024E+03 - 6.120539438E+02, 1.277650024E+03 - 6.121356294E+02, 1.270849976E+03 - 6.122173130E+02, 1.270550049E+03 - 6.122989944E+02, 1.271000000E+03 - 6.123806738E+02, 1.277250000E+03 - 6.124623511E+02, 1.278199951E+03 - 6.125440264E+02, 1.264500000E+03 - 6.126256995E+02, 1.259050049E+03 - 6.127073706E+02, 1.266849976E+03 - 6.127890396E+02, 1.263250000E+03 - 6.128707065E+02, 1.272550049E+03 - 6.129523713E+02, 1.287849976E+03 - 6.130340341E+02, 1.281500000E+03 - 6.131156948E+02, 1.292650024E+03 - 6.131973533E+02, 1.312150024E+03 - 6.132790098E+02, 1.309650024E+03 - 6.133606642E+02, 1.293949951E+03 - 6.134423166E+02, 1.287400024E+03 - 6.135239668E+02, 1.284349976E+03 - 6.136056150E+02, 1.289400024E+03 - 6.136872610E+02, 1.282800049E+03 - 6.137689050E+02, 1.275000000E+03 - 6.138505469E+02, 1.260400024E+03 - 6.139321867E+02, 1.262250000E+03 - 6.140138244E+02, 1.263550049E+03 - 6.140954600E+02, 1.268099976E+03 - 6.141770935E+02, 1.276400024E+03 - 6.142587249E+02, 1.273099976E+03 - 6.143403543E+02, 1.289750000E+03 - 6.144219815E+02, 1.277900024E+03 - 6.145036067E+02, 1.284500000E+03 - 6.145852297E+02, 1.293050049E+03 - 6.146668507E+02, 1.303900024E+03 - 6.147484695E+02, 1.300550049E+03 - 6.148300863E+02, 1.317400024E+03 - 6.149117009E+02, 1.310500000E+03 - 6.149933135E+02, 1.301650024E+03 - 6.150749240E+02, 1.290650024E+03 - 6.151565323E+02, 1.299449951E+03 - 6.152381386E+02, 1.307699951E+03 - 6.153197427E+02, 1.315300049E+03 - 6.154013448E+02, 1.319550049E+03 - 6.154829447E+02, 1.312150024E+03 - 6.155645426E+02, 1.317550049E+03 - 6.156461383E+02, 1.323250000E+03 - 6.157277320E+02, 1.333449951E+03 - 6.158093235E+02, 1.344199951E+03 - 6.158909129E+02, 1.354250000E+03 - 6.159725003E+02, 1.364550049E+03 - 6.160540855E+02, 1.382900024E+03 - 6.161356686E+02, 1.392099976E+03 - 6.162172496E+02, 1.411349976E+03 - 6.162988284E+02, 1.423699951E+03 - 6.163804052E+02, 1.398449951E+03 - 6.164619799E+02, 1.404449951E+03 - 6.165435524E+02, 1.420699951E+03 - 6.166251229E+02, 1.434599976E+03 - 6.167066912E+02, 1.442300049E+03 - 6.167882574E+02, 1.449550049E+03 - 6.168698215E+02, 1.470199951E+03 - 6.169513834E+02, 1.489650024E+03 - 6.170329433E+02, 1.482250000E+03 - 6.171145011E+02, 1.479550049E+03 - 6.171960567E+02, 1.472150024E+03 - 6.172776102E+02, 1.499500000E+03 - 6.173591616E+02, 1.529099976E+03 - 6.174407108E+02, 1.539050049E+03 - 6.175222580E+02, 1.543150024E+03 - 6.176038030E+02, 1.544949951E+03 - 6.176853459E+02, 1.533750000E+03 - 6.177668867E+02, 1.555000000E+03 - 6.178484254E+02, 1.564699951E+03 - 6.179299619E+02, 1.573750000E+03 - 6.180114963E+02, 1.573099976E+03 - 6.180930286E+02, 1.582050049E+03 - 6.181745587E+02, 1.576599976E+03 - 6.182560868E+02, 1.594650024E+03 - 6.183376127E+02, 1.595400024E+03 - 6.184191365E+02, 1.579250000E+03 - 6.185006581E+02, 1.554599976E+03 - 6.185821776E+02, 1.549849976E+03 - 6.186636950E+02, 1.543449951E+03 - 6.187452103E+02, 1.536849976E+03 - 6.188267234E+02, 1.517099976E+03 - 6.189082344E+02, 1.492349976E+03 - 6.189897433E+02, 1.489650024E+03 - 6.190712500E+02, 1.500550049E+03 - 6.191527546E+02, 1.511900024E+03 - 6.192342570E+02, 1.503949951E+03 - 6.193157574E+02, 1.499750000E+03 - 6.193972556E+02, 1.493900024E+03 - 6.194787516E+02, 1.530599976E+03 - 6.195602455E+02, 1.523449951E+03 - 6.196417373E+02, 1.505849976E+03 - 6.197232269E+02, 1.498150024E+03 - 6.198047144E+02, 1.505800049E+03 - 6.198861998E+02, 1.525199951E+03 - 6.199676830E+02, 1.505150024E+03 - 6.200491641E+02, 1.472099976E+03 - 6.201306430E+02, 1.478349976E+03 - 6.202121198E+02, 1.492449951E+03 - 6.202935944E+02, 1.498099976E+03 - 6.203750669E+02, 1.509400024E+03 - 6.204565373E+02, 1.507599976E+03 - 6.205380055E+02, 1.507300049E+03 - 6.206194715E+02, 1.499250000E+03 - 6.207009355E+02, 1.499400024E+03 - 6.207823972E+02, 1.503750000E+03 - 6.208638568E+02, 1.492150024E+03 - 6.209453143E+02, 1.480250000E+03 - 6.210267696E+02, 1.497400024E+03 - 6.211082228E+02, 1.534150024E+03 - 6.211896738E+02, 1.520250000E+03 - 6.212711227E+02, 1.486750000E+03 - 6.213525694E+02, 1.468650024E+03 - 6.214340139E+02, 1.483599976E+03 - 6.215154563E+02, 1.484050049E+03 - 6.215968966E+02, 1.500849976E+03 - 6.216783347E+02, 1.512599976E+03 - 6.217597706E+02, 1.505250000E+03 - 6.218412044E+02, 1.492150024E+03 - 6.219226360E+02, 1.513849976E+03 - 6.220040655E+02, 1.516400024E+03 - 6.220854928E+02, 1.495000000E+03 - 6.221669179E+02, 1.503750000E+03 - 6.222483409E+02, 1.513949951E+03 - 6.223297618E+02, 1.525250000E+03 - 6.224111804E+02, 1.531949951E+03 - 6.224925969E+02, 1.547550049E+03 - 6.225740113E+02, 1.561949951E+03 - 6.226554234E+02, 1.556050049E+03 - 6.227368334E+02, 1.540449951E+03 - 6.228182413E+02, 1.551800049E+03 - 6.228996470E+02, 1.568800049E+03 - 6.229810505E+02, 1.549449951E+03 - 6.230624518E+02, 1.531900024E+03 - 6.231438510E+02, 1.526500000E+03 - 6.232252480E+02, 1.507849976E+03 - 6.233066429E+02, 1.508599976E+03 - 6.233880355E+02, 1.505900024E+03 - 6.234694260E+02, 1.482199951E+03 - 6.235508143E+02, 1.483199951E+03 - 6.236322005E+02, 1.486599976E+03 - 6.237135845E+02, 1.485449951E+03 - 6.237949663E+02, 1.524349976E+03 - 6.238763459E+02, 1.517699951E+03 - 6.239577234E+02, 1.495650024E+03 - 6.240390987E+02, 1.461800049E+03 - 6.241204718E+02, 1.456750000E+03 - 6.242018427E+02, 1.487849976E+03 - 6.242832115E+02, 1.491800049E+03 - 6.243645781E+02, 1.492500000E+03 - 6.244459425E+02, 1.557050049E+03 - 6.245273047E+02, 1.606400024E+03 - 6.246086647E+02, 1.600300049E+03 - 6.246900226E+02, 1.606250000E+03 - 6.247713783E+02, 1.611449951E+03 - 6.248527318E+02, 1.599599976E+03 - 6.249340831E+02, 1.577400024E+03 - 6.250154322E+02, 1.562500000E+03 - 6.250967791E+02, 1.562949951E+03 - 6.251781239E+02, 1.521400024E+03 - 6.252594665E+02, 1.529449951E+03 - 6.253408069E+02, 1.541349976E+03 - 6.254221451E+02, 1.547800049E+03 - 6.255034811E+02, 1.541550049E+03 - 6.255848149E+02, 1.537750000E+03 - 6.256661466E+02, 1.536500000E+03 - 6.257474760E+02, 1.541599976E+03 - 6.258288033E+02, 1.561500000E+03 - 6.259101283E+02, 1.602599976E+03 - 6.259914512E+02, 1.608650024E+03 - 6.260727719E+02, 1.650050049E+03 - 6.261540904E+02, 1.670750000E+03 - 6.262354067E+02, 1.668400024E+03 - 6.263167208E+02, 1.695500000E+03 - 6.263980327E+02, 1.725699951E+03 - 6.264793424E+02, 1.755849976E+03 - 6.265606499E+02, 1.818800049E+03 - 6.266419552E+02, 1.911599976E+03 - 6.267232583E+02, 2.051000000E+03 - 6.268045592E+02, 2.239449951E+03 - 6.268858580E+02, 2.453250000E+03 - 6.269671545E+02, 2.758350098E+03 - 6.270484488E+02, 3.224300049E+03 - 6.271297409E+02, 3.777050049E+03 - 6.272110308E+02, 4.367250000E+03 - 6.272923186E+02, 4.878899902E+03 - 6.273736041E+02, 5.259899902E+03 - 6.274548874E+02, 5.423049805E+03 - 6.275361685E+02, 5.415149902E+03 - 6.276174474E+02, 5.369799805E+03 - 6.276987241E+02, 5.180899902E+03 - 6.277799985E+02, 4.856899902E+03 - 6.278612708E+02, 4.622100098E+03 - 6.279425409E+02, 4.511149902E+03 - 6.280238088E+02, 4.307350098E+03 - 6.281050744E+02, 4.044649902E+03 - 6.281863378E+02, 3.910449951E+03 - 6.282675991E+02, 4.098000000E+03 - 6.283488581E+02, 4.293950195E+03 - 6.284301149E+02, 4.360850098E+03 - 6.285113695E+02, 4.467850098E+03 - 6.285926219E+02, 4.650350098E+03 - 6.286738720E+02, 5.003299805E+03 - 6.287551200E+02, 5.391899902E+03 - 6.288363657E+02, 5.669750000E+03 - 6.289176092E+02, 5.987500000E+03 - 6.289988505E+02, 6.397350098E+03 - 6.290800896E+02, 6.923350098E+03 - 6.291613265E+02, 7.472000000E+03 - 6.292425611E+02, 7.909450195E+03 - 6.293237936E+02, 8.283900391E+03 - 6.294050238E+02, 8.585849609E+03 - 6.294862518E+02, 8.935349609E+03 - 6.295674775E+02, 8.975750000E+03 - 6.296487011E+02, 8.774500000E+03 - 6.297299224E+02, 8.594900391E+03 - 6.298111415E+02, 8.458900391E+03 - 6.298923584E+02, 8.404799805E+03 - 6.299735730E+02, 8.222200195E+03 - 6.300547854E+02, 7.909149902E+03 - 6.301359956E+02, 7.470700195E+03 - 6.302172036E+02, 7.172750000E+03 - 6.302984093E+02, 7.027450195E+03 - 6.303796128E+02, 6.784799805E+03 - 6.304608141E+02, 6.484000000E+03 - 6.305420132E+02, 6.199450195E+03 - 6.306232100E+02, 5.832649902E+03 - 6.307044046E+02, 5.647299805E+03 - 6.307855969E+02, 5.517899902E+03 - 6.308667871E+02, 5.350600098E+03 - 6.309479750E+02, 5.074100098E+03 - 6.310291606E+02, 4.696950195E+03 - 6.311103440E+02, 4.395700195E+03 - 6.311915252E+02, 4.135450195E+03 - 6.312727042E+02, 3.788699951E+03 - 6.313538809E+02, 3.509899902E+03 - 6.314350554E+02, 3.411800049E+03 - 6.315162276E+02, 3.326750000E+03 - 6.315973976E+02, 3.200800049E+03 - 6.316785654E+02, 3.098699951E+03 - 6.317597309E+02, 3.021149902E+03 - 6.318408942E+02, 2.954300049E+03 - 6.319220552E+02, 2.935100098E+03 - 6.320032140E+02, 2.939350098E+03 - 6.320843706E+02, 2.985100098E+03 - 6.321655249E+02, 3.070199951E+03 - 6.322466770E+02, 3.239300049E+03 - 6.323278268E+02, 3.505750000E+03 - 6.324089744E+02, 3.759699951E+03 - 6.324901197E+02, 3.793350098E+03 - 6.325712628E+02, 3.598000000E+03 - 6.326524036E+02, 3.339500000E+03 - 6.327335422E+02, 3.083550049E+03 - 6.328146786E+02, 2.840000000E+03 - 6.328958127E+02, 2.677899902E+03 - 6.329769445E+02, 2.610949951E+03 - 6.330580741E+02, 2.654949951E+03 - 6.331392015E+02, 2.780149902E+03 - 6.332203265E+02, 3.022800049E+03 - 6.333014494E+02, 3.349300049E+03 - 6.333825700E+02, 3.676949951E+03 - 6.334636883E+02, 3.870300049E+03 - 6.335448044E+02, 3.727600098E+03 - 6.336259182E+02, 3.401399902E+03 - 6.337070297E+02, 3.082500000E+03 - 6.337881390E+02, 2.848550049E+03 - 6.338692461E+02, 2.805800049E+03 - 6.339503509E+02, 2.833500000E+03 - 6.340314534E+02, 2.933149902E+03 - 6.341125537E+02, 3.201050049E+03 - 6.341936517E+02, 3.577350098E+03 - 6.342747474E+02, 4.106350098E+03 - 6.343558409E+02, 4.683049805E+03 - 6.344369322E+02, 5.420200195E+03 - 6.345180211E+02, 6.289950195E+03 - 6.345991078E+02, 7.092799805E+03 - 6.346801922E+02, 7.728350098E+03 - 6.347612744E+02, 8.390349609E+03 - 6.348423543E+02, 9.101700195E+03 - 6.349234320E+02, 9.589799805E+03 - 6.350045073E+02, 9.790549805E+03 - 6.350855804E+02, 1.034850000E+04 - 6.351666513E+02, 1.173350000E+04 - 6.352477198E+02, 1.386829980E+04 - 6.353287861E+02, 1.614790039E+04 - 6.354098501E+02, 1.770340039E+04 - 6.354909119E+02, 1.917115039E+04 - 6.355719714E+02, 1.996765039E+04 - 6.356530286E+02, 2.033484961E+04 - 6.357340835E+02, 2.000500000E+04 - 6.358151362E+02, 1.896275000E+04 - 6.358961866E+02, 1.755240039E+04 - 6.359772347E+02, 1.623115039E+04 - 6.360582805E+02, 1.464775000E+04 - 6.361393241E+02, 1.249879980E+04 - 6.362203654E+02, 1.039959961E+04 - 6.363014044E+02, 8.790750000E+03 - 6.363824411E+02, 7.394649902E+03 - 6.364634756E+02, 6.207450195E+03 - 6.365445077E+02, 5.407299805E+03 - 6.366255376E+02, 4.864350098E+03 - 6.367065652E+02, 4.430850098E+03 - 6.367875905E+02, 4.075949951E+03 - 6.368686136E+02, 3.703199951E+03 - 6.369496344E+02, 3.434199951E+03 - 6.370306528E+02, 3.186350098E+03 - 6.371116690E+02, 2.973149902E+03 - 6.371926829E+02, 2.825750000E+03 - 6.372736945E+02, 2.733500000E+03 - 6.373547039E+02, 2.674100098E+03 - 6.374357109E+02, 2.604699951E+03 - 6.375167157E+02, 2.521100098E+03 - 6.375977182E+02, 2.443149902E+03 - 6.376787183E+02, 2.432699951E+03 - 6.377597162E+02, 2.438300049E+03 - 6.378407118E+02, 2.361149902E+03 - 6.379217051E+02, 2.276250000E+03 - 6.380026961E+02, 2.213449951E+03 - 6.380836849E+02, 2.088300049E+03 - 6.381646713E+02, 2.025750000E+03 - 6.382456554E+02, 2.012150024E+03 - 6.383266373E+02, 1.988849976E+03 - 6.384076168E+02, 1.956599976E+03 - 6.384885941E+02, 1.946400024E+03 - 6.385695690E+02, 1.914550049E+03 - 6.386505417E+02, 1.882300049E+03 - 6.387315120E+02, 1.868650024E+03 - 6.388124801E+02, 1.887650024E+03 - 6.388934459E+02, 1.899949951E+03 - 6.389744093E+02, 1.877650024E+03 - 6.390553705E+02, 1.858150024E+03 - 6.391363294E+02, 1.844500000E+03 - 6.392172859E+02, 1.855199951E+03 - 6.392982402E+02, 1.871000000E+03 - 6.393791921E+02, 1.915750000E+03 - 6.394601418E+02, 1.939800049E+03 - 6.395410891E+02, 1.945449951E+03 - 6.396220341E+02, 1.986849976E+03 - 6.397029769E+02, 2.075500000E+03 - 6.397839173E+02, 2.197399902E+03 - 6.398648554E+02, 2.276000000E+03 - 6.399457912E+02, 2.346449951E+03 - 6.400267247E+02, 2.383699951E+03 - 6.401076559E+02, 2.306899902E+03 - 6.401885848E+02, 2.179800049E+03 - 6.402695114E+02, 2.103250000E+03 - 6.403504356E+02, 2.016699951E+03 - 6.404313576E+02, 1.904949951E+03 - 6.405122772E+02, 1.860699951E+03 - 6.405931945E+02, 1.857800049E+03 - 6.406741095E+02, 1.861050049E+03 - 6.407550222E+02, 1.833449951E+03 - 6.408359326E+02, 1.831199951E+03 - 6.409168406E+02, 1.857750000E+03 - 6.409977464E+02, 1.877449951E+03 - 6.410786498E+02, 1.931199951E+03 - 6.411595509E+02, 1.980150024E+03 - 6.412404497E+02, 2.048199951E+03 - 6.413213462E+02, 2.116500000E+03 - 6.414022403E+02, 2.168199951E+03 - 6.414831322E+02, 2.232350098E+03 - 6.415640217E+02, 2.251449951E+03 - 6.416449088E+02, 2.201600098E+03 - 6.417257937E+02, 2.170550049E+03 - 6.418066762E+02, 2.112649902E+03 - 6.418875565E+02, 2.003900024E+03 - 6.419684343E+02, 1.912050049E+03 - 6.420493099E+02, 1.855849976E+03 - 6.421301831E+02, 1.854550049E+03 - 6.422110541E+02, 1.810900024E+03 - 6.422919226E+02, 1.762250000E+03 - 6.423727889E+02, 1.734949951E+03 - 6.424536528E+02, 1.736849976E+03 - 6.425345144E+02, 1.720699951E+03 - 6.426153737E+02, 1.696199951E+03 - 6.426962306E+02, 1.703300049E+03 - 6.427770852E+02, 1.725099976E+03 - 6.428579375E+02, 1.720900024E+03 - 6.429387874E+02, 1.692349976E+03 - 6.430196350E+02, 1.698800049E+03 - 6.431004803E+02, 1.696849976E+03 - 6.431813232E+02, 1.711099976E+03 - 6.432621639E+02, 1.713000000E+03 - 6.433430021E+02, 1.675000000E+03 - 6.434238380E+02, 1.700300049E+03 - 6.435046716E+02, 1.700500000E+03 - 6.435855029E+02, 1.677199951E+03 - 6.436663318E+02, 1.693150024E+03 - 6.437471584E+02, 1.688750000E+03 - 6.438279826E+02, 1.668250000E+03 - 6.439088045E+02, 1.681849976E+03 - 6.439896241E+02, 1.675699951E+03 - 6.440704413E+02, 1.686400024E+03 - 6.441512561E+02, 1.709650024E+03 - 6.442320686E+02, 1.709250000E+03 - 6.443128788E+02, 1.713800049E+03 - 6.443936867E+02, 1.710000000E+03 - 6.444744922E+02, 1.700300049E+03 - 6.445552953E+02, 1.691800049E+03 - 6.446360961E+02, 1.696150024E+03 - 6.447168945E+02, 1.713550049E+03 - 6.447976906E+02, 1.710400024E+03 - 6.448784844E+02, 1.701250000E+03 - 6.449592758E+02, 1.695550049E+03 - 6.450400648E+02, 1.696099976E+03 - 6.451208515E+02, 1.692800049E+03 - 6.452016359E+02, 1.699449951E+03 - 6.452824179E+02, 1.714750000E+03 - 6.453631975E+02, 1.714550049E+03 - 6.454439748E+02, 1.728650024E+03 - 6.455247498E+02, 1.738699951E+03 - 6.456055223E+02, 1.741099976E+03 - 6.456862926E+02, 1.729949951E+03 - 6.457670604E+02, 1.727949951E+03 - 6.458478259E+02, 1.715000000E+03 - 6.459285891E+02, 1.723250000E+03 - 6.460093499E+02, 1.716099976E+03 - 6.460901083E+02, 1.700500000E+03 - 6.461708644E+02, 1.697699951E+03 - 6.462516181E+02, 1.711650024E+03 - 6.463323695E+02, 1.712849976E+03 - 6.464131185E+02, 1.713300049E+03 - 6.464938651E+02, 1.688400024E+03 - 6.465746094E+02, 1.679400024E+03 - 6.466553513E+02, 1.711650024E+03 - 6.467360908E+02, 1.727699951E+03 - 6.468168280E+02, 1.709349976E+03 - 6.468975628E+02, 1.705300049E+03 - 6.469782953E+02, 1.690199951E+03 - 6.470590253E+02, 1.686349976E+03 - 6.471397531E+02, 1.700050049E+03 - 6.472204784E+02, 1.735050049E+03 - 6.473012014E+02, 1.718800049E+03 - 6.473819220E+02, 1.707750000E+03 - 6.474626402E+02, 1.700900024E+03 - 6.475433561E+02, 1.721849976E+03 - 6.476240696E+02, 1.738150024E+03 - 6.477047807E+02, 1.709550049E+03 - 6.477854894E+02, 1.720699951E+03 - 6.478661958E+02, 1.740099976E+03 - 6.479468998E+02, 1.715150024E+03 - 6.480276014E+02, 1.694800049E+03 - 6.481083007E+02, 1.718699951E+03 - 6.481889976E+02, 1.701000000E+03 - 6.482696921E+02, 1.704199951E+03 - 6.483503842E+02, 1.725400024E+03 - 6.484310739E+02, 1.747650024E+03 - 6.485117613E+02, 1.739300049E+03 - 6.485924463E+02, 1.749500000E+03 - 6.486731289E+02, 1.754199951E+03 - 6.487538091E+02, 1.731000000E+03 - 6.488344869E+02, 1.735500000E+03 - 6.489151624E+02, 1.734400024E+03 - 6.489958355E+02, 1.738250000E+03 - 6.490765062E+02, 1.730400024E+03 - 6.491571745E+02, 1.753849976E+03 - 6.492378404E+02, 1.771900024E+03 - 6.493185039E+02, 1.741800049E+03 - 6.493991651E+02, 1.684099976E+03 - 6.494798239E+02, 1.702949951E+03 - 6.495604802E+02, 1.740199951E+03 - 6.496411342E+02, 1.756900024E+03 - 6.497217858E+02, 1.727599976E+03 - 6.498024350E+02, 1.709400024E+03 - 6.498830819E+02, 1.713699951E+03 - 6.499637263E+02, 1.750750000E+03 - 6.500443683E+02, 1.767300049E+03 - 6.501250080E+02, 1.767800049E+03 - 6.502056452E+02, 1.756500000E+03 - 6.502862801E+02, 1.755449951E+03 - 6.503669126E+02, 1.750099976E+03 - 6.504475426E+02, 1.758750000E+03 - 6.505281703E+02, 1.766699951E+03 - 6.506087956E+02, 1.777000000E+03 - 6.506894185E+02, 1.733699951E+03 - 6.507700390E+02, 1.763199951E+03 - 6.508506571E+02, 1.765199951E+03 - 6.509312727E+02, 1.770050049E+03 - 6.510118860E+02, 1.802500000E+03 - 6.510924969E+02, 1.781000000E+03 - 6.511731054E+02, 1.769449951E+03 - 6.512537115E+02, 1.748000000E+03 - 6.513343152E+02, 1.772349976E+03 - 6.514149165E+02, 1.792349976E+03 - 6.514955154E+02, 1.804949951E+03 - 6.515761118E+02, 1.793199951E+03 - 6.516567059E+02, 1.785849976E+03 - 6.517372976E+02, 1.807949951E+03 - 6.518178868E+02, 1.816050049E+03 - 6.518984737E+02, 1.784300049E+03 - 6.519790581E+02, 1.749300049E+03 - 6.520596402E+02, 1.780050049E+03 - 6.521402198E+02, 1.800449951E+03 - 6.522207970E+02, 1.793099976E+03 - 6.523013719E+02, 1.794650024E+03 - 6.523819443E+02, 1.819099976E+03 - 6.524625142E+02, 1.818449951E+03 - 6.525430818E+02, 1.782849976E+03 - 6.526236470E+02, 1.757949951E+03 - 6.527042097E+02, 1.758500000E+03 - 6.527847701E+02, 1.777300049E+03 - 6.528653280E+02, 1.788900024E+03 - 6.529458835E+02, 1.800099976E+03 - 6.530264366E+02, 1.788650024E+03 - 6.531069873E+02, 1.807900024E+03 - 6.531875355E+02, 1.799949951E+03 - 6.532680814E+02, 1.784800049E+03 - 6.533486248E+02, 1.794250000E+03 - 6.534291658E+02, 1.808349976E+03 - 6.535097044E+02, 1.798949951E+03 - 6.535902406E+02, 1.787349976E+03 - 6.536707743E+02, 1.768500000E+03 - 6.537513056E+02, 1.781500000E+03 - 6.538318345E+02, 1.805500000E+03 - 6.539123610E+02, 1.802800049E+03 - 6.539928851E+02, 1.785199951E+03 - 6.540734067E+02, 1.785250000E+03 - 6.541539259E+02, 1.815849976E+03 - 6.542344427E+02, 1.828300049E+03 - 6.543149570E+02, 1.811599976E+03 - 6.543954689E+02, 1.787050049E+03 - 6.544759784E+02, 1.754099976E+03 - 6.545564855E+02, 1.786250000E+03 - 6.546369901E+02, 1.825050049E+03 - 6.547174923E+02, 1.808949951E+03 - 6.547979921E+02, 1.798300049E+03 - 6.548784895E+02, 1.804500000E+03 - 6.549589844E+02, 1.815650024E+03 - 6.550394769E+02, 1.794849976E+03 - 6.551199669E+02, 1.798349976E+03 - 6.552004545E+02, 1.821599976E+03 - 6.552809397E+02, 1.831199951E+03 - 6.553614225E+02, 1.808699951E+03 - 6.554419028E+02, 1.801800049E+03 - 6.555223806E+02, 1.822150024E+03 - 6.556028561E+02, 1.837650024E+03 - 6.556833291E+02, 1.827000000E+03 - 6.557637996E+02, 1.840800049E+03 - 6.558442678E+02, 1.840599976E+03 - 6.559247335E+02, 1.807349976E+03 - 6.560051967E+02, 1.781800049E+03 - 6.560856575E+02, 1.791599976E+03 - 6.561661159E+02, 1.807300049E+03 - 6.562465718E+02, 1.806900024E+03 - 6.563270253E+02, 1.806550049E+03 - 6.564074763E+02, 1.796099976E+03 - 6.564879249E+02, 1.792050049E+03 - 6.565683710E+02, 1.800900024E+03 - 6.566488147E+02, 1.808400024E+03 - 6.567292560E+02, 1.805449951E+03 - 6.568096948E+02, 1.837250000E+03 - 6.568901311E+02, 1.803699951E+03 - 6.569705651E+02, 1.813349976E+03 - 6.570509965E+02, 1.835349976E+03 - 6.571314255E+02, 1.817099976E+03 - 6.572118521E+02, 1.810000000E+03 - 6.572922762E+02, 1.836449951E+03 - 6.573726979E+02, 1.857699951E+03 - 6.574531171E+02, 1.853349976E+03 - 6.575335338E+02, 1.853699951E+03 - 6.576139481E+02, 1.881199951E+03 - 6.576943600E+02, 1.845400024E+03 - 6.577747694E+02, 1.834849976E+03 - 6.578551763E+02, 1.822349976E+03 - 6.579355808E+02, 1.824800049E+03 - 6.580159828E+02, 1.832250000E+03 - 6.580963824E+02, 1.836550049E+03 - 6.581767795E+02, 1.854300049E+03 - 6.582571741E+02, 1.879750000E+03 - 6.583375663E+02, 1.866500000E+03 - 6.584179561E+02, 1.874650024E+03 - 6.584983433E+02, 1.859699951E+03 - 6.585787281E+02, 1.875000000E+03 - 6.586591105E+02, 1.851900024E+03 - 6.587394904E+02, 1.844300049E+03 - 6.588198678E+02, 1.834900024E+03 - 6.589002428E+02, 1.848900024E+03 - 6.589806153E+02, 1.819150024E+03 - 6.590609853E+02, 1.844000000E+03 - 6.591413529E+02, 1.866500000E+03 - 6.592217180E+02, 1.856199951E+03 - 6.593020806E+02, 1.828750000E+03 - 6.593824407E+02, 1.819199951E+03 - 6.594627984E+02, 1.826849976E+03 - 6.595431537E+02, 1.803150024E+03 - 6.596235064E+02, 1.810349976E+03 - 6.597038567E+02, 1.813199951E+03 - 6.597842045E+02, 1.812650024E+03 - 6.598645499E+02, 1.825849976E+03 - 6.599448927E+02, 1.839550049E+03 - 6.600252331E+02, 1.839599976E+03 - 6.601055711E+02, 1.835699951E+03 - 6.601859065E+02, 1.852349976E+03 - 6.602662395E+02, 1.869349976E+03 - 6.603465700E+02, 1.869000000E+03 - 6.604268980E+02, 1.838900024E+03 - 6.605072236E+02, 1.844150024E+03 - 6.605875466E+02, 1.858199951E+03 - 6.606678672E+02, 1.890949951E+03 - 6.607481853E+02, 1.865000000E+03 - 6.608285010E+02, 1.850750000E+03 - 6.609088141E+02, 1.866750000E+03 - 6.609891248E+02, 1.888800049E+03 - 6.610694330E+02, 1.914500000E+03 - 6.611497387E+02, 1.905300049E+03 - 6.612300419E+02, 1.873449951E+03 - 6.613103426E+02, 1.860849976E+03 - 6.613906409E+02, 1.890699951E+03 - 6.614709367E+02, 1.916849976E+03 - 6.615512300E+02, 1.880449951E+03 - 6.616315208E+02, 1.838849976E+03 - 6.617118091E+02, 1.875000000E+03 - 6.617920949E+02, 1.889349976E+03 - 6.618723782E+02, 1.905199951E+03 diff --git a/tests/data/config_file.json b/tests/data/config_file.json deleted file mode 100644 index 9e26dfe..0000000 --- a/tests/data/config_file.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/tests/data/eln_data.yaml b/tests/data/eln_data.yaml deleted file mode 100644 index 5287015..0000000 --- a/tests/data/eln_data.yaml +++ /dev/null @@ -1,132 +0,0 @@ -# Image -#______________________ -# Not yet added metadata: -# incident power: 50-60mW -# Image of the measured Area -# System ID: 100-1100-292 -# Objective Name: Nikon 20x 20x / 0.4 -#Objective Magnification: 20 -#Image Width [µm]: 393.911 -#Image Height [µm]: 295.434 - -#Illumination: -#Reflection Light [%]: 20.58 - -# Raman Spectrum -#__________________________ -#Configuration: Raman CCD1 - -#Monochromator? -#UHTS300M: -#Grating: G1: 600 g/mm BLZ=500nm -#Center Wavelength [nm]: 596.989 -#Spectral Center [rel. 1/cm]: 2042.739 - -#CCD? -#Readout Mode: FVB (1-200) -#Output Amplifier: Conventional -#Vertical Shift Speed [µs]: 9.75 -#Horizontal Shift Speed [MHz]: 0.050 -#Preamplifier Gain: 1.00 -#Cycle Time [sec]: 1.00002 -#Sensor Temperature [°C]: -56 - -#Number Of Accumulations: 20 -#Integration Time [s]: 1.00000 - - -Data: - unit_y: counts - unit_x: nm -spectrum_data_x_unit: nm -spectrum_data_y_unit: counts -spectrum_data_x_longname: Wavelength -spectrum_data_y_longname: Raman Intensity -instrument: - scattering_configuration: z(xx)-z - incident_beam: - wavelength: - value: 532.1 - unit: nm - beam_incident: - parameter_reliability: nominal - average_power: - value: 60 - unit: mW - incident_wavelength: - value: 532.100 - unit: nm - associated_source: entry/instrument/source_532nmlaser - detector: - detector_channel_type: multichannel - count_time: - unit: s - value: 1.0 - number_of_cycles: - value: 20 - unit: counts - detector_type: CCD - device_information: - model: DU970_BV - serial_number: "6358" - detector_number: - - 1600 - - 200 - gain_setting: 1.0 - #sensor_temperatur: #move to NXsensor - # value: -56 - # unit: celsius - source_532nmlaser: - source_type: laser #DPSS - power: - value: 80 - unit: mW - device_information: - vendor: Witec - model: Alpha Raman - objective_lens: - type: objective - device_information: - vendor: Nikon - model: "Nikon 20x" - magnification: 20 - numerical_aperture: 0.4 - monochromator: - device_information: - model: UHTS300M - grating: - period: - value: 600 - unit: counts / mm - wavelength: - value: 596.989 ##Spectral Center [rel. 1/cm]: 2042.739 - unit: nm -#Sample_SiWafer: -# atom_types: Si -# chemical_formula: Si -# sample_name: Silicon Wafer -sample: - name: CD cover (probably PS or PET) - atom_types: C -user: - address: Lennestr. 5, 04318 Leipzig - affiliation: Universität Leipzig - email: ron.hildebrandt@physik.hu-berlin.de - name: Hildebrandt, Ron -experiment_description: Raman spectrum of commercial silicon wafer -experiment_type: Raman spectroscopy -raman_experiment_type: non-resonant Raman spectroscopy -filename_reference: Si-wafer-Raman-Spectrum-1.csv -filename: PS-or-PET-Raman-Spectrum-2.csv -filename_image1: 1_Export_File.png -filename_image2: 2_Export_File.png -title: Plastic from a compact disc (CD) cover -colnames: -- wavelength -- CCD_cts -sep: "," -skip: 17 -start_time: '2024-06-21T14:04:54+02:00' -definition: NXraman -definition/@url: https://github.com/FAIRmat-NFDI/nexus_definitions/blob/fairmat/contributed_definitions/NXraman.nxdl.xml # can be removed later, if the NeXus as submodule in pynxtools is updated, just in to let CICD pass. - diff --git a/tests/data/example.nxs b/tests/data/example.nxs deleted file mode 100644 index e9e379021175e1f95e4bec7b1fb1b5162d9cee88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75896 zcmeFZc{r7C*Z6%&MI#M{L~SA@^PFUn3=J}q26N_l$Pn$lubnCLtP)9s22)WQ5K1ai zB$ARyrc$BO^jp>5-~0aF$M1fh<9&X|@gDE{KKK5kk8_>#I@em~d7b;(#Tw}9Eto4X zm-zMJ1{qvLg36Ws?En=lv`F6}d{^Sxw3^RRZ#-BgfhY@?9qUg@!upH!T!IsUkQ#s4gTGJXZ&0H%@+83c~0R!BUJluj_W_w{=cOGmi^i> z4f70h_;#!Q2<8)iER~IzODrWg2~Qty7h7+8FK1@CWo&G}Bj+!>|5JnWcMh{Ttc9OH zB0}MJ&YyqGjJE5tVGU*$L1F(RXVo)crd^rw^`EN#=g)uAz#`_p^{@K+$GXk=y>3R< zwvL|m0RgP4|JAzv4kOIP`L!l&#O&Ye`>*?D@A5w_x-uL7cX8=V^xw-di~n2bZ`{81 zw=FOOD$6dI;f*k|{u5DIVRkmNB_nGm`#^gFqvM~?{J-RG-T{IBL0(wxmuMzazTmI? zz4i|NZjSbWZa&^9W0~DNX1=zkud6-9)ZWYfS1y6t`14_vvvLb`c0>_te18ru1dh|w z**n12$M<)yf4KrNhgsjq&BMo=q97N-Ota*yc7Nw%9;-c8zK?^uvtyuJursqBYn)uH zcCEd9ynP&9{e8Ub1AY7nmL6FCW?^7%rYI-3jWvIk+{ik>C&=H?c_FhM);Q31oc&S8 zYM(WKBWnj|doSXz)0qgf-tX0s{fEwF|1@i>tf=7a#cB-8E@GBv>CM~6%gx)~lUU4@ zv*wNK>WmuxHI?6=CCq%*_>HXpzJ5!Y`K)>ATBxha+3HyGFy*ZES5Z{{z18tD+_VlA^pCWvjEBZl<}=w|Op32^gtb3`}VXTSHi zkzyUzI9Yb|&-Hx*9DRI$9men@`UeDSe%?Ob(*Di?KHm1;fq&ec*(tM<7_&TUeHG*s zl%(ZUq!r}N<(1aSDXmjhl9E$cCnv`&xB6dbjJA)4McIpvNwNPm31551K#G%FfFng> zqpswiRVN5>W`UC~~1_jD^hcI`Xwak20d%yK2FE6d2 zMv<3Wr>w9}K~+XUNljf&O-fE4)hGRbv%CzmJWF4SGV%&C@&qBvl(YPvWkI&Twh7x1 zTUJD8trsi4{k>c$fldAXu=X2ojCsF43V-lde73R=cE*VB66pFTLy?)!iZ}AIj=yW- zQvUw1;`Sf=G;?*^i;IaL<=_AQW1n&K3Gxm^U8*qUta1LSXXqV>yNp|4D51*CXSMsM z9z~Yo^=H7pgB_On*LkQj>#^isR(}NR{*7GYU*s%(tp7K1O{Sc+k2B4J*ua#t){Qk! zmL0SBe`?Rb?1vfl{=5FM*WS$^eMlCgO`yMA-2f-EJ$5#N@~6aKkA%OI^9lIPU-zfK?$3kpar@V^&wq9Q`ujPIIgek@ zo-BREFfZg-_VSM#f#2Qym;d~+Uv}o)2*QAMk@RnBvg|*fby4(h%Ka6G8ULoh|Ift# z589O}Q+2GXhTqBmu3i1UhhW;(ue*uA?CR^EUjDmw_3!TeiRwS?y8Z$B*8l!{OV@_K zm-Bd)^Aa+tVEjVi^a%2B^bF6;EGn$Kv`S7pn+gifnIA`xiFI0)nK@L@E?gI)eV7WS z$3oRdk+r4YzGNPuLX`f)D($0GD4H4y8AZyQs;g$@Qen=q!3phSRM5-3Up9(-x|rQN zD~}3~G<+p>@~I#)B-1~Nd{8WZEbBNG+CCq&(kY>(eQw z!okt&31i5PSYNg55-KpXT>ErNsgSau@X#3Y>&I0}*=1Cy|1j9CQ%;4xpzriCr1MEb z$?S_%&>!n+(Yb_r+EyGehFo>~HeYrH6+}mPuIW@#VSjq%?lGi-<&mFRmr-AG4f#4( zs8C(GN_z~Mc(c7XtBMMBA=eM+T&04U!5g75`kE#t-dr&O5kys~2u z`M6_4TS_+-1bN@EPFKh1yhM(~nwiFrpgm<&UQroEeOB#W@e;W)R)ah=hJHHBcu@H*_Ahf}b1#zD zcg=;kcbIPazEF9b3NIX|eO@4~cr{vM-%~*`s9aX*0~NeRy%L`z7Z;k2#(bm#PhhyA z;so0H_|ua;NbQ4>Y%!Cl|J&BP6sB-}F1l4dLyl}Kzgj?D*qYh`{8{}HJw;xYT)}tnE83muPj}gG*xt1{)m_NW_14^s?`Z$-J@zs` z(9TLvm3JZoRdZ&LKXH5=4@{&98njl(=08EEUT7PmvC-g)N%6Y1GiabwP!rXGl+WXM zL}jM|!yrmfY9bM#~2-q|Q;e26{quxvj{> z`CEFz7SKTZ!8}2+g*14!VRFXVW1e3o*xAXle!8ip*QLD}72 zQe-g=PU$YbaUV%|giQu7p+Sx2GHKzZH0YN2=6Db3V9t3sh=&FiwVDrB^3vd>?q&A7 zNSh!R)j&QPguMp$75p^#?6c?S9pp>(lg<9iXdqK6@8d(}zN^upZ!S2s{VX*|tSDD*hN4}cg7qM581`UgE9p+v`gE>zO zE?-4n)MsyVlA^(#&#%W8u0?%YvT;@+SK65hJ4(~Q_3VB11u`_?Jsx3l87b3g*;0qwhJCP(N8_ zGs=(m?TcU+NEJrVb_R z%mx}b{){?oszrkgSJB*WNQK2C$4&ta)_r@LXRJ+w)2VFv)5ws=d-4i(XmD-xNv_dG ztXCR+nawT#@XPlM++wEYuEmnzS| zV+J%ZZ%FhoFhsqD588h~x^nEYI=Yz#Nm?9R^|sJJSfa7bemI)1R9NB$g2-*JF1TscA-o8HdWf29Y1)8!c1J(a$uNXlYpBx~z#=J%E(kv3fz0B@J%h8T+7S zMT6S@ktcmfG3_PS@mA&kgIk1rTlL6uX!pp-N+EW=SL3i!Ty{|_Q~3!U%oFg?Ls zmj;~nqVD{DG}vAhB2$NCGo5;ND;wG-k#raPOl**KOT*Rmk1<1kO2z&|oXKz}^L+XrCE6l*`C~cTrt- zVKgY5WJ{eJj_cW)ZFmW3K4MMm*-wM}dODRH5$IQa<{o9p*=FR*osrl+d-tQ62Waqd zV&}nPWXjdgD%MmQq_4d{$VS6?1YFBHhkToGThD@yaoU1&@&|Hi+_~TkNduwgQ6p0Z z>LDU&`YZCf_s)|i527FE8*kqpMFWn-KA%4$&8&;^3!>4_U(7ey8bbq>b@6W}k@p@e zrRT*W%Vw(^#?e62VdB{bq=4Bx>d`~!XN)Z(dhys#-0Avv$c?RQopKUr@N~GDePbdG zdNySjj3P~fA|W#g?RFrcM=O~I;Tg9>hmdLl%X!jLXkhyyyJUST4ZegZ7`{gSFr9pv zltzOv+%9ijuaZfFoTQ4@7f9tZ`cAP~*nh_4ltMNQ z>Md(xo*_>+)GUk2p#l4mmLl21f9BDJ{K4tkNI!z{M`^%(?NJ(3DMh|~jMNAMuLHR> zkd0gMS>hP#Ie?%32ik!?vorbX=3^4Cr|qX9w39p_8t#8j{c#&R9vKh2H#wJ z&fPMrouI)MmHP4(g*3?0A5*%6G?!Ma^gD_1!mL1L`6=8ljHD|YkgJ5+mAp@5 z`?ZbGU!D45o6Qr-9b8 zn7LPxYK0~=#|tzl%98vvznBJ5_ttn;BAc}=dTmQ+kSLgFHm4Nlt3H0K9BC!xt-7m> z27BLgoS9WlgTX^L_)3s%dyht0U&Qv##!j$ZLOYYmw?Bv69QCN#yaM%CPEr4X6ulI8 z;&dhY%cRf(lgl)y&Z`NUMk>U`^_;ju1Aaq4-ECF4-#!aCJB8HlWN_tQrNKVx{Q$#j z=x-?^Pd*@ZgVWWIUZ+8atjLi~H}ISy+4c1;(jflW&g^PjkNN{wwQFcVTNlSag4`-_ zA}GBU7{x-+M(=_`YWViaAit-1C~q4d!u{{ z$OP- zsCRK5X3i~=_b^@=SqZiwT~|1}?Z1!bn7YIYv1YVajdtPz@_?YkmXH=2EZJ}}UHAd+ z2Y2Lp?jmzncZvqK;(om2h=(d zA^x`-by?#z3Ava65@Ffj~x_kC)>!ZP3QXydqndx47 zHSZOkuZ&~|4f=6^2zavi1Co`;FUTD3c z0m&CJYX~X7vwThJ5cd0md%MOk#^HMr{{6@y%9r$n5%kZ^$(1Uj=wAjKpS(a`E1vl& zW(?OSqMb+KE&5S>vtl>0G`rE5@eb4d!=BRPs4r=*m=5IC%3TEq-qT>m`g7MLKHxq# zV^#Y@`v8+-Yhks3$x)&@_~AZ=q9tenC)Xzpls2YFK6)!FY8 z4eX-Bg9ScgzGiMzJyPw?(+tlqSRWP2Gfjh0URqf-azgLZ4VSNY?%NXE#QhEHU6E|B zLf%X0>~Z)`gOYn0ujl=s!OZ90Z!aMqSzAu-{)y-9GdsS{Cg^b2)`KWTem!t#<_bOo{(*kq%Wq!Zi9zQrIyekWB219ZAdNs$-(_g>EMvF zs#T1K4nNH7F1H{T?>m>fj~C}ZV-`u_qeHGkm`f8vSB?>q(Qa50wtfM+=!4vj-`HS)34@^}|PI%Gd!cjFeKLwonMZWS`dn4mbUpu@GB zv!~~-#PM@Twp~OC9qr;sY5dvFR)1jbLZfFAew)CMd-)%&*H}x3h~*sY{m7-uHSfer z(?Nu!#VgC8UTa=%e~vsGue>-~7UeQ0+hpbFutaTDdMA>xp}>qLkK?)^yLgQP9a`o9LWd3|++~7WH{$$6t#3{sALTD_&ef$u&cTNqdYkC*VsB>ATV$c` zuFY9`bm)td8`jdteDx)#-9=&=9un|gIa)MMa~Z6DHbYJTLxw9lOCenxw_BHnf#kbSp^}Tte50L$^ zLnp)-<>jZ_C?;t4luwRL$VXG=AN@?}(Aad5CSXPf#aY5!^~hyKM~`@z<9vGNi7&OF zgKJo9*>z;Y0Uix!OFHD!3hEbF{fY~6TPl$)ukSzHV@(I)&F)qlJLoXV!~3iRsp(%~ zYi&aZ;)HJ>u@mRxw9=^vIWO^9zsW8-Y`t{YX&O0eqsyy;-RQ3^O7>g!&|%7g{rN}a zYQ5eaM{RMP6sp^G?Xa9+uF)9sf>&H)hCLmgZuijI;DB*uwrk~UWZpL1K^?K*@0Q0^ zop8RIhCIE@@9c&H_e3(W<`;k*SONbmOt;xBjh;W zMX_)R3@s_FY8Jq+VoV!OO%I34c!tR)AK=c`iN6858B(nm#9 zBIxj;!`$yV(&}t!byOrBlwS+XlRbd*D-W@Jf(#z)&p$xLIDcMuSe%CO?P<9}D{^Vh z(y$OZ#$U62wG@&L=JUE|H6ayiv^M)OFwXm&Ojvf14&H+ETW=!o-U?Xc9);`pv&Cd_ zG{)}&wUn#Kq4tai4l#7t=*zZXUM$9sqjrWELxI*%%h(x*>oX)=!+wYk*XJ@mpF`$d z?~*f*M?37$bp3|xp=BH^Oh7x5eA~7)kq#@G^*JYz47Lo7+$1_U9vk=Cl#KE4o>tx% z^894dgNzh9a0$Nrp_xjD&yU2UUn6ZkgxDme(SP52sif2Kx#>&Ub7bZroo7)Q7^iMU z&XUcf!`SpS=_g2Q>1p!=S!mzmQsLs+7)ML?yE%7| zk>&hSzDMW~5~I9@|0o^a+nBl6B8MdXV_b7F{!gZyU~=;2739;Rs%Lh2IKR}J zQ=IvzhmgBmWk@@lcJUp@=`eWz;Rdz>9FIn;c@Z*Hqt4Cb1RV~lRz!S3a?2GZA1}mx zxGK58@FX2BKk~Tv9(mi`qCV#o+QnDVN7|=xedn_G4j~tvZ68fJLkIb%IiJ;wFka5K zWA8&w)h}BRcNXL7uXE2iI@Bm83q3`;g=vY>&!e4~^hvI{fO-&%l6i!Tj1^J{D@J=9 zu22#w!MNY8t#TK+x~WCQzZC6Wf4ho686CvxT9xXM?#-JN+{@{pi02K$W5xGpW9J{KYTauvo*uHgA3 z)vWgmQt=)A(eWxeob=7EH@u4b{oCS;?~$|IZWrWS!+M+z$=cU(yeH}+hLFGXmvVy+ zY@bh?t5>6amL+a@iOiUG6_2gKb!}JSlCPzM#<^Kjok+9Ace<%JaUJJG)=Jc&J^fHB zY(;MWX0$JTVbLk%*cr-XZVTGU;U%{=J-~P_G@Ukv^pkTI$x22${r7#7)MJbjsuJhgkV|Y+eZo6X z-{g0NRZnpKYP%-yA}u3|EB!m^AZj)dEYL-VeO1ybbx7kS)F*j89Dihc)}r9(Hdq7(jle#!bWzV7yVj zo2T>|^|x@`@EOwY74JuK5YMGOtBy#$p+mKcs7@QQn9lzuYzX&X86rVsm<}u5yXEd8 z^Ht8a`Hf({xNXp~QH&c!9K1J?yRMz6a2-Sa?p8GCeoF@lv7+~vk?n6*CfdHk{rus6 zNse)hhlb7d#Ymn(_T856>Cj8nnEZ}Z(b^Gz@&oEO(OqQQM?812Ib5DV?)9_Ta&!Xi zYL@!*jguG`s=xb;Aom2;6KPX)@HFyCUiXO(MAgETeMn)0^z*Tw(O+B^sLOvrJ@AD! zbRth%KQ*FG<2m65rBnPX9nM{}v3r30)*Ln%{0+w$lIXSKJNoaXj1RYvf=kI@uOD=X zpXu~v=}+7j52}S^eQWI?KBxG17 z_!J=xqx*)8XOa;2Ovv#w(ztGGcit?lci-Mre>Mq>uerXNhuKPVN$6|)6x5A8P#(}vpGU$8;a4VW=96Gnp;rA6nd}uP z8M*+|l_%0D3rRSdbo*N)(l6nGlMfdO?IqRsc)3Zq?r>bb8Y#EVJ=1v+2~q{Cr{^yw z;i62_u1m<;EwiA4&&cP+@f1yu z>+_Ldb!=+$J7ndm*C#UhNjPI){8e)q2^2YZ(*dMV(y}x00wfflI{r;@ISIFngp9k9 z4$<)ibU_l*LfSt{3ZdSnxpW^QGEj~*v?tfth?4Mq>kV%&DHCR8H= z^pY4N<;bnlgu)J85;}MK0I`XL&pMa4okkWK4eT(|!+Au0ahgOHxxDs1s!zh#-rM^& z8lWB{6Ala`w>(}Om10Q3X5;chYMV)T{7xwO1#&{)AuVbP3E6UoGo-hY(E9LfW;-$? z>v(4PHWFUbA~QscNWk4MtqG}Y-IL_I9qm`w_7I;j3DxF}2dk0Kgg6g4n~*@=w|?Jz zQ(U)LL+^{o@Y?lGHfAI|D&gG0W{&nJ)KBQ zoM(^rbgajt9J$?emcb4O^ouo1RuPUQtQY6_ehL}?tnKkOClY)%hhCUKb{Z^Z9C0S0 zJ1uyJ&R!Bc*l$V?A)~Y26Ui>6qS9)R`p;r0bMviM&uk-T4d0aa(W2rX@>^8PdSCOwvzb4xIkYKqs z(u~uWgdKKWyd}u-tqZy={II<};)lN>>(j(-PWY3sfcGQ+<^YVB*9$wwk@_*~)3O3_ zJo$M>8-hq^dG>~L0NJm}Uw0^&ghVS!n8H31?n|=CcOj2ny88M+2no}UHb+*6k}!Pl zkx?_!)mok{FbwsC7i0qAIDT0Vhnq;70kcJ}`$TpLY3g>@!zVjpGXTKyOG#cahqv69VW3b(k z6-u{}yprnoJ!8>sR<3ni5{LEiTv&y)P(GSqcL>+pVwo^UJP8%jJ{K<_udg|$Yo0*D zuE6s4X=H3)p5yUE+?R5#-|Hu#AMXDY@fLY#sn48@Wb}XMnlz0R9EbNC!9L_A+2O*N zRGe>7gOqF<38l~Wl|4qzzr(JwKOObz;aVkDSHz*mU={58Jx2J&Dt!RK_61pfw`{c}&D z{yC_nz40wG|PX z=dgbJ*C(%#S8o)`$DJo(&OOCAxeFw`7fpQGf%HM!6KgSU)?%uAY&uOriS+(jMBNf3+m@t<=M_l=lsH6=(km^sh#62^JmD2s1M zRkoMM3Mw#O&E*(0s3f6IZHde~r0d1ufQ-u|oDNI4qHzV|)HLU}m&lh2yEnvCq5f9I z9gw+-`n9Lmv?DXE%zlJj!~Om6I}PFM7+*4+LK>0jhUFK%ZlE1*zBjg{8qX2zH&$Oo zc5{a9v8%!TzL6_qb}hzd&B(jwkxpz^ewg0G{VC$E{1@aby)%w^b-3P*d(t=6qn5b%QZfvG+=*k?N+MYLVpjn-SQkcqgo}Hahrr|MqPPp8u1*qR{u^ba`I-vyWl%G zUhWG#LQS}DYsIarN6M#d+v9c@*HQ5qmFpe}+bAjp70BziT%+JdtFOuR3dhS{u26y8ZTocf&VG!`0o}{k21t0> zx2>;nU0#=rd_ZdFjC5rWlAyJA;P!?$xc}|DT;7lT&SjAsH-zzf;zpF*FrJ@Me|mQy zdAWaD>>t7NtKJh0kx|rhQyAqAGEMp!yZ0EL9}Ib4FL{e`ynK0M6*ACu^px#85^~*R z4$d0KbrAdRa1ME;R#wa8J?iU>w7@5%hT+VKqaV<|?q=WD`G|gm?)e58wL(5Dae{=< z_e$H9CUGA*IVJKGsk|s<^1u}Ct4&k4#XjLY9R;%PA&n|{_xgP%;kns!MZPa+XKjwe z4dkP_b@v>m(Oy?Q&*1!u@nhoAo?>L<$%CuSzmf3e1pC+*WQ~nYdER&I|ATk%rXM7T zcNnRUAnRsNPbdFGeUrY|R0sy#-c}y=3@PJOqef?AfI?%|r1%U5Jf164){LCbk?Rq_ z&Vc?`O`^+YGQe^{-Lq<>19>pbX%+)G^_CjWoy`CP3-9kGNXbo6r4}3v$Q=uI_=+qK z7F%+hlL7Wy^Xl~GFyO3rzwanAp=UxUbuI%IN!K^2&SQXtvU^|;vRCMV5ILU#>VxlZ zNi1N1nA@0V3$pCqsl|Z{8SwD6+T~?j49E!%x2Zu+RA+v3;%30RL7&{Yix?2uB&=DA ztXRqDwph%712Q!sUy(yXSC$@M!hp9s_Lt}_Wk7u2Ji}4s{Vh9QrtmP}B%6PTDlY?; z&9q$DgOncpR6yrrKsT?miUdCcR;A_MX-3W;Pumf&i~+H;9EbP?7;qt}Z(lXiW3Tiq zr{xT&kKLFuM-cn}A}Uyd)Zg52(p-oEfrBzK(?}g>tBSl83@DP_qOoZu1J3EqtsO>g z+Yr4mnZkf%-nv`L!VG+`=#E}Da^QT37KPW@bRc5 z1N{1oopjcqem3&84}Spg z>pMt0t(CQ2ve>@G+|^6u7|^u!V%!y^YqI#;-SP}LeQAd=y8;7fVpe5mkY9rrFEUbO z0B_MDpO46U;;r|yl^7r#{YYYiG6VPIJ>%@ZZRQ=Tk3FGQdQ-v2_Z0Vu1Uv zF9^LE5LVQgeHtkhJ4$Z#!EqT@d%Z{EYcrOazNpu9s-}h?12)G+uIfduom|U#(4PUt zkTW6~z<@`d_028F%+Pbi0f7vd@pWS&e-Hx}?mp~!19>g4*w7)E0dwl9VjTMz@WY0k zIFC$k+t_6sg7s^a$|jMeiLas$hcZA`(|EU57z4K750mdl^0r#cj15QsFnIY`dOrga z7pR?jgxsL76|^sc0r=XDj$kCN!+0pyO(ezc!c*r17&mlN3g=QWe&LG(CCG;2R3&p7 z1IF$YOn*jRuJ^6UrDOcZ3t%0R0qaSrO@qiueg4_;3sj!9MKlA1atbcjBTIHa^>vLwdz;ZJu^<-LBZhoYhLk4<(=Fo|V6t;$Ou%&3)~gDM=ohok?|p)#ST-%%pTq#%UawJ- z(T{6HoNgi8I`_&t^ap&+!Q19JC8n-leyZ z^IJ5E+z(^?=vt)7bp+$yt&#l`|;k<@o&gv!Mp>pDPGY>~O*8n0%4F(-I*t3$?u}Q6kjv?> z6cW$ic$O=jRVc!FN-9&HApOt3P7goJfG1p*oRo8TJ{SxNYd~fz>5aIaXTZnF+cpa> z;JzjG`A!+~ct@AAWibOjOnMxjMiOvh+igqzTH^Yw??H)_f6lSj_s6DSvSG?3B zdT)#`nVtv4_=u`~-7+AO>!`cxMS!40oSt)10@M2xRik9^M`D+`0~8g2@Qs~yXq7TP z2bx}UT%ra<=hOOcGc*>E8%81)}$;XqLPg5Qnm?>_?G#;Z6j)t($?Fr zhS>n2yS`{pX(tfu;U=@*A$iNJmlW*+Vr}q)MUK0H5REuY2<^f0d+xsIKQ~`n4w@&W`qIBt=#WP)i=ou2SvO_*eUY&j&d7cPu z;&;XV?x&n3L@h8EDnC2T^p&{*t^LusJBo-N=w#RP34XFJq{am!&f%@2_d2cTA z(v0vuU)+HZln6Jn@Br$K@J5v~WRt8b-vUn{>V8;`yLtlE!|cS(222MBsvV+u0daDs z^tS!T+uJ-jI*~nZ=U-Ly27=9#%{d7f``(0e#2cs^H9w!w!#m4t-AUB~AE2h~wQl(C z127&QRk+p{s4BOXI@6GT2LM(4=;zhL zC|`K~W(Hp%)YebjBsK*CjK2Ni;vWc9#ZzAQ@=)&mbD30gAP{o`enw3rtwUG55Dx;# z5)4W;JcC&oxvVA~x30CRW+lLN&D{MyKKBzq*_fzcnJ|GgR8#lFJ zTGi^I{Z~w%^%KPZ`wQSPqbSh=navTJM-KtQ<$L1!5=`%|@2_|k0#vCX+O;{MK)r13 zctZs_cWJ^k$4~&Nu+J6Ap+Icpzi|Errnedu<_#ld&I}~-g#nd)k#`vWc#8Vyho*yH z7(mjXh2AmbGVRLM_rh@8G+Xx1VL(KlvUnyM4%E|2Q_D=k0e0QxCnLjw;J!6xd@dYn z&%Ix;yc6Y=4Z$yG?gzLdBU329A8NO*k#*d&ABe__)D?$NE?l*;Zjqc5*N^f8 z2X)siihx?J>n*P}BY@bVb0*0>0;sz=T9mR-E*GcYQ6B+tQF&qDIHql*B^L@s0`QKc z78*tZv82aDH5e&z*Y9;~ATFCW9Svw~dTCH%b?S7_Q?{CyY2j7wA=f8Ru8%k){`?|Z1mCig=Y z(14iX+n=)vfA{dIeod7+{;tG7Dz9TZzW;cBT<3!`zQ30qv1I;!8c^Crmx!ifx#*QT z>+n5Z%E+5zM%6T^T@@l_kMD8X$E^X|7(34Bk$WYc&8FMh8W>bgE>Egitt zyQ)Bk4wSc#oX=Wgnm>MHsW-kSa`chuB?huwB(?G|9f&4B_RFPMj{JP8;x>NI>8Kc9 zj^EExE&1pd@Ow!rxA4_doOsXJL5Lq)f%o3?uh*w3A!VvFqBoOJd-6_Bs2!%|m$teE zlR!yGUuPYU-y{5>b?Fx1{UW=~Ia$14>uuvI=f`^`yOqMDKk)4>2A&EK2O)o_Ajc5TL9pv7^Qe$Qj)`(mwGRS8yU=A| zg*>V;z~yxidauo1^O%mj&{3G3eGp*2*$$gxEU$i1U!Va=+2`Hah4OtJ&FSy39#5^y z_E}L-yZXBt=kh23`(eErIZSIDjt|ts^hntPiCs}Z#JS$>@dk)fF$yT>1nd}dqM`PY-Y4;u(a=k7z1yS| zjq%^1%WZQs`cd#|PCHD`Gb=6(iUzw2hXb_^MFZt?%f8Nh%=hW8@~Mo*eKtBz?bE#vc=+{R{Y82^tw2p7Jpl? z%NXTg?|RJ{nR|qDSvYc-Iue*12ZZVAr4LSG+OwZ3ek~5{TACFjTTxC|U(+@a2b8%B z_OAYl?fi@w+{b+gdOzGOZWKENwH^zv^Jp9b>QFY9gE6u%v*^4t${RG}Cc`j2Sy#3` z8M))a3i`=I06%&k-MV@R@}0F?Ia*P!dwPk%0G3}nbu4Q75KzJ^eCxU5f7x~X57Bs_ z8r6)eu8RjsA^%aI?I?fklzh@D9(o14n!7?#uJqk>eo{QtI@zt#EQ|-c!#x_FRaow> z<*}R=w0^0Q# zx1f26P`fye7EMWn{Iw(fS;~pfJN7l>)aFEtM|x=&Z4-gIyy$s#U?RW)>ySIKn67!g zr}Y@tTP={@aS_Y6Y~b&{gVcU9)YF6Q7~h=x;sf$hbm()ABy5jE?U`T_PzLVncFHF~ ze$&O{kMxjX<3{&(CV`#A!Yy^a$e5w5%LkKyI=w*Y++oarWhI)RwCj&c4dVoL_1Agy}E{A8#t+Js;47{4jcM-9Yu`j*_0 z$Yk&(ySG}#Vm~`tR@bIs`IDMblE;$4PAb$sBe4BLIYb71^6@}1Rsv-em(x3c=uSImD`?ZGoU1t2tTV-R-=aNkwX zYZt(D`iVdVu@q?K6KzS7O~LUtn~thudUHIxfo=*Ix1V}ZV3Y#m!zzQ{tg$?srGTYl z3Q)A(g%*2Z`S_5TvqMsVda?N0E;^=PpUo?eN7}tA=EzC`JL=MroyW1i#ZhJ@=dfKD zlQ(RY*xrMrBC}dd*Ggp<-o^U-N6RPLv7E!v>5VV2pOQeI)S(o7|6;?U-j69js4wna z`vc|YpFRuWOa(h0uGtNXQ=wMMefL74RN&TE>a!9@d2CdAzI-Y^KNJPL(LjC@r_1W0 z+_dOMkZ~%EEAfe6vq^>4^KsQboiIH$%Gl_WivCm?5*3Q+&#i~=keL5TbaYN)D)iE& zJT_;i0yQ>wSzJLXB!8)&x^o`;`#Q+RaT(J~>(=Yu#QG)oPEzlsLjJrP8?Hab@+L24 ze|mxa_Jx0!8%_n|%*~?i6Ug1SLJNLiKTRioc5$XbFPq&Z?j>npyt*%2PbdxVR~HwD zi>Cp_(EUS+Jo4nDy{|OVfcnyL9+=R>Kms)X@lcHh)o)B-)3K4?WmpJ z$apzEj?gr)yZE+8iA;l5FZyHq1Z>xA=8uFdtoJ$Is_J+eo`;qCUY)~oHMc1}lB(8@NdxBMcOpOGjecLUo^xh< z1L@GKT3{Xj4jJ6)eDn*pS0Z-i9D4@zelZuix*!8!TX$n4Uj{zks-0>V&H@=C81 z%IO6^N0c)_Zr1tmDJ{$o8*S@dt&wzYU zu1eAU8NhwNwooz(>kk}klupio+L2C*{NW5pcJwJ$EX)9kOTE8xF}8C*&O_x&22hs; z9#*N#0Auc~pUU?$pmhfvR_e%r(pRP)3cXm)Yq`JdFt*cCRxCAv>Bpai#eZPGn>FtV zb7tZ`m34Oc;!L2XzNuX*m_#}P`lG(Gl9ENAexbu ziTA@>+yZhl!B@0~v_FmYZR;Kzm0@{aFI$ak*iL-Du=uTC^>A1ZGV%R~f^FYAaeQfR zR|fhrAzzGP(=wU~rKLxeE2l7Dip?;W$O2>Q)C_WN7UXk2Ugowm3rgh!o@`r@1-(;O zo8=|4fYKWOeW?P>WJmM^6pr9 zWkK@SO)<**vS7Sbj=q?N>4||$Z{xB69xM>Kn~v>se!5e549h>iQWSXx`;T*Puqw}j zTAfwP&|f8M%K0XJ%51Z8s7z7>cV=i=P$;-$^z=(xwU)7aQsG^z4D*1|K}ym zGug7CHTdjQ$J}h--nif9%+hQCi}hbZR%Ao%HMTYbiEK!IyL^yOAsZ-?@~W>juzYiJ z-NjAWkpIjimbxA5nI1Z{bw@T3;^s|!j+k#;uhZw54dZDNpUwqieSOI{fz)igSK#5% zj6?Z*jfk1)D6iKMxtE)b=l}81U?D%=sClLO;!_cy*+oC8!P z@9#$hbHMjP_Xn%hIY5z$#P45n@VW0)Rpc^y?foUe6o?DU?7&`d+7c!A_tNm&uBUrodc~#TlT7_sZbbuERjNJ^SQ!{=<;(5jE~4au`5RIc)yg z!?;iG)4iySWPAF*+WQi)8n^E8Q>G9?C_?5WgpeUEa|oG3SEWIbN`(xUWC~F-HFv6W z>U260iKNIpg~&W+xP%aj4DnxQ@AY18zw5g9yI=q3`mXnRYQ1akwbxpE?fve(_IQR* zGz~?+z;p9QGlcz`HjNz}ihjwe zZ!GH0-Em<6l10lstdXv${R|anjL$w46ySmIiB_r3LJVK%laR0+;WseO-#qDe2s2&A*PY zbY%Lc`(Y61+Ii5jXQ)R}`+906VR&A#q23yma6E^y>gO8O!*Tq3sX>5dIONIB7u9MK z4#^$r*AHwH4uw0q%&*lc9CB){XtAzmIA|2ytff969Ou(6z^dWl5Ga1Xv(f~NKT$Aq zi4BJL&z$kWIUKSIJ}KsShJ#Ow;av(BVtB{5rA{lt!6HSw#+`t0FdTK*#xexMQ_j9U z6NBNy&R!azKzSLH-tI{a2lsVHZ9447cniH6F~^b5x=kN7&!e2R_q(pVj(Uzt*j{oU z=?>5Lbbf~6@}&7!-(WsIZa!+J5`p_nPh0M;76I$0L1{*+=JDM}XnF1Dbc7 zkX}4cKG*}{_07wZ7DRwXpP{lk%Ok*IQL)C{brCq9+y20{EeH>-+-(w#={koLN6C@? zz?*q0JCSc%_d!!LQO-}#Ee{?=Jbgz>vmC?+X^r!_ig-|w$*sGHpR{uAReFS0nw~jKbj?F@3}Biy|T-aowlExPrJyFbq2E)iW98KRtDGb1P;h1jPr0abqAe6tIv)CpIL^}>x?RSoX!hXxve)Na}!@41ACJUo* ze&pPl`O7iyXcq0lka1V7fE$_c}(SypxA7PM4!T$6e}5Q!sw?&hT3qn9lu` zdxN7{+AXXR$M{7J}udic?b166_fhvF@`s8Ua@Ua6zFcyjQpt-;p|oi z%_@i?IJ4&DyH&)X;n5*i(?GLU}z{QH0~tEdqHBWob4(G-4muq?0aJTww7(*^+A|u z)g_?67@T58-fv-sa#E}GPBRxnPG)Wo^HE~RGM;zq_BfQ=S5@D05<>e%I+d-(V0`Ax z&R{z+xa%(~(svSrO~~qN87@elQqgI|EY!Q>{jl4!QJ*@`=D5#CIWrC3iWZB(C*)bP z^-D3m$J-aWeu%41a8C9YL-Nt_D^1swPPv5+>d%743kNHUs?L#|7cX>795Ynfo zJi2-e=^N}?X`hY!_76DyEC=Q9aZdNXh~ZT`j#RxShQKxN*Q~iEhLXt(-8Ju_{TA%~ z5dKgM`40~owkp8<6{23_wgnm$W4_l8%h>xC?Ui5@*zY5TKW?CYLNyxF`hV&; zvPv}09~Hg7P(2#*>ZrO;(uf8#mrnk-HKU& zP}n*e#4Y@bJ=-Clf|LqxI!1$D)&A-8jH1D?%0sOW#?g?!XsYfalW2hAsX3qeMnmDy zmwHPEMT4bvLw(g@(O|6cORn!ol-t9qb%n8*ZuhEYOD&_p+ji~|)t{n4rqQvEuPw?8 zORu8hi1@`8af_!%!|_#GPfJ~qU+kot3p}Gi>;9HGZ|9=k+Sk(NEQ|&}-LtW;d=O7E zHg;bgjefn;?1EL8KJV~kr*+W~e0#@}dqJ2!b6HF4EzxkLvAFWJuxRi(STks>80ltS zJ9X|Lw zuX7mbFImCHH>%hlqysCScMk>*FV`wtAzm{C(+^Fp{dRZ^7;40}cN`r9TE_K?&X13Q;QHn}ZZiGeH_6=^vu29g7=XdIf2>0wQW_VZD{{#tJ~ zFGBupR!tWzjR8Hk@Kw$$QEpJ&nDc9pUTgdDo`I;(tEP`)HpYNPrV(fPIw;2K|bWpIMExn75e!n)2tW zA5kCI&AC%mW5Fryy4}IbvCuN*Y*e%Av0yN)qn}T$SSUGFq4Djyv9Pmo>`x|IvA7;{ za%h-NEU4+~-7nEay6L+5<6Ff-aIumH31$VQeXY0&k;eMl5FY_&s&xsGw{l=j_ zq02soO^gNg+#^+re~JaMYKwitr^dp72IkG;9Aj~v<%QwL>9Js$b^7Tzw^*oHCul;F zC(7{>yH@m$g@R)vJ5OGS>4PW7Zuf}=@9PZ@R9TMsQ5oX@)2dhqY_Yjw%Gy}SpHp35 zEhrYo8t(XDwHfp6yJ6w>&{&X((-JC0#lnR>`pYK9BKde+xYOiWIS6^5bmbSLIV(&gowv{-O4F}gV<6YX@U;heAosL$y>83jjTp|{H9WRsJaeqYnk z>&{^Q7MMieI*<9-=^EMLGTO0w^&yL{$3phB)6u7IqaE7Rkm=lyg|z+4tY+k+J=^&2 z+f#u0`rkZLs91CXkj+ex|jfFzXmURnDW8rwQ$@Si<5=iryGip_32^_zD zY4*ix5-=#LW!9{g1k60HW6vxBiQ3~gyBkQra$&&*RUHWwObfRet}6lK5u-!5w3NWY z1#Z4~^dz8O{6VW-dkL6tN&LyH6Q)l$8kN~qf`0RmSCx87Amd?3{}Fv8aR0-~ew+JA zz|U2u@a7;195zxjZ#4|%T2`FkG7|abIBTSgkw9T^i1*tG65O{I9$;!E0o~UN#x1vz zz?BX8Cr;W+pto)Rr?s3VkTY`A{;@ML{gMC(nI!?em5<$T&PJH_X=Jnc5-2*;@s|A} z2?T#?*GT4z`FK6H%99lma1Tp~X}?AS`4=sox&>hRf}0PvZ$P@4djno=K|M@fJ~Rr) zd~ECTe70DE=aciKyCf2@7?@D~jSTaXG^knkBney?SLeZ;?Gjj~UvJW`R0%jO+4ghs z9@MwXV+*5w$S-Y9uE#;lT&+m9lB?$(FTPDLR zjudvDcIjTXffS67I=30tND4CfxnsUfr64g%(n@b31@X|W+ArEjK{xg0$uMaHPfz!7b^_41nB8}QfsYilj+~cU zEyMgKjauXHCxzfSjT>k9OF?s9zV(wp%>Pe&$28o8`9B$1VitmQn_rBW8-a549mh+f z(O&wMYUN6$klf?4w@8lp)#$ac{Z=WiL*KKRv;*_4cjeZKU1%Rk^O`B?sCVyE&u;BQ zek%=^R6B(6^(!6edQ1x0OGc&JoWlIuHnClERtg0}y!NE#N+Ba>@}b+8rQkKS%i^jx zq@boqD(IYtdi2SyZgpP@HZsMHW%*Jl@$P4xRDkJvM{KxQi23W@Xntvt6ap7%*J?cUQr4%Z>}thzop4#yAsYm^Sd z@Q1?(G_i;St4l8JO~=N8|LvA1tS#eUnfsy!K2|6v$3RPL69@Ox?w;Cj9|!r<#&o{z z6bI^qRu22<5(n9eP7NB*io<)3k~j659S0SQt&dHdhxq2G#JNAmLB_P~ew&uW;d;R{ z{~gQY;IK}u)n`}5f$o*O9tCSLy?*@&wV*fvd5x5on=yP#%Y_h%`5kIkGC491{2HHc zGdBkLInJvV6o>iDP!}uYXs6dEkB)AQgWwl4e#zSr2OBeAZG5*2^Ic)po4R}Bpup*7 zjrRL7|1U;f9(X7Yyf>JPopKEG9lCYdoKvXB;qgxE&c=aWQP3x8F6PsH#?Z{mST4T# zW*4qwdA!Yh_xN@kh(pb6RPJNG<$?1WKl5>gY6Dr2zy(`sMXR5_RZ(q;i9QAlGH+Z6XUn3sW za$D!W){KYj`@U{fwc|m{GezF0aXehPr5W13Sv=%V+-73h3gcC~Z?b3`kKdzOv~Bx% z2!C?P#-md_R1Erb!MAHX_zzrN8q^~mYb4?C2X0%i_F~4-AY4Kku&c zoFVaGHKDEL?cqo_COQ4-sCc-MzUbWhaq(~=urR#pq-#W>m|ms9%bE z&rXi<;NGm^6_e@l;I%D4f2eCb1UBs4X}m`~Yz(dV)OJoh7!*$XY3BTRINsmh*LxAd zapSC(`o;suoUW9yi8s7C|U3yDE!kBlDOQa8tg%((yXeWCH- z-DJM@vB-GHtFa;UYz*qtVsp;rILyz@TYGQIQO=;*Ru8wvL(#7E?ay|^gU^SbGKzO$ zK62_V{E!|Gg@N5)sP0F(pMGvs^$_NNM!)wpkD*JYhBYmi}si2U2T#Z zuXID#wYVG);@y?swz(b;_ScSS8QjKlYi;_h zi38fmApGe8&mB}x?}j-z$-m_$v|yUyNbr9GLYD9 z{>7-j3@TbJ`nl6!8RVn~pK3o0=^uukZ95Xv-{`cu)fgEJcvt7W?gSZJ(HqoUXR-_e zEpk8Ax0XTP0nLrI?PRcX)y!Mfr=foDyWg%fLk3=B&usqWihTENsQA`H2EC6NwS74U z`6@IkKAA5Amj|~u-CHCB#i6%1ulph{sd+PZ1@dcpA?Va<%=ev79}ljRK~}3i&C`Qq z;2t>OL-J(k?)40JY}erj+OaV@Vpx+i5Y zR^Q@Toiivuqrs9&=VhQVV9u#G7nORQ&3<%M1{c~dT7LZ|+T)2|arPb5=jI!oeZR=S z{LuOLTOT1^(%JPoXF-Ctac;m;aHyS>ZAVLJYvRst+DN?Dns zlK|nDCc9_qCV==**V^)y39$33)OoXB0ywQ5Ki}6N0sQAp?&oTl02)@w2PYaOK(cZA zy8*@t0JY9P?$|p4&nbNhY6uBnRqO4`iUTlweS_-H2Pc48%GB#uh9!W@(?Gj}BT*0S z_pym%Q0`S(_{IqdP_W%%_|KCQpvWhDmxFZzSVW0054THzEB7jI?>a3344z!-*LViv z7Fug7x+Orx9ZLe9cqBmfwi!du&p~~k`)8)j$Mlu@Jc?YD0407aPA~IKzOuXpw-N`$I*xc$onwnZbEbd z6rM`%zgCKJZx;UKo`7^2jXI46*jnM_4E@OUf zZ=QbpI_m497qjm+razt;6mc&B{C=L&d*Q?M@|J0p<&fb#>q!4f}13BIUnCo=LP!0obCk4bC$#K2c(A~#a4*AI`)h70q!`MSlr*r~27_WNZ zQgwhFO2!l$-5D$giS*pAv|(~s_{8^Rz(~|%y+*#{7{n|1ZZVl42Y=5FDw>n!VBmea z<>M)Gu%G9snl%;iTcXfSj&kr;mpqw19rK|T|Hjl6(#y>`SZA7If$}s2DS;8!;Kd$j+I2o!E)S`3MXUbpcm`-E;JtPV<%0VkthcwYhmC_L?@dgXgXWl`+6(p}KTXpXLl2^TFZX+{brk6zRi5+k zgdEiE`|nOYEeEHPh?J%0Fn-UO>7y>9ouA*h(c~)TGw*EGf*WY(+^sLt^5hVxzGUO_ z`*P@=GyLVKeALJCbhRc0a?mN2+jd_IZQldSP8Zv5O z{ZDd8et+;yo@ye9hBxexSUC}HOiOAyyILZY*q+bsQ!^3NcE2=ItCI*jlj>QXtB0^v zUbj$fgg;k1H??sho;M%fx?QtG(79vY{Z-3E$hPvVuvZV$udBbt*8t;XCTE5iCW7&m z=h+%Yi7-I+%Zkh06TxfKp$`$g5+P^BtM>M$iJ&+9R73s#iJ)6|^r7d2kX|*QP3q7@ z@ZZ~W@ca?TzeL{LbaW!P+Q;v|0xmj0wz8fX`2Y@tutNf zI-q{dG`3xGN(Arz)ssS85+PZ$;xsGwM5wq^W7#GiMXHU zK%D*JM6lX@O1<^cM9{cY+Tr1fL`dsayM}Bv>fL2>ywf`5o3gP~F9`LlTvy}KCe+*X z<}F!BBA%0Y=j;@L^jlhNZxfve=4Y*UK9HatCXM!z%8;&wW1*cQ5zGe0=rvDHgp9ih zjq_3x!RF(`GZDK{za4hHv4+46bq`0a{V1n?!{HYXV!1rmEL?vS>DKQaIpQSRt>xYs z)y|-P!CnK7o=b$_h7nhnTucO`z*X%`uA=?lL(h^Mn4c{RE2ZQm!hMhaYiHg^y|j$a zx5-b0!^6FE?>s@hHpQ(Ed!7iE&rYb1dzA=IvakU)-ylCv_a4XIB|^&tl_!foV)%2|xJk$MWm5&Xk3ZlgYoP$62N?sWv{Ar^&h;-nc*Pp@95mmfOQj6yP%wwvFtId{#J5uP_kP@4a?+mze^@P4l&; zn=9ao^)U6u779>vtDbpwi~=_H>DbP90`h%OZGzEc1>852!h&s9;%HMs>hJbcR;E&8N!f3>3cs(C)kcK{TJR|RulMWQpLzM#@1e<7b1v{_ znEjynpR<7QduYj&Gcm#ZLjLl#-`&Z3&*Pnl{%dr4B3^$5IwHs4Z`WY28q0Zz;Ytqw z?(cZ1E7{O@Q~_VVRsX&BbGcj_{{G|tzsCYX{kNnnYZ0`dc2TgzOgDQ67ewYbxZ1mU zD1RT0KS1!W0{(kyRYZbZy=R<*z}JFsclr*6@5h3^6M@d`El=k}-y>ChQF7DY^3(9+ zxFO}skfS1v!@s3VzQS?$BOK~-Ai7e9U(Nv@QFw?$AEHyME@(ypWdIN!{E)v0)LDe* zJt~vnFQOgqsbpoVc>qhM;Q{A#KALu^;sH)IKShO@5I)QU=PyMzj#CKVK=2`@Gw|f` zXFPejOfSwa4bN*SpPoxNG}r*$<`(TYw~dFeUhk|OhwO&j1Mf`7j6VwP`&7y@e|R1q z*_1|2>~xjUTj%|Hrt-)GES=|u9gNR|mSV2=wpCn@=JPr3>BV6$ zPcHwk2eACg2)a`~hf_X!6JCR0RiZ1J#rZtJb9u_AWESU>{~0p7-TRC)d)=MI^-(4M zS15fU!93zyo#Igrv%3n}yFS4VWbZLV7f$-660S-1pX15(9PGvU^qtN1)tk%ps63xT zk40SnCV0P%vYbo(U{1IDQ6X*Cv+~I<-on!P92dh$zv|G%FOI`KiOk+{&67D?w4Kpq z`Rw53Hz0-M!328{{Ir9YSNaZcI9y4r?MQI!4lbv3J4^4sox|(^4$bX|f3@vQUh9|1 zEPcq#?VO(umH%kHO95k6Tj2#(*)!*zIk>vcPs zoQbA9U+R?K2a6JU{rwon=@VnQy&|KTeNx(sIbIsU<-ZQ+cFhgr&^wgF4Qfj6*q9cxWAt9pRj@RH{QV09U{64LA;(^T+iuJ z*K@iK>v_03$;0y(j89L3SnpUpb0_*{q|XiFw~+F;awFHzXA@63_poa}R%>{U0E z>(wxf(>Dy~bQ>c$UJ%90Z>5;m$4O#N-#?1eb&cTs7l(2E4^cVczGtRqXOio>iSt`P zdL1LX;JF5tzfWXOG1=z^^vUB~l13(pfNpI($dJU_$g`(?7j{Egg>jqyBz@_D?G!*LY8m+DmmD);V$ z*C5=7?5aWaXOUYJLiR_H$iCDQg1akeF1oC*R0J6_IZl8r@|G|VWB0Pa$ z>^dlLId0lzSOCw@v_M||_o-e#*~IFV<5u1dn1?2DIV(~*d`7TWGD~N^GM4L8O7$y> z^1psP*9*^siIk5j+4&@uyE~Ql&wf-Mew;3OCC|svl|0;cB@dsnlJjd!@n=?W{M8Ch zSDC_#R&e_46`aq$6}(T(< z6QvI)ycgBGqf`&W{keVY0=S)PQhTtUzJJ`G&f2e8^u0dd-?igG-fyKOM)U6+_Yo=m zjR&}2L4=Rbt2o||;JO@3e$r^n zQaR`2x{cwjpYVRF%f%E%ch!#fOHjo775_!lpVd`x{sE-VXbDU2i2L7|e(R&S9X3*X zrW?%bb1L-%It1%&=JZLt{}v4;`&5YJ`el+``bTp;4~RM636VVAiZIT1GxbmQ!94!v z7GB@46U6f#?0drVA`H3_+)VL)XIStl+;`sr_ zzdE(szEPadR59lx!TrL@$2^?lL+CpyBEEg8eZg~BjNf=_pYdE8YmcyfX5q&OVtd2z z2h`4tr|&V4()&_>n@ZsyD7+uZxk&Z0HRa!$`Xf9K!t^{I!t?Vwgy&-Q&!`dgX4gWJ5_@{#Of{`cEf+~3YU&;9g*g5%u(@;%D@amW2x zoNxWzOpgCiYTs}@MwxG)2+rTpU&8afn7*Ti{JV6-eRpg;kQB@H>Bqk-ZQQrS!hNMI zo%sv?Jvu(2@7SJT7VcA0KHUi}iDmgqapkbf81mC>2oH|s^c#t8Fv-0U&E;31@8T$x z%WSHLH>qAu+QRdZLFH~m^`ZmS8#ijF+EYCnNcF2a)xSKV+d|*%Ts&W-eC#54ey7Cn z{3>L;-S~z3+pVjnGJN9XRA&E_cijJV{IHd!_rY~U<@b`ZfXdN_;H3l>FY309L1;_< zvGE>OUg~*!Ilp~-IiGraxg0MFznQ_)ui3}KwLSJT`d2Rd86Kj(kLlgIDNmm@i~Q+O z?*IF=r*_U8*D3Jv86@LyP8`qYBWg#f{IzlaD{D_*(RbdLzVp)&yxuk<|9TdcPd9=J zYQK6@JJ}+P$q{W0<==Y+D#tnGZ{s;E_PtvXY(eeb1}f*ZW5;fT?nJ^%8mD1+U>brMNg?8@r&p7lEyJUKBvgen!LVi&!_%z0*za+pJDB7VkEcA zD(YA991m+RE0Fyk6261{Y8>Y%)fDMcxkQKa@1s7^-6Vf}9JPCR&XM&8$@JZbHgLHK zp!{JKE|F`Uh>xRSqW z?9ctc{X~C+*Qa)O z1GTfOsC~xsp3Lr@$j`~<{e+KL!TYi9+gX00Xgm83ulA(=3)k0JJLH_i;We7K7?{rb zy%j4DfFkLNb>+v0S^B)~9EvisIG@YAxg8g5q;bY-3Xdav1jVCV_8n{>C?!5Khz`dw ztiDd7_zDEO5*$Ym<+5^gqVx`gkEQg+Bwvg0=7cLK{bYiej>*d++>Q7wr0|`TE{Jdu zjo15=J$(s(Ptcjlp*BG*2bSMG6kkl=`D;pFK;a7r)}Z#lmE>9yG$6hDke>a^=(~~d zrKG0|*(HkLFoHN=!Ss1ga3b;TN9o^Ccw@pxk$f4YKSBJ_j?DgtiS7V}%ZVn6{ibtHaC#e))i{xOw zSa>eMx+JGJK`WyFiSQ1TuHt9N^uzfK#-}aOcO}?{=nN>n9>IGg@A(?8Z+GI4e3|}e zU&asH751I%p!}p$d@jKaln&b=Mn8e*h5oEB(aoUvwFI{jzbgbk5?u=MTSjyT2%kju zl~DO%d&~6dNw_iDxjnU?IB&xAxkvhRp!7p29rn{KegmcNMiA=PL)8{U7!{0dw0N9&TmdW+&~kiR;R=voln4C=S*1aLog zJMl$*82?U0--i5~%|thiU=r!QmGs1WnwUN~ugUz0lN9el`I<@a7os0V{3lWVW_*^% zEor zc)t^qGmgdycgP=lP4m5Y?-GmOPyXO(ieF9PwTMoi)*aBFV&jOhMAwe!ni1Zbpb^o{ zCb*aAB*bqm$-{YWCf|$Fts(luM0b?%Ry4k7PV)mVC>-yLV&#bULovM?kl)vX=DAxE zeQOHWA*e$0;hKauB>vBcPbu-OOLV%#2l=sbG$A;J(oZ62OneaX`cCOh33noV4$&cG zbe_adMiAGfSiL+#^z~^zza#nS?Fi};97BHZIl^Dl_^^=X=iU=+LGy1I&-h;_x@*M$ z2Ek(DS3>wfqEk@1Qxu*_;dd##Df!`*Nls^icux~6AH27Tm3Mc-8`F3e?}uXXcrO&Q zM|I*;KzeT{d3#9SK9ZM1@h=F!PjqdF-y6c~5MLt-wpC>GWw|%No+7Rw_%E)oK@mK6bmA-V;mHIIPa+zeR?bd|v67eQcfPRr@U1aqYwY zg2NmtJP)w+c{qP0!UtL$V04}*vN&9x#n)A)XR-Ac?OJ?&r8V+X?w3mGkjc_zRm|XW zJohsDWc#GEaM9R3JiL1vvrpXdT`bkf_~NxUA;NaW>(=U7l}kxwZvw-7u(#^y)6%DA2Jd?YJZJTJ<=&u4u9P|9oCM>LxD ze|;dj5qy2Z$ByqWa_2TM~a}1tHcU{lr=~r=>yo|?dw>-zvZ%8@I;`73? z8DB@|<6OUyT%Jw41H9hcrTS&c^*3)y>rWzD&mKYF>1F<1IX>g_rH&W)Jb21|st-N+ zI+Racz78RpOzRhT4*{z;6ZyJEmmRb&SfADdRcKvKox(k0nBG2k?+lxl9ZKsaxSk?X zKJm0p?jFV4qq+oxXg$L@l9%^mTE}pv^^ML17twmnHp1~fG1lIyQ9Fj~Agn$9KmPj)jR zyb3|Q=aA(;o8VL8pF_Bi{}se&w-LYY6mCIs!w3p`dQv>viIq3niRDLmU#0SyOnf2; zMv+{+Ka$bSr1X{)zJS6*2|rADeS-c3aUT$~kBsQ_={vhX@lp!6ApYA4;{B0KZWn?T z$xnMo=}hVS#d{$c|2rfH@4;kv4$(EEbeNvyyBgsx#24?AWcI}SESbEyq|bcfbA;^t ziuBSYJ})U8^bJzD;KLO9XLW0Mol2(c`_EEdCdgYfbU% ziO&ea3n*TwKaWW7WyGgH(P@+2JCpuXh!5V+$?}i!49=l+*eGzTJ!f?i?7scbfpG>X>;UbD}K~S(?SCWVKcQU;?P`YshlL*=q zof*+>Cs>)<{bIsj6SSv(^CG2BBsh=sSxWq(2^aPeyrpowzmt`dKJgh!{Z~y2$NN56 zexFnNbCfTX!@}EHp#C^m}z7grWm-wJQj2`_82GOM*{G-*(i$FQst7Z#hEg29o{j626-7SA^RV zj&hkEXg8Kmy#JKRJsbhQo-6ZX6e8ig%ild$Rzt~7jq|LCKt)uEp8=u+EXs4I%7;)< z1(6ne*H%$sC*3rDjpKBckX}ivs>+k7A-(dcpdvcTUg&%re^>qw{`~q6eB zoc8^(l1h6hpR6nfe*7Z~lwZBl_%7?!x6W_s=5WKA{is3zN(%_*HW0qrc`u>j(u9_-~(MEi2cUon0^+c^#{4zAO@s6d2%RG0YuSx{X`NcO9QugX6GuZ*u%zrdAbU&brrG?nrAgoY@e ztEOMlE6awlCjRP(TdFFlMWUk83*L|7eL<*yU-GSq@y(S)luiR*dn<8#PG{pI_5o#C z3-PtT2>()^Qa7dVA<)%RzO$#$RH=&)ULRjUnOS^}bAbK`J|w>Zg^5Ikrb2$dl&|~- znEi>qA>xgdX$WtGugWk1SH>|u6yF5#7GK0S#dl?%1$te4{Zd{t#P#t{h*#RG&KJ0n zmy(AN-x6Q7zrb7Jd+RT7_O8T#JU=Y(!va4n@WTTC8Vh`Dyx@JFn}YR6{~D|O$f#fe zK2K3ma3w@JlmlEb&5IFokG^F6Xi@zT)gqqPy;UyvD`-J5;PoaC1Tcqq4 z8vKto)c=|PI`_xw3c1V5{bRa+TWtB&E5q-yUVYmh8f>hlfnzT|`~p^GKF=?!(ojx0 zs#DG{1KEKFYb;dxPyFlKKl$a`_TcmGwRKH@wTDr4kkUH;ka z&Y!i%Utfo?_%6Q}q3(WdzGKdZUx>>}LOYpVi;(UzGRsvp#}43ZX?1`i%;>a;bd(^W$sx-yKK( zr@ssE<$88^W&}&Y6y*ZTwu^@M%SFupJkxL2tN(PK!u!8kzu5K#YIKcRsaTXt*?esu zj^$%6&WWUctDneu!U+Zcvs{$@!So+%fwKJspVdTlsU8W6ySvSG@Ia*OJPrs1e-R4f z@Ur*R|J`vo`}FAhQ|>YTcDwOc`y-!nYcF~*8~*?3k3R1!&MH&RWs6a07qp(1jrn)u zgYUewsIq{u&ej;_)KVzh5pmx8BZ_#uFc==KPxNQQU9r&(=NYuF8I4_=lFO| zx#~&JOX21Bp)Lhm7X5y_5Nb#-PQ^mV??W>R_I~~Q@j|E#y%?7WA^$A+-}lR8<>r_5 zWTq=$zwF!g_)o{T$>nC3Ud%2Qg?j|H4k}|A>(s+7!Jh$uY&Tc&&SKH zKJzmq#E_|AT^PT8+wYa_$d?J z*Y+dv)FRQB^WH{ZSWNIE%l_`+XL(hbyb+excIell=gXgO$*ZO$BPXd2zJ9Czi}75y z^3h=bfBgHmSwN`&f|sRB2JoYHQLu-w9|A{M&bY}8x0_96V=bYc8w-Sg5^{gOib$8} zOYp*gKY9!)QmxV-(+PgMR^>mY6Y{H9<&Wuv@rL(Gu7E&o_JQM0WG5%mFQ3{CLjMmC z`k9id0;m5&@|OaBZAZ%J^LN{kFYk${iyD=mUzqb<`h~pyexA<_{MB>&{o)ha*L=QR z_xFkZg`wqFukyajdR2b@d*Of8e`l>1HI62%-ddDP?Jd9hQSzPEkFxjmXfeC1kRQj^ z!7)UDe|_JF+A&^`LW?C7YoPG*kAme_KeWDLhv0uy{=cTo*XGmh+-AFaS$jDP1DIdu z#qFGIU0oeqtZAY7*KqRme#I$%nys^|wWos@yYvE;;AGZrj@EYb>|7jv9j^#pj_y|! z{j=rw*U!P|QTYiToS?uzyZpZ0{{Pi=bHm@Y!+*MutFqFJWYRv&q?UqV%LV?~`th}K z@#k|=+(G+%Kbi4&`F($DJg=w0zc}72luMEPVEPZXz}Lp}mb6YQsE*60Gg(_tEwwPE zCA8PZ0^y&8!Z=h*opUfId4G2t%9Q#R2fzx-{9`JtV^L;Zu zw4dv1RYaIQxYFRa^`R`iE(PRk{V|x5 zyc_(T+M^mDxYK7}_FS6=tz2v9aRR3@AN<$H|FYk;$LD#GifsLT+-P&g@oV!7LThBI zq*CL;mG5Qw%=S?Bc6i_CSME_4_)Jq05g$;#3kZ8xuG90DHLE30A>7;gx&N!d^fntX zsH-*ZP4c9@tlyIRW&hWPWc@cl`F-DMzgvF)^!w$@&mPBr*n@p7e1uy;<;o9x{Kg*n z-=#gc-&y(B{Yhz6c&j9|mm14CZn%;|Zw^HHO#})GCt3aYFX(~`q zKp7w=+@kp((+TrxX=UV=9nX|u|F_ZdYj;Y%%X%dk)ZW(1R{8Gi>gnZycWAN0B8Yq1 z&UANiu(lXD)*26uSd07h z0o%G-mkmXEUbY@zuFH8jd$}n07z(v1O;F%Ffx`;A+pRQ6W z`EmNc;m7xp;%tb+U)e|c<-X2#U*q?AS@)ZMrY`aj^fO@merrdj-)wjMJRH7QE&jIu z`X%4?jISB~SJq?hmpXNIpZA~or5%uuP_Kj^hR|gf_&@4ozg14`w+E=4 zIwJqietQ+h$J2S5t1Y_j-{SM-J!FQAkC5;GY~S#g{JJ5(Z~YF_XT8;!-a<|NmfpI^ LTc`(p@%8@!!gK2L diff --git a/tests/data/Si-wafer-Raman-Spectrum-1.csv b/tests/data/witec/Si-wafer-Raman-Spectrum-1.txt similarity index 97% rename from tests/data/Si-wafer-Raman-Spectrum-1.csv rename to tests/data/witec/Si-wafer-Raman-Spectrum-1.txt index cafea83..43d4d1a 100644 --- a/tests/data/Si-wafer-Raman-Spectrum-1.csv +++ b/tests/data/witec/Si-wafer-Raman-Spectrum-1.txt @@ -5,7 +5,7 @@ GraphName = Spectrum--000--Spec.Data 1 SizeX = 1 SizeY = 1 SizeGraph = 1600 -PositionUnit = µm +PositionUnit = µm PositionX = 2.3283064365387E-8 PositionY = 2.3283064365387E-8 PositionZ = 0 diff --git a/tests/data/witec/config_file.json b/tests/data/witec/config_file.json deleted file mode 100644 index 25af024..0000000 --- a/tests/data/witec/config_file.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/associated_source": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/serial_number": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_number": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/gain_setting": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/device_information/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/attached_to": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/measurement": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value/@units": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/experiment_description": "@eln", - "/ENTRY[entry]/experiment_type": "@eln", - "/ENTRY[entry]/raman_experiment_type": "@eln", - "/ENTRY[entry]/title": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@url": "@eln", - "/ENTRY[entry]/@default": "data", - "/ENTRY[entry]/DATA[data]/@signal": "y_values", - "/ENTRY[entry]/DATA[data]/y_values": "@data:data/y_values", - "/ENTRY[entry]/DATA[data]/x_values": "@data:data/x_values", - "/ENTRY[entry]/DATA[data]/y_values/@units": "@eln:/ENTRY[entry]/data/unit_y", - "/ENTRY[entry]/DATA[data]/x_values/@units": "@eln:/ENTRY[entry]/data/unit_x", - "/ENTRY[entry]/DATA[data]/y_values/@long_name": "@eln:/ENTRY[entry]/data/longname_y", - "/ENTRY[entry]/DATA[data]/x_values/@long_name": "@eln:/ENTRY[entry]/data/longname_x", - "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "@eln:/ENTRY[entry]/data/longname_x_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:data/x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" - } - From 39fa9b1f6ae345a18ac0b01a03eea1c1068586bf Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Mon, 9 Dec 2024 13:32:31 +0100 Subject: [PATCH 06/14] conif change --- src/pynxtools_raman/config/config_file_rod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pynxtools_raman/config/config_file_rod.json b/src/pynxtools_raman/config/config_file_rod.json index ed49f98..0629b61 100644 --- a/src/pynxtools_raman/config/config_file_rod.json +++ b/src/pynxtools_raman/config/config_file_rod.json @@ -38,7 +38,7 @@ "/ENTRY[entry]/DATA[data]/y_values": "@data:_raman_spectrum.intensity", "/ENTRY[entry]/DATA[data]/y_values/@units": "arb. units", "/ENTRY[entry]/DATA[data]/y_values/@long_name": "Intensity", - "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", + "/ENTRY[entry]/DATA[data]/@axes":["x_values_raman"], "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "Raman Shift", "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:_raman_spectrum.raman_shift", "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" From 307ee534ed1fa4f045753a626540ab3180f4ea25 Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Tue, 10 Dec 2024 09:48:07 +0100 Subject: [PATCH 07/14] switch to multiformat reader by copy from first PR --- examples/database/rod/config_file_rod.json | 46 +++++++++++++ examples/witec/txt/config_file.json | 9 +-- examples/witec/txt/eln_data.yaml | 4 +- .../config/config_file_rod.json | 2 +- .../config/config_file_witec.json | 3 +- src/pynxtools_raman/reader.py | 13 ++-- tests/data/rod/example.nxs | Bin 53376 -> 53376 bytes tests/data/witec/config_file_witec.json | 65 ++++++++++++++++++ tests/data/witec/eln_data.yaml | 4 +- tests/data/witec/example.nxs | Bin 77480 -> 78784 bytes 10 files changed, 132 insertions(+), 14 deletions(-) create mode 100644 examples/database/rod/config_file_rod.json create mode 100644 tests/data/witec/config_file_witec.json diff --git a/examples/database/rod/config_file_rod.json b/examples/database/rod/config_file_rod.json new file mode 100644 index 0000000..ed49f98 --- /dev/null +++ b/examples/database/rod/config_file_rod.json @@ -0,0 +1,46 @@ +{ + "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@data:_raman_measurement_device.direction_polarization", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@data:_raman_measurement_device.excitation_laser_wavelength", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "nm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@data:_raman_measurement_device.power_on_sample", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "mW", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent": "@data:_raman_measurement_device.spot_size", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent/@units": "µm", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability":"nominal", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "s", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@data:_raman_measurement.integration_time", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type":"single-channel", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@data:_raman_measurement_device.excitation_laser_type", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor":"@data:_raman_measurement_device.company", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@data:_raman_measurement_device.model", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@data:_raman_measurement_device.optics_type", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@data:_raman_measurement_device.microscope_objective_magnification", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@data:_raman_measurement_device.microscope_numerical_aperture", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@data:_raman_measurement_device.diffraction_grating", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "lines/mm", + "/ENTRY[entry]/SAMPLE[sample]/name":"@data:_chemical_name_systematic", + "/ENTRY[entry]/SAMPLE[sample]/physical_form":"@data:_[local]_chemical_compound_state", + "/ENTRY[entry]/SAMPLE[sample]/chemical_formula":"@data:_chemical_formula_structural", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[medium]/sample_medium":"@data:_raman_measurement.environment", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/measurement":"temperature", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value":"@data:_raman_measurement.temperature", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value/@units":"K", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/measurement":"pressure", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value":"@data:_raman_measurement.pressure", + "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value/@units":"kPa", + "/ENTRY[entry]/definition/@url": "Remove_this_if_pynxtools_issue_#469_is_solved", + "/ENTRY[entry]/experiment_type": "Raman spectroscopy", + "/ENTRY[entry]/raman_experiment_type": "other", + "/ENTRY[entry]/title": "@data:_chemical_name_mineral", + "/ENTRY[entry]/start_time": "@data:_raman_measurement.datetime_initiated", + "/ENTRY[entry]/@default": "data", + "/ENTRY[entry]/DATA[data]/@signal": "y_values", + "/ENTRY[entry]/DATA[data]/y_values": "@data:_raman_spectrum.intensity", + "/ENTRY[entry]/DATA[data]/y_values/@units": "arb. units", + "/ENTRY[entry]/DATA[data]/y_values/@long_name": "Intensity", + "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "Raman Shift", + "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:_raman_spectrum.raman_shift", + "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" + } + diff --git a/examples/witec/txt/config_file.json b/examples/witec/txt/config_file.json index 7e06aa4..e812abc 100644 --- a/examples/witec/txt/config_file.json +++ b/examples/witec/txt/config_file.json @@ -13,7 +13,8 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles/@units": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_type": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/serial_number": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/identifier": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/service": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_number": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/gain_setting": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@eln", @@ -50,15 +51,15 @@ "/ENTRY[entry]/definition/@url": "@eln", "/ENTRY[entry]/@default": "data", "/ENTRY[entry]/DATA[data]/@signal": "y_values", - "/ENTRY[entry]/DATA[data]/y_values": "@data:y_values", - "/ENTRY[entry]/DATA[data]/x_values": "@data:x_values", + "/ENTRY[entry]/DATA[data]/y_values": "@data:data/y_values", + "/ENTRY[entry]/DATA[data]/x_values": "@data:data/x_values", "/ENTRY[entry]/DATA[data]/y_values/@units": "@eln:/ENTRY[entry]/data/unit_y", "/ENTRY[entry]/DATA[data]/x_values/@units": "@eln:/ENTRY[entry]/data/unit_x", "/ENTRY[entry]/DATA[data]/y_values/@long_name": "@eln:/ENTRY[entry]/data/longname_y", "/ENTRY[entry]/DATA[data]/x_values/@long_name": "@eln:/ENTRY[entry]/data/longname_x", "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "@eln:/ENTRY[entry]/data/longname_x_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:x_values_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:data/x_values_raman", "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" } diff --git a/examples/witec/txt/eln_data.yaml b/examples/witec/txt/eln_data.yaml index cd6befb..85280fe 100644 --- a/examples/witec/txt/eln_data.yaml +++ b/examples/witec/txt/eln_data.yaml @@ -66,7 +66,9 @@ instrument: detector_type: CCD device_information: model: DU970_BV - serial_number: "6358" + identifier: + identifier: "6358" + service: "Serial Number" detector_number: - 1600 - 200 diff --git a/src/pynxtools_raman/config/config_file_rod.json b/src/pynxtools_raman/config/config_file_rod.json index 0629b61..ed49f98 100644 --- a/src/pynxtools_raman/config/config_file_rod.json +++ b/src/pynxtools_raman/config/config_file_rod.json @@ -38,7 +38,7 @@ "/ENTRY[entry]/DATA[data]/y_values": "@data:_raman_spectrum.intensity", "/ENTRY[entry]/DATA[data]/y_values/@units": "arb. units", "/ENTRY[entry]/DATA[data]/y_values/@long_name": "Intensity", - "/ENTRY[entry]/DATA[data]/@axes":["x_values_raman"], + "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "Raman Shift", "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:_raman_spectrum.raman_shift", "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" diff --git a/src/pynxtools_raman/config/config_file_witec.json b/src/pynxtools_raman/config/config_file_witec.json index 25af024..e812abc 100644 --- a/src/pynxtools_raman/config/config_file_witec.json +++ b/src/pynxtools_raman/config/config_file_witec.json @@ -13,7 +13,8 @@ "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles/@units": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_type": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/serial_number": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/identifier": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/service": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_number": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/gain_setting": "@eln", "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@eln", diff --git a/src/pynxtools_raman/reader.py b/src/pynxtools_raman/reader.py index f7751d3..9011fd4 100644 --- a/src/pynxtools_raman/reader.py +++ b/src/pynxtools_raman/reader.py @@ -221,12 +221,13 @@ def get_data(self, key: str, path: str) -> Any: # if key == "/ENTRY[entry]/DATA[data]/x_values_raman": # witec_laser_wavelength = self.eln_data.get("/ENTRY[entry]/instrument/beam_incident/wavelength") # return None - if self.meta_data: - print(self.raman_data.keys()) - print(key, "##", path) - # delete the respective used path/key from the metadata file - # use later the remaining objects in meta data file for postprocessing - # to add the remainin elements to NXcollection + + # if self.meta_data: + # print(self.raman_data.keys()) + # print(key, "##", path) + # delete the respective used path/key from the metadata file + # use later the remaining objects in meta data file for postprocessing + # to add the remainin elements to NXcollection if value is not None: try: diff --git a/tests/data/rod/example.nxs b/tests/data/rod/example.nxs index 6e24ecce8f789588a2920d9a46b2e58df82cbf78..7ddb6e621e2cb3f18e16bbd0704ae0c07450dfb0 100644 GIT binary patch delta 124 zcmZoz$lS1yc|$r6hgqtzp|Odn+2nj4RURV)?R2=n0-gv-Ljwf^ODiK&D-#1f12YRt mLrZM~Ln{LV&B+gW#Dy?rH(T*uWki@M&Yy~6=H?Fm9|r)Q0w22o delta 124 zcmZoz$lS1yc|$r6hl!=JVVbd}(d2v{RUShN?R2=n0-gv-12Y9f11kdqD?>9qV?$E| lVr=pm-xr6`50RWd^AEf{Q diff --git a/tests/data/witec/config_file_witec.json b/tests/data/witec/config_file_witec.json new file mode 100644 index 0000000..e812abc --- /dev/null +++ b/tests/data/witec/config_file_witec.json @@ -0,0 +1,65 @@ +{ + "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/associated_source": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/identifier": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/service": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_number": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/gain_setting": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/vendor": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/device_information/model": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength/@units": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/attached_to": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/measurement": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value": "@eln", + "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value/@units": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", + "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", + "/ENTRY[entry]/USER[user]/address": "@eln", + "/ENTRY[entry]/USER[user]/affiliation": "@eln", + "/ENTRY[entry]/USER[user]/email": "@eln", + "/ENTRY[entry]/USER[user]/name": "@eln", + "/ENTRY[entry]/experiment_description": "@eln", + "/ENTRY[entry]/experiment_type": "@eln", + "/ENTRY[entry]/raman_experiment_type": "@eln", + "/ENTRY[entry]/title": "@eln", + "/ENTRY[entry]/start_time": "@eln", + "/ENTRY[entry]/definition": "@eln", + "/ENTRY[entry]/definition/@url": "@eln", + "/ENTRY[entry]/@default": "data", + "/ENTRY[entry]/DATA[data]/@signal": "y_values", + "/ENTRY[entry]/DATA[data]/y_values": "@data:data/y_values", + "/ENTRY[entry]/DATA[data]/x_values": "@data:data/x_values", + "/ENTRY[entry]/DATA[data]/y_values/@units": "@eln:/ENTRY[entry]/data/unit_y", + "/ENTRY[entry]/DATA[data]/x_values/@units": "@eln:/ENTRY[entry]/data/unit_x", + "/ENTRY[entry]/DATA[data]/y_values/@long_name": "@eln:/ENTRY[entry]/data/longname_y", + "/ENTRY[entry]/DATA[data]/x_values/@long_name": "@eln:/ENTRY[entry]/data/longname_x", + "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "@eln:/ENTRY[entry]/data/longname_x_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:data/x_values_raman", + "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" + } + diff --git a/tests/data/witec/eln_data.yaml b/tests/data/witec/eln_data.yaml index cd6befb..85280fe 100644 --- a/tests/data/witec/eln_data.yaml +++ b/tests/data/witec/eln_data.yaml @@ -66,7 +66,9 @@ instrument: detector_type: CCD device_information: model: DU970_BV - serial_number: "6358" + identifier: + identifier: "6358" + service: "Serial Number" detector_number: - 1600 - 200 diff --git a/tests/data/witec/example.nxs b/tests/data/witec/example.nxs index 8920f0c0ca055fca4e92f28bb431bd908f06e03e..2683458f81341063dc9d00c66cf6041e8094825a 100644 GIT binary patch delta 2060 zcmaJ?YfMvD9KXNYO5borq%EcP@@%0zTFRrM40I@Lb3SGkn2*d(ieh{XbR#6oFxfIP zvPAr6IZS7Q`((B(qjmx#F)NGlwPZm*x-7v&Gh<{x=3Ln3+_|?GML+B`r|17Z|HtpN zXMfQre$^lMiHXoa@kTLG7VG&})a@++z2^zV662u2N0Mz&NUp&m2m(7@iWezy(TbIH z`i?6;yQBf8;UL%WwTtFlP4QksSQpeMeT3>zRahaN8gJ9itz2pq)Lw?(U+}9$^IqEq13zlZx88wIfN$6tQ@aL&q$3GcXQ@E}6O~P!nOISm5X?Bt&>4aqDXi!WWHPa*z1ffgg*Que`Kii8Y`c8Tm%}Pfy7k5PS5qeW% zu|E+@+*S8L;+u1hNsh}x48+_tn`P8>dsT9%--td2A3W6HIx9*Q@q4aZARM>3Tg0?l z9!}yPWsOyUT<*H~uqPv$wtA7m7)mOn4-cp4_GT(!<3s(MSCy)L)F$rW4k~apUIDX8 zYJ3*iE-TmyaMlHzBT)`f|t|jPX&UH)9U-t9Ev!vzE6!;oK;fe{m)KAf9|J7 zJI6`g%x*e9CB?_?+y@7Y?eX?=cUK!I|3O=PXyyYw-TtSI9nORlAAGREh_!55!iD%3 zkM@B*Fk{CFhaB&F>=1Q>%Rr}QR)|@kuM7oZx6JMVmrR4EB$OPnm_cL-JsitB+M)-K zbhLM@(O5$VEh;BO8@749CD*`sT1OZ)hhDysR zFmk_RneYrGeC%)v_R)=tcC#UQuWSPS{IJkyc`gm3w?WG+d6ghMpH^42^PP^}Q8uGT zJ^Rgo^t^>fAv}$(IxDzRR&y$1F&ik6*v2XhxTKpht0@j;@)W}?wgjH|=M8X&V%X1sw$rTeP;4^}v6{Lv7%l4x6YD(kiK)?c&1!ERbHi{{ZEZTKE& z9qmtp0phO9bpQ4Snw+;{ojM^lz8oWbIHo?=^OcKZPIfW_?dEQKQZ?vg=H++|E9gRE zCrfu=L>)M~*&6;PnUcP4GW%(5x!D+@sfRgYj`k084J2nt=7q7zG80{Bw@kUUj>(|@ z`7Ov9b*})2$?RWCS;P&GDfy@cAxt?g56OQUbEysXU@ zY-hjwaGq`UBCKmJR&V1MvtchJ*VBe16Yo{WDhRE9#m;hEV~0x>mdQRiOiyZ5Dr!+? zC;F~X_Qba|d6P#i!VZ+sC-a+7%61l`1!e4fF*c!`eO-c8ticZ}``iyFi~3Q6AUo~n y$_h5^=cXaHu7q=y?9&pwi7NJoa#XX|OL?I+${+Y99${KJ>R4SF_UM~=e*XbkUeX8v delta 1849 zcmZ`(eP~lx6wi4tY0~EFMccmjlE#;QCFw_+mqwd@+RjzGG0}9+*~!FaHf}9eyH=S9 zV|6eFlY!|0ZxIHme-+%oG^}xgEIP1d;HX13HxN`5t8=ph|4@gz`(9o!`(roc-ru?B z+}}O-cMdOmS3i4Qf85W^HYMt}Ftc^3BhMK&>I3{(3a7H?0OilQl4)ITOxED1hBu)V zzq;c}uNZouc)Af(*C77w>Pt@=TUm!m3+~J97}K@SfQR)#$K9pax&JNMfya zCeOTOU_3S&+pqKDQA;=Y@Pfq$e!OQ1LLG|MpjfZP=X2gR9M}=t8y|1Ln3WeBHE)r& zQnmvJ4(fCPOjtLStZfU2_J-Sq#tU+bCnUGa zq4u?MQ>3M>CDPJB4OzyhO%VUj8OD^27uRaH>$P<#b}**Eb$HVzK?{PNhX~%Jb1R1I z60~7I#qBsuaR+|L@z9Ag6nEhTI{tnuGgn ztcZ;|6xww1ShT~f)>kXCKo6)|YPN{(1*JdNEl5_ELa&aM?ozyRY4s;cud1D>MJwHD zRU$N7qR?4jS5jPBU{_IGU0^F%eT82A!8~tfK$?g+2_u%mxT>9*t2LS7dm4jV)&RCunmTQdAo$h*gSC5?! zhscT8N>^hoGw34s0WK9U8*|OV zWoCG=Gh|T@T-oS>q4++U)~f* zTfoj==JDk1C=EMZ2Jb*GRWptwR|c2?%5dQ-Ggh8C$wN8ABumMh2z$+gt8#iwQk^=C z8&UYf0&YB?-9;{z!@MdoJ6M*>*g`Wt%fHO{XD7^02_E)Zh4wZ65l(nOU`#IJ^ib|a zA;-P!1U&YnA3T}M6|fr6v&6BBu9qr!)+iV~|4>0B6`pY`;z5-nUQ$)3y%OdXkeRB6 zMIa+y@G?D3WXcONnX83za?K09u#vcZ&}ZDF*2;t(&pseOc%cmCs~5>hAN-Zbnli~c zV1V56=lIB}dI~&CMPz>?G_!K8npUSSM#20pekmYUR+GbF=+*bpO#cNI CZnirB From 1985ac24dc7b8e92fe2da79b2f06ddd79a946a34 Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Tue, 10 Dec 2024 09:52:34 +0100 Subject: [PATCH 08/14] delete old multiformat test data --- .../data_multi/Si-wafer-Raman-Spectrum-1.txt | 1617 ----------------- tests/data_multi/config_file.json | 64 - tests/data_multi/eln_data.yaml | 124 -- tests/data_multi/example.nxs | Bin 77408 -> 0 bytes 4 files changed, 1805 deletions(-) delete mode 100644 tests/data_multi/Si-wafer-Raman-Spectrum-1.txt delete mode 100644 tests/data_multi/config_file.json delete mode 100644 tests/data_multi/eln_data.yaml delete mode 100644 tests/data_multi/example.nxs diff --git a/tests/data_multi/Si-wafer-Raman-Spectrum-1.txt b/tests/data_multi/Si-wafer-Raman-Spectrum-1.txt deleted file mode 100644 index 43d4d1a..0000000 --- a/tests/data_multi/Si-wafer-Raman-Spectrum-1.txt +++ /dev/null @@ -1,1617 +0,0 @@ -//Exported ASCII-File -[Header] -FileName = J:\Raman-spectroscopy-microscopy\Data\2024-06-20-CD-cover-test\Petri-dish-test.wip -GraphName = Spectrum--000--Spec.Data 1 -SizeX = 1 -SizeY = 1 -SizeGraph = 1600 -PositionUnit = µm -PositionX = 2.3283064365387E-8 -PositionY = 2.3283064365387E-8 -PositionZ = 0 -XAxisUnit = nm -DataUnit = CCD cts - -[Data] -X-Axis,Spectrum--000--Spec.Data 1 -nm,CCD cts - 5.307816803E+02, 3.568500061E+02 - 5.308650650E+02, 3.566000061E+02 - 5.309484482E+02, 3.556000061E+02 - 5.310318301E+02, 3.572500000E+02 - 5.311152107E+02, 3.636000061E+02 - 5.311985898E+02, 3.647999878E+02 - 5.312819676E+02, 3.783500061E+02 - 5.313653440E+02, 3.944500122E+02 - 5.314487190E+02, 4.185499878E+02 - 5.315320927E+02, 4.417000122E+02 - 5.316154650E+02, 4.921499939E+02 - 5.316988358E+02, 5.875000000E+02 - 5.317822054E+02, 9.454000244E+02 - 5.318655735E+02, 2.839050049E+03 - 5.319489403E+02, 9.894750000E+03 - 5.320323056E+02, 3.141025000E+04 - 5.321156696E+02, 6.553500000E+04 - 5.321990322E+02, 6.553500000E+04 - 5.322823935E+02, 6.553500000E+04 - 5.323657533E+02, 6.553500000E+04 - 5.324491118E+02, 6.553500000E+04 - 5.325324688E+02, 6.553500000E+04 - 5.326158245E+02, 6.553500000E+04 - 5.326991788E+02, 6.553500000E+04 - 5.327825318E+02, 3.606855078E+04 - 5.328658833E+02, 5.571549805E+03 - 5.329492334E+02, 1.359699951E+03 - 5.330325822E+02, 6.915000000E+02 - 5.331159295E+02, 5.402999878E+02 - 5.331992755E+02, 4.878999939E+02 - 5.332826200E+02, 4.567999878E+02 - 5.333659632E+02, 4.294500122E+02 - 5.334493050E+02, 4.121000061E+02 - 5.335326454E+02, 3.987000122E+02 - 5.336159844E+02, 3.841000061E+02 - 5.336993220E+02, 3.701000061E+02 - 5.337826582E+02, 3.602999878E+02 - 5.338659930E+02, 3.547999878E+02 - 5.339493264E+02, 3.511499939E+02 - 5.340326584E+02, 3.475000000E+02 - 5.341159890E+02, 3.451499939E+02 - 5.341993182E+02, 3.451000061E+02 - 5.342826460E+02, 3.429500122E+02 - 5.343659725E+02, 3.412500000E+02 - 5.344492975E+02, 3.399500122E+02 - 5.345326211E+02, 3.393500061E+02 - 5.346159433E+02, 3.446499939E+02 - 5.346992641E+02, 3.462500000E+02 - 5.347825834E+02, 3.467000122E+02 - 5.348659014E+02, 3.402999878E+02 - 5.349492180E+02, 3.305000000E+02 - 5.350325332E+02, 3.274500122E+02 - 5.351158469E+02, 3.312500000E+02 - 5.351991593E+02, 3.382500000E+02 - 5.352824702E+02, 3.357500000E+02 - 5.353657797E+02, 3.281000061E+02 - 5.354490879E+02, 3.296499939E+02 - 5.355323946E+02, 3.341000061E+02 - 5.356156999E+02, 3.335000000E+02 - 5.356990037E+02, 3.338500061E+02 - 5.357823062E+02, 3.350499878E+02 - 5.358656073E+02, 3.340499878E+02 - 5.359489069E+02, 3.306000061E+02 - 5.360322051E+02, 3.396000061E+02 - 5.361155019E+02, 3.457500000E+02 - 5.361987973E+02, 3.444500122E+02 - 5.362820913E+02, 3.596499939E+02 - 5.363653838E+02, 3.925000000E+02 - 5.364486749E+02, 4.168500061E+02 - 5.365319647E+02, 4.447500000E+02 - 5.366152529E+02, 4.767999878E+02 - 5.366985398E+02, 4.987999878E+02 - 5.367818252E+02, 5.137500000E+02 - 5.368651093E+02, 5.271500244E+02 - 5.369483918E+02, 5.201500244E+02 - 5.370316730E+02, 5.162500000E+02 - 5.371149528E+02, 5.230999756E+02 - 5.371982311E+02, 5.315000000E+02 - 5.372815080E+02, 5.334000244E+02 - 5.373647834E+02, 5.249000244E+02 - 5.374480574E+02, 5.210499878E+02 - 5.375313300E+02, 5.236500244E+02 - 5.376146012E+02, 5.252000122E+02 - 5.376978710E+02, 5.294500122E+02 - 5.377811393E+02, 5.327000122E+02 - 5.378644061E+02, 5.377500000E+02 - 5.379476716E+02, 5.419000244E+02 - 5.380309356E+02, 5.483499756E+02 - 5.381141982E+02, 5.499500122E+02 - 5.381974593E+02, 5.567500000E+02 - 5.382807190E+02, 5.690000000E+02 - 5.383639773E+02, 5.797999878E+02 - 5.384472341E+02, 5.885000000E+02 - 5.385304895E+02, 6.032999878E+02 - 5.386137434E+02, 6.313499756E+02 - 5.386969960E+02, 6.657000122E+02 - 5.387802470E+02, 6.997999878E+02 - 5.388634967E+02, 7.320499878E+02 - 5.389467448E+02, 7.552999878E+02 - 5.390299916E+02, 7.800499878E+02 - 5.391132369E+02, 7.878499756E+02 - 5.391964808E+02, 7.860000000E+02 - 5.392797232E+02, 7.950499878E+02 - 5.393629641E+02, 7.972999878E+02 - 5.394462037E+02, 8.177999878E+02 - 5.395294417E+02, 8.445000000E+02 - 5.396126784E+02, 8.434000244E+02 - 5.396959135E+02, 8.478499756E+02 - 5.397791473E+02, 8.565999756E+02 - 5.398623795E+02, 8.771500244E+02 - 5.399456104E+02, 8.962000122E+02 - 5.400288397E+02, 9.195000000E+02 - 5.401120677E+02, 9.234500122E+02 - 5.401952941E+02, 9.287000122E+02 - 5.402785192E+02, 9.475000000E+02 - 5.403617427E+02, 9.733499756E+02 - 5.404449648E+02, 1.012599976E+03 - 5.405281855E+02, 1.046650024E+03 - 5.406114047E+02, 1.072099976E+03 - 5.406946224E+02, 1.118150024E+03 - 5.407778387E+02, 1.202800049E+03 - 5.408610535E+02, 1.268500000E+03 - 5.409442669E+02, 1.327500000E+03 - 5.410274788E+02, 1.355050049E+03 - 5.411106892E+02, 1.336000000E+03 - 5.411938982E+02, 1.264650024E+03 - 5.412771057E+02, 1.190000000E+03 - 5.413603118E+02, 1.130800049E+03 - 5.414435164E+02, 1.089199951E+03 - 5.415267195E+02, 1.057550049E+03 - 5.416099212E+02, 1.003150024E+03 - 5.416931214E+02, 9.575499878E+02 - 5.417763201E+02, 9.495000000E+02 - 5.418595173E+02, 9.660999756E+02 - 5.419427131E+02, 9.540499878E+02 - 5.420259075E+02, 9.380499878E+02 - 5.421091003E+02, 9.090000000E+02 - 5.421922917E+02, 8.767500000E+02 - 5.422754816E+02, 8.750000000E+02 - 5.423586701E+02, 8.545999756E+02 - 5.424418570E+02, 8.401500244E+02 - 5.425250425E+02, 8.340499878E+02 - 5.426082265E+02, 8.328499756E+02 - 5.426914091E+02, 8.247000122E+02 - 5.427745902E+02, 8.137000122E+02 - 5.428577698E+02, 8.169000244E+02 - 5.429409479E+02, 8.104500122E+02 - 5.430241245E+02, 7.997000122E+02 - 5.431072997E+02, 7.792500000E+02 - 5.431904734E+02, 7.682500000E+02 - 5.432736456E+02, 7.734500122E+02 - 5.433568163E+02, 7.602500000E+02 - 5.434399855E+02, 7.368499756E+02 - 5.435231533E+02, 7.210999756E+02 - 5.436063195E+02, 7.175499878E+02 - 5.436894843E+02, 7.150499878E+02 - 5.437726476E+02, 7.059000244E+02 - 5.438558095E+02, 7.045499878E+02 - 5.439389698E+02, 7.042500000E+02 - 5.440221287E+02, 7.048499756E+02 - 5.441052860E+02, 6.950000000E+02 - 5.441884419E+02, 6.799500122E+02 - 5.442715963E+02, 6.854500122E+02 - 5.443547492E+02, 6.965000000E+02 - 5.444379006E+02, 7.022500000E+02 - 5.445210505E+02, 7.069000244E+02 - 5.446041989E+02, 7.093499756E+02 - 5.446873459E+02, 7.129500122E+02 - 5.447704913E+02, 7.050999756E+02 - 5.448536352E+02, 7.005000000E+02 - 5.449367777E+02, 7.015999756E+02 - 5.450199187E+02, 6.827000122E+02 - 5.451030581E+02, 6.499000244E+02 - 5.451861961E+02, 6.052500000E+02 - 5.452693325E+02, 5.814000244E+02 - 5.453524675E+02, 5.620499878E+02 - 5.454356010E+02, 5.369000244E+02 - 5.455187329E+02, 5.061000061E+02 - 5.456018634E+02, 4.766499939E+02 - 5.456849924E+02, 4.692000122E+02 - 5.457681199E+02, 4.718500061E+02 - 5.458512458E+02, 4.980000000E+02 - 5.459343703E+02, 5.066000061E+02 - 5.460174932E+02, 5.192999878E+02 - 5.461006147E+02, 5.346500244E+02 - 5.461837346E+02, 5.530499878E+02 - 5.462668531E+02, 5.679500122E+02 - 5.463499700E+02, 5.937000122E+02 - 5.464330854E+02, 6.264500122E+02 - 5.465161993E+02, 6.693499756E+02 - 5.465993118E+02, 7.277000122E+02 - 5.466824227E+02, 7.943499756E+02 - 5.467655320E+02, 8.970499878E+02 - 5.468486399E+02, 1.080150024E+03 - 5.469317463E+02, 1.368199951E+03 - 5.470148511E+02, 1.876199951E+03 - 5.470979545E+02, 2.918550049E+03 - 5.471810563E+02, 5.445149902E+03 - 5.472641566E+02, 1.210854980E+04 - 5.473472554E+02, 2.485109961E+04 - 5.474303527E+02, 3.471844922E+04 - 5.475134485E+02, 3.281710156E+04 - 5.475965427E+02, 2.164944922E+04 - 5.476796354E+02, 1.089300000E+04 - 5.477627266E+02, 5.679000000E+03 - 5.478458163E+02, 3.482050049E+03 - 5.479289045E+02, 2.450100098E+03 - 5.480119911E+02, 1.904550049E+03 - 5.480950762E+02, 1.562699951E+03 - 5.481781598E+02, 1.338349976E+03 - 5.482612419E+02, 1.164750000E+03 - 5.483443225E+02, 1.047699951E+03 - 5.484274015E+02, 9.755499878E+02 - 5.485104790E+02, 9.149000244E+02 - 5.485935550E+02, 8.467999878E+02 - 5.486766294E+02, 7.968499756E+02 - 5.487597023E+02, 7.582999878E+02 - 5.488427737E+02, 7.257000122E+02 - 5.489258436E+02, 6.812999878E+02 - 5.490089119E+02, 6.612500000E+02 - 5.490919787E+02, 6.521500244E+02 - 5.491750440E+02, 6.335499878E+02 - 5.492581077E+02, 6.128499756E+02 - 5.493411699E+02, 6.115000000E+02 - 5.494242306E+02, 6.025999756E+02 - 5.495072897E+02, 5.902999878E+02 - 5.495903473E+02, 5.904000244E+02 - 5.496734034E+02, 5.905000000E+02 - 5.497564579E+02, 5.925999756E+02 - 5.498395109E+02, 5.949500122E+02 - 5.499225623E+02, 5.969500122E+02 - 5.500056123E+02, 6.099000244E+02 - 5.500886606E+02, 6.335499878E+02 - 5.501717075E+02, 6.464000244E+02 - 5.502547528E+02, 6.655499878E+02 - 5.503377965E+02, 6.816500244E+02 - 5.504208387E+02, 6.784000244E+02 - 5.505038794E+02, 6.649500122E+02 - 5.505869185E+02, 6.473499756E+02 - 5.506699561E+02, 6.340000000E+02 - 5.507529921E+02, 6.159500122E+02 - 5.508360266E+02, 6.072500000E+02 - 5.509190595E+02, 6.004500122E+02 - 5.510020909E+02, 5.985499878E+02 - 5.510851207E+02, 5.982500000E+02 - 5.511681490E+02, 5.876500244E+02 - 5.512511758E+02, 5.795000000E+02 - 5.513342010E+02, 5.867500000E+02 - 5.514172246E+02, 5.829500122E+02 - 5.515002467E+02, 5.840000000E+02 - 5.515832672E+02, 5.959500122E+02 - 5.516662862E+02, 6.057500000E+02 - 5.517493036E+02, 6.135999756E+02 - 5.518323195E+02, 6.095000000E+02 - 5.519153338E+02, 6.136500244E+02 - 5.519983466E+02, 6.111500244E+02 - 5.520813578E+02, 6.018499756E+02 - 5.521643674E+02, 5.959000244E+02 - 5.522473755E+02, 5.922500000E+02 - 5.523303821E+02, 5.776500244E+02 - 5.524133870E+02, 5.646500244E+02 - 5.524963904E+02, 5.505000000E+02 - 5.525793923E+02, 5.281500244E+02 - 5.526623926E+02, 5.199000244E+02 - 5.527453913E+02, 5.075000000E+02 - 5.528283885E+02, 5.058999939E+02 - 5.529113840E+02, 5.022999878E+02 - 5.529943781E+02, 4.914500122E+02 - 5.530773705E+02, 4.820000000E+02 - 5.531603614E+02, 4.752000122E+02 - 5.532433508E+02, 4.746000061E+02 - 5.533263385E+02, 4.705000000E+02 - 5.534093247E+02, 4.665000000E+02 - 5.534923093E+02, 4.672500000E+02 - 5.535752924E+02, 4.658999939E+02 - 5.536582739E+02, 4.667999878E+02 - 5.537412538E+02, 4.627999878E+02 - 5.538242321E+02, 4.633500061E+02 - 5.539072089E+02, 4.636000061E+02 - 5.539901841E+02, 4.710499878E+02 - 5.540731577E+02, 4.683999939E+02 - 5.541561298E+02, 4.647000122E+02 - 5.542391002E+02, 4.602500000E+02 - 5.543220691E+02, 4.621000061E+02 - 5.544050364E+02, 4.632000122E+02 - 5.544880022E+02, 4.669500122E+02 - 5.545709663E+02, 4.729500122E+02 - 5.546539289E+02, 4.749500122E+02 - 5.547368899E+02, 4.797500000E+02 - 5.548198493E+02, 4.766499939E+02 - 5.549028071E+02, 4.786499939E+02 - 5.549857634E+02, 4.867000122E+02 - 5.550687181E+02, 4.860000000E+02 - 5.551516711E+02, 4.880499878E+02 - 5.552346226E+02, 4.876499939E+02 - 5.553175726E+02, 4.903500061E+02 - 5.554005209E+02, 4.955499878E+02 - 5.554834676E+02, 4.998500061E+02 - 5.555664128E+02, 5.053999939E+02 - 5.556493563E+02, 5.118500061E+02 - 5.557322983E+02, 5.185999756E+02 - 5.558152387E+02, 5.169000244E+02 - 5.558981775E+02, 5.136500244E+02 - 5.559811147E+02, 5.180000000E+02 - 5.560640503E+02, 5.269000244E+02 - 5.561469843E+02, 5.420499878E+02 - 5.562299168E+02, 5.400499878E+02 - 5.563128476E+02, 5.472500000E+02 - 5.563957769E+02, 5.572500000E+02 - 5.564787045E+02, 5.519000244E+02 - 5.565616305E+02, 5.546500244E+02 - 5.566445550E+02, 5.558499756E+02 - 5.567274778E+02, 5.518499756E+02 - 5.568103991E+02, 5.585499878E+02 - 5.568933188E+02, 5.464000244E+02 - 5.569762368E+02, 5.423499756E+02 - 5.570591533E+02, 5.410999756E+02 - 5.571420681E+02, 5.270000000E+02 - 5.572249814E+02, 5.244500122E+02 - 5.573078930E+02, 5.184500122E+02 - 5.573908031E+02, 5.239500122E+02 - 5.574737115E+02, 5.201500244E+02 - 5.575566184E+02, 5.250999756E+02 - 5.576395236E+02, 5.309000244E+02 - 5.577224272E+02, 5.235499878E+02 - 5.578053292E+02, 5.175999756E+02 - 5.578882296E+02, 5.169000244E+02 - 5.579711284E+02, 5.220499878E+02 - 5.580540256E+02, 5.302500000E+02 - 5.581369212E+02, 5.271500244E+02 - 5.582198152E+02, 5.222999878E+02 - 5.583027076E+02, 5.141500244E+02 - 5.583855983E+02, 5.157000122E+02 - 5.584684874E+02, 5.214000244E+02 - 5.585513750E+02, 5.232000122E+02 - 5.586342609E+02, 5.272999878E+02 - 5.587171452E+02, 5.319500122E+02 - 5.588000278E+02, 5.298499756E+02 - 5.588829089E+02, 5.262000122E+02 - 5.589657884E+02, 5.257500000E+02 - 5.590486662E+02, 5.257500000E+02 - 5.591315424E+02, 5.314000244E+02 - 5.592144170E+02, 5.332000122E+02 - 5.592972899E+02, 5.310000000E+02 - 5.593801613E+02, 5.400000000E+02 - 5.594630310E+02, 5.442500000E+02 - 5.595458991E+02, 5.541500244E+02 - 5.596287656E+02, 5.714500122E+02 - 5.597116305E+02, 5.987999878E+02 - 5.597944937E+02, 6.353499756E+02 - 5.598773553E+02, 7.229500122E+02 - 5.599602153E+02, 8.413499756E+02 - 5.600430736E+02, 1.013650024E+03 - 5.601259304E+02, 1.202349976E+03 - 5.602087855E+02, 1.395849976E+03 - 5.602916389E+02, 1.576849976E+03 - 5.603744908E+02, 1.644800049E+03 - 5.604573410E+02, 1.647750000E+03 - 5.605401896E+02, 1.644550049E+03 - 5.606230365E+02, 1.649250000E+03 - 5.607058818E+02, 1.646150024E+03 - 5.607887255E+02, 1.637699951E+03 - 5.608715676E+02, 1.626050049E+03 - 5.609544080E+02, 1.625349976E+03 - 5.610372468E+02, 1.647449951E+03 - 5.611200839E+02, 1.662449951E+03 - 5.612029194E+02, 1.673000000E+03 - 5.612857533E+02, 1.668349976E+03 - 5.613685855E+02, 1.679449951E+03 - 5.614514161E+02, 1.697849976E+03 - 5.615342451E+02, 1.686000000E+03 - 5.616170724E+02, 1.647050049E+03 - 5.616998981E+02, 1.533900024E+03 - 5.617827221E+02, 1.450849976E+03 - 5.618655445E+02, 1.318550049E+03 - 5.619483652E+02, 1.144650024E+03 - 5.620311843E+02, 9.840000000E+02 - 5.621140018E+02, 8.715999756E+02 - 5.621968176E+02, 8.002999878E+02 - 5.622796318E+02, 7.612500000E+02 - 5.623624443E+02, 7.222500000E+02 - 5.624452552E+02, 6.889000244E+02 - 5.625280644E+02, 6.590999756E+02 - 5.626108720E+02, 6.174000244E+02 - 5.626936779E+02, 5.990499878E+02 - 5.627764822E+02, 5.799000244E+02 - 5.628592848E+02, 5.526500244E+02 - 5.629420858E+02, 5.300999756E+02 - 5.630248851E+02, 5.068999939E+02 - 5.631076827E+02, 4.824500122E+02 - 5.631904788E+02, 4.563999939E+02 - 5.632732731E+02, 4.379500122E+02 - 5.633560658E+02, 4.137999878E+02 - 5.634388569E+02, 3.924500122E+02 - 5.635216463E+02, 3.785000000E+02 - 5.636044340E+02, 3.711000061E+02 - 5.636872201E+02, 3.651000061E+02 - 5.637700045E+02, 3.610000000E+02 - 5.638527872E+02, 3.587999878E+02 - 5.639355683E+02, 3.561499939E+02 - 5.640183478E+02, 3.545000000E+02 - 5.641011255E+02, 3.522999878E+02 - 5.641839016E+02, 3.490000000E+02 - 5.642666761E+02, 3.460000000E+02 - 5.643494489E+02, 3.450499878E+02 - 5.644322200E+02, 3.452000122E+02 - 5.645149894E+02, 3.464500122E+02 - 5.645977572E+02, 3.491499939E+02 - 5.646805233E+02, 3.473999939E+02 - 5.647632878E+02, 3.474500122E+02 - 5.648460506E+02, 3.477500000E+02 - 5.649288117E+02, 3.453500061E+02 - 5.650115711E+02, 3.433999939E+02 - 5.650943289E+02, 3.443500061E+02 - 5.651770850E+02, 3.438500061E+02 - 5.652598394E+02, 3.446499939E+02 - 5.653425922E+02, 3.443999939E+02 - 5.654253433E+02, 3.452000122E+02 - 5.655080927E+02, 3.431499939E+02 - 5.655908404E+02, 3.415499878E+02 - 5.656735865E+02, 3.438500061E+02 - 5.657563308E+02, 3.432999878E+02 - 5.658390735E+02, 3.396000061E+02 - 5.659218146E+02, 3.396499939E+02 - 5.660045539E+02, 3.410499878E+02 - 5.660872916E+02, 3.420000000E+02 - 5.661700276E+02, 3.399500122E+02 - 5.662527619E+02, 3.410000000E+02 - 5.663354945E+02, 3.412500000E+02 - 5.664182255E+02, 3.401499939E+02 - 5.665009547E+02, 3.397999878E+02 - 5.665836823E+02, 3.346499939E+02 - 5.666664082E+02, 3.362000122E+02 - 5.667491324E+02, 3.338999939E+02 - 5.668318549E+02, 3.352500000E+02 - 5.669145758E+02, 3.320000000E+02 - 5.669972949E+02, 3.325499878E+02 - 5.670800124E+02, 3.350499878E+02 - 5.671627282E+02, 3.310499878E+02 - 5.672454423E+02, 3.304500122E+02 - 5.673281546E+02, 3.296000061E+02 - 5.674108654E+02, 3.336000061E+02 - 5.674935744E+02, 3.318500061E+02 - 5.675762817E+02, 3.263999939E+02 - 5.676589873E+02, 3.292000122E+02 - 5.677416913E+02, 3.317000122E+02 - 5.678243935E+02, 3.308999939E+02 - 5.679070940E+02, 3.313500061E+02 - 5.679897929E+02, 3.292999878E+02 - 5.680724900E+02, 3.296499939E+02 - 5.681551855E+02, 3.285000000E+02 - 5.682378793E+02, 3.285499878E+02 - 5.683205713E+02, 3.272999878E+02 - 5.684032617E+02, 3.328999939E+02 - 5.684859503E+02, 3.280499878E+02 - 5.685686373E+02, 3.267999878E+02 - 5.686513226E+02, 3.253999939E+02 - 5.687340061E+02, 3.268999939E+02 - 5.688166880E+02, 3.271499939E+02 - 5.688993681E+02, 3.272999878E+02 - 5.689820466E+02, 3.271499939E+02 - 5.690647233E+02, 3.275499878E+02 - 5.691473983E+02, 3.274500122E+02 - 5.692300717E+02, 3.277500000E+02 - 5.693127433E+02, 3.289500122E+02 - 5.693954132E+02, 3.282000122E+02 - 5.694780814E+02, 3.285499878E+02 - 5.695607479E+02, 3.302999878E+02 - 5.696434127E+02, 3.282999878E+02 - 5.697260758E+02, 3.292000122E+02 - 5.698087371E+02, 3.271499939E+02 - 5.698913968E+02, 3.300499878E+02 - 5.699740547E+02, 3.278500061E+02 - 5.700567109E+02, 3.290000000E+02 - 5.701393654E+02, 3.267500000E+02 - 5.702220182E+02, 3.312500000E+02 - 5.703046693E+02, 3.315499878E+02 - 5.703873187E+02, 3.300499878E+02 - 5.704699663E+02, 3.310499878E+02 - 5.705526123E+02, 3.317000122E+02 - 5.706352565E+02, 3.335000000E+02 - 5.707178990E+02, 3.318999939E+02 - 5.708005397E+02, 3.321000061E+02 - 5.708831788E+02, 3.320499878E+02 - 5.709658161E+02, 3.317000122E+02 - 5.710484517E+02, 3.327999878E+02 - 5.711310856E+02, 3.327000122E+02 - 5.712137177E+02, 3.330499878E+02 - 5.712963482E+02, 3.360499878E+02 - 5.713789769E+02, 3.365000000E+02 - 5.714616039E+02, 3.373999939E+02 - 5.715442291E+02, 3.333999939E+02 - 5.716268526E+02, 3.363500061E+02 - 5.717094744E+02, 3.341000061E+02 - 5.717920945E+02, 3.307500000E+02 - 5.718747129E+02, 3.347500000E+02 - 5.719573295E+02, 3.353999939E+02 - 5.720399443E+02, 3.366499939E+02 - 5.721225575E+02, 3.355499878E+02 - 5.722051689E+02, 3.358500061E+02 - 5.722877786E+02, 3.387000122E+02 - 5.723703865E+02, 3.363500061E+02 - 5.724529928E+02, 3.382500000E+02 - 5.725355972E+02, 3.359500122E+02 - 5.726182000E+02, 3.351000061E+02 - 5.727008010E+02, 3.366499939E+02 - 5.727834003E+02, 3.365499878E+02 - 5.728659978E+02, 3.344500122E+02 - 5.729485936E+02, 3.372000122E+02 - 5.730311876E+02, 3.375499878E+02 - 5.731137800E+02, 3.360000000E+02 - 5.731963705E+02, 3.360499878E+02 - 5.732789594E+02, 3.361499939E+02 - 5.733615465E+02, 3.365000000E+02 - 5.734441318E+02, 3.363999939E+02 - 5.735267154E+02, 3.350000000E+02 - 5.736092973E+02, 3.372000122E+02 - 5.736918774E+02, 3.358999939E+02 - 5.737744557E+02, 3.354500122E+02 - 5.738570324E+02, 3.328999939E+02 - 5.739396072E+02, 3.344500122E+02 - 5.740221804E+02, 3.350499878E+02 - 5.741047517E+02, 3.365499878E+02 - 5.741873214E+02, 3.328500061E+02 - 5.742698892E+02, 3.320000000E+02 - 5.743524554E+02, 3.318999939E+02 - 5.744350197E+02, 3.333999939E+02 - 5.745175824E+02, 3.322000122E+02 - 5.746001432E+02, 3.281000061E+02 - 5.746827023E+02, 3.302999878E+02 - 5.747652597E+02, 3.292500000E+02 - 5.748478153E+02, 3.289500122E+02 - 5.749303692E+02, 3.255000000E+02 - 5.750129213E+02, 3.286000061E+02 - 5.750954716E+02, 3.265000000E+02 - 5.751780202E+02, 3.298500061E+02 - 5.752605670E+02, 3.304500122E+02 - 5.753431120E+02, 3.278500061E+02 - 5.754256553E+02, 3.247000122E+02 - 5.755081969E+02, 3.255499878E+02 - 5.755907367E+02, 3.267500000E+02 - 5.756732747E+02, 3.276499939E+02 - 5.757558109E+02, 3.277999878E+02 - 5.758383454E+02, 3.250499878E+02 - 5.759208781E+02, 3.248500061E+02 - 5.760034091E+02, 3.231000061E+02 - 5.760859383E+02, 3.262999878E+02 - 5.761684657E+02, 3.248500061E+02 - 5.762509914E+02, 3.242500000E+02 - 5.763335152E+02, 3.242500000E+02 - 5.764160374E+02, 3.268500061E+02 - 5.764985577E+02, 3.290499878E+02 - 5.765810763E+02, 3.283500061E+02 - 5.766635931E+02, 3.242500000E+02 - 5.767461081E+02, 3.246000061E+02 - 5.768286214E+02, 3.228500061E+02 - 5.769111329E+02, 3.232999878E+02 - 5.769936426E+02, 3.235499878E+02 - 5.770761506E+02, 3.240499878E+02 - 5.771586567E+02, 3.224500122E+02 - 5.772411611E+02, 3.217000122E+02 - 5.773236637E+02, 3.200000000E+02 - 5.774061646E+02, 3.186000061E+02 - 5.774886636E+02, 3.192500000E+02 - 5.775711609E+02, 3.166000061E+02 - 5.776536564E+02, 3.166000061E+02 - 5.777361502E+02, 3.166499939E+02 - 5.778186421E+02, 3.162000122E+02 - 5.779011323E+02, 3.179500122E+02 - 5.779836206E+02, 3.178999939E+02 - 5.780661072E+02, 3.159500122E+02 - 5.781485920E+02, 3.136000061E+02 - 5.782310751E+02, 3.132000122E+02 - 5.783135563E+02, 3.132999878E+02 - 5.783960358E+02, 3.147000122E+02 - 5.784785134E+02, 3.136499939E+02 - 5.785609893E+02, 3.137000122E+02 - 5.786434634E+02, 3.120000000E+02 - 5.787259357E+02, 3.122500000E+02 - 5.788084062E+02, 3.126000061E+02 - 5.788908749E+02, 3.099500122E+02 - 5.789733419E+02, 3.110000000E+02 - 5.790558070E+02, 3.113999939E+02 - 5.791382704E+02, 3.113999939E+02 - 5.792207319E+02, 3.097500000E+02 - 5.793031917E+02, 3.093999939E+02 - 5.793856497E+02, 3.112000122E+02 - 5.794681058E+02, 3.132000122E+02 - 5.795505602E+02, 3.132000122E+02 - 5.796330128E+02, 3.128999939E+02 - 5.797154636E+02, 3.105499878E+02 - 5.797979126E+02, 3.116000061E+02 - 5.798803597E+02, 3.101499939E+02 - 5.799628051E+02, 3.103500061E+02 - 5.800452487E+02, 3.109500122E+02 - 5.801276905E+02, 3.141499939E+02 - 5.802101305E+02, 3.142999878E+02 - 5.802925687E+02, 3.135499878E+02 - 5.803750051E+02, 3.142999878E+02 - 5.804574396E+02, 3.131499939E+02 - 5.805398724E+02, 3.138999939E+02 - 5.806223034E+02, 3.143999939E+02 - 5.807047325E+02, 3.151000061E+02 - 5.807871599E+02, 3.142500000E+02 - 5.808695854E+02, 3.145000000E+02 - 5.809520092E+02, 3.159500122E+02 - 5.810344311E+02, 3.166499939E+02 - 5.811168512E+02, 3.163999939E+02 - 5.811992695E+02, 3.147500000E+02 - 5.812816860E+02, 3.157000122E+02 - 5.813641007E+02, 3.176000061E+02 - 5.814465136E+02, 3.167000122E+02 - 5.815289246E+02, 3.152000122E+02 - 5.816113339E+02, 3.172500000E+02 - 5.816937413E+02, 3.162999878E+02 - 5.817761469E+02, 3.158999939E+02 - 5.818585508E+02, 3.146499939E+02 - 5.819409527E+02, 3.152999878E+02 - 5.820233529E+02, 3.149500122E+02 - 5.821057513E+02, 3.141000061E+02 - 5.821881478E+02, 3.147000122E+02 - 5.822705425E+02, 3.141499939E+02 - 5.823529354E+02, 3.158999939E+02 - 5.824353265E+02, 3.143999939E+02 - 5.825177157E+02, 3.095000000E+02 - 5.826001031E+02, 3.091000061E+02 - 5.826824888E+02, 3.098999939E+02 - 5.827648725E+02, 3.078999939E+02 - 5.828472545E+02, 3.072500000E+02 - 5.829296346E+02, 3.053999939E+02 - 5.830120129E+02, 3.026499939E+02 - 5.830943894E+02, 3.031000061E+02 - 5.831767641E+02, 3.025000000E+02 - 5.832591369E+02, 3.017999878E+02 - 5.833415079E+02, 3.025000000E+02 - 5.834238771E+02, 3.009500122E+02 - 5.835062444E+02, 3.010499878E+02 - 5.835886099E+02, 2.996000061E+02 - 5.836709736E+02, 2.970000000E+02 - 5.837533354E+02, 2.976000061E+02 - 5.838356954E+02, 2.972999878E+02 - 5.839180536E+02, 2.993500061E+02 - 5.840004099E+02, 2.982500000E+02 - 5.840827645E+02, 2.967999878E+02 - 5.841651171E+02, 2.969500122E+02 - 5.842474680E+02, 2.952500000E+02 - 5.843298170E+02, 2.957500000E+02 - 5.844121641E+02, 2.957500000E+02 - 5.844945094E+02, 2.953500061E+02 - 5.845768529E+02, 2.970000000E+02 - 5.846591946E+02, 2.943500061E+02 - 5.847415344E+02, 2.940499878E+02 - 5.848238723E+02, 2.933500061E+02 - 5.849062084E+02, 2.927999878E+02 - 5.849885427E+02, 2.927500000E+02 - 5.850708751E+02, 2.958999939E+02 - 5.851532057E+02, 2.946000061E+02 - 5.852355345E+02, 2.930499878E+02 - 5.853178614E+02, 2.936000061E+02 - 5.854001864E+02, 2.924500122E+02 - 5.854825096E+02, 2.922500000E+02 - 5.855648310E+02, 2.921000061E+02 - 5.856471505E+02, 2.923999939E+02 - 5.857294681E+02, 2.914500122E+02 - 5.858117839E+02, 2.913999939E+02 - 5.858940979E+02, 2.916000061E+02 - 5.859764100E+02, 2.905000000E+02 - 5.860587203E+02, 2.908999939E+02 - 5.861410287E+02, 2.913999939E+02 - 5.862233352E+02, 2.922999878E+02 - 5.863056399E+02, 2.927500000E+02 - 5.863879427E+02, 2.906000061E+02 - 5.864702437E+02, 2.911000061E+02 - 5.865525429E+02, 2.917500000E+02 - 5.866348401E+02, 2.916499939E+02 - 5.867171355E+02, 2.906000061E+02 - 5.867994291E+02, 2.888999939E+02 - 5.868817208E+02, 2.897000122E+02 - 5.869640106E+02, 2.905499878E+02 - 5.870462986E+02, 2.910000000E+02 - 5.871285847E+02, 2.906000061E+02 - 5.872108690E+02, 2.905499878E+02 - 5.872931513E+02, 2.897000122E+02 - 5.873754319E+02, 2.886000061E+02 - 5.874577105E+02, 2.895499878E+02 - 5.875399873E+02, 2.880000000E+02 - 5.876222622E+02, 2.894500122E+02 - 5.877045353E+02, 2.902999878E+02 - 5.877868065E+02, 2.902999878E+02 - 5.878690758E+02, 2.888500061E+02 - 5.879513433E+02, 2.893999939E+02 - 5.880336089E+02, 2.885499878E+02 - 5.881158726E+02, 2.887999878E+02 - 5.881981345E+02, 2.893500061E+02 - 5.882803944E+02, 2.901499939E+02 - 5.883626526E+02, 2.876499939E+02 - 5.884449088E+02, 2.883999939E+02 - 5.885271632E+02, 2.877999878E+02 - 5.886094156E+02, 2.887000122E+02 - 5.886916663E+02, 2.881499939E+02 - 5.887739150E+02, 2.865000000E+02 - 5.888561619E+02, 2.891499939E+02 - 5.889384068E+02, 2.880000000E+02 - 5.890206499E+02, 2.888999939E+02 - 5.891028912E+02, 2.883500061E+02 - 5.891851305E+02, 2.888999939E+02 - 5.892673680E+02, 2.886000061E+02 - 5.893496036E+02, 2.873500061E+02 - 5.894318373E+02, 2.877000122E+02 - 5.895140691E+02, 2.876000061E+02 - 5.895962991E+02, 2.878500061E+02 - 5.896785271E+02, 2.868999939E+02 - 5.897607533E+02, 2.887500000E+02 - 5.898429776E+02, 2.877000122E+02 - 5.899252000E+02, 2.871000061E+02 - 5.900074205E+02, 2.873500061E+02 - 5.900896392E+02, 2.881000061E+02 - 5.901718559E+02, 2.872500000E+02 - 5.902540708E+02, 2.873999939E+02 - 5.903362838E+02, 2.863500061E+02 - 5.904184948E+02, 2.865499878E+02 - 5.905007040E+02, 2.871499939E+02 - 5.905829113E+02, 2.875499878E+02 - 5.906651167E+02, 2.860000000E+02 - 5.907473203E+02, 2.870000000E+02 - 5.908295219E+02, 2.860000000E+02 - 5.909117216E+02, 2.867999878E+02 - 5.909939194E+02, 2.867000122E+02 - 5.910761154E+02, 2.858999939E+02 - 5.911583094E+02, 2.856499939E+02 - 5.912405016E+02, 2.857000122E+02 - 5.913226918E+02, 2.866499939E+02 - 5.914048802E+02, 2.867999878E+02 - 5.914870666E+02, 2.862000122E+02 - 5.915692512E+02, 2.860000000E+02 - 5.916514338E+02, 2.855499878E+02 - 5.917336146E+02, 2.860000000E+02 - 5.918157934E+02, 2.863999939E+02 - 5.918979704E+02, 2.862000122E+02 - 5.919801454E+02, 2.866499939E+02 - 5.920623186E+02, 2.857999878E+02 - 5.921444898E+02, 2.862999878E+02 - 5.922266592E+02, 2.866499939E+02 - 5.923088266E+02, 2.872500000E+02 - 5.923909921E+02, 2.863999939E+02 - 5.924731557E+02, 2.868500061E+02 - 5.925553174E+02, 2.856000061E+02 - 5.926374772E+02, 2.859500122E+02 - 5.927196351E+02, 2.852999878E+02 - 5.928017911E+02, 2.857500000E+02 - 5.928839451E+02, 2.850000000E+02 - 5.929660973E+02, 2.863999939E+02 - 5.930482475E+02, 2.853999939E+02 - 5.931303959E+02, 2.861499939E+02 - 5.932125423E+02, 2.848500061E+02 - 5.932946868E+02, 2.857500000E+02 - 5.933768294E+02, 2.852000122E+02 - 5.934589701E+02, 2.855000000E+02 - 5.935411088E+02, 2.858500061E+02 - 5.936232457E+02, 2.841000061E+02 - 5.937053806E+02, 2.842500000E+02 - 5.937875136E+02, 2.847500000E+02 - 5.938696447E+02, 2.848500061E+02 - 5.939517738E+02, 2.856499939E+02 - 5.940339011E+02, 2.854500122E+02 - 5.941160264E+02, 2.850000000E+02 - 5.941981498E+02, 2.853500061E+02 - 5.942802713E+02, 2.846000061E+02 - 5.943623908E+02, 2.855000000E+02 - 5.944445085E+02, 2.847500000E+02 - 5.945266242E+02, 2.845000000E+02 - 5.946087379E+02, 2.843999939E+02 - 5.946908498E+02, 2.842999878E+02 - 5.947729597E+02, 2.852500000E+02 - 5.948550677E+02, 2.858500061E+02 - 5.949371738E+02, 2.846499939E+02 - 5.950192779E+02, 2.834500122E+02 - 5.951013801E+02, 2.842999878E+02 - 5.951834804E+02, 2.843500061E+02 - 5.952655788E+02, 2.845499878E+02 - 5.953476752E+02, 2.838500061E+02 - 5.954297697E+02, 2.831000061E+02 - 5.955118622E+02, 2.848500061E+02 - 5.955939528E+02, 2.836499939E+02 - 5.956760415E+02, 2.837000122E+02 - 5.957581283E+02, 2.838999939E+02 - 5.958402131E+02, 2.841499939E+02 - 5.959222960E+02, 2.831499939E+02 - 5.960043769E+02, 2.827500000E+02 - 5.960864559E+02, 2.830000000E+02 - 5.961685330E+02, 2.846000061E+02 - 5.962506081E+02, 2.838500061E+02 - 5.963326813E+02, 2.831000061E+02 - 5.964147525E+02, 2.837999878E+02 - 5.964968218E+02, 2.841000061E+02 - 5.965788892E+02, 2.833500061E+02 - 5.966609546E+02, 2.825000000E+02 - 5.967430180E+02, 2.832999878E+02 - 5.968250796E+02, 2.835499878E+02 - 5.969071391E+02, 2.832500000E+02 - 5.969891968E+02, 2.840000000E+02 - 5.970712525E+02, 2.827000122E+02 - 5.971533062E+02, 2.830499878E+02 - 5.972353580E+02, 2.839500122E+02 - 5.973174078E+02, 2.828500061E+02 - 5.973994557E+02, 2.826499939E+02 - 5.974815017E+02, 2.827500000E+02 - 5.975635457E+02, 2.832500000E+02 - 5.976455877E+02, 2.838999939E+02 - 5.977276278E+02, 2.843999939E+02 - 5.978096659E+02, 2.833500061E+02 - 5.978917021E+02, 2.838500061E+02 - 5.979737363E+02, 2.832000122E+02 - 5.980557686E+02, 2.837000122E+02 - 5.981377989E+02, 2.820499878E+02 - 5.982198273E+02, 2.840000000E+02 - 5.983018537E+02, 2.836000061E+02 - 5.983838781E+02, 2.828999939E+02 - 5.984659006E+02, 2.841000061E+02 - 5.985479212E+02, 2.831499939E+02 - 5.986299397E+02, 2.822999878E+02 - 5.987119563E+02, 2.817500000E+02 - 5.987939710E+02, 2.819500122E+02 - 5.988759837E+02, 2.826499939E+02 - 5.989579944E+02, 2.817000122E+02 - 5.990400032E+02, 2.828500061E+02 - 5.991220099E+02, 2.817999878E+02 - 5.992040148E+02, 2.828999939E+02 - 5.992860176E+02, 2.830000000E+02 - 5.993680185E+02, 2.823500061E+02 - 5.994500175E+02, 2.824500122E+02 - 5.995320144E+02, 2.820499878E+02 - 5.996140094E+02, 2.822000122E+02 - 5.996960025E+02, 2.819500122E+02 - 5.997779935E+02, 2.827000122E+02 - 5.998599826E+02, 2.823500061E+02 - 5.999419697E+02, 2.827999878E+02 - 6.000239548E+02, 2.822500000E+02 - 6.001059380E+02, 2.825000000E+02 - 6.001879192E+02, 2.827999878E+02 - 6.002698984E+02, 2.816000061E+02 - 6.003518757E+02, 2.811000061E+02 - 6.004338510E+02, 2.820499878E+02 - 6.005158243E+02, 2.825499878E+02 - 6.005977956E+02, 2.833999939E+02 - 6.006797649E+02, 2.824500122E+02 - 6.007617323E+02, 2.818500061E+02 - 6.008436977E+02, 2.808500061E+02 - 6.009256611E+02, 2.819500122E+02 - 6.010076225E+02, 2.820000000E+02 - 6.010895819E+02, 2.817500000E+02 - 6.011715394E+02, 2.812000122E+02 - 6.012534949E+02, 2.823999939E+02 - 6.013354484E+02, 2.822999878E+02 - 6.014173999E+02, 2.826499939E+02 - 6.014993494E+02, 2.820499878E+02 - 6.015812970E+02, 2.817500000E+02 - 6.016632425E+02, 2.822500000E+02 - 6.017451861E+02, 2.816499939E+02 - 6.018271277E+02, 2.811000061E+02 - 6.019090673E+02, 2.811000061E+02 - 6.019910049E+02, 2.817000122E+02 - 6.020729405E+02, 2.820499878E+02 - 6.021548741E+02, 2.820499878E+02 - 6.022368058E+02, 2.826000061E+02 - 6.023187354E+02, 2.822000122E+02 - 6.024006631E+02, 2.812999878E+02 - 6.024825887E+02, 2.823500061E+02 - 6.025645124E+02, 2.816000061E+02 - 6.026464341E+02, 2.813500061E+02 - 6.027283538E+02, 2.810000000E+02 - 6.028102714E+02, 2.815000000E+02 - 6.028921871E+02, 2.817000122E+02 - 6.029741008E+02, 2.810499878E+02 - 6.030560125E+02, 2.810499878E+02 - 6.031379222E+02, 2.816000061E+02 - 6.032198299E+02, 2.811000061E+02 - 6.033017356E+02, 2.810000000E+02 - 6.033836393E+02, 2.813999939E+02 - 6.034655410E+02, 2.817500000E+02 - 6.035474407E+02, 2.813999939E+02 - 6.036293384E+02, 2.803999939E+02 - 6.037112341E+02, 2.803999939E+02 - 6.037931277E+02, 2.815499878E+02 - 6.038750194E+02, 2.811000061E+02 - 6.039569091E+02, 2.805000000E+02 - 6.040387968E+02, 2.808500061E+02 - 6.041206824E+02, 2.805499878E+02 - 6.042025661E+02, 2.817500000E+02 - 6.042844477E+02, 2.808999939E+02 - 6.043663273E+02, 2.811000061E+02 - 6.044482050E+02, 2.804500122E+02 - 6.045300806E+02, 2.803500061E+02 - 6.046119542E+02, 2.807000122E+02 - 6.046938258E+02, 2.804500122E+02 - 6.047756954E+02, 2.797500000E+02 - 6.048575629E+02, 2.799500122E+02 - 6.049394285E+02, 2.802000122E+02 - 6.050212920E+02, 2.811499939E+02 - 6.051031535E+02, 2.812000122E+02 - 6.051850130E+02, 2.810499878E+02 - 6.052668705E+02, 2.812500000E+02 - 6.053487260E+02, 2.799500122E+02 - 6.054305795E+02, 2.806499939E+02 - 6.055124309E+02, 2.797999878E+02 - 6.055942803E+02, 2.802999878E+02 - 6.056761277E+02, 2.798500061E+02 - 6.057579731E+02, 2.800000000E+02 - 6.058398164E+02, 2.803500061E+02 - 6.059216578E+02, 2.801000061E+02 - 6.060034971E+02, 2.815000000E+02 - 6.060853344E+02, 2.803500061E+02 - 6.061671696E+02, 2.810499878E+02 - 6.062490029E+02, 2.797000122E+02 - 6.063308341E+02, 2.800000000E+02 - 6.064126633E+02, 2.794500122E+02 - 6.064944904E+02, 2.801000061E+02 - 6.065763156E+02, 2.807999878E+02 - 6.066581387E+02, 2.798999939E+02 - 6.067399597E+02, 2.802999878E+02 - 6.068217788E+02, 2.802000122E+02 - 6.069035958E+02, 2.802000122E+02 - 6.069854108E+02, 2.813999939E+02 - 6.070672237E+02, 2.795499878E+02 - 6.071490346E+02, 2.804500122E+02 - 6.072308435E+02, 2.800499878E+02 - 6.073126504E+02, 2.807500000E+02 - 6.073944552E+02, 2.816499939E+02 - 6.074762580E+02, 2.844500122E+02 - 6.075580587E+02, 2.846000061E+02 - 6.076398574E+02, 2.851499939E+02 - 6.077216541E+02, 2.823999939E+02 - 6.078034487E+02, 2.813999939E+02 - 6.078852413E+02, 2.807999878E+02 - 6.079670319E+02, 2.805499878E+02 - 6.080488204E+02, 2.806499939E+02 - 6.081306069E+02, 2.797999878E+02 - 6.082123913E+02, 2.800000000E+02 - 6.082941737E+02, 2.800000000E+02 - 6.083759540E+02, 2.791499939E+02 - 6.084577323E+02, 2.807000122E+02 - 6.085395086E+02, 2.801499939E+02 - 6.086212828E+02, 2.802000122E+02 - 6.087030550E+02, 2.793999939E+02 - 6.087848251E+02, 2.792500000E+02 - 6.088665931E+02, 2.797500000E+02 - 6.089483592E+02, 2.805499878E+02 - 6.090301232E+02, 2.792000122E+02 - 6.091118851E+02, 2.797000122E+02 - 6.091936450E+02, 2.791499939E+02 - 6.092754028E+02, 2.791499939E+02 - 6.093571586E+02, 2.795000000E+02 - 6.094389123E+02, 2.791000061E+02 - 6.095206640E+02, 2.799500122E+02 - 6.096024136E+02, 2.792500000E+02 - 6.096841611E+02, 2.802000122E+02 - 6.097659066E+02, 2.792999878E+02 - 6.098476501E+02, 2.785000000E+02 - 6.099293915E+02, 2.795499878E+02 - 6.100111308E+02, 2.801000061E+02 - 6.100928681E+02, 2.785000000E+02 - 6.101746033E+02, 2.792999878E+02 - 6.102563365E+02, 2.795000000E+02 - 6.103380676E+02, 2.792999878E+02 - 6.104197967E+02, 2.798999939E+02 - 6.105015236E+02, 2.799500122E+02 - 6.105832486E+02, 2.800499878E+02 - 6.106649714E+02, 2.788999939E+02 - 6.107466922E+02, 2.788999939E+02 - 6.108284109E+02, 2.797500000E+02 - 6.109101276E+02, 2.800499878E+02 - 6.109918422E+02, 2.793999939E+02 - 6.110735548E+02, 2.793500061E+02 - 6.111552652E+02, 2.789500122E+02 - 6.112369736E+02, 2.795499878E+02 - 6.113186800E+02, 2.797500000E+02 - 6.114003842E+02, 2.800499878E+02 - 6.114820864E+02, 2.790000000E+02 - 6.115637866E+02, 2.795000000E+02 - 6.116454846E+02, 2.798500061E+02 - 6.117271806E+02, 2.796499939E+02 - 6.118088745E+02, 2.800000000E+02 - 6.118905664E+02, 2.794500122E+02 - 6.119722561E+02, 2.803500061E+02 - 6.120539438E+02, 2.785000000E+02 - 6.121356294E+02, 2.791499939E+02 - 6.122173130E+02, 2.788500061E+02 - 6.122989944E+02, 2.791000061E+02 - 6.123806738E+02, 2.787999878E+02 - 6.124623511E+02, 2.806499939E+02 - 6.125440264E+02, 2.795000000E+02 - 6.126256995E+02, 2.797999878E+02 - 6.127073706E+02, 2.796499939E+02 - 6.127890396E+02, 2.792999878E+02 - 6.128707065E+02, 2.785499878E+02 - 6.129523713E+02, 2.777500000E+02 - 6.130340341E+02, 2.787999878E+02 - 6.131156948E+02, 2.789500122E+02 - 6.131973533E+02, 2.790499878E+02 - 6.132790098E+02, 2.788999939E+02 - 6.133606642E+02, 2.787000122E+02 - 6.134423166E+02, 2.785499878E+02 - 6.135239668E+02, 2.788500061E+02 - 6.136056150E+02, 2.792999878E+02 - 6.136872610E+02, 2.793999939E+02 - 6.137689050E+02, 2.788500061E+02 - 6.138505469E+02, 2.787000122E+02 - 6.139321867E+02, 2.790499878E+02 - 6.140138244E+02, 2.792500000E+02 - 6.140954600E+02, 2.792500000E+02 - 6.141770935E+02, 2.794500122E+02 - 6.142587249E+02, 2.792000122E+02 - 6.143403543E+02, 2.801499939E+02 - 6.144219815E+02, 2.797500000E+02 - 6.145036067E+02, 2.787500000E+02 - 6.145852297E+02, 2.786499939E+02 - 6.146668507E+02, 2.790499878E+02 - 6.147484695E+02, 2.786000061E+02 - 6.148300863E+02, 2.794500122E+02 - 6.149117009E+02, 2.800499878E+02 - 6.149933135E+02, 2.790499878E+02 - 6.150749240E+02, 2.788999939E+02 - 6.151565323E+02, 2.787000122E+02 - 6.152381386E+02, 2.784500122E+02 - 6.153197427E+02, 2.787000122E+02 - 6.154013448E+02, 2.793500061E+02 - 6.154829447E+02, 2.793500061E+02 - 6.155645426E+02, 2.791499939E+02 - 6.156461383E+02, 2.782999878E+02 - 6.157277320E+02, 2.791000061E+02 - 6.158093235E+02, 2.786000061E+02 - 6.158909129E+02, 2.782000122E+02 - 6.159725003E+02, 2.782000122E+02 - 6.160540855E+02, 2.791499939E+02 - 6.161356686E+02, 2.784500122E+02 - 6.162172496E+02, 2.795499878E+02 - 6.162988284E+02, 2.785499878E+02 - 6.163804052E+02, 2.786499939E+02 - 6.164619799E+02, 2.792999878E+02 - 6.165435524E+02, 2.783999939E+02 - 6.166251229E+02, 2.790000000E+02 - 6.167066912E+02, 2.781000061E+02 - 6.167882574E+02, 2.781000061E+02 - 6.168698215E+02, 2.783999939E+02 - 6.169513834E+02, 2.786000061E+02 - 6.170329433E+02, 2.786499939E+02 - 6.171145011E+02, 2.777500000E+02 - 6.171960567E+02, 2.785000000E+02 - 6.172776102E+02, 2.791499939E+02 - 6.173591616E+02, 2.792500000E+02 - 6.174407108E+02, 2.792999878E+02 - 6.175222580E+02, 2.795499878E+02 - 6.176038030E+02, 2.792500000E+02 - 6.176853459E+02, 2.787500000E+02 - 6.177668867E+02, 2.788999939E+02 - 6.178484254E+02, 2.786499939E+02 - 6.179299619E+02, 2.791000061E+02 - 6.180114963E+02, 2.785499878E+02 - 6.180930286E+02, 2.786000061E+02 - 6.181745587E+02, 2.797999878E+02 - 6.182560868E+02, 2.787500000E+02 - 6.183376127E+02, 2.786000061E+02 - 6.184191365E+02, 2.784500122E+02 - 6.185006581E+02, 2.788500061E+02 - 6.185821776E+02, 2.783999939E+02 - 6.186636950E+02, 2.798999939E+02 - 6.187452103E+02, 2.779500122E+02 - 6.188267234E+02, 2.784500122E+02 - 6.189082344E+02, 2.783999939E+02 - 6.189897433E+02, 2.786000061E+02 - 6.190712500E+02, 2.787999878E+02 - 6.191527546E+02, 2.787500000E+02 - 6.192342570E+02, 2.783999939E+02 - 6.193157574E+02, 2.785000000E+02 - 6.193972556E+02, 2.784500122E+02 - 6.194787516E+02, 2.797000122E+02 - 6.195602455E+02, 2.781499939E+02 - 6.196417373E+02, 2.792000122E+02 - 6.197232269E+02, 2.788500061E+02 - 6.198047144E+02, 2.773500061E+02 - 6.198861998E+02, 2.779500122E+02 - 6.199676830E+02, 2.774500122E+02 - 6.200491641E+02, 2.775499878E+02 - 6.201306430E+02, 2.770499878E+02 - 6.202121198E+02, 2.782999878E+02 - 6.202935944E+02, 2.776000061E+02 - 6.203750669E+02, 2.782500000E+02 - 6.204565373E+02, 2.776499939E+02 - 6.205380055E+02, 2.774500122E+02 - 6.206194715E+02, 2.772999878E+02 - 6.207009355E+02, 2.777000122E+02 - 6.207823972E+02, 2.781499939E+02 - 6.208638568E+02, 2.772999878E+02 - 6.209453143E+02, 2.777000122E+02 - 6.210267696E+02, 2.780000000E+02 - 6.211082228E+02, 2.774500122E+02 - 6.211896738E+02, 2.767000122E+02 - 6.212711227E+02, 2.768999939E+02 - 6.213525694E+02, 2.759500122E+02 - 6.214340139E+02, 2.763999939E+02 - 6.215154563E+02, 2.772500000E+02 - 6.215968966E+02, 2.774500122E+02 - 6.216783347E+02, 2.775499878E+02 - 6.217597706E+02, 2.763500061E+02 - 6.218412044E+02, 2.772999878E+02 - 6.219226360E+02, 2.773500061E+02 - 6.220040655E+02, 2.771000061E+02 - 6.220854928E+02, 2.768999939E+02 - 6.221669179E+02, 2.774500122E+02 - 6.222483409E+02, 2.771000061E+02 - 6.223297618E+02, 2.763999939E+02 - 6.224111804E+02, 2.772500000E+02 - 6.224925969E+02, 2.765000000E+02 - 6.225740113E+02, 2.776000061E+02 - 6.226554234E+02, 2.774500122E+02 - 6.227368334E+02, 2.763999939E+02 - 6.228182413E+02, 2.767000122E+02 - 6.228996470E+02, 2.766000061E+02 - 6.229810505E+02, 2.773999939E+02 - 6.230624518E+02, 2.762000122E+02 - 6.231438510E+02, 2.771000061E+02 - 6.232252480E+02, 2.765000000E+02 - 6.233066429E+02, 2.777500000E+02 - 6.233880355E+02, 2.761499939E+02 - 6.234694260E+02, 2.770499878E+02 - 6.235508143E+02, 2.770499878E+02 - 6.236322005E+02, 2.770499878E+02 - 6.237135845E+02, 2.768999939E+02 - 6.237949663E+02, 2.772000122E+02 - 6.238763459E+02, 2.777000122E+02 - 6.239577234E+02, 2.769500122E+02 - 6.240390987E+02, 2.775000000E+02 - 6.241204718E+02, 2.771000061E+02 - 6.242018427E+02, 2.772500000E+02 - 6.242832115E+02, 2.755499878E+02 - 6.243645781E+02, 2.768999939E+02 - 6.244459425E+02, 2.772000122E+02 - 6.245273047E+02, 2.783500061E+02 - 6.246086647E+02, 2.766000061E+02 - 6.246900226E+02, 2.777500000E+02 - 6.247713783E+02, 2.766000061E+02 - 6.248527318E+02, 2.771499939E+02 - 6.249340831E+02, 2.754500122E+02 - 6.250154322E+02, 2.773999939E+02 - 6.250967791E+02, 2.771000061E+02 - 6.251781239E+02, 2.767999878E+02 - 6.252594665E+02, 2.772999878E+02 - 6.253408069E+02, 2.768999939E+02 - 6.254221451E+02, 2.767000122E+02 - 6.255034811E+02, 2.762999878E+02 - 6.255848149E+02, 2.768999939E+02 - 6.256661466E+02, 2.772000122E+02 - 6.257474760E+02, 2.770000000E+02 - 6.258288033E+02, 2.772500000E+02 - 6.259101283E+02, 2.767500000E+02 - 6.259914512E+02, 2.761000061E+02 - 6.260727719E+02, 2.764500122E+02 - 6.261540904E+02, 2.774500122E+02 - 6.262354067E+02, 2.773999939E+02 - 6.263167208E+02, 2.768500061E+02 - 6.263980327E+02, 2.760000000E+02 - 6.264793424E+02, 2.770499878E+02 - 6.265606499E+02, 2.778500061E+02 - 6.266419552E+02, 2.774500122E+02 - 6.267232583E+02, 2.776499939E+02 - 6.268045592E+02, 2.763500061E+02 - 6.268858580E+02, 2.773500061E+02 - 6.269671545E+02, 2.766000061E+02 - 6.270484488E+02, 2.775000000E+02 - 6.271297409E+02, 2.766000061E+02 - 6.272110308E+02, 2.767999878E+02 - 6.272923186E+02, 2.765000000E+02 - 6.273736041E+02, 2.767999878E+02 - 6.274548874E+02, 2.773999939E+02 - 6.275361685E+02, 2.773999939E+02 - 6.276174474E+02, 2.768500061E+02 - 6.276987241E+02, 2.762999878E+02 - 6.277799985E+02, 2.762500000E+02 - 6.278612708E+02, 2.757500000E+02 - 6.279425409E+02, 2.767500000E+02 - 6.280238088E+02, 2.767999878E+02 - 6.281050744E+02, 2.763999939E+02 - 6.281863378E+02, 2.763500061E+02 - 6.282675991E+02, 2.771499939E+02 - 6.283488581E+02, 2.761499939E+02 - 6.284301149E+02, 2.761499939E+02 - 6.285113695E+02, 2.766499939E+02 - 6.285926219E+02, 2.767500000E+02 - 6.286738720E+02, 2.769500122E+02 - 6.287551200E+02, 2.761000061E+02 - 6.288363657E+02, 2.763500061E+02 - 6.289176092E+02, 2.772999878E+02 - 6.289988505E+02, 2.763999939E+02 - 6.290800896E+02, 2.773999939E+02 - 6.291613265E+02, 2.763500061E+02 - 6.292425611E+02, 2.768500061E+02 - 6.293237936E+02, 2.767999878E+02 - 6.294050238E+02, 2.770499878E+02 - 6.294862518E+02, 2.767999878E+02 - 6.295674775E+02, 2.762999878E+02 - 6.296487011E+02, 2.762500000E+02 - 6.297299224E+02, 2.767000122E+02 - 6.298111415E+02, 2.776499939E+02 - 6.298923584E+02, 2.763500061E+02 - 6.299735730E+02, 2.775000000E+02 - 6.300547854E+02, 2.772000122E+02 - 6.301359956E+02, 2.763999939E+02 - 6.302172036E+02, 2.765000000E+02 - 6.302984093E+02, 2.776000061E+02 - 6.303796128E+02, 2.767500000E+02 - 6.304608141E+02, 2.775000000E+02 - 6.305420132E+02, 2.775000000E+02 - 6.306232100E+02, 2.766499939E+02 - 6.307044046E+02, 2.775000000E+02 - 6.307855969E+02, 2.768999939E+02 - 6.308667871E+02, 2.760499878E+02 - 6.309479750E+02, 2.767999878E+02 - 6.310291606E+02, 2.762999878E+02 - 6.311103440E+02, 2.757500000E+02 - 6.311915252E+02, 2.770000000E+02 - 6.312727042E+02, 2.768999939E+02 - 6.313538809E+02, 2.770499878E+02 - 6.314350554E+02, 2.763500061E+02 - 6.315162276E+02, 2.771499939E+02 - 6.315973976E+02, 2.755000000E+02 - 6.316785654E+02, 2.757500000E+02 - 6.317597309E+02, 2.767500000E+02 - 6.318408942E+02, 2.768999939E+02 - 6.319220552E+02, 2.760000000E+02 - 6.320032140E+02, 2.771000061E+02 - 6.320843706E+02, 2.766000061E+02 - 6.321655249E+02, 2.765000000E+02 - 6.322466770E+02, 2.756000061E+02 - 6.323278268E+02, 2.762500000E+02 - 6.324089744E+02, 2.760499878E+02 - 6.324901197E+02, 2.761499939E+02 - 6.325712628E+02, 2.757000122E+02 - 6.326524036E+02, 2.762000122E+02 - 6.327335422E+02, 2.754500122E+02 - 6.328146786E+02, 2.757999878E+02 - 6.328958127E+02, 2.765000000E+02 - 6.329769445E+02, 2.767000122E+02 - 6.330580741E+02, 2.760000000E+02 - 6.331392015E+02, 2.755000000E+02 - 6.332203265E+02, 2.758999939E+02 - 6.333014494E+02, 2.754500122E+02 - 6.333825700E+02, 2.761000061E+02 - 6.334636883E+02, 2.760000000E+02 - 6.335448044E+02, 2.767500000E+02 - 6.336259182E+02, 2.752999878E+02 - 6.337070297E+02, 2.766000061E+02 - 6.337881390E+02, 2.763999939E+02 - 6.338692461E+02, 2.765499878E+02 - 6.339503509E+02, 2.748999939E+02 - 6.340314534E+02, 2.767000122E+02 - 6.341125537E+02, 2.760499878E+02 - 6.341936517E+02, 2.770499878E+02 - 6.342747474E+02, 2.761000061E+02 - 6.343558409E+02, 2.761000061E+02 - 6.344369322E+02, 2.747999878E+02 - 6.345180211E+02, 2.765499878E+02 - 6.345991078E+02, 2.760499878E+02 - 6.346801922E+02, 2.766499939E+02 - 6.347612744E+02, 2.760000000E+02 - 6.348423543E+02, 2.760000000E+02 - 6.349234320E+02, 2.756499939E+02 - 6.350045073E+02, 2.757999878E+02 - 6.350855804E+02, 2.756000061E+02 - 6.351666513E+02, 2.765000000E+02 - 6.352477198E+02, 2.771499939E+02 - 6.353287861E+02, 2.752999878E+02 - 6.354098501E+02, 2.760000000E+02 - 6.354909119E+02, 2.752000122E+02 - 6.355719714E+02, 2.764500122E+02 - 6.356530286E+02, 2.766499939E+02 - 6.357340835E+02, 2.763999939E+02 - 6.358151362E+02, 2.761000061E+02 - 6.358961866E+02, 2.766499939E+02 - 6.359772347E+02, 2.757000122E+02 - 6.360582805E+02, 2.758500061E+02 - 6.361393241E+02, 2.757999878E+02 - 6.362203654E+02, 2.754500122E+02 - 6.363014044E+02, 2.762500000E+02 - 6.363824411E+02, 2.755499878E+02 - 6.364634756E+02, 2.763999939E+02 - 6.365445077E+02, 2.761499939E+02 - 6.366255376E+02, 2.755000000E+02 - 6.367065652E+02, 2.765499878E+02 - 6.367875905E+02, 2.759500122E+02 - 6.368686136E+02, 2.761499939E+02 - 6.369496344E+02, 2.758999939E+02 - 6.370306528E+02, 2.747999878E+02 - 6.371116690E+02, 2.758500061E+02 - 6.371926829E+02, 2.752999878E+02 - 6.372736945E+02, 2.760499878E+02 - 6.373547039E+02, 2.765499878E+02 - 6.374357109E+02, 2.756000061E+02 - 6.375167157E+02, 2.761000061E+02 - 6.375977182E+02, 2.757000122E+02 - 6.376787183E+02, 2.757000122E+02 - 6.377597162E+02, 2.757000122E+02 - 6.378407118E+02, 2.767500000E+02 - 6.379217051E+02, 2.755000000E+02 - 6.380026961E+02, 2.765499878E+02 - 6.380836849E+02, 2.756000061E+02 - 6.381646713E+02, 2.756000061E+02 - 6.382456554E+02, 2.758999939E+02 - 6.383266373E+02, 2.750499878E+02 - 6.384076168E+02, 2.752000122E+02 - 6.384885941E+02, 2.755000000E+02 - 6.385695690E+02, 2.755000000E+02 - 6.386505417E+02, 2.766499939E+02 - 6.387315120E+02, 2.757500000E+02 - 6.388124801E+02, 2.755000000E+02 - 6.388934459E+02, 2.758999939E+02 - 6.389744093E+02, 2.762000122E+02 - 6.390553705E+02, 2.752500000E+02 - 6.391363294E+02, 2.748999939E+02 - 6.392172859E+02, 2.755499878E+02 - 6.392982402E+02, 2.765000000E+02 - 6.393791921E+02, 2.746499939E+02 - 6.394601418E+02, 2.752999878E+02 - 6.395410891E+02, 2.753999939E+02 - 6.396220341E+02, 2.752999878E+02 - 6.397029769E+02, 2.755499878E+02 - 6.397839173E+02, 2.755499878E+02 - 6.398648554E+02, 2.763500061E+02 - 6.399457912E+02, 2.761000061E+02 - 6.400267247E+02, 2.757000122E+02 - 6.401076559E+02, 2.753999939E+02 - 6.401885848E+02, 2.760499878E+02 - 6.402695114E+02, 2.758500061E+02 - 6.403504356E+02, 2.755000000E+02 - 6.404313576E+02, 2.759500122E+02 - 6.405122772E+02, 2.751000061E+02 - 6.405931945E+02, 2.765000000E+02 - 6.406741095E+02, 2.762999878E+02 - 6.407550222E+02, 2.754500122E+02 - 6.408359326E+02, 2.769500122E+02 - 6.409168406E+02, 2.757500000E+02 - 6.409977464E+02, 2.761499939E+02 - 6.410786498E+02, 2.755499878E+02 - 6.411595509E+02, 2.761000061E+02 - 6.412404497E+02, 2.758999939E+02 - 6.413213462E+02, 2.762500000E+02 - 6.414022403E+02, 2.757000122E+02 - 6.414831322E+02, 2.757999878E+02 - 6.415640217E+02, 2.760000000E+02 - 6.416449088E+02, 2.762500000E+02 - 6.417257937E+02, 2.752999878E+02 - 6.418066762E+02, 2.754500122E+02 - 6.418875565E+02, 2.752000122E+02 - 6.419684343E+02, 2.757999878E+02 - 6.420493099E+02, 2.758500061E+02 - 6.421301831E+02, 2.753999939E+02 - 6.422110541E+02, 2.747999878E+02 - 6.422919226E+02, 2.751000061E+02 - 6.423727889E+02, 2.757500000E+02 - 6.424536528E+02, 2.757000122E+02 - 6.425345144E+02, 2.757999878E+02 - 6.426153737E+02, 2.758999939E+02 - 6.426962306E+02, 2.762999878E+02 - 6.427770852E+02, 2.750000000E+02 - 6.428579375E+02, 2.757999878E+02 - 6.429387874E+02, 2.757999878E+02 - 6.430196350E+02, 2.762500000E+02 - 6.431004803E+02, 2.751499939E+02 - 6.431813232E+02, 2.760499878E+02 - 6.432621639E+02, 2.766499939E+02 - 6.433430021E+02, 2.747999878E+02 - 6.434238380E+02, 2.760000000E+02 - 6.435046716E+02, 2.755000000E+02 - 6.435855029E+02, 2.747999878E+02 - 6.436663318E+02, 2.750000000E+02 - 6.437471584E+02, 2.753999939E+02 - 6.438279826E+02, 2.754500122E+02 - 6.439088045E+02, 2.750000000E+02 - 6.439896241E+02, 2.752999878E+02 - 6.440704413E+02, 2.757000122E+02 - 6.441512561E+02, 2.751499939E+02 - 6.442320686E+02, 2.751499939E+02 - 6.443128788E+02, 2.759500122E+02 - 6.443936867E+02, 2.752999878E+02 - 6.444744922E+02, 2.752500000E+02 - 6.445552953E+02, 2.754500122E+02 - 6.446360961E+02, 2.756000061E+02 - 6.447168945E+02, 2.749500122E+02 - 6.447976906E+02, 2.758500061E+02 - 6.448784844E+02, 2.752500000E+02 - 6.449592758E+02, 2.752500000E+02 - 6.450400648E+02, 2.748999939E+02 - 6.451208515E+02, 2.761499939E+02 - 6.452016359E+02, 2.761499939E+02 - 6.452824179E+02, 2.751499939E+02 - 6.453631975E+02, 2.750499878E+02 - 6.454439748E+02, 2.754500122E+02 - 6.455247498E+02, 2.751499939E+02 - 6.456055223E+02, 2.754500122E+02 - 6.456862926E+02, 2.750000000E+02 - 6.457670604E+02, 2.746000061E+02 - 6.458478259E+02, 2.752500000E+02 - 6.459285891E+02, 2.752999878E+02 - 6.460093499E+02, 2.753500061E+02 - 6.460901083E+02, 2.757000122E+02 - 6.461708644E+02, 2.753999939E+02 - 6.462516181E+02, 2.757999878E+02 - 6.463323695E+02, 2.750000000E+02 - 6.464131185E+02, 2.748500061E+02 - 6.464938651E+02, 2.752500000E+02 - 6.465746094E+02, 2.751000061E+02 - 6.466553513E+02, 2.765000000E+02 - 6.467360908E+02, 2.750000000E+02 - 6.468168280E+02, 2.755000000E+02 - 6.468975628E+02, 2.754500122E+02 - 6.469782953E+02, 2.750499878E+02 - 6.470590253E+02, 2.756499939E+02 - 6.471397531E+02, 2.754500122E+02 - 6.472204784E+02, 2.757000122E+02 - 6.473012014E+02, 2.753999939E+02 - 6.473819220E+02, 2.750000000E+02 - 6.474626402E+02, 2.742999878E+02 - 6.475433561E+02, 2.752999878E+02 - 6.476240696E+02, 2.753500061E+02 - 6.477047807E+02, 2.757999878E+02 - 6.477854894E+02, 2.752000122E+02 - 6.478661958E+02, 2.748999939E+02 - 6.479468998E+02, 2.755000000E+02 - 6.480276014E+02, 2.761000061E+02 - 6.481083007E+02, 2.742999878E+02 - 6.481889976E+02, 2.752500000E+02 - 6.482696921E+02, 2.747999878E+02 - 6.483503842E+02, 2.755499878E+02 - 6.484310739E+02, 2.752500000E+02 - 6.485117613E+02, 2.751000061E+02 - 6.485924463E+02, 2.749500122E+02 - 6.486731289E+02, 2.755499878E+02 - 6.487538091E+02, 2.752999878E+02 - 6.488344869E+02, 2.763500061E+02 - 6.489151624E+02, 2.765499878E+02 - 6.489958355E+02, 2.757500000E+02 - 6.490765062E+02, 2.750000000E+02 - 6.491571745E+02, 2.744500122E+02 - 6.492378404E+02, 2.750499878E+02 - 6.493185039E+02, 2.748500061E+02 - 6.493991651E+02, 2.749500122E+02 - 6.494798239E+02, 2.747000122E+02 - 6.495604802E+02, 2.761499939E+02 - 6.496411342E+02, 2.742500000E+02 - 6.497217858E+02, 2.748999939E+02 - 6.498024350E+02, 2.757999878E+02 - 6.498830819E+02, 2.747500000E+02 - 6.499637263E+02, 2.751000061E+02 - 6.500443683E+02, 2.751499939E+02 - 6.501250080E+02, 2.752999878E+02 - 6.502056452E+02, 2.748999939E+02 - 6.502862801E+02, 2.751499939E+02 - 6.503669126E+02, 2.759500122E+02 - 6.504475426E+02, 2.743999939E+02 - 6.505281703E+02, 2.753500061E+02 - 6.506087956E+02, 2.756000061E+02 - 6.506894185E+02, 2.754500122E+02 - 6.507700390E+02, 2.753999939E+02 - 6.508506571E+02, 2.746000061E+02 - 6.509312727E+02, 2.756499939E+02 - 6.510118860E+02, 2.757500000E+02 - 6.510924969E+02, 2.753500061E+02 - 6.511731054E+02, 2.752999878E+02 - 6.512537115E+02, 2.758500061E+02 - 6.513343152E+02, 2.749500122E+02 - 6.514149165E+02, 2.754500122E+02 - 6.514955154E+02, 2.752999878E+02 - 6.515761118E+02, 2.750000000E+02 - 6.516567059E+02, 2.753500061E+02 - 6.517372976E+02, 2.753500061E+02 - 6.518178868E+02, 2.747500000E+02 - 6.518984737E+02, 2.747500000E+02 - 6.519790581E+02, 2.749500122E+02 - 6.520596402E+02, 2.753999939E+02 - 6.521402198E+02, 2.755000000E+02 - 6.522207970E+02, 2.747500000E+02 - 6.523013719E+02, 2.746499939E+02 - 6.523819443E+02, 2.745499878E+02 - 6.524625142E+02, 2.756499939E+02 - 6.525430818E+02, 2.747000122E+02 - 6.526236470E+02, 2.751499939E+02 - 6.527042097E+02, 2.749500122E+02 - 6.527847701E+02, 2.750499878E+02 - 6.528653280E+02, 2.755499878E+02 - 6.529458835E+02, 2.742500000E+02 - 6.530264366E+02, 2.743500061E+02 - 6.531069873E+02, 2.748500061E+02 - 6.531875355E+02, 2.757500000E+02 - 6.532680814E+02, 2.756499939E+02 - 6.533486248E+02, 2.750000000E+02 - 6.534291658E+02, 2.747000122E+02 - 6.535097044E+02, 2.753999939E+02 - 6.535902406E+02, 2.760499878E+02 - 6.536707743E+02, 2.755499878E+02 - 6.537513056E+02, 2.747999878E+02 - 6.538318345E+02, 2.755000000E+02 - 6.539123610E+02, 2.753999939E+02 - 6.539928851E+02, 2.747500000E+02 - 6.540734067E+02, 2.750000000E+02 - 6.541539259E+02, 2.749500122E+02 - 6.542344427E+02, 2.754500122E+02 - 6.543149570E+02, 2.746000061E+02 - 6.543954689E+02, 2.750000000E+02 - 6.544759784E+02, 2.747000122E+02 - 6.545564855E+02, 2.755000000E+02 - 6.546369901E+02, 2.752500000E+02 - 6.547174923E+02, 2.750499878E+02 - 6.547979921E+02, 2.742000122E+02 - 6.548784895E+02, 2.751499939E+02 - 6.549589844E+02, 2.757999878E+02 - 6.550394769E+02, 2.752500000E+02 - 6.551199669E+02, 2.753500061E+02 - 6.552004545E+02, 2.751000061E+02 - 6.552809397E+02, 2.753500061E+02 - 6.553614225E+02, 2.747500000E+02 - 6.554419028E+02, 2.749500122E+02 - 6.555223806E+02, 2.749500122E+02 - 6.556028561E+02, 2.749500122E+02 - 6.556833291E+02, 2.747999878E+02 - 6.557637996E+02, 2.754500122E+02 - 6.558442678E+02, 2.749500122E+02 - 6.559247335E+02, 2.761499939E+02 - 6.560051967E+02, 2.740000000E+02 - 6.560856575E+02, 2.750499878E+02 - 6.561661159E+02, 2.757500000E+02 - 6.562465718E+02, 2.748500061E+02 - 6.563270253E+02, 2.748999939E+02 - 6.564074763E+02, 2.747999878E+02 - 6.564879249E+02, 2.752500000E+02 - 6.565683710E+02, 2.741499939E+02 - 6.566488147E+02, 2.752000122E+02 - 6.567292560E+02, 2.750000000E+02 - 6.568096948E+02, 2.746499939E+02 - 6.568901311E+02, 2.738500061E+02 - 6.569705651E+02, 2.750000000E+02 - 6.570509965E+02, 2.747000122E+02 - 6.571314255E+02, 2.755499878E+02 - 6.572118521E+02, 2.746000061E+02 - 6.572922762E+02, 2.743500061E+02 - 6.573726979E+02, 2.745000000E+02 - 6.574531171E+02, 2.753999939E+02 - 6.575335338E+02, 2.751499939E+02 - 6.576139481E+02, 2.750499878E+02 - 6.576943600E+02, 2.753999939E+02 - 6.577747694E+02, 2.748999939E+02 - 6.578551763E+02, 2.747500000E+02 - 6.579355808E+02, 2.752000122E+02 - 6.580159828E+02, 2.750000000E+02 - 6.580963824E+02, 2.747500000E+02 - 6.581767795E+02, 2.745000000E+02 - 6.582571741E+02, 2.752000122E+02 - 6.583375663E+02, 2.739500122E+02 - 6.584179561E+02, 2.745499878E+02 - 6.584983433E+02, 2.748999939E+02 - 6.585787281E+02, 2.753999939E+02 - 6.586591105E+02, 2.757000122E+02 - 6.587394904E+02, 2.750000000E+02 - 6.588198678E+02, 2.742999878E+02 - 6.589002428E+02, 2.747000122E+02 - 6.589806153E+02, 2.747999878E+02 - 6.590609853E+02, 2.752500000E+02 - 6.591413529E+02, 2.751000061E+02 - 6.592217180E+02, 2.759500122E+02 - 6.593020806E+02, 2.745499878E+02 - 6.593824407E+02, 2.753500061E+02 - 6.594627984E+02, 2.741499939E+02 - 6.595431537E+02, 2.753500061E+02 - 6.596235064E+02, 2.751499939E+02 - 6.597038567E+02, 2.748500061E+02 - 6.597842045E+02, 2.751000061E+02 - 6.598645499E+02, 2.747999878E+02 - 6.599448927E+02, 2.747999878E+02 - 6.600252331E+02, 2.749500122E+02 - 6.601055711E+02, 2.747500000E+02 - 6.601859065E+02, 2.753999939E+02 - 6.602662395E+02, 2.757999878E+02 - 6.603465700E+02, 2.747000122E+02 - 6.604268980E+02, 2.754500122E+02 - 6.605072236E+02, 2.753999939E+02 - 6.605875466E+02, 2.746000061E+02 - 6.606678672E+02, 2.752999878E+02 - 6.607481853E+02, 2.751000061E+02 - 6.608285010E+02, 2.743500061E+02 - 6.609088141E+02, 2.756000061E+02 - 6.609891248E+02, 2.749500122E+02 - 6.610694330E+02, 2.747500000E+02 - 6.611497387E+02, 2.742500000E+02 - 6.612300419E+02, 2.745499878E+02 - 6.613103426E+02, 2.749500122E+02 - 6.613906409E+02, 2.752000122E+02 - 6.614709367E+02, 2.751499939E+02 - 6.615512300E+02, 2.746499939E+02 - 6.616315208E+02, 2.751499939E+02 - 6.617118091E+02, 2.748999939E+02 - 6.617920949E+02, 2.752500000E+02 - 6.618723782E+02, 2.746499939E+02 diff --git a/tests/data_multi/config_file.json b/tests/data_multi/config_file.json deleted file mode 100644 index 7e06aa4..0000000 --- a/tests/data_multi/config_file.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/associated_source": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/serial_number": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_number": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/gain_setting": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/device_information/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/attached_to": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/measurement": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value/@units": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/experiment_description": "@eln", - "/ENTRY[entry]/experiment_type": "@eln", - "/ENTRY[entry]/raman_experiment_type": "@eln", - "/ENTRY[entry]/title": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@url": "@eln", - "/ENTRY[entry]/@default": "data", - "/ENTRY[entry]/DATA[data]/@signal": "y_values", - "/ENTRY[entry]/DATA[data]/y_values": "@data:y_values", - "/ENTRY[entry]/DATA[data]/x_values": "@data:x_values", - "/ENTRY[entry]/DATA[data]/y_values/@units": "@eln:/ENTRY[entry]/data/unit_y", - "/ENTRY[entry]/DATA[data]/x_values/@units": "@eln:/ENTRY[entry]/data/unit_x", - "/ENTRY[entry]/DATA[data]/y_values/@long_name": "@eln:/ENTRY[entry]/data/longname_y", - "/ENTRY[entry]/DATA[data]/x_values/@long_name": "@eln:/ENTRY[entry]/data/longname_x", - "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "@eln:/ENTRY[entry]/data/longname_x_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" - } - diff --git a/tests/data_multi/eln_data.yaml b/tests/data_multi/eln_data.yaml deleted file mode 100644 index cd6befb..0000000 --- a/tests/data_multi/eln_data.yaml +++ /dev/null @@ -1,124 +0,0 @@ -# Original meta_data_1.txt file below -#Spectrum--000 -# -#General: -# System ID: 100-1100-292 -# Start Time: 2:04:54 PM -# Start Date: Friday, June 21, 2024 -# Duration: 0h 0m 21s -# User Name: Witec -# Sample Name: -# Configuration: Raman CCD1 -# -# UHTS300M: -# Excitation Wavelength [nm]: 532.100 -# Grating: G1: 600 g/mm BLZ=500nm -# Center Wavelength [nm]: 596.989 -# Spectral Center [rel. 1/cm]: 2042.739 -# -# DU970_BV: -# Serial Number: 6358 -# Readout Mode: FVB (1-200) -# Output Amplifier: Conventional -# Vertical Shift Speed [µs]: 9.75 -# Horizontal Shift Speed [MHz]: 0.050 -# Preamplifier Gain: 1.00 -# Cycle Time [sec]: 1.00002 -# Sensor Temperature [°C]: -56 -# -# Number Of Accumulations: 20 -# Integration Time [s]: 1.00000 -# -# Objective: -# Objective Name: Nikon 20x 20x / 0.4 -# Objective Magnification: 20.0 -# -# Sample Location (global position): -# Position X [µm]: 0.000 -# Position Y [µm]: 0.000 -# Position Z [µm]: 0.000 - -data: - unit_x: nm - unit_y: counts - longname_x: Wavelength - longname_y: Raman Intensity - longname_x_raman: Raman Shift -instrument: - scattering_configuration: z(xx)-z - beam_incident: - wavelength: - value: 532.1 - unit: nm - average_power: - value: 60 - unit: mW - parameter_reliability: nominal - associated_source: entry/instrument/source_532nmlaser - detector_ccd: - detector_channel_type: multichannel - count_time: - value: 1.0 - unit: s - number_of_cycles: - value: 20 - unit: counts - detector_type: CCD - device_information: - model: DU970_BV - serial_number: "6358" - detector_number: - - 1600 - - 200 - gain_setting: 1.0 - temperature_sensor: - attached_to: CCD - measurement: temperature - value: - value: -56 - unit: celsius - source_532nmlaser: - type: laser #DPSS - power: - value: 80 - unit: mW - device_information: - vendor: Witec - model: Alpha Raman - objective_lens: - type: objective - device_information: - vendor: Nikon - model: "Nikon 20x" - magnification: 20 - numerical_aperture: 0.4 - monochromator: - device_information: - model: UHTS300M - grating: - period: - value: 600 - unit: counts / mm - wavelength: - value: 596.989 ##Spectral Center [rel. 1/cm]: 2042.739 - unit: nm -sample: - name: Silicon Wafer - atom_types: Si -user: - address: Lennestr. 5, 04318 Leipzig - affiliation: Universität Leipzig - email: ron.hildebrandt@physik.hu-berlin.de - name: Hildebrandt, Ron -experiment_description: Raman spectrum of commercial silicon wafer -experiment_type: Raman spectroscopy -raman_experiment_type: non-resonant Raman spectroscopy -title: Si-Wafer -start_time: '2024-06-21T14:04:54+02:00' -definition: NXraman -definition/@url: https://github.com/FAIRmat-NFDI/nexus_definitions/blob/fairmat/contributed_definitions/NXraman.nxdl.xml # can be removed later, if the NeXus as submodule in pynxtools is updated, just in to let CICD pass. -measurement_file_meta_data: - delimiter: "," - skip_lines: 17 - - diff --git a/tests/data_multi/example.nxs b/tests/data_multi/example.nxs deleted file mode 100644 index 907e843e3958b3b0b0c35c32d1ea496ab93a63ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77408 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 From 363897b9eb4329818fff773d8a0db30ea9f8ef55 Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Tue, 10 Dec 2024 09:59:42 +0100 Subject: [PATCH 09/14] clean up from old reader files --- src/pynxtools_raman/mock.py | 150 -------------- src/pynxtools_raman_multiformat/README.md | 9 - src/pynxtools_raman_multiformat/reader.py | 232 ---------------------- 3 files changed, 391 deletions(-) delete mode 100644 src/pynxtools_raman/mock.py delete mode 100644 src/pynxtools_raman_multiformat/README.md delete mode 100644 src/pynxtools_raman_multiformat/reader.py diff --git a/src/pynxtools_raman/mock.py b/src/pynxtools_raman/mock.py deleted file mode 100644 index ad1b2d9..0000000 --- a/src/pynxtools_raman/mock.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -"""A generic class for generating duplicate outputs for ellipsometry""" - -import random - -import ase -import numpy as np -from pynxtools.dataconverter.helpers import extract_atom_types - - -class MockEllips: - """A generic class for generating duplicate outputs for ELLIPSOMETRY - Contains: - - mock_sample: - Chooses random entry from sample_list, overwrites sample_name - and extracts atom_types - - mock_chemical_formula: - Creates a list of chemical formulas consisting of two atom types - - modify_spectral_range: - Change spectral range (i.e. wavelength array) and step size. - - mock_angles: - Change value and number of incident angles - - choose_data_type: - Chooses random entry from data_types - - mock_signals: - Mock data if data_type is Psi/Delta or tan(Psi)/cos(Delta) - - mock_mueller_matrix: - Mock data if data_type is Mueller matrix - - mock_template: - Creates mock ellipsometry data (by calling the above routines) - """ - - def __init__(self, data_template) -> None: - self.data = data_template["measured_data"] - self.wavelength = data_template[ - "data_collection/NAME_spectrum[wavelength_spectrum]" - ] - self.atom_types = data_template["atom_types"] - self.sample_list: list = [] - self.data_types = ["Psi/Delta", "tan(Psi)/cos(Delta)", "Mueller matrix"] - self.angles: list = [] - self.number_of_signals = 0 - - def mock_sample(self, data_template) -> None: - """Chooses random entry from sample_list, overwrites sample_name - and extracts atom_types - """ - self.mock_chemical_formula() - name = random.choice(self.sample_list) - self.atom_types = extract_atom_types(name) - data_template["sample_name"] = name - data_template["atom_types"] = self.atom_types - data_template["layer_structure"] = f"{name} bulk" - data_template["experiment_description"] = f"RC2 scan on {name} bulk" - - def choose_data_type(self, data_template) -> None: - """Chooses random entry from data_types""" - data_type = random.choice(self.data_types) - data_template["data_type"] = data_type - if data_type == "Mueller matrix": - self.number_of_signals = 16 - elif data_type in ("Psi/Delta", "tan(Psi)/cos(Delta)"): - self.number_of_signals = 2 - - def mock_chemical_formula(self) -> None: - """Creates a list of chemical formulas consisting of two atom types""" - part_1 = ase.atom.chemical_symbols[1:] - part_2 = list(range(2, 20, 1)) - - for el1 in part_1: - for na1 in part_2: - for el2 in part_1: - for na2 in part_2: - chemical_formula = f"{el1}{na1}{el2}{na2}" - if el1 != el2: - self.sample_list.append(chemical_formula) - - def mock_angles(self, data_template) -> None: - """Change value and number of incident angles""" - angle_list = [40, 45, 50, 55, 60, 65, 70, 75, 80] - for _ in range(random.randrange(1, 4)): - angle = random.choice(angle_list) - self.angles.append(angle) - angle_list.remove(angle) - self.angles.sort() - data_template["angle_of_incidence"] = self.angles - if self.number_of_signals == 2: - self.mock_signals(data_template) - elif self.number_of_signals == 16: - self.mock_mueller_matrix(data_template) - - def mock_signals(self, data_template) -> None: - """Mock data if data_type is Psi/Delta or tan(Psi)/cos(Delta) - considering the (new) number of incident angles - """ - my_numpy_array = np.empty( - [len(self.angles), self.number_of_signals, len(self.wavelength)] - ) - for index in range(0, len(self.angles)): - noise = np.random.normal(0, 0.5, self.data[0, 0, :].size) - my_numpy_array[index] = self.data[0] * random.uniform(0.5, 1.5) + noise - self.data = my_numpy_array - data_template["measured_data"] = my_numpy_array - - def mock_mueller_matrix(self, data_template) -> None: - """Mock data if data_type is Mueller matrix (i.e. 16 elements/signals) - considering the (new) number of incident angles - """ - my_numpy_array = np.empty( - [len(self.angles), self.number_of_signals, len(self.wavelength)] - ) - for idx in range(0, len(self.angles)): - noise = np.random.normal(0, 0.1, self.data[0, 0, :].size) - for m_idx in range(1, self.number_of_signals): - my_numpy_array[idx][m_idx] = self.data[0][0] * random.uniform(0.5, 1.0) - my_numpy_array[idx][m_idx] += noise - my_numpy_array[idx][0] = my_numpy_array[0][0] / my_numpy_array[0][0] - data_template["measured_data"] = my_numpy_array - - def modify_spectral_range(self, data_template) -> None: - """Change spectral range (i.e. wavlength array) and step size, - while length of the wavelength array remains the same. - """ - temp = random.uniform(0.25, 23) - data_template["data_collection/NAME_spectrum[wavelength_spectrum]"] = ( - temp * data_template["data_collection/NAME_spectrum[wavelength_spectrum]"] - ) - - def mock_template(self, data_template) -> None: - """Creates a mock ellipsometry template""" - self.mock_sample(data_template) - self.modify_spectral_range(data_template) - self.choose_data_type(data_template) - self.mock_angles(data_template) diff --git a/src/pynxtools_raman_multiformat/README.md b/src/pynxtools_raman_multiformat/README.md deleted file mode 100644 index ae39aaf..0000000 --- a/src/pynxtools_raman_multiformat/README.md +++ /dev/null @@ -1,9 +0,0 @@ -## Multiformat data reader for Raman spectroscopy data -This is example data for writing a new data reader based on the [`MultiFormatReader`](https://github.com/FAIRmat-NFDI/pynxtools/blob/master/src/pynxtools/dataconverter/readers/multi/reader.py) from scratch. A how-to guide to implement this reader is available [here](https://fairmat-nfdi.github.io/pynxtools/how-tos/use-multi-format-reader.html) - -## This file types are currently supported: -- Witec Alpha Raman microscope - via ELN file (.yaml) and .txt data file - - -## Examples -Examples can be found in the example folder in the root of this repository. \ No newline at end of file diff --git a/src/pynxtools_raman_multiformat/reader.py b/src/pynxtools_raman_multiformat/reader.py deleted file mode 100644 index cf205cd..0000000 --- a/src/pynxtools_raman_multiformat/reader.py +++ /dev/null @@ -1,232 +0,0 @@ -# Copyright The NOMAD Authors. -# -# This file is part of NOMAD. See https://nomad-lab.eu for further info. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -"""An example reader implementation based on the MultiFormatReader.""" - -import logging -from typing import Dict, Any -import h5py -import numpy as np - -from pynxtools.dataconverter.readers.multi.reader import MultiFormatReader -from pynxtools.dataconverter.readers.utils import parse_yml - -logger = logging.getLogger("pynxtools") - -CONVERT_DICT = {} - - -class RamanReaderMulti(MultiFormatReader): - """MyDataReader implementation for the DataConverter to convert mydata to NeXus.""" - - supported_nxdls = ["NXraman"] - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.txt_data: Dict[str, Any] = {} - - self.extensions = { - ".yml": self.handle_eln_file, - ".yaml": self.handle_eln_file, - ".txt": self.handle_txt_file, - ".json": self.set_config_file} - - self.txt_line_skips = None - - def set_config_file(self, file_path: str) -> Dict[str, Any]: - if self.config_file is not None: - logger.info( - f"Config file already set. Replaced by the new file {file_path}." - ) - self.config_file = file_path - return {} - - def handle_eln_file(self, file_path: str) -> Dict[str, Any]: - self.eln_data = parse_yml( - file_path, - convert_dict=CONVERT_DICT, - parent_key="/ENTRY[entry]", - ) - #self.txt_line_skips = self.eln_data.get('/ENTRY[entry]/skip') - - return {} - - def handle_txt_file(self, filepath) -> Dict[str, Any]: - self.read_txt_file(filepath) - return {} - - def get_attr(self, key: str, path: str) -> Any: - """ - Get the metadata that was stored in the main(=data) file. - """ - - if self.txt_data is None: - return None - return self.txt_data.get(path) - - def read_txt_file(self, filepath): - """ - Read a .txt file from Witec Alpha Raman spectrometer and save the header and measurement data. - """ - with open(filepath, "r") as file: - lines = file.readlines() - - # Initialize dictionaries to hold header and data sections - header_dict = {} - data = [] - line_count = 0 - data_mini_header_length = None - - # Track current section - current_section = None - - for line in lines: - line_count += 1 - # Remove any leading/trailing whitespace - line = line.strip() - # Go through the lines and define two different regions "Header" and - # "Data", as these need different methods to extract the data. - if line.startswith("[Header]"): - current_section = "header" - continue - elif line.startswith("[Data]"): - data_mini_header_length = line_count + 2 - current_section = "data" - - continue - - # Parse the header section - if current_section == "header" and "=" in line: - key, value = line.split("=", 1) - header_dict[key.strip()] = value.strip() - - # Parse the data section - elif current_section == "data" and "," in line: - # The header is set excactly until the float-like column data starts - # Rework this later to extract full metadata - if line_count <= data_mini_header_length: - if line.startswith("[Header]"): - logger.info( - f"[Header] elements in the file {filepath}, are not parsed yet. Consider adden the respective functionality." - ) - if line_count > data_mini_header_length: - values = line.split(",") - data.append([float(values[0].strip()), float(values[1].strip())]) - - # Transform: [[A, B], [C, D], [E, F]] into [[A, C, E], [B, D, F]] - data = [list(item) for item in zip(*data)] - - #transform linewise read data to colum style data - data = np.transpose(data) - - # assign column data with keys - data_dict = { - "data/x_values": data[:, 0], - "data/y_values": data[:, 1] - } - - self.txt_data = data_dict - self.txt_header = header_dict - - - def get_eln_data(self, key: str, path: str) -> Any: - """ - Returns data from the eln file. This is done via the file: "config_file.json". - There are two suations: - 1. The .json file has only a key assigned - 2. The .json file has a key AND a value assigned. - The assigned value should be a "path", which reflects another entry in the eln file. - This acts as eln_path redirection, which is used for example to assign flexible - parameters from the eln_file (units, axisnames, etc.) - """ - if self.eln_data is None: - return None - - # Use the path to get the eln_data (this refers to the 2. case) - if len(path) > 0: - return self.eln_data.get(path) - - # If no path is assigned, use directly the given key to extract - # the eln data/value (this refers to the 1. case) - - # Filtering list, for NeXus concepts which use mixed notation of - # upper and lowercase to ensure correct NXclass labeling. - upper_and_lower_mixed_nexus_concepts = ["/detector_TYPE[", - "/beam_TYPE[", - "/source_TYPE[", - "/polfilter_TYPE[", - "/spectral_filter_TYPE[", - "/temp_control_TYPE[", - "/software_TYPE[", - "/LENS_OPT[" - - ] - if self.eln_data.get(key) is None: - # filter for mixed concept names - for string in upper_and_lower_mixed_nexus_concepts: - key = key.replace(string,"/[") - # add only characters, if they are lower case and if they are not "[" or "]" - result = ''.join([char for char in key if not (char.isupper() or char in '[]')]) - # Filter as well for - result = result.replace("entry",f"ENTRY[{self.callbacks.entry_name}]") - - if self.eln_data.get(result) is not None: - return self.eln_data.get(result) - else: - logger.warning(f"No key found during eln_data processsing for key '{key}' after it's modification to '{result}'.") - return self.eln_data.get(key) - - def get_data(self, key: str, path: str) -> Any: - """Returns measurement data from the given eln_data entry.""" - if path.endswith(("x_values", "y_values","x_values_raman")): - return self.txt_data.get(f"data/{path}") - else: - logger.warning(f"No axis name corresponding to the path {path}.") - - - def post_process(self) -> None: - """ - Post process the Raman data to add the Raman Shift from input laser wavelength and - data wavelengths. - """ - - def transform_nm_to_wavenumber(self, lambda_laser, lambda_measurement): - stokes_raman_shift = -(1e7 / lambda_measurement - 1e7 / lambda_laser) - return stokes_raman_shift - - def get_incident_wavelength_from_NXraman(self): - substring = "/beam_incident/wavelength" - - # Find matching keys with contain this substring - wavelength_keys = [key for key in self.eln_data if substring in key] - # Filter the matching keys for the strings, which contain this substring at the end only - filtered_list = [string for string in wavelength_keys if string.endswith(substring)] - # get the laser wavelength - laser_wavelength = self.eln_data.get(filtered_list[0]) - return laser_wavelength - - laser_wavelength = get_incident_wavelength_from_NXraman(self) - x_values_raman = transform_nm_to_wavenumber(self, laser_wavelength, self.txt_data["data/x_values"]) - - self.txt_data["data/x_values_raman"] = x_values_raman - -READER = RamanReaderMulti - -# Use this command in this .py file folder: -# dataconverter eln_data.yaml Si-wafer-Raman-Spectrum-1.txt -c config_file.json --reader raman_multi --nxdl NXraman --output output_raman.nxs -# -# Remaining Warnings -# WARNING: Missing attribute: "/ENTRY[entry]/definition/@URL" From 1980bff228d3daab3c4f22e3cca0d5661eb84fc6 Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Tue, 10 Dec 2024 12:38:16 +0100 Subject: [PATCH 10/14] extend ROD reader to include missing keys --- .../config/config_file_rod.json | 6 +++- src/pynxtools_raman/reader.py | 28 +++++++++--------- tests/data/rod/example.nxs | Bin 53376 -> 68760 bytes tests/data/witec/example.nxs | Bin 78784 -> 78784 bytes tests/test_reader.py | 2 +- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/pynxtools_raman/config/config_file_rod.json b/src/pynxtools_raman/config/config_file_rod.json index ed49f98..62d4982 100644 --- a/src/pynxtools_raman/config/config_file_rod.json +++ b/src/pynxtools_raman/config/config_file_rod.json @@ -41,6 +41,10 @@ "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "Raman Shift", "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:_raman_spectrum.raman_shift", - "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" + "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm", + "/ENTRY[entry]/experiment_identifier/service": "DOI", + "/ENTRY[entry]/experiment_identifier/identifier": "@data:_journal_paper_doi", + "/ENTRY[entry]/entry_identifier/service": "Raman open databse ID", + "/ENTRY[entry]/entry_identifier/identifier": "@data:_rod_database.code" } diff --git a/src/pynxtools_raman/reader.py b/src/pynxtools_raman/reader.py index 9011fd4..b23acf1 100644 --- a/src/pynxtools_raman/reader.py +++ b/src/pynxtools_raman/reader.py @@ -52,7 +52,7 @@ def __init__(self, *args, **kwargs): self.eln_data: Dict[str, Any] = {} self.config_file: Path - self.meta_data = None + self.missing_meta_data = None self.extensions = { ".yml": self.handle_eln_file, @@ -99,11 +99,19 @@ def read( template = super().read(template, file_paths, objects, suppress_warning=True) # set default data + if self.missing_meta_data: + for key in self.missing_meta_data: + template[ + f"/ENTRY[{self.callbacks.entry_name}]/COLLECTION[unused_rod_keys]/{key}" + ] = f"{self.missing_meta_data[key]}" + template["/@default"] = "entry" return template def handle_rod_file(self, filepath) -> Dict[str, Any]: + print("HANDLE ROD") + # specify default config file for rod files reader_dir = Path(__file__).parent self.config_file = reader_dir.joinpath("config", "config_file_rod.json") # pylint: disable=invalid-type-comment @@ -114,8 +122,7 @@ def handle_rod_file(self, filepath) -> Dict[str, Any]: # get the key and value pairs from the rod file self.raman_data = rod.extract_keys_and_values_from_cif() - self.meta_data = copy.deepcopy(self.raman_data) - self.meta_data_length = len(self.meta_data) + self.missing_meta_data = copy.deepcopy(self.raman_data) # This changes all uppercase string elements to lowercase string elements for the given key, within a given key value pair key_to_make_value_lower_case = "_raman_measurement.environment" @@ -217,17 +224,10 @@ def get_data(self, key: str, path: str) -> Any: value = self.raman_data.get(path) - # to calculate Raman shift for Witec Alpha from eln data - # if key == "/ENTRY[entry]/DATA[data]/x_values_raman": - # witec_laser_wavelength = self.eln_data.get("/ENTRY[entry]/instrument/beam_incident/wavelength") - # return None - - # if self.meta_data: - # print(self.raman_data.keys()) - # print(key, "##", path) - # delete the respective used path/key from the metadata file - # use later the remaining objects in meta data file for postprocessing - # to add the remainin elements to NXcollection + # this filters out the meta data, which is up to now only created for .rod files + + if self.missing_meta_data: + del self.missing_meta_data[path] if value is not None: try: diff --git a/tests/data/rod/example.nxs b/tests/data/rod/example.nxs index 7ddb6e621e2cb3f18e16bbd0704ae0c07450dfb0..55e64f1593d60ae89b710c006ff3eb5883bf9f07 100644 GIT binary patch delta 7355 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 delta 3218 zcmb7GZ%kX)6@T{<;^)Ud8wk%f0UMHHV*)%A5)3S@({>Bnn$&YA%}ts%mKy4`V3^%a zBwL1w7Kv1AhI5*kY|9p^bfpPxd2>=|n>8e%EoF&Hr)F)|QIQX;_|QsZk+yzVwcURY zvq<}}Yx&-L&i&nU&prR{8$PirIg&Hv$w|&hsk#z z*(UgatZo)u8t}9w_#m|aDpl=%K^d#x7IZ7KY8woc-h<}6RX2=d$x*~f&7AuC1ea~~q@M%8o5j&(=vIF%(?Nv9pymC(O`x4Z7A4V89 zg}Slig43ZeYJjgoyI_2~3oI|o5Up^*-0%JlZJ{Xk-w)0E!-X1=W)y_U)1W+bH;g-N zIM@R_9X003gZ!{)=E!&NS)Z9n`qxuC$TCej(g5A>)TeGBa5>~-KepuVd5$ulHI?Jx zlT-k`v{!|Na#_h<9RBiE2<5=F(RJpTUM5DeP@5k6T*l+wP~0EuKb7Kq!v-^gUIfk; zMwG_yu$A;HzV157N0|@OxRXx|dA*`84e`*Cs1;}%KEwtGtCw^-#TnAVPuT*o>aBj& z;rbD$0>V5-k&KQImsAJ%qU8D+pBRUB2s(N+r8jV!EUN(r{v0B8@MPtqC=S2=WExNQ z5K#&*)WkyvbiEK&s8pc16HWTO74&MjRz*wZ7gZ|CgWPH-DuBDHovlR#qpZMDkxYb; zQ%cuZdpNLCo(c!6)qXo!p%RQ!>Elqff-Wa>Rse*wwS;DcPSCXY6|cZok~u3^Vx9Vh zo?*y$k*PULW2q{ehN-EsW1d~aK5IumG;947B}p2KoU=0Ca}boXol4dw^O+{WCaK>4D%YP1sMt=U~oDkNQ{TRde_-KPs9U zaO32lex?j#=`bAneW#KQ4`?%e1N@nM@?2GD<;tSiBM*|dwFZCu4BO=yghS_Jjw!Kd z1V$FDlZ=Li>76(jhp)Z;0BE0CU|}MPXO8IlW<)d7yl`}dHsK*Ackn2@@n)xz4KVOt z2$3gq%O^CP{(4~=cl>-=faQ2rfIRpMPQZ8W=82qawTPKX)Fi zBv0CMvx-lrY)xjCw$hSkPQJu(EKWwpm}eGVgv%esaNsgkBY0iz?|XrR4Bwv;^wf)- zZxd%t>Hm#e6tsMf^F0Rc!W}q4%NIG{@MZ7{qf@WhVd=VzEpMmv7^^{91y~I#W>;By zneS#-iN2a~d_-bCI0j8OVva>|P2&cZGaRdp=`4Clt zd4z`h43CEv5)TP;Qe2T9ZXTWB(&bFmM@1NW&Vh2XQ^{I`DZPd(J-JfpH-yp?TxlV5 zS?Tja>4~h;%PgjJ8Ep3(#W?)>vd(WV>%72Y&Chif=4J-_a!Nl_$euILMNmE`>MlEl zscU2QSmc?xc#&l$jms}ZT*?XP`uc@T@D@hcmLN6gHBfHXlFg4O&?YW E03b>b1^@s6 delta 61 zcmX@`oaMlCmJQi_Vg?pgrsh_L26`sO=9U&_+6IPJ1_s8H1No%*(WIJJ@oitl$0()> E03 Date: Tue, 10 Dec 2024 12:55:27 +0100 Subject: [PATCH 11/14] remove config files and specify to find file for witec --- src/pynxtools_raman/reader.py | 6 ++- tests/data/rod/config_file_rod.json | 46 ----------------- tests/data/witec/config_file_witec.json | 65 ------------------------- 3 files changed, 4 insertions(+), 113 deletions(-) delete mode 100644 tests/data/rod/config_file_rod.json delete mode 100644 tests/data/witec/config_file_witec.json diff --git a/src/pynxtools_raman/reader.py b/src/pynxtools_raman/reader.py index b23acf1..543cd88 100644 --- a/src/pynxtools_raman/reader.py +++ b/src/pynxtools_raman/reader.py @@ -110,8 +110,6 @@ def read( return template def handle_rod_file(self, filepath) -> Dict[str, Any]: - print("HANDLE ROD") - # specify default config file for rod files reader_dir = Path(__file__).parent self.config_file = reader_dir.joinpath("config", "config_file_rod.json") # pylint: disable=invalid-type-comment @@ -161,6 +159,10 @@ def handle_txt_file(self, filepath): Read a .txt file from Witec Alpha Raman spectrometer and save the header and measurement data. """ + # specify default config file + reader_dir = Path(__file__).parent + self.config_file = reader_dir.joinpath("config", "config_file_witec.json") # pylint: disable=invalid-type-comment + self.raman_data = parse_txt_file(self, filepath) self.post_process = post_process_witec.__get__(self, RamanReader) diff --git a/tests/data/rod/config_file_rod.json b/tests/data/rod/config_file_rod.json deleted file mode 100644 index ed49f98..0000000 --- a/tests/data/rod/config_file_rod.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@data:_raman_measurement_device.direction_polarization", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@data:_raman_measurement_device.excitation_laser_wavelength", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "nm", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@data:_raman_measurement_device.power_on_sample", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "mW", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent": "@data:_raman_measurement_device.spot_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability":"nominal", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "s", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@data:_raman_measurement.integration_time", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type":"single-channel", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@data:_raman_measurement_device.excitation_laser_type", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor":"@data:_raman_measurement_device.company", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@data:_raman_measurement_device.model", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@data:_raman_measurement_device.optics_type", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@data:_raman_measurement_device.microscope_objective_magnification", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@data:_raman_measurement_device.microscope_numerical_aperture", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@data:_raman_measurement_device.diffraction_grating", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "lines/mm", - "/ENTRY[entry]/SAMPLE[sample]/name":"@data:_chemical_name_systematic", - "/ENTRY[entry]/SAMPLE[sample]/physical_form":"@data:_[local]_chemical_compound_state", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula":"@data:_chemical_formula_structural", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[medium]/sample_medium":"@data:_raman_measurement.environment", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/measurement":"temperature", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value":"@data:_raman_measurement.temperature", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value/@units":"K", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/measurement":"pressure", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value":"@data:_raman_measurement.pressure", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value/@units":"kPa", - "/ENTRY[entry]/definition/@url": "Remove_this_if_pynxtools_issue_#469_is_solved", - "/ENTRY[entry]/experiment_type": "Raman spectroscopy", - "/ENTRY[entry]/raman_experiment_type": "other", - "/ENTRY[entry]/title": "@data:_chemical_name_mineral", - "/ENTRY[entry]/start_time": "@data:_raman_measurement.datetime_initiated", - "/ENTRY[entry]/@default": "data", - "/ENTRY[entry]/DATA[data]/@signal": "y_values", - "/ENTRY[entry]/DATA[data]/y_values": "@data:_raman_spectrum.intensity", - "/ENTRY[entry]/DATA[data]/y_values/@units": "arb. units", - "/ENTRY[entry]/DATA[data]/y_values/@long_name": "Intensity", - "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "Raman Shift", - "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:_raman_spectrum.raman_shift", - "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" - } - diff --git a/tests/data/witec/config_file_witec.json b/tests/data/witec/config_file_witec.json deleted file mode 100644 index e812abc..0000000 --- a/tests/data/witec/config_file_witec.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/associated_source": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/identifier": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/service": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_number": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/gain_setting": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/device_information/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/attached_to": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/measurement": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value/@units": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/experiment_description": "@eln", - "/ENTRY[entry]/experiment_type": "@eln", - "/ENTRY[entry]/raman_experiment_type": "@eln", - "/ENTRY[entry]/title": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@url": "@eln", - "/ENTRY[entry]/@default": "data", - "/ENTRY[entry]/DATA[data]/@signal": "y_values", - "/ENTRY[entry]/DATA[data]/y_values": "@data:data/y_values", - "/ENTRY[entry]/DATA[data]/x_values": "@data:data/x_values", - "/ENTRY[entry]/DATA[data]/y_values/@units": "@eln:/ENTRY[entry]/data/unit_y", - "/ENTRY[entry]/DATA[data]/x_values/@units": "@eln:/ENTRY[entry]/data/unit_x", - "/ENTRY[entry]/DATA[data]/y_values/@long_name": "@eln:/ENTRY[entry]/data/longname_y", - "/ENTRY[entry]/DATA[data]/x_values/@long_name": "@eln:/ENTRY[entry]/data/longname_x", - "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "@eln:/ENTRY[entry]/data/longname_x_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:data/x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" - } - From 3c430d5fe66f838dd27428301abafe1047c7b07e Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Tue, 10 Dec 2024 12:56:25 +0100 Subject: [PATCH 12/14] remove last two config files --- examples/database/rod/config_file_rod.json | 46 --------------- examples/witec/txt/config_file.json | 65 ---------------------- 2 files changed, 111 deletions(-) delete mode 100644 examples/database/rod/config_file_rod.json delete mode 100644 examples/witec/txt/config_file.json diff --git a/examples/database/rod/config_file_rod.json b/examples/database/rod/config_file_rod.json deleted file mode 100644 index ed49f98..0000000 --- a/examples/database/rod/config_file_rod.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@data:_raman_measurement_device.direction_polarization", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@data:_raman_measurement_device.excitation_laser_wavelength", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "nm", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@data:_raman_measurement_device.power_on_sample", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "mW", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent": "@data:_raman_measurement_device.spot_size", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/extent/@units": "µm", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability":"nominal", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "s", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@data:_raman_measurement.integration_time", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type":"single-channel", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@data:_raman_measurement_device.excitation_laser_type", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor":"@data:_raman_measurement_device.company", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@data:_raman_measurement_device.model", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@data:_raman_measurement_device.optics_type", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@data:_raman_measurement_device.microscope_objective_magnification", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@data:_raman_measurement_device.microscope_numerical_aperture", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@data:_raman_measurement_device.diffraction_grating", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "lines/mm", - "/ENTRY[entry]/SAMPLE[sample]/name":"@data:_chemical_name_systematic", - "/ENTRY[entry]/SAMPLE[sample]/physical_form":"@data:_[local]_chemical_compound_state", - "/ENTRY[entry]/SAMPLE[sample]/chemical_formula":"@data:_chemical_formula_structural", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[medium]/sample_medium":"@data:_raman_measurement.environment", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/measurement":"temperature", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value":"@data:_raman_measurement.temperature", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_temperature]/SENSOR[temperature_sensor]/value/@units":"K", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/measurement":"pressure", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value":"@data:_raman_measurement.pressure", - "/ENTRY[entry]/SAMPLE[sample]/ENVIRONMENT[env_pressure]/SENSOR[sensor]/value/@units":"kPa", - "/ENTRY[entry]/definition/@url": "Remove_this_if_pynxtools_issue_#469_is_solved", - "/ENTRY[entry]/experiment_type": "Raman spectroscopy", - "/ENTRY[entry]/raman_experiment_type": "other", - "/ENTRY[entry]/title": "@data:_chemical_name_mineral", - "/ENTRY[entry]/start_time": "@data:_raman_measurement.datetime_initiated", - "/ENTRY[entry]/@default": "data", - "/ENTRY[entry]/DATA[data]/@signal": "y_values", - "/ENTRY[entry]/DATA[data]/y_values": "@data:_raman_spectrum.intensity", - "/ENTRY[entry]/DATA[data]/y_values/@units": "arb. units", - "/ENTRY[entry]/DATA[data]/y_values/@long_name": "Intensity", - "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "Raman Shift", - "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:_raman_spectrum.raman_shift", - "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" - } - diff --git a/examples/witec/txt/config_file.json b/examples/witec/txt/config_file.json deleted file mode 100644 index e812abc..0000000 --- a/examples/witec/txt/config_file.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "/ENTRY[entry]/INSTRUMENT[instrument]/scattering_configuration": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/wavelength/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/parameter_reliability": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/average_power/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/beam_incident/associated_source": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_channel_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/count_time": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/number_of_cycles/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/identifier": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/FABRICATION[device_information]/IDENTIFIER[identifier]/service": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/detector_number": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/detector_TYPE[detector_ccd]/gain_setting": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source_532nmlaser]/power/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/type": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/vendor": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/FABRICATION[device_information]/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/magnification": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/LENS_OPT[objective_lens]/numerical_aperture": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/device_information/model": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/grating/period/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/MONOCHROMATOR[monochromator]/wavelength/@units": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/attached_to": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/measurement": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value": "@eln", - "/ENTRY[entry]/INSTRUMENT[instrument]/SENSOR[temperature_sensor]/value/@units": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/name": "@eln", - "/ENTRY[entry]/SAMPLE[sample]/atom_types": "@eln", - "/ENTRY[entry]/USER[user]/address": "@eln", - "/ENTRY[entry]/USER[user]/affiliation": "@eln", - "/ENTRY[entry]/USER[user]/email": "@eln", - "/ENTRY[entry]/USER[user]/name": "@eln", - "/ENTRY[entry]/experiment_description": "@eln", - "/ENTRY[entry]/experiment_type": "@eln", - "/ENTRY[entry]/raman_experiment_type": "@eln", - "/ENTRY[entry]/title": "@eln", - "/ENTRY[entry]/start_time": "@eln", - "/ENTRY[entry]/definition": "@eln", - "/ENTRY[entry]/definition/@url": "@eln", - "/ENTRY[entry]/@default": "data", - "/ENTRY[entry]/DATA[data]/@signal": "y_values", - "/ENTRY[entry]/DATA[data]/y_values": "@data:data/y_values", - "/ENTRY[entry]/DATA[data]/x_values": "@data:data/x_values", - "/ENTRY[entry]/DATA[data]/y_values/@units": "@eln:/ENTRY[entry]/data/unit_y", - "/ENTRY[entry]/DATA[data]/x_values/@units": "@eln:/ENTRY[entry]/data/unit_x", - "/ENTRY[entry]/DATA[data]/y_values/@long_name": "@eln:/ENTRY[entry]/data/longname_y", - "/ENTRY[entry]/DATA[data]/x_values/@long_name": "@eln:/ENTRY[entry]/data/longname_x", - "/ENTRY[entry]/DATA[data]/@axes":"x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@long_name": "@eln:/ENTRY[entry]/data/longname_x_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman": "@data:data/x_values_raman", - "/ENTRY[entry]/DATA[data]/x_values_raman/@units": "1/cm" - } - From 934c890b4b014ca4b685058604c0703aa344192e Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Tue, 10 Dec 2024 13:50:09 +0100 Subject: [PATCH 13/14] PR advices from lukas --- src/pynxtools_raman/reader.py | 52 +++++++++++---------------- src/pynxtools_raman/rod/rod_reader.py | 7 ++-- 2 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/pynxtools_raman/reader.py b/src/pynxtools_raman/reader.py index 543cd88..5021697 100644 --- a/src/pynxtools_raman/reader.py +++ b/src/pynxtools_raman/reader.py @@ -62,10 +62,6 @@ def __init__(self, *args, **kwargs): ".rod": self.handle_rod_file, } - # only required if multiple file types are present - # for ext in RamanReader.__prmt_file_ext__: - # self.extensions[ext] = self.handle_data_file - def set_config_file(self, file_path: Path) -> Dict[str, Any]: if self.config_file is not None: logger.info( @@ -83,32 +79,6 @@ def handle_eln_file(self, file_path: str) -> Dict[str, Any]: return {} - def get_attr(self, key: str, path: str) -> Any: - """ - Get the metadata that was stored in the main file. - """ - return self.get_metadata(self.raman_data, path, self.callbacks.entry_name) - - def read( - self, - template: dict = None, - file_paths: Tuple[str] = None, - objects: Tuple[Any] = None, - **kwargs, - ) -> dict: - template = super().read(template, file_paths, objects, suppress_warning=True) - # set default data - - if self.missing_meta_data: - for key in self.missing_meta_data: - template[ - f"/ENTRY[{self.callbacks.entry_name}]/COLLECTION[unused_rod_keys]/{key}" - ] = f"{self.missing_meta_data[key]}" - - template["/@default"] = "entry" - - return template - def handle_rod_file(self, filepath) -> Dict[str, Any]: # specify default config file for rod files reader_dir = Path(__file__).parent @@ -171,7 +141,7 @@ def handle_txt_file(self, filepath): def get_eln_data(self, key: str, path: str) -> Any: """ Returns data from the eln file. This is done via the file: "config_file.json". - There are two suations: + There are two sitations: 1. The .json file has only a key assigned 2. The .json file has a key AND a value assigned. The assigned value should be a "path", which reflects another entry in the eln file. @@ -239,5 +209,25 @@ def get_data(self, key: str, path: str) -> Any: else: logger.warning(f"No axis name corresponding to the path {path}.") + def read( + self, + template: dict = None, + file_paths: Tuple[str] = None, + objects: Tuple[Any] = None, + **kwargs, + ) -> dict: + template = super().read(template, file_paths, objects, suppress_warning=True) + # set default data + + if self.missing_meta_data: + for key in self.missing_meta_data: + template[ + f"/ENTRY[{self.callbacks.entry_name}]/COLLECTION[unused_rod_keys]/{key}" + ] = f"{self.missing_meta_data[key]}" + + template["/@default"] = "entry" + + return template + READER = RamanReader diff --git a/src/pynxtools_raman/rod/rod_reader.py b/src/pynxtools_raman/rod/rod_reader.py index ac1e957..a72ab74 100644 --- a/src/pynxtools_raman/rod/rod_reader.py +++ b/src/pynxtools_raman/rod/rod_reader.py @@ -3,6 +3,8 @@ from pathlib import Path +logger = logging.getLogger("pynxtools") + class RodParser: """ @@ -14,7 +16,6 @@ def __init__(self, *args, **kwargs): self.cif_doc = None self.cif_block = None self.lines = [] - self.n_headerlines = 12 def _read_lines(self, file: Union[str, Path]): """ @@ -42,7 +43,7 @@ def get_string_position(self, string_element: str, check_only_pos_zero=False): line_positions_of_str_element.append(line_number) else: if rod_lines is None: - print("rod_lines_is_none") + logger.info(f"Problem during reading .rod file. 'rod_line' is None.") else: for line_number, lines in enumerate(rod_lines): if string_element in lines: @@ -77,7 +78,7 @@ def get_keys_and_loop_boolean(self, key_positions, key_pos_in_loops): if len(key_positions) == len(cif_key_loop_boolean_dict): return cif_key_loop_boolean_dict else: - print(".cif file parsing warning: Not all cif-keys were parsed.") + logger.info(f".rod file parsing warning: Not all rod-keys were parsed.") return cif_key_loop_boolean_dict def key_pos_after_loop(self, loop_pos_lists, key_pos_list): From 00aad815af6fbe44516b43edb0140a4cc01808b1 Mon Sep 17 00:00:00 2001 From: Ron Hildebrandt Date: Tue, 10 Dec 2024 13:51:53 +0100 Subject: [PATCH 14/14] forgot logging import --- src/pynxtools_raman/rod/rod_reader.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pynxtools_raman/rod/rod_reader.py b/src/pynxtools_raman/rod/rod_reader.py index a72ab74..eaf9b08 100644 --- a/src/pynxtools_raman/rod/rod_reader.py +++ b/src/pynxtools_raman/rod/rod_reader.py @@ -2,6 +2,7 @@ import gemmi # for cif file handling from pathlib import Path +import logging logger = logging.getLogger("pynxtools")