diff --git a/MANIFEST.in b/MANIFEST.in
index 67c856d56..57ba32689 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -8,6 +8,7 @@ recursive-include orangecontrib/spectroscopy/datasets NeaReaderGSF_test/*
recursive-include orangecontrib/spectroscopy/datasets renishaw_test_files/*
recursive-include orangecontrib/spectroscopy/datasets photothermal/*
recursive-include orangecontrib/spectroscopy/datasets perkinelmer/*
+recursive-include orangecontrib/spectroscopy/datasets polar/*
global-exclude __pycache__
diff --git a/doc/index.rst b/doc/index.rst
index 0fd62172d..4a2c0c0b3 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -36,6 +36,7 @@ Widgets
widgets/pls
widgets/peakfit
widgets/snr
+ widgets/polar
Indices and tables
------------------
diff --git a/doc/widgets.json b/doc/widgets.json
index f41ac3697..2321b8233 100644
--- a/doc/widgets.json
+++ b/doc/widgets.json
@@ -128,7 +128,14 @@
"icon": "../orangecontrib/spectroscopy/widgets/icons/stackalign.svg",
"background": "light-blue",
"keywords": []
+ },
+ {
+ "text": "4+ Angle Polarisation",
+ "doc": "widgets/polar.md",
+ "icon": "../orangecontrib/spectroscopy/widgets/icons/unknown.svg",
+ "background": "light-blue",
+ "keywords": []
}
]
]
-]
\ No newline at end of file
+]
diff --git a/doc/widgets/images/Polar-Example1.PNG b/doc/widgets/images/Polar-Example1.PNG
new file mode 100644
index 000000000..1d211515b
Binary files /dev/null and b/doc/widgets/images/Polar-Example1.PNG differ
diff --git a/doc/widgets/images/Polar-Example2.PNG b/doc/widgets/images/Polar-Example2.PNG
new file mode 100644
index 000000000..0c2731443
Binary files /dev/null and b/doc/widgets/images/Polar-Example2.PNG differ
diff --git a/doc/widgets/images/Polar-stamped.png b/doc/widgets/images/Polar-stamped.png
new file mode 100644
index 000000000..7ac176beb
Binary files /dev/null and b/doc/widgets/images/Polar-stamped.png differ
diff --git a/doc/widgets/polar.md b/doc/widgets/polar.md
new file mode 100644
index 000000000..45ddbf316
--- /dev/null
+++ b/doc/widgets/polar.md
@@ -0,0 +1,50 @@
+4+ Angle Polarization
+============
+
+Calculates vibrational mode orientation from polarized infrared spectroscopy datasets
+
+**Inputs**
+
+- Data: input dataset(s)
+
+**Outputs**
+
+- Polar Data: dataset with selected feature(s) orientation information
+- Curve Fit Model Data: dataset with the optimal parameters of the curve fit model
+
+The **4+ Angle Polarization** widget allows you to calculate orientation information of selected features using polarized spectroscopy data collected at 4 or more polarization angles. The implemented algorithm is the same as that outlined by Hikima et al. (2013)1
+
+If you use this widget for your data analysis, please cite the articles in which the method (Hikima et al. (2013)1) and widget (Gassner et al. (2025)2) are introduced.
+
+![](images/Polar-stamped.png)
+
+1. Inputs: Define the polarization angles of the input dataset. Data can be passed to widget with two methods:
+ - *Multifile Input*: A single input with data from all polarization angles in a single dataset. (Each polarization angle must be separated with a categorical variable).
+ - *Multiple Inputs*: 1 input per polarization angle.
+2. Features: Select the features to calculate the orientation of. Features are selected by clicking on the desired feature(s) and assigning a TDM value (see point 5). A default value is assigned using the current value in the "TDM Tilt (°)" box, changing this value will change the associated value of the selected feature(s). Deselecting features will not remove them from the list to be calculated, only features with ("Not used") will not be calculated (see point 8).
+3. Data XY Selection: Define the attributes for the x and y axes for 2D datasets.
+4. Spectra Type: The type of spectra on the input. A conversion to *Absorptance* is performed before calculating orientation information when *Absorbance* or *Transmittance* is selected (this does not affect meta and class variables).
+5. TDM Tilt (°): The angle of the Transition Dipole Moment with respect to the molecular axis. Used in calculation of the value of Herman's orientation function.
+6. Invert Angles: Invert the calculated Azimuth Angles about the 0 degree axis (i.e. so that 90 degrees is output as -90 degrees).
+7. Average Spectra: Average all output variables across polarization angles.
+8. Don't use selected features: Remove the selected features from the list to be used in calculations
+
+Input Examples
+-------
+MultiFile Input
+
+![](images/Polar-Example1.PNG)
+
+Multiple Inputs
+
+![](images/Polar-Example2.PNG)
+
+
+
+
+References
+-------
+
+
+1. Hikima, Y.; Morikawa, J.; Hashimoto, T., Wavenumber Dependence of FT-IR Image of Molecular Orientation in Banded Spherulites of Poly(3-hydroxybutyrate) and Poly(L-lactic acid). Macromolecules 2013, 46, 1582-1590.
+2. Gassner, C.; Vongsvivut, J.; Ryu, M.; Ng, S.H.; Toplak, M.; Takkalkar, P.; Fac, M.L.; Sims, N.A.; Wood, B.R.; Tobin, M.J.; Juodkazis, S.; Morikawa, J., 4+ Angle Polarization: New Multiple-Angle FTIR Polarization Widget for Molecular Orientation Analysis in the Open-Source Quasar Platform.
diff --git a/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multifile.tab b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multifile.tab
new file mode 100644
index 000000000..d3c091abd
--- /dev/null
+++ b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multifile.tab
@@ -0,0 +1,19 @@
+1697.131066748047 1693.2739506872558 1689.416834626465 1685.5597185656738 1681.702602504883 1677.8454864440919 1673.9883703833011 1670.13125432251 1666.2741382617191 1662.417022200928 1658.5599061401367 1654.702790079346 1650.8456740185547 1646.988557957764 1643.1314418969728 1639.274325836182 1635.4172097753908 1631.5600937145996 1627.7029776538088 1623.8458615930176 1619.9887455322269 1616.1316294714356 1612.2745134106449 1608.4173973498537 1604.5602812890625 1600.7031652282717 1596.8460491674805 1592.9889331066897 1589.1318170458985 1585.2747009851078 1581.4175849243165 1577.5604688635258 1573.7033528027346 1569.8462367419434 1565.9891206811526 1562.1320046203614 1558.2748885595706 1554.4177724987794 1550.5606564379887 1546.7035403771974 1542.8464243164062 1538.9893082556155 1535.1321921948243 1531.2750761340335 1527.4179600732423 1523.5608440124515 1519.7037279516603 1515.846611890869 1511.9894958300783 1508.1323797692871 1504.2752637084964 1500.4181476477052 1496.5610315869144 1492.7039155261232 1488.8467994653324 1484.9896834045412 1481.13256734375 1477.2754512829592 1473.418335222168 1469.5612191613773 1465.704103100586 1461.8469870397953 1457.989870979004 1454.1327549182129 1450.275638857422 1446.418522796631 1442.5614067358401 1438.704290675049 1434.8471746142582 1430.990058553467 1427.1329424926757 1423.275826431885 1419.4187103710938 1415.561594310303 1411.7044782495118 1407.847362188721 1403.9902461279298 1400.133130067139 1396.2760140063479 1392.4188979455566 1388.5617818847659 1384.7046658239747 1380.847549763184 1376.9904337023927 1373.133317641602 1369.2762015808107 1365.4190855200195 1361.5619694592287 1357.7048533984375 1353.8477373376468 1349.9906212768556 1346.1335052160648 1342.2763891552736 1338.4192730944824 1334.5621570336916 1330.7050409729004 1326.8479249121096 1322.9908088513184 1319.1336927905277 1315.2765767297365 1311.4194606689457 1307.5623446081545 1303.7052285473633 1299.8481124865725 1295.9909964257813 1292.1338803649905 1288.2767643041993 1284.4196482434086 1280.5625321826174 1276.7054161218261 1272.8483000610354 1268.9911840002442 1265.1340679394534 1261.2769518786622 1257.4198358178714 1253.5627197570802 1249.705603696289 1245.8484876354983 1241.991371574707 1238.1342555139163 1234.277139453125 1230.4200233923343 1226.562907331543 1222.7057912707523 1218.8486752099611 1214.99155914917 1211.1344430883792 1207.277327027588 1203.4202109667972 map_x map_y Filename 1214.0 - 1258.0 1500.0 - 1580.0
+continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous F:/DATA/0deg F:/DATA/45deg F:/DATA/90deg F:/DATA/135deg continuous continuous
+ meta meta meta meta meta
+0.3711118698120117 0.43782272934913635 0.49062955379486084 0.5547452569007874 0.6374028921127319 0.711500346660614 0.7876919507980347 0.8770861625671387 0.9559172987937927 1.0098530054092407 1.0404753684997559 1.0543735027313232 1.0619465112686157 1.0437582731246948 1.0013220310211182 0.9536964297294617 0.897933840751648 0.8533709645271301 0.8181004524230957 0.7584443688392639 0.6689296364784241 0.5782220363616943 0.513115644454956 0.46961721777915955 0.43171659111976624 0.3991532325744629 0.3810955286026001 0.37965840101242065 0.386007159948349 0.3947145342826843 0.4098324477672577 0.4343760311603546 0.46137940883636475 0.49168214201927185 0.528336226940155 0.5667646527290344 0.6178287267684937 0.6604256629943848 0.6766932010650635 0.6885275840759277 0.6986993551254272 0.6930281519889832 0.6724157929420471 0.6501829028129578 0.6263569593429565 0.5885990858078003 0.5376056432723999 0.5005533695220947 0.4779326319694519 0.4443279504776001 0.39699268341064453 0.36137861013412476 0.33436083793640137 0.30747178196907043 0.2803654670715332 0.2625480592250824 0.2592535614967346 0.27015992999076843 0.29309216141700745 0.31150364875793457 0.3194276988506317 0.328142374753952 0.3443129062652588 0.35353028774261475 0.3476772606372833 0.33774372935295105 0.32855379581451416 0.3200712502002716 0.31163617968559265 0.3032289445400238 0.2943628430366516 0.28816357254981995 0.2909632623195648 0.29872336983680725 0.3025616407394409 0.3057458698749542 0.3115512728691101 0.31618112325668335 0.3176253139972687 0.3175846040248871 0.3153497576713562 0.3088831901550293 0.3000914454460144 0.29377707839012146 0.2888909578323364 0.28027477860450745 0.270122230052948 0.26286780834198 0.2575746774673462 0.2533765435218811 0.2540722191333771 0.26083439588546753 0.2694004774093628 0.27414125204086304 0.2728372812271118 0.26937466859817505 0.2672775387763977 0.2684006989002228 0.2723020315170288 0.27508431673049927 0.2749064266681671 0.274681955575943 0.2775912284851074 0.28367695212364197 0.2893185019493103 0.290900319814682 0.2906703054904938 0.2926110625267029 0.2950325608253479 0.2977401614189148 0.3037301301956177 0.3114270567893982 0.318378210067749 0.32530495524406433 0.3349395990371704 0.3490666151046753 0.3638021945953369 0.3744945526123047 0.3803212642669678 0.3803481459617615 0.37394478917121887 0.3625723719596863 0.34696418046951294 0.3287803828716278 0.31259098649024963 0.3022864758968353 0.2975075840950012 0.2938818633556366 0.2872605323791504 30442.5687 41538.7379 F:/DATA/0deg 15.009961445779307 43.87936019111817
+0.388348788022995 0.44867801666259766 0.502106249332428 0.5762503743171692 0.6664558053016663 0.739630937576294 0.8222108483314514 0.9173783659934998 0.9785887002944946 1.0107851028442383 1.0361779928207397 1.0637257099151611 1.0711760520935059 1.0423812866210938 1.025393009185791 0.9986843466758728 0.9373337626457214 0.8785869479179382 0.8271448612213135 0.7655133605003357 0.6908860802650452 0.6117749810218811 0.5471857190132141 0.4971246123313904 0.45541316270828247 0.42525458335876465 0.4062337279319763 0.39754077792167664 0.39981767535209656 0.41045162081718445 0.42612242698669434 0.4495392143726349 0.48013657331466675 0.509360134601593 0.5352477431297302 0.5706249475479126 0.6430520415306091 0.7104148864746094 0.7287077903747559 0.7300795912742615 0.7207353115081787 0.6928030848503113 0.6642997860908508 0.6465807557106018 0.6357985734939575 0.6169293522834778 0.5714240670204163 0.5247028470039368 0.49503496289253235 0.4588204622268677 0.41067439317703247 0.37448638677597046 0.34704023599624634 0.32218214869499207 0.29583585262298584 0.27490201592445374 0.26934197545051575 0.28096309304237366 0.3069058060646057 0.3270772397518158 0.33470597863197327 0.34152284264564514 0.35194724798202515 0.3573232889175415 0.3541431128978729 0.34866204857826233 0.3427005112171173 0.3312859833240509 0.3122206926345825 0.2955722510814667 0.2872144877910614 0.2867285907268524 0.2918354272842407 0.2956002652645111 0.2986833155155182 0.3060479462146759 0.31676867604255676 0.3262639045715332 0.330106645822525 0.32593291997909546 0.31699928641319275 0.30795541405677795 0.3018266558647156 0.29686442017555237 0.28721868991851807 0.2752007842063904 0.2667289972305298 0.2609139084815979 0.25778260827064514 0.2584190368652344 0.2610763907432556 0.2639258801937103 0.26595649123191833 0.26701226830482483 0.2679225206375122 0.2679891288280487 0.2669326663017273 0.2678163945674896 0.2720436155796051 0.2770630121231079 0.28001782298088074 0.27851158380508423 0.2751752436161041 0.276258647441864 0.2823660373687744 0.2899717390537262 0.29827389121055603 0.30697736144065857 0.3102128207683563 0.30654236674308777 0.30582261085510254 0.3128655254840851 0.3222534656524658 0.32939496636390686 0.33602944016456604 0.34821176528930664 0.3637096881866455 0.37178686261177063 0.3715791702270508 0.37046146392822266 0.36934414505958557 0.36342424154281616 0.350017786026001 0.33207470178604126 0.3140036165714264 0.2998875081539154 0.29220956563949585 0.2874009907245636 0.2815419137477875 30445.38885 41538.7379 F:/DATA/0deg 14.936959331411803 45.349811063094954
+0.366887629032135 0.43671754002571106 0.49220016598701477 0.5703327059745789 0.6657547950744629 0.731933057308197 0.7937033176422119 0.8747525215148926 0.9398021697998047 0.9730452299118042 1.0031681060791016 1.0538406372070312 1.0965853929519653 1.0494016408920288 0.9825043678283691 0.9511120319366455 0.9302560687065125 0.8842418789863586 0.8129315972328186 0.7183979153633118 0.6205475330352783 0.5415375232696533 0.48775240778923035 0.44761666655540466 0.41458284854888916 0.39335882663726807 0.3796997666358948 0.36864838004112244 0.36498430371284485 0.3680277466773987 0.3732655644416809 0.38918817043304443 0.42386338114738464 0.46311137080192566 0.4917769134044647 0.5237820148468018 0.5971131920814514 0.6691277027130127 0.6892750859260559 0.7003340125083923 0.7168111801147461 0.6999649405479431 0.6541981101036072 0.6189929246902466 0.5926592946052551 0.5696735382080078 0.5413363575935364 0.5053853988647461 0.465243935585022 0.41113007068634033 0.36086025834083557 0.32808783650398254 0.3003191649913788 0.2793380916118622 0.26471295952796936 0.2541550099849701 0.24993854761123657 0.25305330753326416 0.2655698359012604 0.27899375557899475 0.2841063439846039 0.28888702392578125 0.30285078287124634 0.3161625862121582 0.3197145164012909 0.3178388774394989 0.31100529432296753 0.29754751920700073 0.28191861510276794 0.2750825583934784 0.27559351921081543 0.27823397517204285 0.2830919921398163 0.2850538194179535 0.2825995981693268 0.28359857201576233 0.2883332371711731 0.289949893951416 0.2929544150829315 0.30135759711265564 0.30265331268310547 0.2906714677810669 0.2753030061721802 0.2651992440223694 0.25924843549728394 0.25318726897239685 0.24550479650497437 0.23828820884227753 0.23315896093845367 0.23029816150665283 0.2334306240081787 0.24293583631515503 0.2510787546634674 0.25073981285095215 0.24615781009197235 0.2464907467365265 0.2522513270378113 0.2587389051914215 0.262591689825058 0.263126403093338 0.26156532764434814 0.2589862048625946 0.2572213411331177 0.2594248950481415 0.2655974328517914 0.27193424105644226 0.27772676944732666 0.28423818945884705 0.28888431191444397 0.29118603467941284 0.2921951413154602 0.29164180159568787 0.2948339283466339 0.3066503405570984 0.32164159417152405 0.333238422870636 0.34339842200279236 0.355623722076416 0.36564287543296814 0.36494630575180054 0.35201695561408997 0.3341171145439148 0.3175579309463501 0.30399125814437866 0.2928829789161682 0.28347793221473694 0.2780621647834778 0.276618093252182 0.27352389693260193 30442.5687 41541.616519999996 F:/DATA/0deg 14.140093941838566 42.63377488797279
+0.36428871750831604 0.43003931641578674 0.47958770394325256 0.5450240969657898 0.634536862373352 0.7099695801734924 0.7796786427497864 0.8637834787368774 0.942089855670929 0.9903811812400818 1.0105667114257812 1.0208871364593506 1.005222201347351 0.963545024394989 0.9371297359466553 0.9139838814735413 0.8946059942245483 0.8827653527259827 0.840722918510437 0.7564958333969116 0.6611053943634033 0.5774503946304321 0.5202354192733765 0.48433250188827515 0.45376747846603394 0.4260224401950836 0.4059300422668457 0.3930695950984955 0.38632991909980774 0.3889123797416687 0.4001465141773224 0.4183931052684784 0.4428093135356903 0.47215187549591064 0.5050704479217529 0.5453080534934998 0.6085248589515686 0.658994734287262 0.668915331363678 0.6675289869308472 0.6717699766159058 0.6808158755302429 0.6681414842605591 0.6372467875480652 0.6000738739967346 0.5683797597885132 0.544323742389679 0.516345202922821 0.48224183917045593 0.4387160539627075 0.39499184489250183 0.3595888912677765 0.3304763436317444 0.3092094361782074 0.28860795497894287 0.26972246170043945 0.2605076730251312 0.26343077421188354 0.28140151500701904 0.29994896054267883 0.30823972821235657 0.31485551595687866 0.32437241077423096 0.33080095052719116 0.3303925395011902 0.3248642385005951 0.3165438175201416 0.3061983585357666 0.2946605384349823 0.2872968912124634 0.2868692874908447 0.2896806299686432 0.2909656763076782 0.2920180857181549 0.2945660948753357 0.2972028851509094 0.29964983463287354 0.3004482090473175 0.29766783118247986 0.2939799129962921 0.2927486002445221 0.2923987805843353 0.2889113426208496 0.2816716730594635 0.27281782031059265 0.2626931965351105 0.2514967918395996 0.24271203577518463 0.23827271163463593 0.23637256026268005 0.2380509227514267 0.24506837129592896 0.25348952412605286 0.25623422861099243 0.25412917137145996 0.2532842457294464 0.2547925114631653 0.2577175199985504 0.26068350672721863 0.2616606056690216 0.2597542703151703 0.2559884488582611 0.2536808252334595 0.256541907787323 0.2641761898994446 0.271513968706131 0.2755036950111389 0.27728980779647827 0.27779620885849 0.27858373522758484 0.28195881843566895 0.28836870193481445 0.29790475964546204 0.3091188371181488 0.317819207906723 0.3241935074329376 0.33264613151550293 0.3433806300163269 0.3505949378013611 0.35062962770462036 0.34647127985954285 0.3387751281261444 0.32535696029663086 0.3086860477924347 0.2940033972263336 0.2858646810054779 0.2827148139476776 0.2769644856452942 0.26818761229515076 30445.38885 41541.616519999996 F:/DATA/0deg 13.949567230311496 43.05058779046659
+0.3773364722728729 0.43966636061668396 0.49002042412757874 0.5639562606811523 0.6609355807304382 0.7364853620529175 0.8136956691741943 0.8985644578933716 0.9468745589256287 0.9731678366661072 0.9914941191673279 0.9854417443275452 0.9628058671951294 0.9528713226318359 0.9546505808830261 0.9532977342605591 0.9257292151451111 0.8693946599960327 0.8010186553001404 0.7217180728912354 0.6436004638671875 0.5754334926605225 0.5214712619781494 0.47915247082710266 0.4447232484817505 0.41765138506889343 0.3990515470504761 0.39321616291999817 0.39747321605682373 0.40612584352493286 0.4184291958808899 0.43992483615875244 0.47834911942481995 0.5266345739364624 0.5672381520271301 0.597634494304657 0.6348262429237366 0.6744903922080994 0.6967960000038147 0.7098262310028076 0.7118614912033081 0.6856943368911743 0.6489338874816895 0.6190053224563599 0.5941586494445801 0.5711410641670227 0.5421783328056335 0.5111346244812012 0.4810764491558075 0.4355677664279938 0.3860788941383362 0.3534643054008484 0.32750168442726135 0.3032616674900055 0.2819446921348572 0.26981374621391296 0.2693929970264435 0.2801830768585205 0.30366891622543335 0.3256083130836487 0.3365386128425598 0.34310561418533325 0.35129883885383606 0.3588528633117676 0.35683950781822205 0.3458286225795746 0.33076736330986023 0.31613433361053467 0.30460110306739807 0.2960743308067322 0.2915134131908417 0.29322516918182373 0.2980576753616333 0.300569623708725 0.3029937744140625 0.3091799318790436 0.3191257119178772 0.32923704385757446 0.3315645456314087 0.3225858509540558 0.31236401200294495 0.3056598901748657 0.2981754243373871 0.2894536256790161 0.2814278304576874 0.2723696827888489 0.26151928305625916 0.2525339126586914 0.25026053190231323 0.2539668083190918 0.25997182726860046 0.26598429679870605 0.27031874656677246 0.27086934447288513 0.2690020799636841 0.26832443475723267 0.2695266008377075 0.2705895006656647 0.2702696919441223 0.27155083417892456 0.2761310338973999 0.28070759773254395 0.2832408547401428 0.2835163474082947 0.28365248441696167 0.2872329354286194 0.29273301362991333 0.29702767729759216 0.2998993694782257 0.30078554153442383 0.3016831874847412 0.30665796995162964 0.31462526321411133 0.32313990592956543 0.3358403742313385 0.3547256886959076 0.3718043267726898 0.3799355626106262 0.3825741112232208 0.383433073759079 0.3778041899204254 0.3644450008869171 0.3474675118923187 0.3291182518005371 0.3145691752433777 0.3077240586280823 0.3049233853816986 0.3022094964981079 0.2970089614391327 30442.5687 41538.7379 F:/DATA/45deg 15.14943703154183 44.23850067435577
+0.37337228655815125 0.4396507143974304 0.49107563495635986 0.5586245059967041 0.646790623664856 0.7179062962532043 0.7848191857337952 0.8587467670440674 0.9132012128829956 0.9501560926437378 0.9785140156745911 0.984795868396759 0.9518576860427856 0.9169514179229736 0.9128903150558472 0.9190047979354858 0.9011522531509399 0.8552564978599548 0.7962431311607361 0.7195406556129456 0.6405887007713318 0.5768947005271912 0.5284963250160217 0.48475223779678345 0.44452735781669617 0.4175184965133667 0.4050688147544861 0.4015383720397949 0.4035366475582123 0.4095524847507477 0.41840967535972595 0.43762996792793274 0.4735090136528015 0.5144422650337219 0.5498296618461609 0.5891739130020142 0.6544406414031982 0.7074301838874817 0.721211850643158 0.7253494262695312 0.7205705046653748 0.7011243104934692 0.6794993877410889 0.6561350226402283 0.6234012842178345 0.5791003108024597 0.5371192693710327 0.5127407312393188 0.48728594183921814 0.43710267543792725 0.3880417048931122 0.358508825302124 0.3291686475276947 0.30198532342910767 0.2838975191116333 0.2756803035736084 0.27510562539100647 0.28265753388404846 0.30272212624549866 0.3223998248577118 0.3314470052719116 0.3400789797306061 0.3539663255214691 0.3615642189979553 0.35621216893196106 0.34422820806503296 0.33036601543426514 0.3164904713630676 0.30386441946029663 0.29513826966285706 0.2911766767501831 0.2941439151763916 0.302760511636734 0.30998602509498596 0.31750985980033875 0.32691699266433716 0.33109205961227417 0.3281230330467224 0.32525792717933655 0.32315510511398315 0.3174678683280945 0.31104981899261475 0.3055250942707062 0.297789067029953 0.28920844197273254 0.28300905227661133 0.27708175778388977 0.27133673429489136 0.26787322759628296 0.2659844756126404 0.26673445105552673 0.2708447575569153 0.2750791013240814 0.2769821286201477 0.2775936722755432 0.278523713350296 0.2802591919898987 0.2821207642555237 0.282520055770874 0.28267189860343933 0.2840110957622528 0.28552529215812683 0.28797078132629395 0.2903944253921509 0.29174160957336426 0.2954663932323456 0.30151888728141785 0.30476686358451843 0.30412399768829346 0.30343693494796753 0.30575087666511536 0.31121543049812317 0.3187049329280853 0.3290562331676483 0.3425249457359314 0.3562610149383545 0.36918962001800537 0.3792024254798889 0.3837013840675354 0.3848077654838562 0.3821556568145752 0.3716545104980469 0.3544897437095642 0.33635222911834717 0.3203563988208771 0.30804407596588135 0.3005572259426117 0.2961486577987671 0.29254403710365295 30445.38885 41538.7379 F:/DATA/45deg 15.287506938801155 44.956915156436416
+0.38911929726600647 0.44554373621940613 0.4855414927005768 0.5539154410362244 0.6538650989532471 0.7315957546234131 0.8033648729324341 0.884945809841156 0.9360079765319824 0.954917311668396 0.9649530649185181 0.9849116206169128 1.008013129234314 0.9807816743850708 0.9428510069847107 0.9156916737556458 0.8764055967330933 0.825237512588501 0.7735792994499207 0.705725371837616 0.6241020560264587 0.5504984855651855 0.4957604706287384 0.45222288370132446 0.41255465149879456 0.3828220069408417 0.37051448225975037 0.37108558416366577 0.37338513135910034 0.37661170959472656 0.3874439001083374 0.41331085562705994 0.449747771024704 0.47858643531799316 0.4993457794189453 0.5276702642440796 0.5828417539596558 0.6414362788200378 0.6703454852104187 0.6750879287719727 0.6613235473632812 0.6516115069389343 0.6429095268249512 0.6263266801834106 0.6048684120178223 0.5731279253959656 0.5306711196899414 0.492236465215683 0.45757782459259033 0.40995675325393677 0.3611593246459961 0.33053696155548096 0.3058626651763916 0.2824017405509949 0.2620924711227417 0.24882546067237854 0.24321754276752472 0.24622128903865814 0.2659408152103424 0.29050007462501526 0.3000190854072571 0.30213284492492676 0.3106580674648285 0.3247032165527344 0.3296380937099457 0.3233187794685364 0.3104628324508667 0.29432252049446106 0.2806641161441803 0.2753435969352722 0.2728271782398224 0.270643025636673 0.2736828327178955 0.2805771827697754 0.28472232818603516 0.2870364487171173 0.2909660339355469 0.29421940445899963 0.2940268814563751 0.29415833950042725 0.2929386496543884 0.2845102548599243 0.27148693799972534 0.26009973883628845 0.25316986441612244 0.25014013051986694 0.24763965606689453 0.24328280985355377 0.24036899209022522 0.2429419606924057 0.24842298030853271 0.25228366255760193 0.25561103224754333 0.25914180278778076 0.25783947110176086 0.253574401140213 0.2532463073730469 0.25550371408462524 0.2551080286502838 0.2552626430988312 0.2603242099285126 0.2648930549621582 0.26599374413490295 0.26791733503341675 0.27033597230911255 0.27200937271118164 0.27633726596832275 0.281934916973114 0.28416839241981506 0.2850780189037323 0.28886574506759644 0.29535502195358276 0.30392923951148987 0.3146568834781647 0.3258497714996338 0.3378189206123352 0.3510323464870453 0.3626718819141388 0.3707166612148285 0.37344253063201904 0.3687247931957245 0.3559401333332062 0.336141973733902 0.31635063886642456 0.30404531955718994 0.2972669005393982 0.29117393493652344 0.28547903895378113 0.2802625894546509 30442.5687 41541.616519999996 F:/DATA/45deg 14.612466406432896 42.07633292374312
+0.34738847613334656 0.4179860055446625 0.4664291739463806 0.5296632647514343 0.6272340416908264 0.7056167125701904 0.7561516165733337 0.8085007667541504 0.8644552826881409 0.9050332307815552 0.9181493520736694 0.9111636281013489 0.9073537588119507 0.9109403491020203 0.9062535762786865 0.8872991800308228 0.8642696738243103 0.8446381688117981 0.8067254424095154 0.7335556745529175 0.6443662047386169 0.5644205808639526 0.506117045879364 0.467324823141098 0.43990078568458557 0.4194169044494629 0.4045620858669281 0.39635950326919556 0.3957340121269226 0.40181082487106323 0.4117859899997711 0.4274001121520996 0.4520021080970764 0.48187950253486633 0.5073687434196472 0.5298813581466675 0.5784440636634827 0.6448124051094055 0.6777898669242859 0.6767211556434631 0.648645281791687 0.6306580901145935 0.6294295191764832 0.6141109466552734 0.586581289768219 0.5592874884605408 0.5341745018959045 0.5011913180351257 0.4583965539932251 0.4066646993160248 0.3704123795032501 0.3489791750907898 0.3235110640525818 0.29798153042793274 0.2787266969680786 0.26791489124298096 0.2635549306869507 0.2648940086364746 0.2800384759902954 0.30330970883369446 0.3163895010948181 0.31783244013786316 0.3187214732170105 0.3288123607635498 0.33496859669685364 0.3315340280532837 0.32235997915267944 0.30760458111763 0.289726585149765 0.27839016914367676 0.2739510238170624 0.272896945476532 0.27768412232398987 0.286607027053833 0.29376494884490967 0.30020976066589355 0.3059932589530945 0.30805355310440063 0.3080996572971344 0.30983278155326843 0.30988332629203796 0.3039196729660034 0.29341766238212585 0.28149351477622986 0.2707284390926361 0.2622477412223816 0.25400418043136597 0.2478829324245453 0.2490083873271942 0.2554311156272888 0.26148200035095215 0.26385727524757385 0.26382210850715637 0.26387882232666016 0.26245152950286865 0.26000332832336426 0.2600518763065338 0.2617824673652649 0.26309698820114136 0.26552656292915344 0.2700032591819763 0.2736172676086426 0.2747006118297577 0.2754264175891876 0.2767968773841858 0.2779064476490021 0.279891699552536 0.284357488155365 0.28945451974868774 0.2933834195137024 0.2966553568840027 0.2989789843559265 0.30280598998069763 0.31150293350219727 0.32365909218788147 0.33813759684562683 0.35394054651260376 0.3676077127456665 0.376840740442276 0.3798968195915222 0.37367281317710876 0.3576556146144867 0.3369816541671753 0.31849825382232666 0.30471497774124146 0.29529136419296265 0.2896086275577545 0.2846777141094208 0.2775256037712097 30445.38885 41541.616519999996 F:/DATA/45deg 14.724239544441382 41.95246636406159
+0.36890196800231934 0.4383719861507416 0.49215278029441833 0.5678848028182983 0.6697624325752258 0.7421551942825317 0.7949410080909729 0.861175537109375 0.9304823279380798 0.9888854622840881 1.0296154022216797 1.0200906991958618 0.9658761620521545 0.9375912547111511 0.9355541467666626 0.9351963996887207 0.9119044542312622 0.8633236289024353 0.8102912902832031 0.7478935718536377 0.6693353056907654 0.5896985530853271 0.5278323888778687 0.47969499230384827 0.4415580630302429 0.4171638786792755 0.40274444222450256 0.3934766352176666 0.3904435634613037 0.39783647656440735 0.41653168201446533 0.4471336603164673 0.4835716187953949 0.5180643796920776 0.5542099475860596 0.5966129302978516 0.6491007804870605 0.6811864972114563 0.6899703741073608 0.6939358711242676 0.6857684850692749 0.6570229530334473 0.6270668506622314 0.6001116633415222 0.5694991946220398 0.5400396585464478 0.5212351679801941 0.5054466128349304 0.4800109267234802 0.4332926869392395 0.38531044125556946 0.35653600096702576 0.33400747179985046 0.3157062530517578 0.3017118573188782 0.29292401671409607 0.2914346158504486 0.2968195676803589 0.3123685419559479 0.3298073410987854 0.3378491699695587 0.3447093665599823 0.35713934898376465 0.36121153831481934 0.354942262172699 0.35000061988830566 0.34591320157051086 0.3377359211444855 0.32351627945899963 0.3089088499546051 0.299715518951416 0.29520851373672485 0.29720360040664673 0.3091683089733124 0.3235648274421692 0.3309069871902466 0.3311137557029724 0.3341479003429413 0.3409155011177063 0.3392958343029022 0.32886332273483276 0.318060964345932 0.31203606724739075 0.30700525641441345 0.2969604432582855 0.2861284911632538 0.2785927355289459 0.27391406893730164 0.2739171087741852 0.27796828746795654 0.2818444073200226 0.28413259983062744 0.28639599680900574 0.28605619072914124 0.28013235330581665 0.27383479475975037 0.27307555079460144 0.27768054604530334 0.2847695052623749 0.29085657000541687 0.28964218497276306 0.2820451259613037 0.2783108055591583 0.28211650252342224 0.28757697343826294 0.2919096350669861 0.2974321246147156 0.30412620306015015 0.3101852238178253 0.31293031573295593 0.31173041462898254 0.31200647354125977 0.31643787026405334 0.3226405680179596 0.33135539293289185 0.3442952632904053 0.3607310354709625 0.37769126892089844 0.38771292567253113 0.3854190707206726 0.37552234530448914 0.36437416076660156 0.35301434993743896 0.34029337763786316 0.3268333971500397 0.31639185547828674 0.31317082047462463 0.31620898842811584 0.31643491983413696 30442.5687 41538.7379 F:/DATA/90deg 15.196114730939069 43.482395133432554
+0.37875914573669434 0.4469207227230072 0.49604201316833496 0.5680999159812927 0.6705905199050903 0.7483171224594116 0.80452561378479 0.8658115863800049 0.9279407262802124 0.9807824492454529 1.0223487615585327 1.0514615774154663 1.0463922023773193 1.0112226009368896 0.9982134103775024 1.004634141921997 0.9877952933311462 0.9317412972450256 0.8688726425170898 0.791929304599762 0.6982804536819458 0.6116718649864197 0.5463566184043884 0.4956464171409607 0.4562545120716095 0.43035486340522766 0.41308432817459106 0.4023517668247223 0.40038397908210754 0.4071796238422394 0.4212566614151001 0.44529813528060913 0.47869226336479187 0.5134111642837524 0.5476288199424744 0.5924862027168274 0.6646744608879089 0.7205690741539001 0.7406251430511475 0.7573677897453308 0.7730262279510498 0.7530763149261475 0.701831042766571 0.6527606844902039 0.6117518544197083 0.5808829665184021 0.5582142472267151 0.5362958312034607 0.5081617832183838 0.4623250961303711 0.41480353474617004 0.3816410005092621 0.3512253761291504 0.3229435384273529 0.30036529898643494 0.28829801082611084 0.28772664070129395 0.29815641045570374 0.31810328364372253 0.33310839533805847 0.34295332431793213 0.3576355576515198 0.37281879782676697 0.37368515133857727 0.36629509925842285 0.3603748083114624 0.35585665702819824 0.3474416136741638 0.33159855008125305 0.31616654992103577 0.3076492249965668 0.307073712348938 0.3140259385108948 0.3209126889705658 0.3253902792930603 0.3307969272136688 0.3362623155117035 0.34198322892189026 0.3472789525985718 0.3470509350299835 0.3400651216506958 0.3291180729866028 0.31915709376335144 0.3109745383262634 0.3023119568824768 0.2948138117790222 0.28782516717910767 0.27949029207229614 0.2736770212650299 0.2739221751689911 0.27921369671821594 0.2852224111557007 0.2887378931045532 0.2893288731575012 0.28667038679122925 0.2830811142921448 0.28239449858665466 0.28517019748687744 0.28917649388313293 0.2914784848690033 0.2913095951080322 0.2914259135723114 0.29324576258659363 0.2956298291683197 0.2981545031070709 0.3011481463909149 0.3054879605770111 0.3107515871524811 0.31411612033843994 0.31555652618408203 0.3172118663787842 0.31911471486091614 0.32280173897743225 0.33204859495162964 0.3453712463378906 0.357761949300766 0.3699503242969513 0.38311585783958435 0.39259737730026245 0.395723819732666 0.39234602451324463 0.38097503781318665 0.3659316301345825 0.3534175157546997 0.34347930550575256 0.33371132612228394 0.3236602544784546 0.3152346611022949 0.30779775977134705 30445.38885 41538.7379 F:/DATA/90deg 15.717131304491499 46.21617319326819
+0.3608156144618988 0.4259406626224518 0.47818616032600403 0.5471063256263733 0.6347803473472595 0.7001804113388062 0.7520433068275452 0.8171277642250061 0.8950353264808655 0.9654224514961243 1.013027548789978 1.0263880491256714 0.9852103590965271 0.941172182559967 0.931695818901062 0.9181087017059326 0.8757404685020447 0.8307337164878845 0.7877539992332458 0.7257715463638306 0.6523596048355103 0.5768492817878723 0.5085425972938538 0.456727534532547 0.4192277491092682 0.3939008414745331 0.3818787932395935 0.3828960657119751 0.389323353767395 0.39450258016586304 0.39829221367836 0.40605780482292175 0.4275314211845398 0.4643791615962982 0.505535900592804 0.5479178428649902 0.5994552969932556 0.6376073360443115 0.6582133769989014 0.6799547672271729 0.6931027770042419 0.6702796816825867 0.6343024969100952 0.6056128144264221 0.5789087414741516 0.5561301112174988 0.53394615650177 0.4996113181114197 0.4577721953392029 0.4083678126335144 0.36549386382102966 0.3386378884315491 0.3173430263996124 0.2995651960372925 0.2844037711620331 0.27193325757980347 0.26600706577301025 0.2700923979282379 0.2851560115814209 0.30088505148887634 0.3138630986213684 0.3285767436027527 0.3413139879703522 0.3445935547351837 0.3396775424480438 0.330121785402298 0.3199063241481781 0.30752673745155334 0.2904285490512848 0.27791693806648254 0.2726101279258728 0.27176886796951294 0.2783729135990143 0.2872854471206665 0.29147452116012573 0.29573073983192444 0.30301201343536377 0.3096592128276825 0.3131972551345825 0.31535086035728455 0.3140628933906555 0.3053463399410248 0.2954469323158264 0.2890409231185913 0.280372679233551 0.2706373333930969 0.2643801271915436 0.25798389315605164 0.2508365511894226 0.24706313014030457 0.2483857423067093 0.25367772579193115 0.2591390609741211 0.26199933886528015 0.2643854320049286 0.2681591808795929 0.2714567184448242 0.27293530106544495 0.2729243338108063 0.27181246876716614 0.27032458782196045 0.2693708539009094 0.26829567551612854 0.2665247321128845 0.2669430077075958 0.271585613489151 0.2774175703525543 0.28121861815452576 0.2841823399066925 0.28875136375427246 0.2948462665081024 0.3012498915195465 0.30834972858428955 0.3174125552177429 0.3262895941734314 0.33198782801628113 0.3391663730144501 0.35144802927970886 0.3615659177303314 0.3633808195590973 0.3589021563529968 0.3500611186027527 0.33608290553092957 0.3192422091960907 0.30552980303764343 0.29612672328948975 0.2880210280418396 0.2813362777233124 0.2759957015514374 30442.5687 41541.616519999996 F:/DATA/90deg 14.381547746983568 42.02895298858711
+0.3729221224784851 0.44012895226478577 0.4914250373840332 0.5655630230903625 0.6647416949272156 0.7444058060646057 0.8126416206359863 0.8799846172332764 0.9443001747131348 0.9979190826416016 1.0210847854614258 1.0208030939102173 1.0111762285232544 0.992798924446106 0.9904224276542664 0.99041348695755 0.9595239162445068 0.908574640750885 0.846463143825531 0.7647848725318909 0.6809067726135254 0.6017272472381592 0.5331747531890869 0.48201125860214233 0.44443103671073914 0.41660502552986145 0.3969760835170746 0.38763803243637085 0.38977357745170593 0.4000709354877472 0.41259172558784485 0.4278537333011627 0.45189592242240906 0.48642393946647644 0.5247828960418701 0.5645804405212402 0.612518310546875 0.6483836770057678 0.6727944016456604 0.7076162695884705 0.7434014678001404 0.7206994891166687 0.6666464805603027 0.63228839635849 0.608867883682251 0.5807878971099854 0.5441436171531677 0.5172581076622009 0.4963454604148865 0.45485949516296387 0.401254266500473 0.36339372396469116 0.3367786109447479 0.31736981868743896 0.29844656586647034 0.28279122710227966 0.27746984362602234 0.2811555564403534 0.2927308678627014 0.3071295917034149 0.3210527002811432 0.33639973402023315 0.3501872718334198 0.3525633215904236 0.34586936235427856 0.33730486035346985 0.3312234878540039 0.32529526948928833 0.31066590547561646 0.2939175069332123 0.286742240190506 0.28868338465690613 0.2973419427871704 0.3067079484462738 0.31102290749549866 0.31296807527542114 0.3165799379348755 0.3216167390346527 0.32459816336631775 0.32458773255348206 0.32075992226600647 0.31120601296424866 0.3001273572444916 0.2915954291820526 0.28556665778160095 0.28158968687057495 0.2759927809238434 0.26627132296562195 0.25822049379348755 0.25609999895095825 0.2582840323448181 0.26162636280059814 0.26389646530151367 0.26584580540657043 0.269505113363266 0.2740560472011566 0.2757222354412079 0.2737424373626709 0.27331092953681946 0.2753473222255707 0.2754512131214142 0.2745696008205414 0.27530866861343384 0.2763848900794983 0.27731868624687195 0.2794644236564636 0.28307804465293884 0.2873600125312805 0.29181772470474243 0.29564568400382996 0.29717445373535156 0.2980411946773529 0.30308812856674194 0.31369927525520325 0.3267776072025299 0.3403771221637726 0.3552534282207489 0.3692227900028229 0.3773849606513977 0.37742289900779724 0.3699462413787842 0.3581613600254059 0.3446747362613678 0.3301258683204651 0.3174242079257965 0.3073962330818176 0.2965550720691681 0.28561556339263916 0.27806076407432556 30445.38885 41541.616519999996 F:/DATA/90deg 14.87720727584366 44.091357683377474
+0.3949830234050751 0.4622531533241272 0.5109723210334778 0.5819476842880249 0.6732906699180603 0.7399584054946899 0.8056941032409668 0.8803262114524841 0.9407079219818115 0.9959824681282043 1.0247737169265747 0.9988774061203003 0.9598121643066406 0.9596822261810303 0.9756194353103638 0.9531159996986389 0.8880895376205444 0.8291646242141724 0.7852953672409058 0.7326091527938843 0.6583097577095032 0.5755128264427185 0.5128992199897766 0.47360721230506897 0.4461856484413147 0.424794465303421 0.40726786851882935 0.39642640948295593 0.3955315947532654 0.3990853428840637 0.40200623869895935 0.41744357347488403 0.4541429877281189 0.4928371012210846 0.523593544960022 0.5572065114974976 0.6082401275634766 0.6535071730613708 0.6752548813819885 0.6942375302314758 0.7089064717292786 0.6849415898323059 0.648251473903656 0.6290637254714966 0.611190140247345 0.5820888876914978 0.5479511022567749 0.5251440405845642 0.5092036724090576 0.4710317552089691 0.41165193915367126 0.368015855550766 0.33563244342803955 0.30891987681388855 0.289467990398407 0.279835045337677 0.2776188254356384 0.281124472618103 0.2969658076763153 0.3199588358402252 0.3370678722858429 0.35005685687065125 0.3592534065246582 0.3598088026046753 0.3555058240890503 0.34791675209999084 0.3381218910217285 0.32693901658058167 0.3126853406429291 0.3007925748825073 0.2955957353115082 0.2945536673069 0.29722654819488525 0.30562835931777954 0.3160330057144165 0.32335811853408813 0.32722195982933044 0.33106622099876404 0.333890825510025 0.3307388126850128 0.32467377185821533 0.31839045882225037 0.3102380931377411 0.30023348331451416 0.28814268112182617 0.2750730514526367 0.26571476459503174 0.2631886601448059 0.2642560303211212 0.2657497227191925 0.2698196768760681 0.2753346860408783 0.27848049998283386 0.27970898151397705 0.2795354127883911 0.2767869830131531 0.27504852414131165 0.2782919108867645 0.28145065903663635 0.2807522118091583 0.2820216417312622 0.28606170415878296 0.2876238524913788 0.2858695089817047 0.28583207726478577 0.29170745611190796 0.2989623248577118 0.3013303577899933 0.3022397756576538 0.3061143457889557 0.31094178557395935 0.31485098600387573 0.3188069462776184 0.32449349761009216 0.333775132894516 0.34593096375465393 0.3592696785926819 0.3726845979690552 0.3809838593006134 0.37974658608436584 0.37090665102005005 0.3579893112182617 0.3460439443588257 0.33749645948410034 0.3274995684623718 0.3147842586040497 0.3056890070438385 0.3015490472316742 0.2963547110557556 30442.5687 41538.7379 F:/DATA/135deg 15.053673351479718 43.89851045568374
+0.36599868535995483 0.44001543521881104 0.4966375231742859 0.5643589496612549 0.654793381690979 0.7409048080444336 0.8192135691642761 0.8847960829734802 0.9369638562202454 0.9906289577484131 1.025296688079834 1.0149723291397095 0.9805884957313538 0.9636447429656982 0.9588003158569336 0.9524202942848206 0.9314351677894592 0.8927587270736694 0.8397254943847656 0.7675902843475342 0.6844693422317505 0.6059010624885559 0.5474121570587158 0.5043894052505493 0.468307226896286 0.44075509905815125 0.4207476079463959 0.4080858826637268 0.40591961145401 0.4134867191314697 0.42650675773620605 0.4475072920322418 0.47888901829719543 0.5122790336608887 0.5369526743888855 0.5554997324943542 0.5947977304458618 0.647955060005188 0.6778163313865662 0.6932549476623535 0.6977417469024658 0.6872305870056152 0.659528911113739 0.6245843768119812 0.5957351922988892 0.5746957659721375 0.5465317368507385 0.5116745233535767 0.47723180055618286 0.4333028197288513 0.3936629891395569 0.36897724866867065 0.345966637134552 0.3255443572998047 0.31004011631011963 0.29891106486320496 0.2932963967323303 0.2937392592430115 0.3078584671020508 0.33370327949523926 0.35201096534729004 0.3585779666900635 0.36050570011138916 0.3624379336833954 0.3620472550392151 0.35969817638397217 0.35452911257743835 0.3419364094734192 0.3230227828025818 0.30832669138908386 0.30204203724861145 0.3018741011619568 0.30683496594429016 0.3151794970035553 0.3218154311180115 0.3262678384780884 0.33061009645462036 0.33248963952064514 0.3305680453777313 0.32937225699424744 0.3280726373195648 0.322355717420578 0.3143385052680969 0.30674803256988525 0.2977624237537384 0.28612422943115234 0.27380654215812683 0.26605281233787537 0.2670673131942749 0.27401211857795715 0.2821645736694336 0.28739145398139954 0.289187490940094 0.2906554937362671 0.29101991653442383 0.28759765625 0.28305813670158386 0.28146880865097046 0.2823540270328522 0.2834238111972809 0.28334492444992065 0.28242823481559753 0.2830897569656372 0.285215824842453 0.286749929189682 0.2894335985183716 0.2963193953037262 0.30561134219169617 0.31135934591293335 0.3125182092189789 0.3135771155357361 0.31644806265830994 0.3219490647315979 0.3305686414241791 0.3386459946632385 0.34468361735343933 0.35293155908584595 0.3640737235546112 0.3740508556365967 0.3799596130847931 0.3787302076816559 0.3690877854824066 0.3545362651348114 0.33818575739860535 0.32251599431037903 0.31119340658187866 0.3069508969783783 0.30643993616104126 0.3014766573905945 30445.38885 41538.7379 F:/DATA/135deg 15.056927844654062 43.61475352701898
+0.36250585317611694 0.42431044578552246 0.4834742844104767 0.5558268427848816 0.6433207988739014 0.7237451076507568 0.797504723072052 0.8740603923797607 0.9462519288063049 1.0028680562973022 1.0236170291900635 0.9993492960929871 0.9659426808357239 0.929129958152771 0.8976386189460754 0.8773003220558167 0.845932126045227 0.804290771484375 0.7517927289009094 0.6770941019058228 0.5976353883743286 0.5313588380813599 0.48177453875541687 0.44140711426734924 0.40849852561950684 0.3899365961551666 0.38149017095565796 0.3739112615585327 0.3684139847755432 0.372007817029953 0.38562244176864624 0.40915170311927795 0.4383581876754761 0.46522119641304016 0.4911789894104004 0.5281954407691956 0.5901359915733337 0.6282098889350891 0.6299937963485718 0.6347435712814331 0.6456948518753052 0.6421006917953491 0.6224752068519592 0.6007646918296814 0.5784657001495361 0.5487658381462097 0.5032517313957214 0.4633730351924896 0.4398660957813263 0.41094517707824707 0.3713396489620209 0.3397798538208008 0.315258264541626 0.2960793673992157 0.2789282202720642 0.26473933458328247 0.2583105266094208 0.26161065697669983 0.276593953371048 0.29428234696388245 0.30759015679359436 0.3208509385585785 0.33403608202934265 0.3378518223762512 0.3314681351184845 0.3205536901950836 0.3096092939376831 0.29909756779670715 0.2854691445827484 0.27216678857803345 0.2648516893386841 0.26480165123939514 0.27259862422943115 0.28223392367362976 0.28807657957077026 0.2966751158237457 0.3103998601436615 0.31771647930145264 0.3139994740486145 0.31038033962249756 0.30780771374702454 0.30000224709510803 0.2885487973690033 0.2776309549808502 0.2691199779510498 0.26336920261383057 0.2575911581516266 0.2499367892742157 0.24667014181613922 0.2502342164516449 0.2533777952194214 0.25388017296791077 0.2556212842464447 0.2578236758708954 0.25818225741386414 0.2583445906639099 0.2599364221096039 0.2620580792427063 0.2627926170825958 0.2631688117980957 0.2642405927181244 0.263955682516098 0.2622736394405365 0.2618711590766907 0.2638363242149353 0.2683615982532501 0.2739871144294739 0.27764204144477844 0.2804603576660156 0.28473037481307983 0.28941360116004944 0.2937960624694824 0.2986640930175781 0.30610325932502747 0.316412091255188 0.3255343437194824 0.3314375877380371 0.33745360374450684 0.3465556502342224 0.355802059173584 0.358920693397522 0.35263997316360474 0.33765292167663574 0.3183898329734802 0.30118611454963684 0.2887457013130188 0.28239473700523376 0.2824958264827728 0.2819530665874481 30442.5687 41541.616519999996 F:/DATA/135deg 14.148486745442884 40.914534151939826
+0.3650876581668854 0.44027072191238403 0.49740421772003174 0.5676716566085815 0.6565104126930237 0.7217820286750793 0.776906430721283 0.8554854989051819 0.9431904554367065 0.99639892578125 0.9918259382247925 0.9632425308227539 0.9571559429168701 0.9453587532043457 0.9196834564208984 0.9045694470405579 0.8967841863632202 0.8714707493782043 0.8187240958213806 0.7500607967376709 0.6737703084945679 0.5944964289665222 0.5322104096412659 0.48620209097862244 0.4495582580566406 0.4267524480819702 0.4147963225841522 0.4065539836883545 0.40079763531684875 0.40120112895965576 0.4117395281791687 0.4343542158603668 0.4588378369808197 0.4770737290382385 0.49635985493659973 0.5230758190155029 0.5750504732131958 0.6321943402290344 0.6574925780296326 0.6613973379135132 0.6457144618034363 0.6232727766036987 0.6174584627151489 0.6194400787353516 0.6105873584747314 0.5773681402206421 0.5304786562919617 0.4934249520301819 0.45931971073150635 0.41730549931526184 0.38470304012298584 0.3595018684864044 0.3293219804763794 0.30435964465141296 0.2891426980495453 0.2798253893852234 0.2746725082397461 0.2748556435108185 0.2886051833629608 0.3117738366127014 0.32717078924179077 0.33106401562690735 0.3289177715778351 0.33031389117240906 0.33271220326423645 0.3304341435432434 0.32225725054740906 0.30900219082832336 0.2952777147293091 0.2869744896888733 0.28450044989585876 0.2863030433654785 0.29052266478538513 0.29561755061149597 0.3012177348136902 0.3077249825000763 0.3149780333042145 0.3194979727268219 0.31837978959083557 0.3156931400299072 0.31331557035446167 0.3074597716331482 0.29792141914367676 0.28665927052497864 0.2769920229911804 0.2717728316783905 0.2680080831050873 0.26393961906433105 0.2608543634414673 0.25888293981552124 0.25867512822151184 0.2605808675289154 0.263666570186615 0.26618891954421997 0.2665948271751404 0.2663698196411133 0.2670312225818634 0.26882821321487427 0.27096620202064514 0.2717668414115906 0.2718110680580139 0.2726369798183441 0.27475622296333313 0.2783312201499939 0.2822757363319397 0.285504013299942 0.2890436351299286 0.29262956976890564 0.292468398809433 0.2886587381362915 0.28673070669174194 0.2884071469306946 0.29260167479515076 0.30139777064323425 0.31254521012306213 0.32084983587265015 0.329580694437027 0.34177514910697937 0.35234349966049194 0.3568665683269501 0.3554323613643646 0.3491654396057129 0.3388620913028717 0.32499754428863525 0.3104616105556488 0.29853302240371704 0.28830283880233765 0.27974289655685425 0.27512240409851074 30445.38885 41541.616519999996 F:/DATA/135deg 14.216843459338445 41.87857263213592
diff --git a/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multifile_model-results.tab b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multifile_model-results.tab
new file mode 100644
index 000000000..335a00af0
--- /dev/null
+++ b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multifile_model-results.tab
@@ -0,0 +1,19 @@
+map_x map_y Filename 1214.0 - 1258.0 1500.0 - 1580.0 Polarisation Angle R-squared (1214.0 - 1258.0) a0 (1214.0 - 1258.0) a1 (1214.0 - 1258.0) a2 (1214.0 - 1258.0) R-squared (1500.0 - 1580.0) a0 (1500.0 - 1580.0) a1 (1500.0 - 1580.0) a2 (1500.0 - 1580.0) 1697.131066748047 1693.2739506872558 1689.416834626465 1685.5597185656738 1681.702602504883 1677.8454864440919 1673.9883703833011 1670.13125432251 1666.2741382617191 1662.417022200928 1658.5599061401367 1654.702790079346 1650.8456740185547 1646.988557957764 1643.1314418969728 1639.274325836182 1635.4172097753908 1631.5600937145996 1627.7029776538088 1623.8458615930176 1619.9887455322269 1616.1316294714356 1612.2745134106449 1608.4173973498537 1604.5602812890625 1600.7031652282717 1596.8460491674805 1592.9889331066897 1589.1318170458985 1585.2747009851078 1581.4175849243165 1577.5604688635258 1573.7033528027346 1569.8462367419434 1565.9891206811526 1562.1320046203614 1558.2748885595706 1554.4177724987794 1550.5606564379887 1546.7035403771974 1542.8464243164062 1538.9893082556155 1535.1321921948243 1531.2750761340335 1527.4179600732423 1523.5608440124515 1519.7037279516603 1515.846611890869 1511.9894958300783 1508.1323797692871 1504.2752637084964 1500.4181476477052 1496.5610315869144 1492.7039155261232 1488.8467994653324 1484.9896834045412 1481.13256734375 1477.2754512829592 1473.418335222168 1469.5612191613773 1465.704103100586 1461.8469870397953 1457.989870979004 1454.1327549182129 1450.275638857422 1446.418522796631 1442.5614067358401 1438.704290675049 1434.8471746142582 1430.990058553467 1427.1329424926757 1423.275826431885 1419.4187103710938 1415.561594310303 1411.7044782495118 1407.847362188721 1403.9902461279298 1400.133130067139 1396.2760140063479 1392.4188979455566 1388.5617818847659 1384.7046658239747 1380.847549763184 1376.9904337023927 1373.133317641602 1369.2762015808107 1365.4190855200195 1361.5619694592287 1357.7048533984375 1353.8477373376468 1349.9906212768556 1346.1335052160648 1342.2763891552736 1338.4192730944824 1334.5621570336916 1330.7050409729004 1326.8479249121096 1322.9908088513184 1319.1336927905277 1315.2765767297365 1311.4194606689457 1307.5623446081545 1303.7052285473633 1299.8481124865725 1295.9909964257813 1292.1338803649905 1288.2767643041993 1284.4196482434086 1280.5625321826174 1276.7054161218261 1272.8483000610354 1268.9911840002442 1265.1340679394534 1261.2769518786622 1257.4198358178714 1253.5627197570802 1249.705603696289 1245.8484876354983 1241.991371574707 1238.1342555139163 1234.277139453125 1230.4200233923343 1226.562907331543 1222.7057912707523 1218.8486752099611 1214.99155914917 1211.1344430883792 1207.277327027588 1203.4202109667972
+continuous continuous F:/DATA/0deg F:/DATA/45deg F:/DATA/90deg F:/DATA/135deg continuous continuous 0.0\ Degrees 45.0\ Degrees 90.0\ Degrees 135.0\ Degrees continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous
+meta meta meta meta meta meta meta meta meta meta meta meta meta meta
+30442.56870 41538.7 F:/DATA/0deg 15.01 43.8794 0.0 Degrees 0.9999 0.0478818 -0.0930766 15.1023 0.476175 0.169995 0.198483 43.8747 0.371112 0.437823 0.49063 0.554745 0.637403 0.7115 0.787692 0.877086 0.955917 1.00985 1.04048 1.05437 1.06195 1.04376 1.00132 0.953696 0.897934 0.853371 0.8181 0.758444 0.66893 0.578222 0.513116 0.469617 0.431717 0.399153 0.381096 0.379658 0.386007 0.394715 0.409832 0.434376 0.461379 0.491682 0.528336 0.566765 0.617829 0.660426 0.676693 0.688528 0.698699 0.693028 0.672416 0.650183 0.626357 0.588599 0.537606 0.500553 0.477933 0.444328 0.396993 0.361379 0.334361 0.307472 0.280365 0.262548 0.259254 0.27016 0.293092 0.311504 0.319428 0.328142 0.344313 0.35353 0.347677 0.337744 0.328554 0.320071 0.311636 0.303229 0.294363 0.288164 0.290963 0.298723 0.302562 0.305746 0.311551 0.316181 0.317625 0.317585 0.31535 0.308883 0.300091 0.293777 0.288891 0.280275 0.270122 0.262868 0.257575 0.253377 0.254072 0.260834 0.2694 0.274141 0.272837 0.269375 0.267278 0.268401 0.272302 0.275084 0.274906 0.274682 0.277591 0.283677 0.289319 0.2909 0.29067 0.292611 0.295033 0.29774 0.30373 0.311427 0.318378 0.325305 0.33494 0.349067 0.363802 0.374495 0.380321 0.380348 0.373945 0.362572 0.346964 0.32878 0.312591 0.302286 0.297508 0.293882 0.287261
+30445.38885 41538.7 F:/DATA/0deg 14.937 45.3498 0.0 Degrees 0.932453 0.11529 -0.390086 15.2496 0.362758 0.671081 -0.433181 45.0344 0.388349 0.448678 0.502106 0.57625 0.666456 0.739631 0.822211 0.917378 0.978589 1.01079 1.03618 1.06373 1.07118 1.04238 1.02539 0.998684 0.937334 0.878587 0.827145 0.765513 0.690886 0.611775 0.547186 0.497125 0.455413 0.425255 0.406234 0.397541 0.399818 0.410452 0.426122 0.449539 0.480137 0.50936 0.535248 0.570625 0.643052 0.710415 0.728708 0.73008 0.720735 0.692803 0.6643 0.646581 0.635799 0.616929 0.571424 0.524703 0.495035 0.45882 0.410674 0.374486 0.34704 0.322182 0.295836 0.274902 0.269342 0.280963 0.306906 0.327077 0.334706 0.341523 0.351947 0.357323 0.354143 0.348662 0.342701 0.331286 0.312221 0.295572 0.287214 0.286729 0.291835 0.2956 0.298683 0.306048 0.316769 0.326264 0.330107 0.325933 0.316999 0.307955 0.301827 0.296864 0.287219 0.275201 0.266729 0.260914 0.257783 0.258419 0.261076 0.263926 0.265956 0.267012 0.267923 0.267989 0.266933 0.267816 0.272044 0.277063 0.280018 0.278512 0.275175 0.276259 0.282366 0.289972 0.298274 0.306977 0.310213 0.306542 0.305823 0.312866 0.322253 0.329395 0.336029 0.348212 0.36371 0.371787 0.371579 0.370461 0.369344 0.363424 0.350018 0.332075 0.314004 0.299888 0.29221 0.287401 0.281542
+30442.56870 41541.6 F:/DATA/0deg 14.1401 42.6338 0.0 Degrees 0.905249 0.23199 -0.120727 14.3206 0.551078 0.580899 0.302411 41.9134 0.366888 0.436718 0.4922 0.570333 0.665755 0.731933 0.793703 0.874753 0.939802 0.973045 1.00317 1.05384 1.09659 1.0494 0.982504 0.951112 0.930256 0.884242 0.812932 0.718398 0.620548 0.541538 0.487752 0.447617 0.414583 0.393359 0.3797 0.368648 0.364984 0.368028 0.373266 0.389188 0.423863 0.463111 0.491777 0.523782 0.597113 0.669128 0.689275 0.700334 0.716811 0.699965 0.654198 0.618993 0.592659 0.569674 0.541336 0.505385 0.465244 0.41113 0.36086 0.328088 0.300319 0.279338 0.264713 0.254155 0.249939 0.253053 0.26557 0.278994 0.284106 0.288887 0.302851 0.316163 0.319715 0.317839 0.311005 0.297548 0.281919 0.275083 0.275594 0.278234 0.283092 0.285054 0.2826 0.283599 0.288333 0.28995 0.292954 0.301358 0.302653 0.290671 0.275303 0.265199 0.259248 0.253187 0.245505 0.238288 0.233159 0.230298 0.233431 0.242936 0.251079 0.25074 0.246158 0.246491 0.252251 0.258739 0.262592 0.263126 0.261565 0.258986 0.257221 0.259425 0.265597 0.271934 0.277727 0.284238 0.288884 0.291186 0.292195 0.291642 0.294834 0.30665 0.321642 0.333238 0.343398 0.355624 0.365643 0.364946 0.352017 0.334117 0.317558 0.303991 0.292883 0.283478 0.278062 0.276618 0.273524
+30445.38885 41541.6 F:/DATA/0deg 13.9496 43.0506 0.0 Degrees 0.99419 0.253698 -0.46382 14.442 0.165709 0.0369469 -0.520385 42.7432 0.364289 0.430039 0.479588 0.545024 0.634537 0.70997 0.779679 0.863783 0.94209 0.990381 1.01057 1.02089 1.00522 0.963545 0.93713 0.913984 0.894606 0.882765 0.840723 0.756496 0.661105 0.57745 0.520235 0.484333 0.453767 0.426022 0.40593 0.39307 0.38633 0.388912 0.400147 0.418393 0.442809 0.472152 0.50507 0.545308 0.608525 0.658995 0.668915 0.667529 0.67177 0.680816 0.668141 0.637247 0.600074 0.56838 0.544324 0.516345 0.482242 0.438716 0.394992 0.359589 0.330476 0.309209 0.288608 0.269722 0.260508 0.263431 0.281402 0.299949 0.30824 0.314856 0.324372 0.330801 0.330393 0.324864 0.316544 0.306198 0.294661 0.287297 0.286869 0.289681 0.290966 0.292018 0.294566 0.297203 0.29965 0.300448 0.297668 0.29398 0.292749 0.292399 0.288911 0.281672 0.272818 0.262693 0.251497 0.242712 0.238273 0.236373 0.238051 0.245068 0.25349 0.256234 0.254129 0.253284 0.254793 0.257718 0.260684 0.261661 0.259754 0.255988 0.253681 0.256542 0.264176 0.271514 0.275504 0.27729 0.277796 0.278584 0.281959 0.288369 0.297905 0.309119 0.317819 0.324194 0.332646 0.343381 0.350595 0.35063 0.346471 0.338775 0.325357 0.308686 0.294003 0.285865 0.282715 0.276964 0.268188
+30442.56870 41538.7 F:/DATA/45deg 15.1494 44.2385 45.0 Degrees 0.9999 0.0478818 -0.0930766 15.1023 0.476175 0.169995 0.198483 43.8747 0.377336 0.439666 0.49002 0.563956 0.660936 0.736485 0.813696 0.898564 0.946875 0.973168 0.991494 0.985442 0.962806 0.952871 0.954651 0.953298 0.925729 0.869395 0.801019 0.721718 0.6436 0.575433 0.521471 0.479152 0.444723 0.417651 0.399052 0.393216 0.397473 0.406126 0.418429 0.439925 0.478349 0.526635 0.567238 0.597634 0.634826 0.67449 0.696796 0.709826 0.711861 0.685694 0.648934 0.619005 0.594159 0.571141 0.542178 0.511135 0.481076 0.435568 0.386079 0.353464 0.327502 0.303262 0.281945 0.269814 0.269393 0.280183 0.303669 0.325608 0.336539 0.343106 0.351299 0.358853 0.35684 0.345829 0.330767 0.316134 0.304601 0.296074 0.291513 0.293225 0.298058 0.30057 0.302994 0.30918 0.319126 0.329237 0.331565 0.322586 0.312364 0.30566 0.298175 0.289454 0.281428 0.27237 0.261519 0.252534 0.250261 0.253967 0.259972 0.265984 0.270319 0.270869 0.269002 0.268324 0.269527 0.27059 0.27027 0.271551 0.276131 0.280708 0.283241 0.283516 0.283652 0.287233 0.292733 0.297028 0.299899 0.300786 0.301683 0.306658 0.314625 0.32314 0.33584 0.354726 0.371804 0.379936 0.382574 0.383433 0.377804 0.364445 0.347468 0.329118 0.314569 0.307724 0.304923 0.302209 0.297009
+30445.38885 41538.7 F:/DATA/45deg 15.2875 44.9569 45.0 Degrees 0.932453 0.11529 -0.390086 15.2496 0.362758 0.671081 -0.433181 45.0344 0.373372 0.439651 0.491076 0.558625 0.646791 0.717906 0.784819 0.858747 0.913201 0.950156 0.978514 0.984796 0.951858 0.916951 0.91289 0.919005 0.901152 0.855256 0.796243 0.719541 0.640589 0.576895 0.528496 0.484752 0.444527 0.417518 0.405069 0.401538 0.403537 0.409552 0.41841 0.43763 0.473509 0.514442 0.54983 0.589174 0.654441 0.70743 0.721212 0.725349 0.720571 0.701124 0.679499 0.656135 0.623401 0.5791 0.537119 0.512741 0.487286 0.437103 0.388042 0.358509 0.329169 0.301985 0.283898 0.27568 0.275106 0.282658 0.302722 0.3224 0.331447 0.340079 0.353966 0.361564 0.356212 0.344228 0.330366 0.31649 0.303864 0.295138 0.291177 0.294144 0.302761 0.309986 0.31751 0.326917 0.331092 0.328123 0.325258 0.323155 0.317468 0.31105 0.305525 0.297789 0.289208 0.283009 0.277082 0.271337 0.267873 0.265984 0.266734 0.270845 0.275079 0.276982 0.277594 0.278524 0.280259 0.282121 0.28252 0.282672 0.284011 0.285525 0.287971 0.290394 0.291742 0.295466 0.301519 0.304767 0.304124 0.303437 0.305751 0.311215 0.318705 0.329056 0.342525 0.356261 0.36919 0.379202 0.383701 0.384808 0.382156 0.371655 0.35449 0.336352 0.320356 0.308044 0.300557 0.296149 0.292544
+30442.56870 41541.6 F:/DATA/45deg 14.6125 42.0763 45.0 Degrees 0.905249 0.23199 -0.120727 14.3206 0.551078 0.580899 0.302411 41.9134 0.389119 0.445544 0.485541 0.553915 0.653865 0.731596 0.803365 0.884946 0.936008 0.954917 0.964953 0.984912 1.00801 0.980782 0.942851 0.915692 0.876406 0.825238 0.773579 0.705725 0.624102 0.550498 0.49576 0.452223 0.412555 0.382822 0.370514 0.371086 0.373385 0.376612 0.387444 0.413311 0.449748 0.478586 0.499346 0.52767 0.582842 0.641436 0.670345 0.675088 0.661324 0.651612 0.64291 0.626327 0.604868 0.573128 0.530671 0.492236 0.457578 0.409957 0.361159 0.330537 0.305863 0.282402 0.262092 0.248825 0.243218 0.246221 0.265941 0.2905 0.300019 0.302133 0.310658 0.324703 0.329638 0.323319 0.310463 0.294323 0.280664 0.275344 0.272827 0.270643 0.273683 0.280577 0.284722 0.287036 0.290966 0.294219 0.294027 0.294158 0.292939 0.28451 0.271487 0.2601 0.25317 0.25014 0.24764 0.243283 0.240369 0.242942 0.248423 0.252284 0.255611 0.259142 0.257839 0.253574 0.253246 0.255504 0.255108 0.255263 0.260324 0.264893 0.265994 0.267917 0.270336 0.272009 0.276337 0.281935 0.284168 0.285078 0.288866 0.295355 0.303929 0.314657 0.32585 0.337819 0.351032 0.362672 0.370717 0.373443 0.368725 0.35594 0.336142 0.316351 0.304045 0.297267 0.291174 0.285479 0.280263
+30445.38885 41541.6 F:/DATA/45deg 14.7242 41.9525 45.0 Degrees 0.99419 0.253698 -0.46382 14.442 0.165709 0.0369469 -0.520385 42.7432 0.347388 0.417986 0.466429 0.529663 0.627234 0.705617 0.756152 0.808501 0.864455 0.905033 0.918149 0.911164 0.907354 0.91094 0.906254 0.887299 0.86427 0.844638 0.806725 0.733556 0.644366 0.564421 0.506117 0.467325 0.439901 0.419417 0.404562 0.39636 0.395734 0.401811 0.411786 0.4274 0.452002 0.48188 0.507369 0.529881 0.578444 0.644812 0.67779 0.676721 0.648645 0.630658 0.62943 0.614111 0.586581 0.559287 0.534175 0.501191 0.458397 0.406665 0.370412 0.348979 0.323511 0.297982 0.278727 0.267915 0.263555 0.264894 0.280038 0.30331 0.31639 0.317832 0.318721 0.328812 0.334969 0.331534 0.32236 0.307605 0.289727 0.27839 0.273951 0.272897 0.277684 0.286607 0.293765 0.30021 0.305993 0.308054 0.3081 0.309833 0.309883 0.30392 0.293418 0.281494 0.270728 0.262248 0.254004 0.247883 0.249008 0.255431 0.261482 0.263857 0.263822 0.263879 0.262452 0.260003 0.260052 0.261782 0.263097 0.265527 0.270003 0.273617 0.274701 0.275426 0.276797 0.277906 0.279892 0.284357 0.289455 0.293383 0.296655 0.298979 0.302806 0.311503 0.323659 0.338138 0.353941 0.367608 0.376841 0.379897 0.373673 0.357656 0.336982 0.318498 0.304715 0.295291 0.289609 0.284678 0.277526
+30442.56870 41538.7 F:/DATA/90deg 15.1961 43.4824 90.0 Degrees 0.9999 0.0478818 -0.0930766 15.1023 0.476175 0.169995 0.198483 43.8747 0.368902 0.438372 0.492153 0.567885 0.669762 0.742155 0.794941 0.861176 0.930482 0.988885 1.02962 1.02009 0.965876 0.937591 0.935554 0.935196 0.911904 0.863324 0.810291 0.747894 0.669335 0.589699 0.527832 0.479695 0.441558 0.417164 0.402744 0.393477 0.390444 0.397836 0.416532 0.447134 0.483572 0.518064 0.55421 0.596613 0.649101 0.681186 0.68997 0.693936 0.685768 0.657023 0.627067 0.600112 0.569499 0.54004 0.521235 0.505447 0.480011 0.433293 0.38531 0.356536 0.334007 0.315706 0.301712 0.292924 0.291435 0.29682 0.312369 0.329807 0.337849 0.344709 0.357139 0.361212 0.354942 0.350001 0.345913 0.337736 0.323516 0.308909 0.299716 0.295209 0.297204 0.309168 0.323565 0.330907 0.331114 0.334148 0.340916 0.339296 0.328863 0.318061 0.312036 0.307005 0.29696 0.286128 0.278593 0.273914 0.273917 0.277968 0.281844 0.284133 0.286396 0.286056 0.280132 0.273835 0.273076 0.277681 0.28477 0.290857 0.289642 0.282045 0.278311 0.282117 0.287577 0.29191 0.297432 0.304126 0.310185 0.31293 0.31173 0.312006 0.316438 0.322641 0.331355 0.344295 0.360731 0.377691 0.387713 0.385419 0.375522 0.364374 0.353014 0.340293 0.326833 0.316392 0.313171 0.316209 0.316435
+30445.38885 41538.7 F:/DATA/90deg 15.7171 46.2162 90.0 Degrees 0.932453 0.11529 -0.390086 15.2496 0.362758 0.671081 -0.433181 45.0344 0.378759 0.446921 0.496042 0.5681 0.670591 0.748317 0.804526 0.865812 0.927941 0.980782 1.02235 1.05146 1.04639 1.01122 0.998213 1.00463 0.987795 0.931741 0.868873 0.791929 0.69828 0.611672 0.546357 0.495646 0.456255 0.430355 0.413084 0.402352 0.400384 0.40718 0.421257 0.445298 0.478692 0.513411 0.547629 0.592486 0.664674 0.720569 0.740625 0.757368 0.773026 0.753076 0.701831 0.652761 0.611752 0.580883 0.558214 0.536296 0.508162 0.462325 0.414804 0.381641 0.351225 0.322944 0.300365 0.288298 0.287727 0.298156 0.318103 0.333108 0.342953 0.357636 0.372819 0.373685 0.366295 0.360375 0.355857 0.347442 0.331599 0.316167 0.307649 0.307074 0.314026 0.320913 0.32539 0.330797 0.336262 0.341983 0.347279 0.347051 0.340065 0.329118 0.319157 0.310975 0.302312 0.294814 0.287825 0.27949 0.273677 0.273922 0.279214 0.285222 0.288738 0.289329 0.28667 0.283081 0.282394 0.28517 0.289176 0.291478 0.29131 0.291426 0.293246 0.29563 0.298155 0.301148 0.305488 0.310752 0.314116 0.315557 0.317212 0.319115 0.322802 0.332049 0.345371 0.357762 0.36995 0.383116 0.392597 0.395724 0.392346 0.380975 0.365932 0.353418 0.343479 0.333711 0.32366 0.315235 0.307798
+30442.56870 41541.6 F:/DATA/90deg 14.3815 42.029 90.0 Degrees 0.905249 0.23199 -0.120727 14.3206 0.551078 0.580899 0.302411 41.9134 0.360816 0.425941 0.478186 0.547106 0.63478 0.70018 0.752043 0.817128 0.895035 0.965422 1.01303 1.02639 0.98521 0.941172 0.931696 0.918109 0.87574 0.830734 0.787754 0.725772 0.65236 0.576849 0.508543 0.456728 0.419228 0.393901 0.381879 0.382896 0.389323 0.394503 0.398292 0.406058 0.427531 0.464379 0.505536 0.547918 0.599455 0.637607 0.658213 0.679955 0.693103 0.67028 0.634302 0.605613 0.578909 0.55613 0.533946 0.499611 0.457772 0.408368 0.365494 0.338638 0.317343 0.299565 0.284404 0.271933 0.266007 0.270092 0.285156 0.300885 0.313863 0.328577 0.341314 0.344594 0.339678 0.330122 0.319906 0.307527 0.290429 0.277917 0.27261 0.271769 0.278373 0.287285 0.291475 0.295731 0.303012 0.309659 0.313197 0.315351 0.314063 0.305346 0.295447 0.289041 0.280373 0.270637 0.26438 0.257984 0.250837 0.247063 0.248386 0.253678 0.259139 0.261999 0.264385 0.268159 0.271457 0.272935 0.272924 0.271812 0.270325 0.269371 0.268296 0.266525 0.266943 0.271586 0.277418 0.281219 0.284182 0.288751 0.294846 0.30125 0.30835 0.317413 0.32629 0.331988 0.339166 0.351448 0.361566 0.363381 0.358902 0.350061 0.336083 0.319242 0.30553 0.296127 0.288021 0.281336 0.275996
+30445.38885 41541.6 F:/DATA/90deg 14.8772 44.0914 90.0 Degrees 0.99419 0.253698 -0.46382 14.442 0.165709 0.0369469 -0.520385 42.7432 0.372922 0.440129 0.491425 0.565563 0.664742 0.744406 0.812642 0.879985 0.9443 0.997919 1.02108 1.0208 1.01118 0.992799 0.990422 0.990413 0.959524 0.908575 0.846463 0.764785 0.680907 0.601727 0.533175 0.482011 0.444431 0.416605 0.396976 0.387638 0.389774 0.400071 0.412592 0.427854 0.451896 0.486424 0.524783 0.56458 0.612518 0.648384 0.672794 0.707616 0.743401 0.720699 0.666646 0.632288 0.608868 0.580788 0.544144 0.517258 0.496345 0.454859 0.401254 0.363394 0.336779 0.31737 0.298447 0.282791 0.27747 0.281156 0.292731 0.30713 0.321053 0.3364 0.350187 0.352563 0.345869 0.337305 0.331223 0.325295 0.310666 0.293918 0.286742 0.288683 0.297342 0.306708 0.311023 0.312968 0.31658 0.321617 0.324598 0.324588 0.32076 0.311206 0.300127 0.291595 0.285567 0.28159 0.275993 0.266271 0.25822 0.2561 0.258284 0.261626 0.263896 0.265846 0.269505 0.274056 0.275722 0.273742 0.273311 0.275347 0.275451 0.27457 0.275309 0.276385 0.277319 0.279464 0.283078 0.28736 0.291818 0.295646 0.297174 0.298041 0.303088 0.313699 0.326778 0.340377 0.355253 0.369223 0.377385 0.377423 0.369946 0.358161 0.344675 0.330126 0.317424 0.307396 0.296555 0.285616 0.278061
+30442.56870 41538.7 F:/DATA/135deg 15.0537 43.8985 135.0 Degrees 0.9999 0.0478818 -0.0930766 15.1023 0.476175 0.169995 0.198483 43.8747 0.394983 0.462253 0.510972 0.581948 0.673291 0.739958 0.805694 0.880326 0.940708 0.995982 1.02477 0.998877 0.959812 0.959682 0.975619 0.953116 0.88809 0.829165 0.785295 0.732609 0.65831 0.575513 0.512899 0.473607 0.446186 0.424794 0.407268 0.396426 0.395532 0.399085 0.402006 0.417444 0.454143 0.492837 0.523594 0.557207 0.60824 0.653507 0.675255 0.694238 0.708906 0.684942 0.648251 0.629064 0.61119 0.582089 0.547951 0.525144 0.509204 0.471032 0.411652 0.368016 0.335632 0.30892 0.289468 0.279835 0.277619 0.281124 0.296966 0.319959 0.337068 0.350057 0.359253 0.359809 0.355506 0.347917 0.338122 0.326939 0.312685 0.300793 0.295596 0.294554 0.297227 0.305628 0.316033 0.323358 0.327222 0.331066 0.333891 0.330739 0.324674 0.31839 0.310238 0.300233 0.288143 0.275073 0.265715 0.263189 0.264256 0.26575 0.26982 0.275335 0.27848 0.279709 0.279535 0.276787 0.275049 0.278292 0.281451 0.280752 0.282022 0.286062 0.287624 0.28587 0.285832 0.291707 0.298962 0.30133 0.30224 0.306114 0.310942 0.314851 0.318807 0.324493 0.333775 0.345931 0.35927 0.372685 0.380984 0.379747 0.370907 0.357989 0.346044 0.337496 0.3275 0.314784 0.305689 0.301549 0.296355
+30445.38885 41538.7 F:/DATA/135deg 15.0569 43.6148 135.0 Degrees 0.932453 0.11529 -0.390086 15.2496 0.362758 0.671081 -0.433181 45.0344 0.365999 0.440015 0.496638 0.564359 0.654793 0.740905 0.819214 0.884796 0.936964 0.990629 1.0253 1.01497 0.980588 0.963645 0.9588 0.95242 0.931435 0.892759 0.839725 0.76759 0.684469 0.605901 0.547412 0.504389 0.468307 0.440755 0.420748 0.408086 0.40592 0.413487 0.426507 0.447507 0.478889 0.512279 0.536953 0.5555 0.594798 0.647955 0.677816 0.693255 0.697742 0.687231 0.659529 0.624584 0.595735 0.574696 0.546532 0.511675 0.477232 0.433303 0.393663 0.368977 0.345967 0.325544 0.31004 0.298911 0.293296 0.293739 0.307858 0.333703 0.352011 0.358578 0.360506 0.362438 0.362047 0.359698 0.354529 0.341936 0.323023 0.308327 0.302042 0.301874 0.306835 0.315179 0.321815 0.326268 0.33061 0.33249 0.330568 0.329372 0.328073 0.322356 0.314339 0.306748 0.297762 0.286124 0.273807 0.266053 0.267067 0.274012 0.282165 0.287391 0.289187 0.290655 0.29102 0.287598 0.283058 0.281469 0.282354 0.283424 0.283345 0.282428 0.28309 0.285216 0.28675 0.289434 0.296319 0.305611 0.311359 0.312518 0.313577 0.316448 0.321949 0.330569 0.338646 0.344684 0.352932 0.364074 0.374051 0.37996 0.37873 0.369088 0.354536 0.338186 0.322516 0.311193 0.306951 0.30644 0.301477
+30442.56870 41541.6 F:/DATA/135deg 14.1485 40.9145 135.0 Degrees 0.905249 0.23199 -0.120727 14.3206 0.551078 0.580899 0.302411 41.9134 0.362506 0.42431 0.483474 0.555827 0.643321 0.723745 0.797505 0.87406 0.946252 1.00287 1.02362 0.999349 0.965943 0.92913 0.897639 0.8773 0.845932 0.804291 0.751793 0.677094 0.597635 0.531359 0.481775 0.441407 0.408499 0.389937 0.38149 0.373911 0.368414 0.372008 0.385622 0.409152 0.438358 0.465221 0.491179 0.528195 0.590136 0.62821 0.629994 0.634744 0.645695 0.642101 0.622475 0.600765 0.578466 0.548766 0.503252 0.463373 0.439866 0.410945 0.37134 0.33978 0.315258 0.296079 0.278928 0.264739 0.258311 0.261611 0.276594 0.294282 0.30759 0.320851 0.334036 0.337852 0.331468 0.320554 0.309609 0.299098 0.285469 0.272167 0.264852 0.264802 0.272599 0.282234 0.288077 0.296675 0.3104 0.317716 0.313999 0.31038 0.307808 0.300002 0.288549 0.277631 0.26912 0.263369 0.257591 0.249937 0.24667 0.250234 0.253378 0.25388 0.255621 0.257824 0.258182 0.258345 0.259936 0.262058 0.262793 0.263169 0.264241 0.263956 0.262274 0.261871 0.263836 0.268362 0.273987 0.277642 0.28046 0.28473 0.289414 0.293796 0.298664 0.306103 0.316412 0.325534 0.331438 0.337454 0.346556 0.355802 0.358921 0.35264 0.337653 0.31839 0.301186 0.288746 0.282395 0.282496 0.281953
+30445.38885 41541.6 F:/DATA/135deg 14.2168 41.8786 135.0 Degrees 0.99419 0.253698 -0.46382 14.442 0.165709 0.0369469 -0.520385 42.7432 0.365088 0.440271 0.497404 0.567672 0.65651 0.721782 0.776906 0.855485 0.94319 0.996399 0.991826 0.963243 0.957156 0.945359 0.919683 0.904569 0.896784 0.871471 0.818724 0.750061 0.67377 0.594496 0.53221 0.486202 0.449558 0.426752 0.414796 0.406554 0.400798 0.401201 0.41174 0.434354 0.458838 0.477074 0.49636 0.523076 0.57505 0.632194 0.657493 0.661397 0.645714 0.623273 0.617458 0.61944 0.610587 0.577368 0.530479 0.493425 0.45932 0.417305 0.384703 0.359502 0.329322 0.30436 0.289143 0.279825 0.274673 0.274856 0.288605 0.311774 0.327171 0.331064 0.328918 0.330314 0.332712 0.330434 0.322257 0.309002 0.295278 0.286974 0.2845 0.286303 0.290523 0.295618 0.301218 0.307725 0.314978 0.319498 0.31838 0.315693 0.313316 0.30746 0.297921 0.286659 0.276992 0.271773 0.268008 0.26394 0.260854 0.258883 0.258675 0.260581 0.263667 0.266189 0.266595 0.26637 0.267031 0.268828 0.270966 0.271767 0.271811 0.272637 0.274756 0.278331 0.282276 0.285504 0.289044 0.29263 0.292468 0.288659 0.286731 0.288407 0.292602 0.301398 0.312545 0.32085 0.329581 0.341775 0.352343 0.356867 0.355432 0.349165 0.338862 0.324998 0.310462 0.298533 0.288303 0.279743 0.275122
diff --git a/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multifile_polar-results.tab b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multifile_polar-results.tab
new file mode 100644
index 000000000..a0ccf2a0d
--- /dev/null
+++ b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multifile_polar-results.tab
@@ -0,0 +1,19 @@
+map_x map_y Filename 1214.0 - 1258.0 1500.0 - 1580.0 Polarisation Angle Azimuth Angle (1214.0 - 1258.0) Hermans Orientation Function (1214.0 - 1258.0) Intensity (1214.0 - 1258.0) Amplitude (1214.0 - 1258.0) R-squared (1214.0 - 1258.0) Azimuth Angle (1500.0 - 1580.0) Hermans Orientation Function (1500.0 - 1580.0) Intensity (1500.0 - 1580.0) Amplitude (1500.0 - 1580.0) R-squared (1500.0 - 1580.0) 1697.131066748047 1693.2739506872558 1689.416834626465 1685.5597185656738 1681.702602504883 1677.8454864440919 1673.9883703833011 1670.13125432251 1666.2741382617191 1662.417022200928 1658.5599061401367 1654.702790079346 1650.8456740185547 1646.988557957764 1643.1314418969728 1639.274325836182 1635.4172097753908 1631.5600937145996 1627.7029776538088 1623.8458615930176 1619.9887455322269 1616.1316294714356 1612.2745134106449 1608.4173973498537 1604.5602812890625 1600.7031652282717 1596.8460491674805 1592.9889331066897 1589.1318170458985 1585.2747009851078 1581.4175849243165 1577.5604688635258 1573.7033528027346 1569.8462367419434 1565.9891206811526 1562.1320046203614 1558.2748885595706 1554.4177724987794 1550.5606564379887 1546.7035403771974 1542.8464243164062 1538.9893082556155 1535.1321921948243 1531.2750761340335 1527.4179600732423 1523.5608440124515 1519.7037279516603 1515.846611890869 1511.9894958300783 1508.1323797692871 1504.2752637084964 1500.4181476477052 1496.5610315869144 1492.7039155261232 1488.8467994653324 1484.9896834045412 1481.13256734375 1477.2754512829592 1473.418335222168 1469.5612191613773 1465.704103100586 1461.8469870397953 1457.989870979004 1454.1327549182129 1450.275638857422 1446.418522796631 1442.5614067358401 1438.704290675049 1434.8471746142582 1430.990058553467 1427.1329424926757 1423.275826431885 1419.4187103710938 1415.561594310303 1411.7044782495118 1407.847362188721 1403.9902461279298 1400.133130067139 1396.2760140063479 1392.4188979455566 1388.5617818847659 1384.7046658239747 1380.847549763184 1376.9904337023927 1373.133317641602 1369.2762015808107 1365.4190855200195 1361.5619694592287 1357.7048533984375 1353.8477373376468 1349.9906212768556 1346.1335052160648 1342.2763891552736 1338.4192730944824 1334.5621570336916 1330.7050409729004 1326.8479249121096 1322.9908088513184 1319.1336927905277 1315.2765767297365 1311.4194606689457 1307.5623446081545 1303.7052285473633 1299.8481124865725 1295.9909964257813 1292.1338803649905 1288.2767643041993 1284.4196482434086 1280.5625321826174 1276.7054161218261 1272.8483000610354 1268.9911840002442 1265.1340679394534 1261.2769518786622 1257.4198358178714 1253.5627197570802 1249.705603696289 1245.8484876354983 1241.991371574707 1238.1342555139163 1234.277139453125 1230.4200233923343 1226.562907331543 1222.7057912707523 1218.8486752099611 1214.99155914917 1211.1344430883792 1207.277327027588 1203.4202109667972
+continuous continuous F:/DATA/0deg F:/DATA/45deg F:/DATA/90deg F:/DATA/135deg continuous continuous 0.0\ Degrees 45.0\ Degrees 90.0\ Degrees 135.0\ Degrees continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous
+meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta
+30442.56870 41538.7 F:/DATA/0deg 15.01 43.8794 0.0 Degrees -76.3886 0.00463121 15.1023 0.209341 0.9999 -20.2896 0.00397876 43.8747 0.522661 0.476175 0.371112 0.437823 0.49063 0.554745 0.637403 0.7115 0.787692 0.877086 0.955917 1.00985 1.04048 1.05437 1.06195 1.04376 1.00132 0.953696 0.897934 0.853371 0.8181 0.758444 0.66893 0.578222 0.513116 0.469617 0.431717 0.399153 0.381096 0.379658 0.386007 0.394715 0.409832 0.434376 0.461379 0.491682 0.528336 0.566765 0.617829 0.660426 0.676693 0.688528 0.698699 0.693028 0.672416 0.650183 0.626357 0.588599 0.537606 0.500553 0.477933 0.444328 0.396993 0.361379 0.334361 0.307472 0.280365 0.262548 0.259254 0.27016 0.293092 0.311504 0.319428 0.328142 0.344313 0.35353 0.347677 0.337744 0.328554 0.320071 0.311636 0.303229 0.294363 0.288164 0.290963 0.298723 0.302562 0.305746 0.311551 0.316181 0.317625 0.317585 0.31535 0.308883 0.300091 0.293777 0.288891 0.280275 0.270122 0.262868 0.257575 0.253377 0.254072 0.260834 0.2694 0.274141 0.272837 0.269375 0.267278 0.268401 0.272302 0.275084 0.274906 0.274682 0.277591 0.283677 0.289319 0.2909 0.29067 0.292611 0.295033 0.29774 0.30373 0.311427 0.318378 0.325305 0.33494 0.349067 0.363802 0.374495 0.380321 0.380348 0.373945 0.362572 0.346964 0.32878 0.312591 0.302286 0.297508 0.293882 0.287261
+30445.38885 41538.7 F:/DATA/0deg 14.937 45.3498 0.0 Degrees -81.7675 0.0179421 15.2496 0.813532 0.932453 -61.4211 0.0118946 45.0344 1.59749 0.362758 0.388349 0.448678 0.502106 0.57625 0.666456 0.739631 0.822211 0.917378 0.978589 1.01079 1.03618 1.06373 1.07118 1.04238 1.02539 0.998684 0.937334 0.878587 0.827145 0.765513 0.690886 0.611775 0.547186 0.497125 0.455413 0.425255 0.406234 0.397541 0.399818 0.410452 0.426122 0.449539 0.480137 0.50936 0.535248 0.570625 0.643052 0.710415 0.728708 0.73008 0.720735 0.692803 0.6643 0.646581 0.635799 0.616929 0.571424 0.524703 0.495035 0.45882 0.410674 0.374486 0.34704 0.322182 0.295836 0.274902 0.269342 0.280963 0.306906 0.327077 0.334706 0.341523 0.351947 0.357323 0.354143 0.348662 0.342701 0.331286 0.312221 0.295572 0.287214 0.286729 0.291835 0.2956 0.298683 0.306048 0.316769 0.326264 0.330107 0.325933 0.316999 0.307955 0.301827 0.296864 0.287219 0.275201 0.266729 0.260914 0.257783 0.258419 0.261076 0.263926 0.265956 0.267012 0.267923 0.267989 0.266933 0.267816 0.272044 0.277063 0.280018 0.278512 0.275175 0.276259 0.282366 0.289972 0.298274 0.306977 0.310213 0.306542 0.305823 0.312866 0.322253 0.329395 0.336029 0.348212 0.36371 0.371787 0.371579 0.370461 0.369344 0.363424 0.350018 0.332075 0.314004 0.299888 0.29221 0.287401 0.281542
+30442.56870 41541.6 F:/DATA/0deg 14.1401 42.6338 0.0 Degrees -58.7462 0.0122492 14.3206 0.523046 0.905249 -31.2495 0.0104713 41.9134 1.3098 0.551078 0.366888 0.436718 0.4922 0.570333 0.665755 0.731933 0.793703 0.874753 0.939802 0.973045 1.00317 1.05384 1.09659 1.0494 0.982504 0.951112 0.930256 0.884242 0.812932 0.718398 0.620548 0.541538 0.487752 0.447617 0.414583 0.393359 0.3797 0.368648 0.364984 0.368028 0.373266 0.389188 0.423863 0.463111 0.491777 0.523782 0.597113 0.669128 0.689275 0.700334 0.716811 0.699965 0.654198 0.618993 0.592659 0.569674 0.541336 0.505385 0.465244 0.41113 0.36086 0.328088 0.300319 0.279338 0.264713 0.254155 0.249939 0.253053 0.26557 0.278994 0.284106 0.288887 0.302851 0.316163 0.319715 0.317839 0.311005 0.297548 0.281919 0.275083 0.275594 0.278234 0.283092 0.285054 0.2826 0.283599 0.288333 0.28995 0.292954 0.301358 0.302653 0.290671 0.275303 0.265199 0.259248 0.253187 0.245505 0.238288 0.233159 0.230298 0.233431 0.242936 0.251079 0.25074 0.246158 0.246491 0.252251 0.258739 0.262592 0.263126 0.261565 0.258986 0.257221 0.259425 0.265597 0.271934 0.277727 0.284238 0.288884 0.291186 0.292195 0.291642 0.294834 0.30665 0.321642 0.333238 0.343398 0.355624 0.365643 0.364946 0.352017 0.334117 0.317558 0.303991 0.292883 0.283478 0.278062 0.276618 0.273524
+30445.38885 41541.6 F:/DATA/0deg 13.9496 43.0506 0.0 Degrees -75.6612 0.0247058 14.442 1.05734 0.99419 -87.9694 0.00817012 42.7432 1.04339 0.165709 0.364289 0.430039 0.479588 0.545024 0.634537 0.70997 0.779679 0.863783 0.94209 0.990381 1.01057 1.02089 1.00522 0.963545 0.93713 0.913984 0.894606 0.882765 0.840723 0.756496 0.661105 0.57745 0.520235 0.484333 0.453767 0.426022 0.40593 0.39307 0.38633 0.388912 0.400147 0.418393 0.442809 0.472152 0.50507 0.545308 0.608525 0.658995 0.668915 0.667529 0.67177 0.680816 0.668141 0.637247 0.600074 0.56838 0.544324 0.516345 0.482242 0.438716 0.394992 0.359589 0.330476 0.309209 0.288608 0.269722 0.260508 0.263431 0.281402 0.299949 0.30824 0.314856 0.324372 0.330801 0.330393 0.324864 0.316544 0.306198 0.294661 0.287297 0.286869 0.289681 0.290966 0.292018 0.294566 0.297203 0.29965 0.300448 0.297668 0.29398 0.292749 0.292399 0.288911 0.281672 0.272818 0.262693 0.251497 0.242712 0.238273 0.236373 0.238051 0.245068 0.25349 0.256234 0.254129 0.253284 0.254793 0.257718 0.260684 0.261661 0.259754 0.255988 0.253681 0.256542 0.264176 0.271514 0.275504 0.27729 0.277796 0.278584 0.281959 0.288369 0.297905 0.309119 0.317819 0.324194 0.332646 0.343381 0.350595 0.35063 0.346471 0.338775 0.325357 0.308686 0.294003 0.285865 0.282715 0.276964 0.268188
+30442.56870 41538.7 F:/DATA/45deg 15.1494 44.2385 45.0 Degrees -76.3886 0.00463121 15.1023 0.209341 0.9999 -20.2896 0.00397876 43.8747 0.522661 0.476175 0.377336 0.439666 0.49002 0.563956 0.660936 0.736485 0.813696 0.898564 0.946875 0.973168 0.991494 0.985442 0.962806 0.952871 0.954651 0.953298 0.925729 0.869395 0.801019 0.721718 0.6436 0.575433 0.521471 0.479152 0.444723 0.417651 0.399052 0.393216 0.397473 0.406126 0.418429 0.439925 0.478349 0.526635 0.567238 0.597634 0.634826 0.67449 0.696796 0.709826 0.711861 0.685694 0.648934 0.619005 0.594159 0.571141 0.542178 0.511135 0.481076 0.435568 0.386079 0.353464 0.327502 0.303262 0.281945 0.269814 0.269393 0.280183 0.303669 0.325608 0.336539 0.343106 0.351299 0.358853 0.35684 0.345829 0.330767 0.316134 0.304601 0.296074 0.291513 0.293225 0.298058 0.30057 0.302994 0.30918 0.319126 0.329237 0.331565 0.322586 0.312364 0.30566 0.298175 0.289454 0.281428 0.27237 0.261519 0.252534 0.250261 0.253967 0.259972 0.265984 0.270319 0.270869 0.269002 0.268324 0.269527 0.27059 0.27027 0.271551 0.276131 0.280708 0.283241 0.283516 0.283652 0.287233 0.292733 0.297028 0.299899 0.300786 0.301683 0.306658 0.314625 0.32314 0.33584 0.354726 0.371804 0.379936 0.382574 0.383433 0.377804 0.364445 0.347468 0.329118 0.314569 0.307724 0.304923 0.302209 0.297009
+30445.38885 41538.7 F:/DATA/45deg 15.2875 44.9569 45.0 Degrees -81.7675 0.0179421 15.2496 0.813532 0.932453 -61.4211 0.0118946 45.0344 1.59749 0.362758 0.373372 0.439651 0.491076 0.558625 0.646791 0.717906 0.784819 0.858747 0.913201 0.950156 0.978514 0.984796 0.951858 0.916951 0.91289 0.919005 0.901152 0.855256 0.796243 0.719541 0.640589 0.576895 0.528496 0.484752 0.444527 0.417518 0.405069 0.401538 0.403537 0.409552 0.41841 0.43763 0.473509 0.514442 0.54983 0.589174 0.654441 0.70743 0.721212 0.725349 0.720571 0.701124 0.679499 0.656135 0.623401 0.5791 0.537119 0.512741 0.487286 0.437103 0.388042 0.358509 0.329169 0.301985 0.283898 0.27568 0.275106 0.282658 0.302722 0.3224 0.331447 0.340079 0.353966 0.361564 0.356212 0.344228 0.330366 0.31649 0.303864 0.295138 0.291177 0.294144 0.302761 0.309986 0.31751 0.326917 0.331092 0.328123 0.325258 0.323155 0.317468 0.31105 0.305525 0.297789 0.289208 0.283009 0.277082 0.271337 0.267873 0.265984 0.266734 0.270845 0.275079 0.276982 0.277594 0.278524 0.280259 0.282121 0.28252 0.282672 0.284011 0.285525 0.287971 0.290394 0.291742 0.295466 0.301519 0.304767 0.304124 0.303437 0.305751 0.311215 0.318705 0.329056 0.342525 0.356261 0.36919 0.379202 0.383701 0.384808 0.382156 0.371655 0.35449 0.336352 0.320356 0.308044 0.300557 0.296149 0.292544
+30442.56870 41541.6 F:/DATA/45deg 14.6125 42.0763 45.0 Degrees -58.7462 0.0122492 14.3206 0.523046 0.905249 -31.2495 0.0104713 41.9134 1.3098 0.551078 0.389119 0.445544 0.485541 0.553915 0.653865 0.731596 0.803365 0.884946 0.936008 0.954917 0.964953 0.984912 1.00801 0.980782 0.942851 0.915692 0.876406 0.825238 0.773579 0.705725 0.624102 0.550498 0.49576 0.452223 0.412555 0.382822 0.370514 0.371086 0.373385 0.376612 0.387444 0.413311 0.449748 0.478586 0.499346 0.52767 0.582842 0.641436 0.670345 0.675088 0.661324 0.651612 0.64291 0.626327 0.604868 0.573128 0.530671 0.492236 0.457578 0.409957 0.361159 0.330537 0.305863 0.282402 0.262092 0.248825 0.243218 0.246221 0.265941 0.2905 0.300019 0.302133 0.310658 0.324703 0.329638 0.323319 0.310463 0.294323 0.280664 0.275344 0.272827 0.270643 0.273683 0.280577 0.284722 0.287036 0.290966 0.294219 0.294027 0.294158 0.292939 0.28451 0.271487 0.2601 0.25317 0.25014 0.24764 0.243283 0.240369 0.242942 0.248423 0.252284 0.255611 0.259142 0.257839 0.253574 0.253246 0.255504 0.255108 0.255263 0.260324 0.264893 0.265994 0.267917 0.270336 0.272009 0.276337 0.281935 0.284168 0.285078 0.288866 0.295355 0.303929 0.314657 0.32585 0.337819 0.351032 0.362672 0.370717 0.373443 0.368725 0.35594 0.336142 0.316351 0.304045 0.297267 0.291174 0.285479 0.280263
+30445.38885 41541.6 F:/DATA/45deg 14.7242 41.9525 45.0 Degrees -75.6612 0.0247058 14.442 1.05734 0.99419 -87.9694 0.00817012 42.7432 1.04339 0.165709 0.347388 0.417986 0.466429 0.529663 0.627234 0.705617 0.756152 0.808501 0.864455 0.905033 0.918149 0.911164 0.907354 0.91094 0.906254 0.887299 0.86427 0.844638 0.806725 0.733556 0.644366 0.564421 0.506117 0.467325 0.439901 0.419417 0.404562 0.39636 0.395734 0.401811 0.411786 0.4274 0.452002 0.48188 0.507369 0.529881 0.578444 0.644812 0.67779 0.676721 0.648645 0.630658 0.62943 0.614111 0.586581 0.559287 0.534175 0.501191 0.458397 0.406665 0.370412 0.348979 0.323511 0.297982 0.278727 0.267915 0.263555 0.264894 0.280038 0.30331 0.31639 0.317832 0.318721 0.328812 0.334969 0.331534 0.32236 0.307605 0.289727 0.27839 0.273951 0.272897 0.277684 0.286607 0.293765 0.30021 0.305993 0.308054 0.3081 0.309833 0.309883 0.30392 0.293418 0.281494 0.270728 0.262248 0.254004 0.247883 0.249008 0.255431 0.261482 0.263857 0.263822 0.263879 0.262452 0.260003 0.260052 0.261782 0.263097 0.265527 0.270003 0.273617 0.274701 0.275426 0.276797 0.277906 0.279892 0.284357 0.289455 0.293383 0.296655 0.298979 0.302806 0.311503 0.323659 0.338138 0.353941 0.367608 0.376841 0.379897 0.373673 0.357656 0.336982 0.318498 0.304715 0.295291 0.289609 0.284678 0.277526
+30442.56870 41538.7 F:/DATA/90deg 15.1961 43.4824 90.0 Degrees -76.3886 0.00463121 15.1023 0.209341 0.9999 -20.2896 0.00397876 43.8747 0.522661 0.476175 0.368902 0.438372 0.492153 0.567885 0.669762 0.742155 0.794941 0.861176 0.930482 0.988885 1.02962 1.02009 0.965876 0.937591 0.935554 0.935196 0.911904 0.863324 0.810291 0.747894 0.669335 0.589699 0.527832 0.479695 0.441558 0.417164 0.402744 0.393477 0.390444 0.397836 0.416532 0.447134 0.483572 0.518064 0.55421 0.596613 0.649101 0.681186 0.68997 0.693936 0.685768 0.657023 0.627067 0.600112 0.569499 0.54004 0.521235 0.505447 0.480011 0.433293 0.38531 0.356536 0.334007 0.315706 0.301712 0.292924 0.291435 0.29682 0.312369 0.329807 0.337849 0.344709 0.357139 0.361212 0.354942 0.350001 0.345913 0.337736 0.323516 0.308909 0.299716 0.295209 0.297204 0.309168 0.323565 0.330907 0.331114 0.334148 0.340916 0.339296 0.328863 0.318061 0.312036 0.307005 0.29696 0.286128 0.278593 0.273914 0.273917 0.277968 0.281844 0.284133 0.286396 0.286056 0.280132 0.273835 0.273076 0.277681 0.28477 0.290857 0.289642 0.282045 0.278311 0.282117 0.287577 0.29191 0.297432 0.304126 0.310185 0.31293 0.31173 0.312006 0.316438 0.322641 0.331355 0.344295 0.360731 0.377691 0.387713 0.385419 0.375522 0.364374 0.353014 0.340293 0.326833 0.316392 0.313171 0.316209 0.316435
+30445.38885 41538.7 F:/DATA/90deg 15.7171 46.2162 90.0 Degrees -81.7675 0.0179421 15.2496 0.813532 0.932453 -61.4211 0.0118946 45.0344 1.59749 0.362758 0.378759 0.446921 0.496042 0.5681 0.670591 0.748317 0.804526 0.865812 0.927941 0.980782 1.02235 1.05146 1.04639 1.01122 0.998213 1.00463 0.987795 0.931741 0.868873 0.791929 0.69828 0.611672 0.546357 0.495646 0.456255 0.430355 0.413084 0.402352 0.400384 0.40718 0.421257 0.445298 0.478692 0.513411 0.547629 0.592486 0.664674 0.720569 0.740625 0.757368 0.773026 0.753076 0.701831 0.652761 0.611752 0.580883 0.558214 0.536296 0.508162 0.462325 0.414804 0.381641 0.351225 0.322944 0.300365 0.288298 0.287727 0.298156 0.318103 0.333108 0.342953 0.357636 0.372819 0.373685 0.366295 0.360375 0.355857 0.347442 0.331599 0.316167 0.307649 0.307074 0.314026 0.320913 0.32539 0.330797 0.336262 0.341983 0.347279 0.347051 0.340065 0.329118 0.319157 0.310975 0.302312 0.294814 0.287825 0.27949 0.273677 0.273922 0.279214 0.285222 0.288738 0.289329 0.28667 0.283081 0.282394 0.28517 0.289176 0.291478 0.29131 0.291426 0.293246 0.29563 0.298155 0.301148 0.305488 0.310752 0.314116 0.315557 0.317212 0.319115 0.322802 0.332049 0.345371 0.357762 0.36995 0.383116 0.392597 0.395724 0.392346 0.380975 0.365932 0.353418 0.343479 0.333711 0.32366 0.315235 0.307798
+30442.56870 41541.6 F:/DATA/90deg 14.3815 42.029 90.0 Degrees -58.7462 0.0122492 14.3206 0.523046 0.905249 -31.2495 0.0104713 41.9134 1.3098 0.551078 0.360816 0.425941 0.478186 0.547106 0.63478 0.70018 0.752043 0.817128 0.895035 0.965422 1.01303 1.02639 0.98521 0.941172 0.931696 0.918109 0.87574 0.830734 0.787754 0.725772 0.65236 0.576849 0.508543 0.456728 0.419228 0.393901 0.381879 0.382896 0.389323 0.394503 0.398292 0.406058 0.427531 0.464379 0.505536 0.547918 0.599455 0.637607 0.658213 0.679955 0.693103 0.67028 0.634302 0.605613 0.578909 0.55613 0.533946 0.499611 0.457772 0.408368 0.365494 0.338638 0.317343 0.299565 0.284404 0.271933 0.266007 0.270092 0.285156 0.300885 0.313863 0.328577 0.341314 0.344594 0.339678 0.330122 0.319906 0.307527 0.290429 0.277917 0.27261 0.271769 0.278373 0.287285 0.291475 0.295731 0.303012 0.309659 0.313197 0.315351 0.314063 0.305346 0.295447 0.289041 0.280373 0.270637 0.26438 0.257984 0.250837 0.247063 0.248386 0.253678 0.259139 0.261999 0.264385 0.268159 0.271457 0.272935 0.272924 0.271812 0.270325 0.269371 0.268296 0.266525 0.266943 0.271586 0.277418 0.281219 0.284182 0.288751 0.294846 0.30125 0.30835 0.317413 0.32629 0.331988 0.339166 0.351448 0.361566 0.363381 0.358902 0.350061 0.336083 0.319242 0.30553 0.296127 0.288021 0.281336 0.275996
+30445.38885 41541.6 F:/DATA/90deg 14.8772 44.0914 90.0 Degrees -75.6612 0.0247058 14.442 1.05734 0.99419 -87.9694 0.00817012 42.7432 1.04339 0.165709 0.372922 0.440129 0.491425 0.565563 0.664742 0.744406 0.812642 0.879985 0.9443 0.997919 1.02108 1.0208 1.01118 0.992799 0.990422 0.990413 0.959524 0.908575 0.846463 0.764785 0.680907 0.601727 0.533175 0.482011 0.444431 0.416605 0.396976 0.387638 0.389774 0.400071 0.412592 0.427854 0.451896 0.486424 0.524783 0.56458 0.612518 0.648384 0.672794 0.707616 0.743401 0.720699 0.666646 0.632288 0.608868 0.580788 0.544144 0.517258 0.496345 0.454859 0.401254 0.363394 0.336779 0.31737 0.298447 0.282791 0.27747 0.281156 0.292731 0.30713 0.321053 0.3364 0.350187 0.352563 0.345869 0.337305 0.331223 0.325295 0.310666 0.293918 0.286742 0.288683 0.297342 0.306708 0.311023 0.312968 0.31658 0.321617 0.324598 0.324588 0.32076 0.311206 0.300127 0.291595 0.285567 0.28159 0.275993 0.266271 0.25822 0.2561 0.258284 0.261626 0.263896 0.265846 0.269505 0.274056 0.275722 0.273742 0.273311 0.275347 0.275451 0.27457 0.275309 0.276385 0.277319 0.279464 0.283078 0.28736 0.291818 0.295646 0.297174 0.298041 0.303088 0.313699 0.326778 0.340377 0.355253 0.369223 0.377385 0.377423 0.369946 0.358161 0.344675 0.330126 0.317424 0.307396 0.296555 0.285616 0.278061
+30442.56870 41538.7 F:/DATA/135deg 15.0537 43.8985 135.0 Degrees -76.3886 0.00463121 15.1023 0.209341 0.9999 -20.2896 0.00397876 43.8747 0.522661 0.476175 0.394983 0.462253 0.510972 0.581948 0.673291 0.739958 0.805694 0.880326 0.940708 0.995982 1.02477 0.998877 0.959812 0.959682 0.975619 0.953116 0.88809 0.829165 0.785295 0.732609 0.65831 0.575513 0.512899 0.473607 0.446186 0.424794 0.407268 0.396426 0.395532 0.399085 0.402006 0.417444 0.454143 0.492837 0.523594 0.557207 0.60824 0.653507 0.675255 0.694238 0.708906 0.684942 0.648251 0.629064 0.61119 0.582089 0.547951 0.525144 0.509204 0.471032 0.411652 0.368016 0.335632 0.30892 0.289468 0.279835 0.277619 0.281124 0.296966 0.319959 0.337068 0.350057 0.359253 0.359809 0.355506 0.347917 0.338122 0.326939 0.312685 0.300793 0.295596 0.294554 0.297227 0.305628 0.316033 0.323358 0.327222 0.331066 0.333891 0.330739 0.324674 0.31839 0.310238 0.300233 0.288143 0.275073 0.265715 0.263189 0.264256 0.26575 0.26982 0.275335 0.27848 0.279709 0.279535 0.276787 0.275049 0.278292 0.281451 0.280752 0.282022 0.286062 0.287624 0.28587 0.285832 0.291707 0.298962 0.30133 0.30224 0.306114 0.310942 0.314851 0.318807 0.324493 0.333775 0.345931 0.35927 0.372685 0.380984 0.379747 0.370907 0.357989 0.346044 0.337496 0.3275 0.314784 0.305689 0.301549 0.296355
+30445.38885 41538.7 F:/DATA/135deg 15.0569 43.6148 135.0 Degrees -81.7675 0.0179421 15.2496 0.813532 0.932453 -61.4211 0.0118946 45.0344 1.59749 0.362758 0.365999 0.440015 0.496638 0.564359 0.654793 0.740905 0.819214 0.884796 0.936964 0.990629 1.0253 1.01497 0.980588 0.963645 0.9588 0.95242 0.931435 0.892759 0.839725 0.76759 0.684469 0.605901 0.547412 0.504389 0.468307 0.440755 0.420748 0.408086 0.40592 0.413487 0.426507 0.447507 0.478889 0.512279 0.536953 0.5555 0.594798 0.647955 0.677816 0.693255 0.697742 0.687231 0.659529 0.624584 0.595735 0.574696 0.546532 0.511675 0.477232 0.433303 0.393663 0.368977 0.345967 0.325544 0.31004 0.298911 0.293296 0.293739 0.307858 0.333703 0.352011 0.358578 0.360506 0.362438 0.362047 0.359698 0.354529 0.341936 0.323023 0.308327 0.302042 0.301874 0.306835 0.315179 0.321815 0.326268 0.33061 0.33249 0.330568 0.329372 0.328073 0.322356 0.314339 0.306748 0.297762 0.286124 0.273807 0.266053 0.267067 0.274012 0.282165 0.287391 0.289187 0.290655 0.29102 0.287598 0.283058 0.281469 0.282354 0.283424 0.283345 0.282428 0.28309 0.285216 0.28675 0.289434 0.296319 0.305611 0.311359 0.312518 0.313577 0.316448 0.321949 0.330569 0.338646 0.344684 0.352932 0.364074 0.374051 0.37996 0.37873 0.369088 0.354536 0.338186 0.322516 0.311193 0.306951 0.30644 0.301477
+30442.56870 41541.6 F:/DATA/135deg 14.1485 40.9145 135.0 Degrees -58.7462 0.0122492 14.3206 0.523046 0.905249 -31.2495 0.0104713 41.9134 1.3098 0.551078 0.362506 0.42431 0.483474 0.555827 0.643321 0.723745 0.797505 0.87406 0.946252 1.00287 1.02362 0.999349 0.965943 0.92913 0.897639 0.8773 0.845932 0.804291 0.751793 0.677094 0.597635 0.531359 0.481775 0.441407 0.408499 0.389937 0.38149 0.373911 0.368414 0.372008 0.385622 0.409152 0.438358 0.465221 0.491179 0.528195 0.590136 0.62821 0.629994 0.634744 0.645695 0.642101 0.622475 0.600765 0.578466 0.548766 0.503252 0.463373 0.439866 0.410945 0.37134 0.33978 0.315258 0.296079 0.278928 0.264739 0.258311 0.261611 0.276594 0.294282 0.30759 0.320851 0.334036 0.337852 0.331468 0.320554 0.309609 0.299098 0.285469 0.272167 0.264852 0.264802 0.272599 0.282234 0.288077 0.296675 0.3104 0.317716 0.313999 0.31038 0.307808 0.300002 0.288549 0.277631 0.26912 0.263369 0.257591 0.249937 0.24667 0.250234 0.253378 0.25388 0.255621 0.257824 0.258182 0.258345 0.259936 0.262058 0.262793 0.263169 0.264241 0.263956 0.262274 0.261871 0.263836 0.268362 0.273987 0.277642 0.28046 0.28473 0.289414 0.293796 0.298664 0.306103 0.316412 0.325534 0.331438 0.337454 0.346556 0.355802 0.358921 0.35264 0.337653 0.31839 0.301186 0.288746 0.282395 0.282496 0.281953
+30445.38885 41541.6 F:/DATA/135deg 14.2168 41.8786 135.0 Degrees -75.6612 0.0247058 14.442 1.05734 0.99419 -87.9694 0.00817012 42.7432 1.04339 0.165709 0.365088 0.440271 0.497404 0.567672 0.65651 0.721782 0.776906 0.855485 0.94319 0.996399 0.991826 0.963243 0.957156 0.945359 0.919683 0.904569 0.896784 0.871471 0.818724 0.750061 0.67377 0.594496 0.53221 0.486202 0.449558 0.426752 0.414796 0.406554 0.400798 0.401201 0.41174 0.434354 0.458838 0.477074 0.49636 0.523076 0.57505 0.632194 0.657493 0.661397 0.645714 0.623273 0.617458 0.61944 0.610587 0.577368 0.530479 0.493425 0.45932 0.417305 0.384703 0.359502 0.329322 0.30436 0.289143 0.279825 0.274673 0.274856 0.288605 0.311774 0.327171 0.331064 0.328918 0.330314 0.332712 0.330434 0.322257 0.309002 0.295278 0.286974 0.2845 0.286303 0.290523 0.295618 0.301218 0.307725 0.314978 0.319498 0.31838 0.315693 0.313316 0.30746 0.297921 0.286659 0.276992 0.271773 0.268008 0.26394 0.260854 0.258883 0.258675 0.260581 0.263667 0.266189 0.266595 0.26637 0.267031 0.268828 0.270966 0.271767 0.271811 0.272637 0.274756 0.278331 0.282276 0.285504 0.289044 0.29263 0.292468 0.288659 0.286731 0.288407 0.292602 0.301398 0.312545 0.32085 0.329581 0.341775 0.352343 0.356867 0.355432 0.349165 0.338862 0.324998 0.310462 0.298533 0.288303 0.279743 0.275122
diff --git a/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin1.tab b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin1.tab
new file mode 100644
index 000000000..d661b3ec9
--- /dev/null
+++ b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin1.tab
@@ -0,0 +1,7 @@
+1697.131066748047 1693.2739506872558 1689.416834626465 1685.5597185656738 1681.702602504883 1677.8454864440919 1673.9883703833011 1670.13125432251 1666.2741382617191 1662.417022200928 1658.5599061401367 1654.702790079346 1650.8456740185547 1646.988557957764 1643.1314418969728 1639.274325836182 1635.4172097753908 1631.5600937145996 1627.7029776538088 1623.8458615930176 1619.9887455322269 1616.1316294714356 1612.2745134106449 1608.4173973498537 1604.5602812890625 1600.7031652282717 1596.8460491674805 1592.9889331066897 1589.1318170458985 1585.2747009851078 1581.4175849243165 1577.5604688635258 1573.7033528027346 1569.8462367419434 1565.9891206811526 1562.1320046203614 1558.2748885595706 1554.4177724987794 1550.5606564379887 1546.7035403771974 1542.8464243164062 1538.9893082556155 1535.1321921948243 1531.2750761340335 1527.4179600732423 1523.5608440124515 1519.7037279516603 1515.846611890869 1511.9894958300783 1508.1323797692871 1504.2752637084964 1500.4181476477052 1496.5610315869144 1492.7039155261232 1488.8467994653324 1484.9896834045412 1481.13256734375 1477.2754512829592 1473.418335222168 1469.5612191613773 1465.704103100586 1461.8469870397953 1457.989870979004 1454.1327549182129 1450.275638857422 1446.418522796631 1442.5614067358401 1438.704290675049 1434.8471746142582 1430.990058553467 1427.1329424926757 1423.275826431885 1419.4187103710938 1415.561594310303 1411.7044782495118 1407.847362188721 1403.9902461279298 1400.133130067139 1396.2760140063479 1392.4188979455566 1388.5617818847659 1384.7046658239747 1380.847549763184 1376.9904337023927 1373.133317641602 1369.2762015808107 1365.4190855200195 1361.5619694592287 1357.7048533984375 1353.8477373376468 1349.9906212768556 1346.1335052160648 1342.2763891552736 1338.4192730944824 1334.5621570336916 1330.7050409729004 1326.8479249121096 1322.9908088513184 1319.1336927905277 1315.2765767297365 1311.4194606689457 1307.5623446081545 1303.7052285473633 1299.8481124865725 1295.9909964257813 1292.1338803649905 1288.2767643041993 1284.4196482434086 1280.5625321826174 1276.7054161218261 1272.8483000610354 1268.9911840002442 1265.1340679394534 1261.2769518786622 1257.4198358178714 1253.5627197570802 1249.705603696289 1245.8484876354983 1241.991371574707 1238.1342555139163 1234.277139453125 1230.4200233923343 1226.562907331543 1222.7057912707523 1218.8486752099611 1214.99155914917 1211.1344430883792 1207.277327027588 1203.4202109667972 map_x map_y 1214.0 - 1258.0 1500.0 - 1580.0
+continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous
+ meta meta meta meta
+0.3711118698120117 0.43782272934913635 0.49062955379486084 0.5547452569007874 0.6374028921127319 0.711500346660614 0.7876919507980347 0.8770861625671387 0.9559172987937927 1.0098530054092407 1.0404753684997559 1.0543735027313232 1.0619465112686157 1.0437582731246948 1.0013220310211182 0.9536964297294617 0.897933840751648 0.8533709645271301 0.8181004524230957 0.7584443688392639 0.6689296364784241 0.5782220363616943 0.513115644454956 0.46961721777915955 0.43171659111976624 0.3991532325744629 0.3810955286026001 0.37965840101242065 0.386007159948349 0.3947145342826843 0.4098324477672577 0.4343760311603546 0.46137940883636475 0.49168214201927185 0.528336226940155 0.5667646527290344 0.6178287267684937 0.6604256629943848 0.6766932010650635 0.6885275840759277 0.6986993551254272 0.6930281519889832 0.6724157929420471 0.6501829028129578 0.6263569593429565 0.5885990858078003 0.5376056432723999 0.5005533695220947 0.4779326319694519 0.4443279504776001 0.39699268341064453 0.36137861013412476 0.33436083793640137 0.30747178196907043 0.2803654670715332 0.2625480592250824 0.2592535614967346 0.27015992999076843 0.29309216141700745 0.31150364875793457 0.3194276988506317 0.328142374753952 0.3443129062652588 0.35353028774261475 0.3476772606372833 0.33774372935295105 0.32855379581451416 0.3200712502002716 0.31163617968559265 0.3032289445400238 0.2943628430366516 0.28816357254981995 0.2909632623195648 0.29872336983680725 0.3025616407394409 0.3057458698749542 0.3115512728691101 0.31618112325668335 0.3176253139972687 0.3175846040248871 0.3153497576713562 0.3088831901550293 0.3000914454460144 0.29377707839012146 0.2888909578323364 0.28027477860450745 0.270122230052948 0.26286780834198 0.2575746774673462 0.2533765435218811 0.2540722191333771 0.26083439588546753 0.2694004774093628 0.27414125204086304 0.2728372812271118 0.26937466859817505 0.2672775387763977 0.2684006989002228 0.2723020315170288 0.27508431673049927 0.2749064266681671 0.274681955575943 0.2775912284851074 0.28367695212364197 0.2893185019493103 0.290900319814682 0.2906703054904938 0.2926110625267029 0.2950325608253479 0.2977401614189148 0.3037301301956177 0.3114270567893982 0.318378210067749 0.32530495524406433 0.3349395990371704 0.3490666151046753 0.3638021945953369 0.3744945526123047 0.3803212642669678 0.3803481459617615 0.37394478917121887 0.3625723719596863 0.34696418046951294 0.3287803828716278 0.31259098649024963 0.3022864758968353 0.2975075840950012 0.2938818633556366 0.2872605323791504 30442.5687 41538.7379 15.009961445779307 43.87936019111817
+0.388348788022995 0.44867801666259766 0.502106249332428 0.5762503743171692 0.6664558053016663 0.739630937576294 0.8222108483314514 0.9173783659934998 0.9785887002944946 1.0107851028442383 1.0361779928207397 1.0637257099151611 1.0711760520935059 1.0423812866210938 1.025393009185791 0.9986843466758728 0.9373337626457214 0.8785869479179382 0.8271448612213135 0.7655133605003357 0.6908860802650452 0.6117749810218811 0.5471857190132141 0.4971246123313904 0.45541316270828247 0.42525458335876465 0.4062337279319763 0.39754077792167664 0.39981767535209656 0.41045162081718445 0.42612242698669434 0.4495392143726349 0.48013657331466675 0.509360134601593 0.5352477431297302 0.5706249475479126 0.6430520415306091 0.7104148864746094 0.7287077903747559 0.7300795912742615 0.7207353115081787 0.6928030848503113 0.6642997860908508 0.6465807557106018 0.6357985734939575 0.6169293522834778 0.5714240670204163 0.5247028470039368 0.49503496289253235 0.4588204622268677 0.41067439317703247 0.37448638677597046 0.34704023599624634 0.32218214869499207 0.29583585262298584 0.27490201592445374 0.26934197545051575 0.28096309304237366 0.3069058060646057 0.3270772397518158 0.33470597863197327 0.34152284264564514 0.35194724798202515 0.3573232889175415 0.3541431128978729 0.34866204857826233 0.3427005112171173 0.3312859833240509 0.3122206926345825 0.2955722510814667 0.2872144877910614 0.2867285907268524 0.2918354272842407 0.2956002652645111 0.2986833155155182 0.3060479462146759 0.31676867604255676 0.3262639045715332 0.330106645822525 0.32593291997909546 0.31699928641319275 0.30795541405677795 0.3018266558647156 0.29686442017555237 0.28721868991851807 0.2752007842063904 0.2667289972305298 0.2609139084815979 0.25778260827064514 0.2584190368652344 0.2610763907432556 0.2639258801937103 0.26595649123191833 0.26701226830482483 0.2679225206375122 0.2679891288280487 0.2669326663017273 0.2678163945674896 0.2720436155796051 0.2770630121231079 0.28001782298088074 0.27851158380508423 0.2751752436161041 0.276258647441864 0.2823660373687744 0.2899717390537262 0.29827389121055603 0.30697736144065857 0.3102128207683563 0.30654236674308777 0.30582261085510254 0.3128655254840851 0.3222534656524658 0.32939496636390686 0.33602944016456604 0.34821176528930664 0.3637096881866455 0.37178686261177063 0.3715791702270508 0.37046146392822266 0.36934414505958557 0.36342424154281616 0.350017786026001 0.33207470178604126 0.3140036165714264 0.2998875081539154 0.29220956563949585 0.2874009907245636 0.2815419137477875 30445.38885 41538.7379 14.936959331411803 45.349811063094954
+0.366887629032135 0.43671754002571106 0.49220016598701477 0.5703327059745789 0.6657547950744629 0.731933057308197 0.7937033176422119 0.8747525215148926 0.9398021697998047 0.9730452299118042 1.0031681060791016 1.0538406372070312 1.0965853929519653 1.0494016408920288 0.9825043678283691 0.9511120319366455 0.9302560687065125 0.8842418789863586 0.8129315972328186 0.7183979153633118 0.6205475330352783 0.5415375232696533 0.48775240778923035 0.44761666655540466 0.41458284854888916 0.39335882663726807 0.3796997666358948 0.36864838004112244 0.36498430371284485 0.3680277466773987 0.3732655644416809 0.38918817043304443 0.42386338114738464 0.46311137080192566 0.4917769134044647 0.5237820148468018 0.5971131920814514 0.6691277027130127 0.6892750859260559 0.7003340125083923 0.7168111801147461 0.6999649405479431 0.6541981101036072 0.6189929246902466 0.5926592946052551 0.5696735382080078 0.5413363575935364 0.5053853988647461 0.465243935585022 0.41113007068634033 0.36086025834083557 0.32808783650398254 0.3003191649913788 0.2793380916118622 0.26471295952796936 0.2541550099849701 0.24993854761123657 0.25305330753326416 0.2655698359012604 0.27899375557899475 0.2841063439846039 0.28888702392578125 0.30285078287124634 0.3161625862121582 0.3197145164012909 0.3178388774394989 0.31100529432296753 0.29754751920700073 0.28191861510276794 0.2750825583934784 0.27559351921081543 0.27823397517204285 0.2830919921398163 0.2850538194179535 0.2825995981693268 0.28359857201576233 0.2883332371711731 0.289949893951416 0.2929544150829315 0.30135759711265564 0.30265331268310547 0.2906714677810669 0.2753030061721802 0.2651992440223694 0.25924843549728394 0.25318726897239685 0.24550479650497437 0.23828820884227753 0.23315896093845367 0.23029816150665283 0.2334306240081787 0.24293583631515503 0.2510787546634674 0.25073981285095215 0.24615781009197235 0.2464907467365265 0.2522513270378113 0.2587389051914215 0.262591689825058 0.263126403093338 0.26156532764434814 0.2589862048625946 0.2572213411331177 0.2594248950481415 0.2655974328517914 0.27193424105644226 0.27772676944732666 0.28423818945884705 0.28888431191444397 0.29118603467941284 0.2921951413154602 0.29164180159568787 0.2948339283466339 0.3066503405570984 0.32164159417152405 0.333238422870636 0.34339842200279236 0.355623722076416 0.36564287543296814 0.36494630575180054 0.35201695561408997 0.3341171145439148 0.3175579309463501 0.30399125814437866 0.2928829789161682 0.28347793221473694 0.2780621647834778 0.276618093252182 0.27352389693260193 30442.5687 41541.616519999996 14.140093941838566 42.63377488797279
+0.36428871750831604 0.43003931641578674 0.47958770394325256 0.5450240969657898 0.634536862373352 0.7099695801734924 0.7796786427497864 0.8637834787368774 0.942089855670929 0.9903811812400818 1.0105667114257812 1.0208871364593506 1.005222201347351 0.963545024394989 0.9371297359466553 0.9139838814735413 0.8946059942245483 0.8827653527259827 0.840722918510437 0.7564958333969116 0.6611053943634033 0.5774503946304321 0.5202354192733765 0.48433250188827515 0.45376747846603394 0.4260224401950836 0.4059300422668457 0.3930695950984955 0.38632991909980774 0.3889123797416687 0.4001465141773224 0.4183931052684784 0.4428093135356903 0.47215187549591064 0.5050704479217529 0.5453080534934998 0.6085248589515686 0.658994734287262 0.668915331363678 0.6675289869308472 0.6717699766159058 0.6808158755302429 0.6681414842605591 0.6372467875480652 0.6000738739967346 0.5683797597885132 0.544323742389679 0.516345202922821 0.48224183917045593 0.4387160539627075 0.39499184489250183 0.3595888912677765 0.3304763436317444 0.3092094361782074 0.28860795497894287 0.26972246170043945 0.2605076730251312 0.26343077421188354 0.28140151500701904 0.29994896054267883 0.30823972821235657 0.31485551595687866 0.32437241077423096 0.33080095052719116 0.3303925395011902 0.3248642385005951 0.3165438175201416 0.3061983585357666 0.2946605384349823 0.2872968912124634 0.2868692874908447 0.2896806299686432 0.2909656763076782 0.2920180857181549 0.2945660948753357 0.2972028851509094 0.29964983463287354 0.3004482090473175 0.29766783118247986 0.2939799129962921 0.2927486002445221 0.2923987805843353 0.2889113426208496 0.2816716730594635 0.27281782031059265 0.2626931965351105 0.2514967918395996 0.24271203577518463 0.23827271163463593 0.23637256026268005 0.2380509227514267 0.24506837129592896 0.25348952412605286 0.25623422861099243 0.25412917137145996 0.2532842457294464 0.2547925114631653 0.2577175199985504 0.26068350672721863 0.2616606056690216 0.2597542703151703 0.2559884488582611 0.2536808252334595 0.256541907787323 0.2641761898994446 0.271513968706131 0.2755036950111389 0.27728980779647827 0.27779620885849 0.27858373522758484 0.28195881843566895 0.28836870193481445 0.29790475964546204 0.3091188371181488 0.317819207906723 0.3241935074329376 0.33264613151550293 0.3433806300163269 0.3505949378013611 0.35062962770462036 0.34647127985954285 0.3387751281261444 0.32535696029663086 0.3086860477924347 0.2940033972263336 0.2858646810054779 0.2827148139476776 0.2769644856452942 0.26818761229515076 30445.38885 41541.616519999996 13.949567230311496 43.05058779046659
diff --git a/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin2.tab b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin2.tab
new file mode 100644
index 000000000..320451020
--- /dev/null
+++ b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin2.tab
@@ -0,0 +1,7 @@
+1697.131066748047 1693.2739506872558 1689.416834626465 1685.5597185656738 1681.702602504883 1677.8454864440919 1673.9883703833011 1670.13125432251 1666.2741382617191 1662.417022200928 1658.5599061401367 1654.702790079346 1650.8456740185547 1646.988557957764 1643.1314418969728 1639.274325836182 1635.4172097753908 1631.5600937145996 1627.7029776538088 1623.8458615930176 1619.9887455322269 1616.1316294714356 1612.2745134106449 1608.4173973498537 1604.5602812890625 1600.7031652282717 1596.8460491674805 1592.9889331066897 1589.1318170458985 1585.2747009851078 1581.4175849243165 1577.5604688635258 1573.7033528027346 1569.8462367419434 1565.9891206811526 1562.1320046203614 1558.2748885595706 1554.4177724987794 1550.5606564379887 1546.7035403771974 1542.8464243164062 1538.9893082556155 1535.1321921948243 1531.2750761340335 1527.4179600732423 1523.5608440124515 1519.7037279516603 1515.846611890869 1511.9894958300783 1508.1323797692871 1504.2752637084964 1500.4181476477052 1496.5610315869144 1492.7039155261232 1488.8467994653324 1484.9896834045412 1481.13256734375 1477.2754512829592 1473.418335222168 1469.5612191613773 1465.704103100586 1461.8469870397953 1457.989870979004 1454.1327549182129 1450.275638857422 1446.418522796631 1442.5614067358401 1438.704290675049 1434.8471746142582 1430.990058553467 1427.1329424926757 1423.275826431885 1419.4187103710938 1415.561594310303 1411.7044782495118 1407.847362188721 1403.9902461279298 1400.133130067139 1396.2760140063479 1392.4188979455566 1388.5617818847659 1384.7046658239747 1380.847549763184 1376.9904337023927 1373.133317641602 1369.2762015808107 1365.4190855200195 1361.5619694592287 1357.7048533984375 1353.8477373376468 1349.9906212768556 1346.1335052160648 1342.2763891552736 1338.4192730944824 1334.5621570336916 1330.7050409729004 1326.8479249121096 1322.9908088513184 1319.1336927905277 1315.2765767297365 1311.4194606689457 1307.5623446081545 1303.7052285473633 1299.8481124865725 1295.9909964257813 1292.1338803649905 1288.2767643041993 1284.4196482434086 1280.5625321826174 1276.7054161218261 1272.8483000610354 1268.9911840002442 1265.1340679394534 1261.2769518786622 1257.4198358178714 1253.5627197570802 1249.705603696289 1245.8484876354983 1241.991371574707 1238.1342555139163 1234.277139453125 1230.4200233923343 1226.562907331543 1222.7057912707523 1218.8486752099611 1214.99155914917 1211.1344430883792 1207.277327027588 1203.4202109667972 map_x map_y 1214.0 - 1258.0 1500.0 - 1580.0
+continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous
+ meta meta meta meta
+0.3773364722728729 0.43966636061668396 0.49002042412757874 0.5639562606811523 0.6609355807304382 0.7364853620529175 0.8136956691741943 0.8985644578933716 0.9468745589256287 0.9731678366661072 0.9914941191673279 0.9854417443275452 0.9628058671951294 0.9528713226318359 0.9546505808830261 0.9532977342605591 0.9257292151451111 0.8693946599960327 0.8010186553001404 0.7217180728912354 0.6436004638671875 0.5754334926605225 0.5214712619781494 0.47915247082710266 0.4447232484817505 0.41765138506889343 0.3990515470504761 0.39321616291999817 0.39747321605682373 0.40612584352493286 0.4184291958808899 0.43992483615875244 0.47834911942481995 0.5266345739364624 0.5672381520271301 0.597634494304657 0.6348262429237366 0.6744903922080994 0.6967960000038147 0.7098262310028076 0.7118614912033081 0.6856943368911743 0.6489338874816895 0.6190053224563599 0.5941586494445801 0.5711410641670227 0.5421783328056335 0.5111346244812012 0.4810764491558075 0.4355677664279938 0.3860788941383362 0.3534643054008484 0.32750168442726135 0.3032616674900055 0.2819446921348572 0.26981374621391296 0.2693929970264435 0.2801830768585205 0.30366891622543335 0.3256083130836487 0.3365386128425598 0.34310561418533325 0.35129883885383606 0.3588528633117676 0.35683950781822205 0.3458286225795746 0.33076736330986023 0.31613433361053467 0.30460110306739807 0.2960743308067322 0.2915134131908417 0.29322516918182373 0.2980576753616333 0.300569623708725 0.3029937744140625 0.3091799318790436 0.3191257119178772 0.32923704385757446 0.3315645456314087 0.3225858509540558 0.31236401200294495 0.3056598901748657 0.2981754243373871 0.2894536256790161 0.2814278304576874 0.2723696827888489 0.26151928305625916 0.2525339126586914 0.25026053190231323 0.2539668083190918 0.25997182726860046 0.26598429679870605 0.27031874656677246 0.27086934447288513 0.2690020799636841 0.26832443475723267 0.2695266008377075 0.2705895006656647 0.2702696919441223 0.27155083417892456 0.2761310338973999 0.28070759773254395 0.2832408547401428 0.2835163474082947 0.28365248441696167 0.2872329354286194 0.29273301362991333 0.29702767729759216 0.2998993694782257 0.30078554153442383 0.3016831874847412 0.30665796995162964 0.31462526321411133 0.32313990592956543 0.3358403742313385 0.3547256886959076 0.3718043267726898 0.3799355626106262 0.3825741112232208 0.383433073759079 0.3778041899204254 0.3644450008869171 0.3474675118923187 0.3291182518005371 0.3145691752433777 0.3077240586280823 0.3049233853816986 0.3022094964981079 0.2970089614391327 30442.5687 41538.7379 15.14943703154183 44.23850067435577
+0.37337228655815125 0.4396507143974304 0.49107563495635986 0.5586245059967041 0.646790623664856 0.7179062962532043 0.7848191857337952 0.8587467670440674 0.9132012128829956 0.9501560926437378 0.9785140156745911 0.984795868396759 0.9518576860427856 0.9169514179229736 0.9128903150558472 0.9190047979354858 0.9011522531509399 0.8552564978599548 0.7962431311607361 0.7195406556129456 0.6405887007713318 0.5768947005271912 0.5284963250160217 0.48475223779678345 0.44452735781669617 0.4175184965133667 0.4050688147544861 0.4015383720397949 0.4035366475582123 0.4095524847507477 0.41840967535972595 0.43762996792793274 0.4735090136528015 0.5144422650337219 0.5498296618461609 0.5891739130020142 0.6544406414031982 0.7074301838874817 0.721211850643158 0.7253494262695312 0.7205705046653748 0.7011243104934692 0.6794993877410889 0.6561350226402283 0.6234012842178345 0.5791003108024597 0.5371192693710327 0.5127407312393188 0.48728594183921814 0.43710267543792725 0.3880417048931122 0.358508825302124 0.3291686475276947 0.30198532342910767 0.2838975191116333 0.2756803035736084 0.27510562539100647 0.28265753388404846 0.30272212624549866 0.3223998248577118 0.3314470052719116 0.3400789797306061 0.3539663255214691 0.3615642189979553 0.35621216893196106 0.34422820806503296 0.33036601543426514 0.3164904713630676 0.30386441946029663 0.29513826966285706 0.2911766767501831 0.2941439151763916 0.302760511636734 0.30998602509498596 0.31750985980033875 0.32691699266433716 0.33109205961227417 0.3281230330467224 0.32525792717933655 0.32315510511398315 0.3174678683280945 0.31104981899261475 0.3055250942707062 0.297789067029953 0.28920844197273254 0.28300905227661133 0.27708175778388977 0.27133673429489136 0.26787322759628296 0.2659844756126404 0.26673445105552673 0.2708447575569153 0.2750791013240814 0.2769821286201477 0.2775936722755432 0.278523713350296 0.2802591919898987 0.2821207642555237 0.282520055770874 0.28267189860343933 0.2840110957622528 0.28552529215812683 0.28797078132629395 0.2903944253921509 0.29174160957336426 0.2954663932323456 0.30151888728141785 0.30476686358451843 0.30412399768829346 0.30343693494796753 0.30575087666511536 0.31121543049812317 0.3187049329280853 0.3290562331676483 0.3425249457359314 0.3562610149383545 0.36918962001800537 0.3792024254798889 0.3837013840675354 0.3848077654838562 0.3821556568145752 0.3716545104980469 0.3544897437095642 0.33635222911834717 0.3203563988208771 0.30804407596588135 0.3005572259426117 0.2961486577987671 0.29254403710365295 30445.38885 41538.7379 15.287506938801155 44.956915156436416
+0.38911929726600647 0.44554373621940613 0.4855414927005768 0.5539154410362244 0.6538650989532471 0.7315957546234131 0.8033648729324341 0.884945809841156 0.9360079765319824 0.954917311668396 0.9649530649185181 0.9849116206169128 1.008013129234314 0.9807816743850708 0.9428510069847107 0.9156916737556458 0.8764055967330933 0.825237512588501 0.7735792994499207 0.705725371837616 0.6241020560264587 0.5504984855651855 0.4957604706287384 0.45222288370132446 0.41255465149879456 0.3828220069408417 0.37051448225975037 0.37108558416366577 0.37338513135910034 0.37661170959472656 0.3874439001083374 0.41331085562705994 0.449747771024704 0.47858643531799316 0.4993457794189453 0.5276702642440796 0.5828417539596558 0.6414362788200378 0.6703454852104187 0.6750879287719727 0.6613235473632812 0.6516115069389343 0.6429095268249512 0.6263266801834106 0.6048684120178223 0.5731279253959656 0.5306711196899414 0.492236465215683 0.45757782459259033 0.40995675325393677 0.3611593246459961 0.33053696155548096 0.3058626651763916 0.2824017405509949 0.2620924711227417 0.24882546067237854 0.24321754276752472 0.24622128903865814 0.2659408152103424 0.29050007462501526 0.3000190854072571 0.30213284492492676 0.3106580674648285 0.3247032165527344 0.3296380937099457 0.3233187794685364 0.3104628324508667 0.29432252049446106 0.2806641161441803 0.2753435969352722 0.2728271782398224 0.270643025636673 0.2736828327178955 0.2805771827697754 0.28472232818603516 0.2870364487171173 0.2909660339355469 0.29421940445899963 0.2940268814563751 0.29415833950042725 0.2929386496543884 0.2845102548599243 0.27148693799972534 0.26009973883628845 0.25316986441612244 0.25014013051986694 0.24763965606689453 0.24328280985355377 0.24036899209022522 0.2429419606924057 0.24842298030853271 0.25228366255760193 0.25561103224754333 0.25914180278778076 0.25783947110176086 0.253574401140213 0.2532463073730469 0.25550371408462524 0.2551080286502838 0.2552626430988312 0.2603242099285126 0.2648930549621582 0.26599374413490295 0.26791733503341675 0.27033597230911255 0.27200937271118164 0.27633726596832275 0.281934916973114 0.28416839241981506 0.2850780189037323 0.28886574506759644 0.29535502195358276 0.30392923951148987 0.3146568834781647 0.3258497714996338 0.3378189206123352 0.3510323464870453 0.3626718819141388 0.3707166612148285 0.37344253063201904 0.3687247931957245 0.3559401333332062 0.336141973733902 0.31635063886642456 0.30404531955718994 0.2972669005393982 0.29117393493652344 0.28547903895378113 0.2802625894546509 30442.5687 41541.616519999996 14.612466406432896 42.07633292374312
+0.34738847613334656 0.4179860055446625 0.4664291739463806 0.5296632647514343 0.6272340416908264 0.7056167125701904 0.7561516165733337 0.8085007667541504 0.8644552826881409 0.9050332307815552 0.9181493520736694 0.9111636281013489 0.9073537588119507 0.9109403491020203 0.9062535762786865 0.8872991800308228 0.8642696738243103 0.8446381688117981 0.8067254424095154 0.7335556745529175 0.6443662047386169 0.5644205808639526 0.506117045879364 0.467324823141098 0.43990078568458557 0.4194169044494629 0.4045620858669281 0.39635950326919556 0.3957340121269226 0.40181082487106323 0.4117859899997711 0.4274001121520996 0.4520021080970764 0.48187950253486633 0.5073687434196472 0.5298813581466675 0.5784440636634827 0.6448124051094055 0.6777898669242859 0.6767211556434631 0.648645281791687 0.6306580901145935 0.6294295191764832 0.6141109466552734 0.586581289768219 0.5592874884605408 0.5341745018959045 0.5011913180351257 0.4583965539932251 0.4066646993160248 0.3704123795032501 0.3489791750907898 0.3235110640525818 0.29798153042793274 0.2787266969680786 0.26791489124298096 0.2635549306869507 0.2648940086364746 0.2800384759902954 0.30330970883369446 0.3163895010948181 0.31783244013786316 0.3187214732170105 0.3288123607635498 0.33496859669685364 0.3315340280532837 0.32235997915267944 0.30760458111763 0.289726585149765 0.27839016914367676 0.2739510238170624 0.272896945476532 0.27768412232398987 0.286607027053833 0.29376494884490967 0.30020976066589355 0.3059932589530945 0.30805355310440063 0.3080996572971344 0.30983278155326843 0.30988332629203796 0.3039196729660034 0.29341766238212585 0.28149351477622986 0.2707284390926361 0.2622477412223816 0.25400418043136597 0.2478829324245453 0.2490083873271942 0.2554311156272888 0.26148200035095215 0.26385727524757385 0.26382210850715637 0.26387882232666016 0.26245152950286865 0.26000332832336426 0.2600518763065338 0.2617824673652649 0.26309698820114136 0.26552656292915344 0.2700032591819763 0.2736172676086426 0.2747006118297577 0.2754264175891876 0.2767968773841858 0.2779064476490021 0.279891699552536 0.284357488155365 0.28945451974868774 0.2933834195137024 0.2966553568840027 0.2989789843559265 0.30280598998069763 0.31150293350219727 0.32365909218788147 0.33813759684562683 0.35394054651260376 0.3676077127456665 0.376840740442276 0.3798968195915222 0.37367281317710876 0.3576556146144867 0.3369816541671753 0.31849825382232666 0.30471497774124146 0.29529136419296265 0.2896086275577545 0.2846777141094208 0.2775256037712097 30445.38885 41541.616519999996 14.724239544441382 41.95246636406159
diff --git a/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin3.tab b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin3.tab
new file mode 100644
index 000000000..ac94a50bf
--- /dev/null
+++ b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin3.tab
@@ -0,0 +1,7 @@
+1697.131066748047 1693.2739506872558 1689.416834626465 1685.5597185656738 1681.702602504883 1677.8454864440919 1673.9883703833011 1670.13125432251 1666.2741382617191 1662.417022200928 1658.5599061401367 1654.702790079346 1650.8456740185547 1646.988557957764 1643.1314418969728 1639.274325836182 1635.4172097753908 1631.5600937145996 1627.7029776538088 1623.8458615930176 1619.9887455322269 1616.1316294714356 1612.2745134106449 1608.4173973498537 1604.5602812890625 1600.7031652282717 1596.8460491674805 1592.9889331066897 1589.1318170458985 1585.2747009851078 1581.4175849243165 1577.5604688635258 1573.7033528027346 1569.8462367419434 1565.9891206811526 1562.1320046203614 1558.2748885595706 1554.4177724987794 1550.5606564379887 1546.7035403771974 1542.8464243164062 1538.9893082556155 1535.1321921948243 1531.2750761340335 1527.4179600732423 1523.5608440124515 1519.7037279516603 1515.846611890869 1511.9894958300783 1508.1323797692871 1504.2752637084964 1500.4181476477052 1496.5610315869144 1492.7039155261232 1488.8467994653324 1484.9896834045412 1481.13256734375 1477.2754512829592 1473.418335222168 1469.5612191613773 1465.704103100586 1461.8469870397953 1457.989870979004 1454.1327549182129 1450.275638857422 1446.418522796631 1442.5614067358401 1438.704290675049 1434.8471746142582 1430.990058553467 1427.1329424926757 1423.275826431885 1419.4187103710938 1415.561594310303 1411.7044782495118 1407.847362188721 1403.9902461279298 1400.133130067139 1396.2760140063479 1392.4188979455566 1388.5617818847659 1384.7046658239747 1380.847549763184 1376.9904337023927 1373.133317641602 1369.2762015808107 1365.4190855200195 1361.5619694592287 1357.7048533984375 1353.8477373376468 1349.9906212768556 1346.1335052160648 1342.2763891552736 1338.4192730944824 1334.5621570336916 1330.7050409729004 1326.8479249121096 1322.9908088513184 1319.1336927905277 1315.2765767297365 1311.4194606689457 1307.5623446081545 1303.7052285473633 1299.8481124865725 1295.9909964257813 1292.1338803649905 1288.2767643041993 1284.4196482434086 1280.5625321826174 1276.7054161218261 1272.8483000610354 1268.9911840002442 1265.1340679394534 1261.2769518786622 1257.4198358178714 1253.5627197570802 1249.705603696289 1245.8484876354983 1241.991371574707 1238.1342555139163 1234.277139453125 1230.4200233923343 1226.562907331543 1222.7057912707523 1218.8486752099611 1214.99155914917 1211.1344430883792 1207.277327027588 1203.4202109667972 map_x map_y 1214.0 - 1258.0 1500.0 - 1580.0
+continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous
+ meta meta meta meta
+0.36890196800231934 0.4383719861507416 0.49215278029441833 0.5678848028182983 0.6697624325752258 0.7421551942825317 0.7949410080909729 0.861175537109375 0.9304823279380798 0.9888854622840881 1.0296154022216797 1.0200906991958618 0.9658761620521545 0.9375912547111511 0.9355541467666626 0.9351963996887207 0.9119044542312622 0.8633236289024353 0.8102912902832031 0.7478935718536377 0.6693353056907654 0.5896985530853271 0.5278323888778687 0.47969499230384827 0.4415580630302429 0.4171638786792755 0.40274444222450256 0.3934766352176666 0.3904435634613037 0.39783647656440735 0.41653168201446533 0.4471336603164673 0.4835716187953949 0.5180643796920776 0.5542099475860596 0.5966129302978516 0.6491007804870605 0.6811864972114563 0.6899703741073608 0.6939358711242676 0.6857684850692749 0.6570229530334473 0.6270668506622314 0.6001116633415222 0.5694991946220398 0.5400396585464478 0.5212351679801941 0.5054466128349304 0.4800109267234802 0.4332926869392395 0.38531044125556946 0.35653600096702576 0.33400747179985046 0.3157062530517578 0.3017118573188782 0.29292401671409607 0.2914346158504486 0.2968195676803589 0.3123685419559479 0.3298073410987854 0.3378491699695587 0.3447093665599823 0.35713934898376465 0.36121153831481934 0.354942262172699 0.35000061988830566 0.34591320157051086 0.3377359211444855 0.32351627945899963 0.3089088499546051 0.299715518951416 0.29520851373672485 0.29720360040664673 0.3091683089733124 0.3235648274421692 0.3309069871902466 0.3311137557029724 0.3341479003429413 0.3409155011177063 0.3392958343029022 0.32886332273483276 0.318060964345932 0.31203606724739075 0.30700525641441345 0.2969604432582855 0.2861284911632538 0.2785927355289459 0.27391406893730164 0.2739171087741852 0.27796828746795654 0.2818444073200226 0.28413259983062744 0.28639599680900574 0.28605619072914124 0.28013235330581665 0.27383479475975037 0.27307555079460144 0.27768054604530334 0.2847695052623749 0.29085657000541687 0.28964218497276306 0.2820451259613037 0.2783108055591583 0.28211650252342224 0.28757697343826294 0.2919096350669861 0.2974321246147156 0.30412620306015015 0.3101852238178253 0.31293031573295593 0.31173041462898254 0.31200647354125977 0.31643787026405334 0.3226405680179596 0.33135539293289185 0.3442952632904053 0.3607310354709625 0.37769126892089844 0.38771292567253113 0.3854190707206726 0.37552234530448914 0.36437416076660156 0.35301434993743896 0.34029337763786316 0.3268333971500397 0.31639185547828674 0.31317082047462463 0.31620898842811584 0.31643491983413696 30442.5687 41538.7379 15.196114730939069 43.482395133432554
+0.37875914573669434 0.4469207227230072 0.49604201316833496 0.5680999159812927 0.6705905199050903 0.7483171224594116 0.80452561378479 0.8658115863800049 0.9279407262802124 0.9807824492454529 1.0223487615585327 1.0514615774154663 1.0463922023773193 1.0112226009368896 0.9982134103775024 1.004634141921997 0.9877952933311462 0.9317412972450256 0.8688726425170898 0.791929304599762 0.6982804536819458 0.6116718649864197 0.5463566184043884 0.4956464171409607 0.4562545120716095 0.43035486340522766 0.41308432817459106 0.4023517668247223 0.40038397908210754 0.4071796238422394 0.4212566614151001 0.44529813528060913 0.47869226336479187 0.5134111642837524 0.5476288199424744 0.5924862027168274 0.6646744608879089 0.7205690741539001 0.7406251430511475 0.7573677897453308 0.7730262279510498 0.7530763149261475 0.701831042766571 0.6527606844902039 0.6117518544197083 0.5808829665184021 0.5582142472267151 0.5362958312034607 0.5081617832183838 0.4623250961303711 0.41480353474617004 0.3816410005092621 0.3512253761291504 0.3229435384273529 0.30036529898643494 0.28829801082611084 0.28772664070129395 0.29815641045570374 0.31810328364372253 0.33310839533805847 0.34295332431793213 0.3576355576515198 0.37281879782676697 0.37368515133857727 0.36629509925842285 0.3603748083114624 0.35585665702819824 0.3474416136741638 0.33159855008125305 0.31616654992103577 0.3076492249965668 0.307073712348938 0.3140259385108948 0.3209126889705658 0.3253902792930603 0.3307969272136688 0.3362623155117035 0.34198322892189026 0.3472789525985718 0.3470509350299835 0.3400651216506958 0.3291180729866028 0.31915709376335144 0.3109745383262634 0.3023119568824768 0.2948138117790222 0.28782516717910767 0.27949029207229614 0.2736770212650299 0.2739221751689911 0.27921369671821594 0.2852224111557007 0.2887378931045532 0.2893288731575012 0.28667038679122925 0.2830811142921448 0.28239449858665466 0.28517019748687744 0.28917649388313293 0.2914784848690033 0.2913095951080322 0.2914259135723114 0.29324576258659363 0.2956298291683197 0.2981545031070709 0.3011481463909149 0.3054879605770111 0.3107515871524811 0.31411612033843994 0.31555652618408203 0.3172118663787842 0.31911471486091614 0.32280173897743225 0.33204859495162964 0.3453712463378906 0.357761949300766 0.3699503242969513 0.38311585783958435 0.39259737730026245 0.395723819732666 0.39234602451324463 0.38097503781318665 0.3659316301345825 0.3534175157546997 0.34347930550575256 0.33371132612228394 0.3236602544784546 0.3152346611022949 0.30779775977134705 30445.38885 41538.7379 15.717131304491499 46.21617319326819
+0.3608156144618988 0.4259406626224518 0.47818616032600403 0.5471063256263733 0.6347803473472595 0.7001804113388062 0.7520433068275452 0.8171277642250061 0.8950353264808655 0.9654224514961243 1.013027548789978 1.0263880491256714 0.9852103590965271 0.941172182559967 0.931695818901062 0.9181087017059326 0.8757404685020447 0.8307337164878845 0.7877539992332458 0.7257715463638306 0.6523596048355103 0.5768492817878723 0.5085425972938538 0.456727534532547 0.4192277491092682 0.3939008414745331 0.3818787932395935 0.3828960657119751 0.389323353767395 0.39450258016586304 0.39829221367836 0.40605780482292175 0.4275314211845398 0.4643791615962982 0.505535900592804 0.5479178428649902 0.5994552969932556 0.6376073360443115 0.6582133769989014 0.6799547672271729 0.6931027770042419 0.6702796816825867 0.6343024969100952 0.6056128144264221 0.5789087414741516 0.5561301112174988 0.53394615650177 0.4996113181114197 0.4577721953392029 0.4083678126335144 0.36549386382102966 0.3386378884315491 0.3173430263996124 0.2995651960372925 0.2844037711620331 0.27193325757980347 0.26600706577301025 0.2700923979282379 0.2851560115814209 0.30088505148887634 0.3138630986213684 0.3285767436027527 0.3413139879703522 0.3445935547351837 0.3396775424480438 0.330121785402298 0.3199063241481781 0.30752673745155334 0.2904285490512848 0.27791693806648254 0.2726101279258728 0.27176886796951294 0.2783729135990143 0.2872854471206665 0.29147452116012573 0.29573073983192444 0.30301201343536377 0.3096592128276825 0.3131972551345825 0.31535086035728455 0.3140628933906555 0.3053463399410248 0.2954469323158264 0.2890409231185913 0.280372679233551 0.2706373333930969 0.2643801271915436 0.25798389315605164 0.2508365511894226 0.24706313014030457 0.2483857423067093 0.25367772579193115 0.2591390609741211 0.26199933886528015 0.2643854320049286 0.2681591808795929 0.2714567184448242 0.27293530106544495 0.2729243338108063 0.27181246876716614 0.27032458782196045 0.2693708539009094 0.26829567551612854 0.2665247321128845 0.2669430077075958 0.271585613489151 0.2774175703525543 0.28121861815452576 0.2841823399066925 0.28875136375427246 0.2948462665081024 0.3012498915195465 0.30834972858428955 0.3174125552177429 0.3262895941734314 0.33198782801628113 0.3391663730144501 0.35144802927970886 0.3615659177303314 0.3633808195590973 0.3589021563529968 0.3500611186027527 0.33608290553092957 0.3192422091960907 0.30552980303764343 0.29612672328948975 0.2880210280418396 0.2813362777233124 0.2759957015514374 30442.5687 41541.616519999996 14.381547746983568 42.02895298858711
+0.3729221224784851 0.44012895226478577 0.4914250373840332 0.5655630230903625 0.6647416949272156 0.7444058060646057 0.8126416206359863 0.8799846172332764 0.9443001747131348 0.9979190826416016 1.0210847854614258 1.0208030939102173 1.0111762285232544 0.992798924446106 0.9904224276542664 0.99041348695755 0.9595239162445068 0.908574640750885 0.846463143825531 0.7647848725318909 0.6809067726135254 0.6017272472381592 0.5331747531890869 0.48201125860214233 0.44443103671073914 0.41660502552986145 0.3969760835170746 0.38763803243637085 0.38977357745170593 0.4000709354877472 0.41259172558784485 0.4278537333011627 0.45189592242240906 0.48642393946647644 0.5247828960418701 0.5645804405212402 0.612518310546875 0.6483836770057678 0.6727944016456604 0.7076162695884705 0.7434014678001404 0.7206994891166687 0.6666464805603027 0.63228839635849 0.608867883682251 0.5807878971099854 0.5441436171531677 0.5172581076622009 0.4963454604148865 0.45485949516296387 0.401254266500473 0.36339372396469116 0.3367786109447479 0.31736981868743896 0.29844656586647034 0.28279122710227966 0.27746984362602234 0.2811555564403534 0.2927308678627014 0.3071295917034149 0.3210527002811432 0.33639973402023315 0.3501872718334198 0.3525633215904236 0.34586936235427856 0.33730486035346985 0.3312234878540039 0.32529526948928833 0.31066590547561646 0.2939175069332123 0.286742240190506 0.28868338465690613 0.2973419427871704 0.3067079484462738 0.31102290749549866 0.31296807527542114 0.3165799379348755 0.3216167390346527 0.32459816336631775 0.32458773255348206 0.32075992226600647 0.31120601296424866 0.3001273572444916 0.2915954291820526 0.28556665778160095 0.28158968687057495 0.2759927809238434 0.26627132296562195 0.25822049379348755 0.25609999895095825 0.2582840323448181 0.26162636280059814 0.26389646530151367 0.26584580540657043 0.269505113363266 0.2740560472011566 0.2757222354412079 0.2737424373626709 0.27331092953681946 0.2753473222255707 0.2754512131214142 0.2745696008205414 0.27530866861343384 0.2763848900794983 0.27731868624687195 0.2794644236564636 0.28307804465293884 0.2873600125312805 0.29181772470474243 0.29564568400382996 0.29717445373535156 0.2980411946773529 0.30308812856674194 0.31369927525520325 0.3267776072025299 0.3403771221637726 0.3552534282207489 0.3692227900028229 0.3773849606513977 0.37742289900779724 0.3699462413787842 0.3581613600254059 0.3446747362613678 0.3301258683204651 0.3174242079257965 0.3073962330818176 0.2965550720691681 0.28561556339263916 0.27806076407432556 30445.38885 41541.616519999996 14.87720727584366 44.091357683377474
diff --git a/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin4.tab b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin4.tab
new file mode 100644
index 000000000..87bcee76b
--- /dev/null
+++ b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin4.tab
@@ -0,0 +1,7 @@
+1697.131066748047 1693.2739506872558 1689.416834626465 1685.5597185656738 1681.702602504883 1677.8454864440919 1673.9883703833011 1670.13125432251 1666.2741382617191 1662.417022200928 1658.5599061401367 1654.702790079346 1650.8456740185547 1646.988557957764 1643.1314418969728 1639.274325836182 1635.4172097753908 1631.5600937145996 1627.7029776538088 1623.8458615930176 1619.9887455322269 1616.1316294714356 1612.2745134106449 1608.4173973498537 1604.5602812890625 1600.7031652282717 1596.8460491674805 1592.9889331066897 1589.1318170458985 1585.2747009851078 1581.4175849243165 1577.5604688635258 1573.7033528027346 1569.8462367419434 1565.9891206811526 1562.1320046203614 1558.2748885595706 1554.4177724987794 1550.5606564379887 1546.7035403771974 1542.8464243164062 1538.9893082556155 1535.1321921948243 1531.2750761340335 1527.4179600732423 1523.5608440124515 1519.7037279516603 1515.846611890869 1511.9894958300783 1508.1323797692871 1504.2752637084964 1500.4181476477052 1496.5610315869144 1492.7039155261232 1488.8467994653324 1484.9896834045412 1481.13256734375 1477.2754512829592 1473.418335222168 1469.5612191613773 1465.704103100586 1461.8469870397953 1457.989870979004 1454.1327549182129 1450.275638857422 1446.418522796631 1442.5614067358401 1438.704290675049 1434.8471746142582 1430.990058553467 1427.1329424926757 1423.275826431885 1419.4187103710938 1415.561594310303 1411.7044782495118 1407.847362188721 1403.9902461279298 1400.133130067139 1396.2760140063479 1392.4188979455566 1388.5617818847659 1384.7046658239747 1380.847549763184 1376.9904337023927 1373.133317641602 1369.2762015808107 1365.4190855200195 1361.5619694592287 1357.7048533984375 1353.8477373376468 1349.9906212768556 1346.1335052160648 1342.2763891552736 1338.4192730944824 1334.5621570336916 1330.7050409729004 1326.8479249121096 1322.9908088513184 1319.1336927905277 1315.2765767297365 1311.4194606689457 1307.5623446081545 1303.7052285473633 1299.8481124865725 1295.9909964257813 1292.1338803649905 1288.2767643041993 1284.4196482434086 1280.5625321826174 1276.7054161218261 1272.8483000610354 1268.9911840002442 1265.1340679394534 1261.2769518786622 1257.4198358178714 1253.5627197570802 1249.705603696289 1245.8484876354983 1241.991371574707 1238.1342555139163 1234.277139453125 1230.4200233923343 1226.562907331543 1222.7057912707523 1218.8486752099611 1214.99155914917 1211.1344430883792 1207.277327027588 1203.4202109667972 map_x map_y 1214.0 - 1258.0 1500.0 - 1580.0
+continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous
+ meta meta meta meta
+0.3949830234050751 0.4622531533241272 0.5109723210334778 0.5819476842880249 0.6732906699180603 0.7399584054946899 0.8056941032409668 0.8803262114524841 0.9407079219818115 0.9959824681282043 1.0247737169265747 0.9988774061203003 0.9598121643066406 0.9596822261810303 0.9756194353103638 0.9531159996986389 0.8880895376205444 0.8291646242141724 0.7852953672409058 0.7326091527938843 0.6583097577095032 0.5755128264427185 0.5128992199897766 0.47360721230506897 0.4461856484413147 0.424794465303421 0.40726786851882935 0.39642640948295593 0.3955315947532654 0.3990853428840637 0.40200623869895935 0.41744357347488403 0.4541429877281189 0.4928371012210846 0.523593544960022 0.5572065114974976 0.6082401275634766 0.6535071730613708 0.6752548813819885 0.6942375302314758 0.7089064717292786 0.6849415898323059 0.648251473903656 0.6290637254714966 0.611190140247345 0.5820888876914978 0.5479511022567749 0.5251440405845642 0.5092036724090576 0.4710317552089691 0.41165193915367126 0.368015855550766 0.33563244342803955 0.30891987681388855 0.289467990398407 0.279835045337677 0.2776188254356384 0.281124472618103 0.2969658076763153 0.3199588358402252 0.3370678722858429 0.35005685687065125 0.3592534065246582 0.3598088026046753 0.3555058240890503 0.34791675209999084 0.3381218910217285 0.32693901658058167 0.3126853406429291 0.3007925748825073 0.2955957353115082 0.2945536673069 0.29722654819488525 0.30562835931777954 0.3160330057144165 0.32335811853408813 0.32722195982933044 0.33106622099876404 0.333890825510025 0.3307388126850128 0.32467377185821533 0.31839045882225037 0.3102380931377411 0.30023348331451416 0.28814268112182617 0.2750730514526367 0.26571476459503174 0.2631886601448059 0.2642560303211212 0.2657497227191925 0.2698196768760681 0.2753346860408783 0.27848049998283386 0.27970898151397705 0.2795354127883911 0.2767869830131531 0.27504852414131165 0.2782919108867645 0.28145065903663635 0.2807522118091583 0.2820216417312622 0.28606170415878296 0.2876238524913788 0.2858695089817047 0.28583207726478577 0.29170745611190796 0.2989623248577118 0.3013303577899933 0.3022397756576538 0.3061143457889557 0.31094178557395935 0.31485098600387573 0.3188069462776184 0.32449349761009216 0.333775132894516 0.34593096375465393 0.3592696785926819 0.3726845979690552 0.3809838593006134 0.37974658608436584 0.37090665102005005 0.3579893112182617 0.3460439443588257 0.33749645948410034 0.3274995684623718 0.3147842586040497 0.3056890070438385 0.3015490472316742 0.2963547110557556 30442.5687 41538.7379 15.053673351479718 43.89851045568374
+0.36599868535995483 0.44001543521881104 0.4966375231742859 0.5643589496612549 0.654793381690979 0.7409048080444336 0.8192135691642761 0.8847960829734802 0.9369638562202454 0.9906289577484131 1.025296688079834 1.0149723291397095 0.9805884957313538 0.9636447429656982 0.9588003158569336 0.9524202942848206 0.9314351677894592 0.8927587270736694 0.8397254943847656 0.7675902843475342 0.6844693422317505 0.6059010624885559 0.5474121570587158 0.5043894052505493 0.468307226896286 0.44075509905815125 0.4207476079463959 0.4080858826637268 0.40591961145401 0.4134867191314697 0.42650675773620605 0.4475072920322418 0.47888901829719543 0.5122790336608887 0.5369526743888855 0.5554997324943542 0.5947977304458618 0.647955060005188 0.6778163313865662 0.6932549476623535 0.6977417469024658 0.6872305870056152 0.659528911113739 0.6245843768119812 0.5957351922988892 0.5746957659721375 0.5465317368507385 0.5116745233535767 0.47723180055618286 0.4333028197288513 0.3936629891395569 0.36897724866867065 0.345966637134552 0.3255443572998047 0.31004011631011963 0.29891106486320496 0.2932963967323303 0.2937392592430115 0.3078584671020508 0.33370327949523926 0.35201096534729004 0.3585779666900635 0.36050570011138916 0.3624379336833954 0.3620472550392151 0.35969817638397217 0.35452911257743835 0.3419364094734192 0.3230227828025818 0.30832669138908386 0.30204203724861145 0.3018741011619568 0.30683496594429016 0.3151794970035553 0.3218154311180115 0.3262678384780884 0.33061009645462036 0.33248963952064514 0.3305680453777313 0.32937225699424744 0.3280726373195648 0.322355717420578 0.3143385052680969 0.30674803256988525 0.2977624237537384 0.28612422943115234 0.27380654215812683 0.26605281233787537 0.2670673131942749 0.27401211857795715 0.2821645736694336 0.28739145398139954 0.289187490940094 0.2906554937362671 0.29101991653442383 0.28759765625 0.28305813670158386 0.28146880865097046 0.2823540270328522 0.2834238111972809 0.28334492444992065 0.28242823481559753 0.2830897569656372 0.285215824842453 0.286749929189682 0.2894335985183716 0.2963193953037262 0.30561134219169617 0.31135934591293335 0.3125182092189789 0.3135771155357361 0.31644806265830994 0.3219490647315979 0.3305686414241791 0.3386459946632385 0.34468361735343933 0.35293155908584595 0.3640737235546112 0.3740508556365967 0.3799596130847931 0.3787302076816559 0.3690877854824066 0.3545362651348114 0.33818575739860535 0.32251599431037903 0.31119340658187866 0.3069508969783783 0.30643993616104126 0.3014766573905945 30445.38885 41538.7379 15.056927844654062 43.61475352701898
+0.36250585317611694 0.42431044578552246 0.4834742844104767 0.5558268427848816 0.6433207988739014 0.7237451076507568 0.797504723072052 0.8740603923797607 0.9462519288063049 1.0028680562973022 1.0236170291900635 0.9993492960929871 0.9659426808357239 0.929129958152771 0.8976386189460754 0.8773003220558167 0.845932126045227 0.804290771484375 0.7517927289009094 0.6770941019058228 0.5976353883743286 0.5313588380813599 0.48177453875541687 0.44140711426734924 0.40849852561950684 0.3899365961551666 0.38149017095565796 0.3739112615585327 0.3684139847755432 0.372007817029953 0.38562244176864624 0.40915170311927795 0.4383581876754761 0.46522119641304016 0.4911789894104004 0.5281954407691956 0.5901359915733337 0.6282098889350891 0.6299937963485718 0.6347435712814331 0.6456948518753052 0.6421006917953491 0.6224752068519592 0.6007646918296814 0.5784657001495361 0.5487658381462097 0.5032517313957214 0.4633730351924896 0.4398660957813263 0.41094517707824707 0.3713396489620209 0.3397798538208008 0.315258264541626 0.2960793673992157 0.2789282202720642 0.26473933458328247 0.2583105266094208 0.26161065697669983 0.276593953371048 0.29428234696388245 0.30759015679359436 0.3208509385585785 0.33403608202934265 0.3378518223762512 0.3314681351184845 0.3205536901950836 0.3096092939376831 0.29909756779670715 0.2854691445827484 0.27216678857803345 0.2648516893386841 0.26480165123939514 0.27259862422943115 0.28223392367362976 0.28807657957077026 0.2966751158237457 0.3103998601436615 0.31771647930145264 0.3139994740486145 0.31038033962249756 0.30780771374702454 0.30000224709510803 0.2885487973690033 0.2776309549808502 0.2691199779510498 0.26336920261383057 0.2575911581516266 0.2499367892742157 0.24667014181613922 0.2502342164516449 0.2533777952194214 0.25388017296791077 0.2556212842464447 0.2578236758708954 0.25818225741386414 0.2583445906639099 0.2599364221096039 0.2620580792427063 0.2627926170825958 0.2631688117980957 0.2642405927181244 0.263955682516098 0.2622736394405365 0.2618711590766907 0.2638363242149353 0.2683615982532501 0.2739871144294739 0.27764204144477844 0.2804603576660156 0.28473037481307983 0.28941360116004944 0.2937960624694824 0.2986640930175781 0.30610325932502747 0.316412091255188 0.3255343437194824 0.3314375877380371 0.33745360374450684 0.3465556502342224 0.355802059173584 0.358920693397522 0.35263997316360474 0.33765292167663574 0.3183898329734802 0.30118611454963684 0.2887457013130188 0.28239473700523376 0.2824958264827728 0.2819530665874481 30442.5687 41541.616519999996 14.148486745442884 40.914534151939826
+0.3650876581668854 0.44027072191238403 0.49740421772003174 0.5676716566085815 0.6565104126930237 0.7217820286750793 0.776906430721283 0.8554854989051819 0.9431904554367065 0.99639892578125 0.9918259382247925 0.9632425308227539 0.9571559429168701 0.9453587532043457 0.9196834564208984 0.9045694470405579 0.8967841863632202 0.8714707493782043 0.8187240958213806 0.7500607967376709 0.6737703084945679 0.5944964289665222 0.5322104096412659 0.48620209097862244 0.4495582580566406 0.4267524480819702 0.4147963225841522 0.4065539836883545 0.40079763531684875 0.40120112895965576 0.4117395281791687 0.4343542158603668 0.4588378369808197 0.4770737290382385 0.49635985493659973 0.5230758190155029 0.5750504732131958 0.6321943402290344 0.6574925780296326 0.6613973379135132 0.6457144618034363 0.6232727766036987 0.6174584627151489 0.6194400787353516 0.6105873584747314 0.5773681402206421 0.5304786562919617 0.4934249520301819 0.45931971073150635 0.41730549931526184 0.38470304012298584 0.3595018684864044 0.3293219804763794 0.30435964465141296 0.2891426980495453 0.2798253893852234 0.2746725082397461 0.2748556435108185 0.2886051833629608 0.3117738366127014 0.32717078924179077 0.33106401562690735 0.3289177715778351 0.33031389117240906 0.33271220326423645 0.3304341435432434 0.32225725054740906 0.30900219082832336 0.2952777147293091 0.2869744896888733 0.28450044989585876 0.2863030433654785 0.29052266478538513 0.29561755061149597 0.3012177348136902 0.3077249825000763 0.3149780333042145 0.3194979727268219 0.31837978959083557 0.3156931400299072 0.31331557035446167 0.3074597716331482 0.29792141914367676 0.28665927052497864 0.2769920229911804 0.2717728316783905 0.2680080831050873 0.26393961906433105 0.2608543634414673 0.25888293981552124 0.25867512822151184 0.2605808675289154 0.263666570186615 0.26618891954421997 0.2665948271751404 0.2663698196411133 0.2670312225818634 0.26882821321487427 0.27096620202064514 0.2717668414115906 0.2718110680580139 0.2726369798183441 0.27475622296333313 0.2783312201499939 0.2822757363319397 0.285504013299942 0.2890436351299286 0.29262956976890564 0.292468398809433 0.2886587381362915 0.28673070669174194 0.2884071469306946 0.29260167479515076 0.30139777064323425 0.31254521012306213 0.32084983587265015 0.329580694437027 0.34177514910697937 0.35234349966049194 0.3568665683269501 0.3554323613643646 0.3491654396057129 0.3388620913028717 0.32499754428863525 0.3104616105556488 0.29853302240371704 0.28830283880233765 0.27974289655685425 0.27512240409851074 30445.38885 41541.616519999996 14.216843459338445 41.87857263213592
diff --git a/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin_model-results.tab b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin_model-results.tab
new file mode 100644
index 000000000..713fd5f81
--- /dev/null
+++ b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin_model-results.tab
@@ -0,0 +1,19 @@
+map_x map_y 1214.0 - 1258.0 1500.0 - 1580.0 Polarisation Angle R-squared (1214.0 - 1258.0) a0 (1214.0 - 1258.0) a1 (1214.0 - 1258.0) a2 (1214.0 - 1258.0) R-squared (1500.0 - 1580.0) a0 (1500.0 - 1580.0) a1 (1500.0 - 1580.0) a2 (1500.0 - 1580.0) 1203.4202109667972 1207.277327027588 1211.1344430883792 1214.99155914917 1218.8486752099611 1222.7057912707523 1226.562907331543 1230.4200233923343 1234.277139453125 1238.1342555139163 1241.991371574707 1245.8484876354983 1249.705603696289 1253.5627197570802 1257.4198358178714 1261.2769518786622 1265.1340679394534 1268.9911840002442 1272.8483000610354 1276.7054161218261 1280.5625321826174 1284.4196482434086 1288.2767643041993 1292.1338803649905 1295.9909964257813 1299.8481124865725 1303.7052285473633 1307.5623446081545 1311.4194606689457 1315.2765767297365 1319.1336927905277 1322.9908088513184 1326.8479249121096 1330.7050409729004 1334.5621570336916 1338.4192730944824 1342.2763891552736 1346.1335052160648 1349.9906212768556 1353.8477373376468 1357.7048533984375 1361.5619694592287 1365.4190855200195 1369.2762015808107 1373.133317641602 1376.9904337023927 1380.847549763184 1384.7046658239747 1388.5617818847659 1392.4188979455566 1396.2760140063479 1400.133130067139 1403.9902461279298 1407.847362188721 1411.7044782495118 1415.561594310303 1419.4187103710938 1423.275826431885 1427.1329424926757 1430.990058553467 1434.8471746142582 1438.704290675049 1442.5614067358401 1446.418522796631 1450.275638857422 1454.1327549182129 1457.989870979004 1461.8469870397953 1465.704103100586 1469.5612191613773 1473.418335222168 1477.2754512829592 1481.13256734375 1484.9896834045412 1488.8467994653324 1492.7039155261232 1496.5610315869144 1500.4181476477052 1504.2752637084964 1508.1323797692871 1511.9894958300783 1515.846611890869 1519.7037279516603 1523.5608440124515 1527.4179600732423 1531.2750761340335 1535.1321921948243 1538.9893082556155 1542.8464243164062 1546.7035403771974 1550.5606564379887 1554.4177724987794 1558.2748885595706 1562.1320046203614 1565.9891206811526 1569.8462367419434 1573.7033528027346 1577.5604688635258 1581.4175849243165 1585.2747009851078 1589.1318170458985 1592.9889331066897 1596.8460491674805 1600.7031652282717 1604.5602812890625 1608.4173973498537 1612.2745134106449 1616.1316294714356 1619.9887455322269 1623.8458615930176 1627.7029776538088 1631.5600937145996 1635.4172097753908 1639.274325836182 1643.1314418969728 1646.988557957764 1650.8456740185547 1654.702790079346 1658.5599061401367 1662.417022200928 1666.2741382617191 1670.13125432251 1673.9883703833011 1677.8454864440919 1681.702602504883 1685.5597185656738 1689.416834626465 1693.2739506872558 1697.131066748047
+continuous continuous continuous continuous 0.0\ Degrees 45.0\ Degrees 90.0\ Degrees 135.0\ Degrees continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous
+meta meta meta meta meta meta meta meta meta meta meta meta meta
+30442.56870 41538.7 15.01 43.8794 0.0 Degrees 0.9999 0.0478818 -0.0930766 15.1023 0.476175 0.169995 0.198483 43.8747 0.287261 0.293882 0.297508 0.302286 0.312591 0.32878 0.346964 0.362572 0.373945 0.380348 0.380321 0.374495 0.363802 0.349067 0.33494 0.325305 0.318378 0.311427 0.30373 0.29774 0.295033 0.292611 0.29067 0.2909 0.289319 0.283677 0.277591 0.274682 0.274906 0.275084 0.272302 0.268401 0.267278 0.269375 0.272837 0.274141 0.2694 0.260834 0.254072 0.253377 0.257575 0.262868 0.270122 0.280275 0.288891 0.293777 0.300091 0.308883 0.31535 0.317585 0.317625 0.316181 0.311551 0.305746 0.302562 0.298723 0.290963 0.288164 0.294363 0.303229 0.311636 0.320071 0.328554 0.337744 0.347677 0.35353 0.344313 0.328142 0.319428 0.311504 0.293092 0.27016 0.259254 0.262548 0.280365 0.307472 0.334361 0.361379 0.396993 0.444328 0.477933 0.500553 0.537606 0.588599 0.626357 0.650183 0.672416 0.693028 0.698699 0.688528 0.676693 0.660426 0.617829 0.566765 0.528336 0.491682 0.461379 0.434376 0.409832 0.394715 0.386007 0.379658 0.381096 0.399153 0.431717 0.469617 0.513116 0.578222 0.66893 0.758444 0.8181 0.853371 0.897934 0.953696 1.00132 1.04376 1.06195 1.05437 1.04048 1.00985 0.955917 0.877086 0.787692 0.7115 0.637403 0.554745 0.49063 0.437823 0.371112
+30445.38885 41538.7 14.937 45.3498 0.0 Degrees 0.932453 0.11529 -0.390086 15.2496 0.362758 0.671081 -0.433181 45.0344 0.281542 0.287401 0.29221 0.299888 0.314004 0.332075 0.350018 0.363424 0.369344 0.370461 0.371579 0.371787 0.36371 0.348212 0.336029 0.329395 0.322253 0.312866 0.305823 0.306542 0.310213 0.306977 0.298274 0.289972 0.282366 0.276259 0.275175 0.278512 0.280018 0.277063 0.272044 0.267816 0.266933 0.267989 0.267923 0.267012 0.265956 0.263926 0.261076 0.258419 0.257783 0.260914 0.266729 0.275201 0.287219 0.296864 0.301827 0.307955 0.316999 0.325933 0.330107 0.326264 0.316769 0.306048 0.298683 0.2956 0.291835 0.286729 0.287214 0.295572 0.312221 0.331286 0.342701 0.348662 0.354143 0.357323 0.351947 0.341523 0.334706 0.327077 0.306906 0.280963 0.269342 0.274902 0.295836 0.322182 0.34704 0.374486 0.410674 0.45882 0.495035 0.524703 0.571424 0.616929 0.635799 0.646581 0.6643 0.692803 0.720735 0.73008 0.728708 0.710415 0.643052 0.570625 0.535248 0.50936 0.480137 0.449539 0.426122 0.410452 0.399818 0.397541 0.406234 0.425255 0.455413 0.497125 0.547186 0.611775 0.690886 0.765513 0.827145 0.878587 0.937334 0.998684 1.02539 1.04238 1.07118 1.06373 1.03618 1.01079 0.978589 0.917378 0.822211 0.739631 0.666456 0.57625 0.502106 0.448678 0.388349
+30442.56870 41541.6 14.1401 42.6338 0.0 Degrees 0.905249 0.23199 -0.120727 14.3206 0.551078 0.580899 0.302411 41.9134 0.273524 0.276618 0.278062 0.283478 0.292883 0.303991 0.317558 0.334117 0.352017 0.364946 0.365643 0.355624 0.343398 0.333238 0.321642 0.30665 0.294834 0.291642 0.292195 0.291186 0.288884 0.284238 0.277727 0.271934 0.265597 0.259425 0.257221 0.258986 0.261565 0.263126 0.262592 0.258739 0.252251 0.246491 0.246158 0.25074 0.251079 0.242936 0.233431 0.230298 0.233159 0.238288 0.245505 0.253187 0.259248 0.265199 0.275303 0.290671 0.302653 0.301358 0.292954 0.28995 0.288333 0.283599 0.2826 0.285054 0.283092 0.278234 0.275594 0.275083 0.281919 0.297548 0.311005 0.317839 0.319715 0.316163 0.302851 0.288887 0.284106 0.278994 0.26557 0.253053 0.249939 0.254155 0.264713 0.279338 0.300319 0.328088 0.36086 0.41113 0.465244 0.505385 0.541336 0.569674 0.592659 0.618993 0.654198 0.699965 0.716811 0.700334 0.689275 0.669128 0.597113 0.523782 0.491777 0.463111 0.423863 0.389188 0.373266 0.368028 0.364984 0.368648 0.3797 0.393359 0.414583 0.447617 0.487752 0.541538 0.620548 0.718398 0.812932 0.884242 0.930256 0.951112 0.982504 1.0494 1.09659 1.05384 1.00317 0.973045 0.939802 0.874753 0.793703 0.731933 0.665755 0.570333 0.4922 0.436718 0.366888
+30445.38885 41541.6 13.9496 43.0506 0.0 Degrees 0.99419 0.253698 -0.46382 14.442 0.165709 0.0369469 -0.520385 42.7432 0.268188 0.276964 0.282715 0.285865 0.294003 0.308686 0.325357 0.338775 0.346471 0.35063 0.350595 0.343381 0.332646 0.324194 0.317819 0.309119 0.297905 0.288369 0.281959 0.278584 0.277796 0.27729 0.275504 0.271514 0.264176 0.256542 0.253681 0.255988 0.259754 0.261661 0.260684 0.257718 0.254793 0.253284 0.254129 0.256234 0.25349 0.245068 0.238051 0.236373 0.238273 0.242712 0.251497 0.262693 0.272818 0.281672 0.288911 0.292399 0.292749 0.29398 0.297668 0.300448 0.29965 0.297203 0.294566 0.292018 0.290966 0.289681 0.286869 0.287297 0.294661 0.306198 0.316544 0.324864 0.330393 0.330801 0.324372 0.314856 0.30824 0.299949 0.281402 0.263431 0.260508 0.269722 0.288608 0.309209 0.330476 0.359589 0.394992 0.438716 0.482242 0.516345 0.544324 0.56838 0.600074 0.637247 0.668141 0.680816 0.67177 0.667529 0.668915 0.658995 0.608525 0.545308 0.50507 0.472152 0.442809 0.418393 0.400147 0.388912 0.38633 0.39307 0.40593 0.426022 0.453767 0.484333 0.520235 0.57745 0.661105 0.756496 0.840723 0.882765 0.894606 0.913984 0.93713 0.963545 1.00522 1.02089 1.01057 0.990381 0.94209 0.863783 0.779679 0.70997 0.634537 0.545024 0.479588 0.430039 0.364289
+30442.56870 41538.7 15.1494 44.2385 45.0 Degrees 0.9999 0.0478818 -0.0930766 15.1023 0.476175 0.169995 0.198483 43.8747 0.297009 0.302209 0.304923 0.307724 0.314569 0.329118 0.347468 0.364445 0.377804 0.383433 0.382574 0.379936 0.371804 0.354726 0.33584 0.32314 0.314625 0.306658 0.301683 0.300786 0.299899 0.297028 0.292733 0.287233 0.283652 0.283516 0.283241 0.280708 0.276131 0.271551 0.27027 0.27059 0.269527 0.268324 0.269002 0.270869 0.270319 0.265984 0.259972 0.253967 0.250261 0.252534 0.261519 0.27237 0.281428 0.289454 0.298175 0.30566 0.312364 0.322586 0.331565 0.329237 0.319126 0.30918 0.302994 0.30057 0.298058 0.293225 0.291513 0.296074 0.304601 0.316134 0.330767 0.345829 0.35684 0.358853 0.351299 0.343106 0.336539 0.325608 0.303669 0.280183 0.269393 0.269814 0.281945 0.303262 0.327502 0.353464 0.386079 0.435568 0.481076 0.511135 0.542178 0.571141 0.594159 0.619005 0.648934 0.685694 0.711861 0.709826 0.696796 0.67449 0.634826 0.597634 0.567238 0.526635 0.478349 0.439925 0.418429 0.406126 0.397473 0.393216 0.399052 0.417651 0.444723 0.479152 0.521471 0.575433 0.6436 0.721718 0.801019 0.869395 0.925729 0.953298 0.954651 0.952871 0.962806 0.985442 0.991494 0.973168 0.946875 0.898564 0.813696 0.736485 0.660936 0.563956 0.49002 0.439666 0.377336
+30445.38885 41538.7 15.2875 44.9569 45.0 Degrees 0.932453 0.11529 -0.390086 15.2496 0.362758 0.671081 -0.433181 45.0344 0.292544 0.296149 0.300557 0.308044 0.320356 0.336352 0.35449 0.371655 0.382156 0.384808 0.383701 0.379202 0.36919 0.356261 0.342525 0.329056 0.318705 0.311215 0.305751 0.303437 0.304124 0.304767 0.301519 0.295466 0.291742 0.290394 0.287971 0.285525 0.284011 0.282672 0.28252 0.282121 0.280259 0.278524 0.277594 0.276982 0.275079 0.270845 0.266734 0.265984 0.267873 0.271337 0.277082 0.283009 0.289208 0.297789 0.305525 0.31105 0.317468 0.323155 0.325258 0.328123 0.331092 0.326917 0.31751 0.309986 0.302761 0.294144 0.291177 0.295138 0.303864 0.31649 0.330366 0.344228 0.356212 0.361564 0.353966 0.340079 0.331447 0.3224 0.302722 0.282658 0.275106 0.27568 0.283898 0.301985 0.329169 0.358509 0.388042 0.437103 0.487286 0.512741 0.537119 0.5791 0.623401 0.656135 0.679499 0.701124 0.720571 0.725349 0.721212 0.70743 0.654441 0.589174 0.54983 0.514442 0.473509 0.43763 0.41841 0.409552 0.403537 0.401538 0.405069 0.417518 0.444527 0.484752 0.528496 0.576895 0.640589 0.719541 0.796243 0.855256 0.901152 0.919005 0.91289 0.916951 0.951858 0.984796 0.978514 0.950156 0.913201 0.858747 0.784819 0.717906 0.646791 0.558625 0.491076 0.439651 0.373372
+30442.56870 41541.6 14.6125 42.0763 45.0 Degrees 0.905249 0.23199 -0.120727 14.3206 0.551078 0.580899 0.302411 41.9134 0.280263 0.285479 0.291174 0.297267 0.304045 0.316351 0.336142 0.35594 0.368725 0.373443 0.370717 0.362672 0.351032 0.337819 0.32585 0.314657 0.303929 0.295355 0.288866 0.285078 0.284168 0.281935 0.276337 0.272009 0.270336 0.267917 0.265994 0.264893 0.260324 0.255263 0.255108 0.255504 0.253246 0.253574 0.257839 0.259142 0.255611 0.252284 0.248423 0.242942 0.240369 0.243283 0.24764 0.25014 0.25317 0.2601 0.271487 0.28451 0.292939 0.294158 0.294027 0.294219 0.290966 0.287036 0.284722 0.280577 0.273683 0.270643 0.272827 0.275344 0.280664 0.294323 0.310463 0.323319 0.329638 0.324703 0.310658 0.302133 0.300019 0.2905 0.265941 0.246221 0.243218 0.248825 0.262092 0.282402 0.305863 0.330537 0.361159 0.409957 0.457578 0.492236 0.530671 0.573128 0.604868 0.626327 0.64291 0.651612 0.661324 0.675088 0.670345 0.641436 0.582842 0.52767 0.499346 0.478586 0.449748 0.413311 0.387444 0.376612 0.373385 0.371086 0.370514 0.382822 0.412555 0.452223 0.49576 0.550498 0.624102 0.705725 0.773579 0.825238 0.876406 0.915692 0.942851 0.980782 1.00801 0.984912 0.964953 0.954917 0.936008 0.884946 0.803365 0.731596 0.653865 0.553915 0.485541 0.445544 0.389119
+30445.38885 41541.6 14.7242 41.9525 45.0 Degrees 0.99419 0.253698 -0.46382 14.442 0.165709 0.0369469 -0.520385 42.7432 0.277526 0.284678 0.289609 0.295291 0.304715 0.318498 0.336982 0.357656 0.373673 0.379897 0.376841 0.367608 0.353941 0.338138 0.323659 0.311503 0.302806 0.298979 0.296655 0.293383 0.289455 0.284357 0.279892 0.277906 0.276797 0.275426 0.274701 0.273617 0.270003 0.265527 0.263097 0.261782 0.260052 0.260003 0.262452 0.263879 0.263822 0.263857 0.261482 0.255431 0.249008 0.247883 0.254004 0.262248 0.270728 0.281494 0.293418 0.30392 0.309883 0.309833 0.3081 0.308054 0.305993 0.30021 0.293765 0.286607 0.277684 0.272897 0.273951 0.27839 0.289727 0.307605 0.32236 0.331534 0.334969 0.328812 0.318721 0.317832 0.31639 0.30331 0.280038 0.264894 0.263555 0.267915 0.278727 0.297982 0.323511 0.348979 0.370412 0.406665 0.458397 0.501191 0.534175 0.559287 0.586581 0.614111 0.62943 0.630658 0.648645 0.676721 0.67779 0.644812 0.578444 0.529881 0.507369 0.48188 0.452002 0.4274 0.411786 0.401811 0.395734 0.39636 0.404562 0.419417 0.439901 0.467325 0.506117 0.564421 0.644366 0.733556 0.806725 0.844638 0.86427 0.887299 0.906254 0.91094 0.907354 0.911164 0.918149 0.905033 0.864455 0.808501 0.756152 0.705617 0.627234 0.529663 0.466429 0.417986 0.347388
+30442.56870 41538.7 15.1961 43.4824 90.0 Degrees 0.9999 0.0478818 -0.0930766 15.1023 0.476175 0.169995 0.198483 43.8747 0.316435 0.316209 0.313171 0.316392 0.326833 0.340293 0.353014 0.364374 0.375522 0.385419 0.387713 0.377691 0.360731 0.344295 0.331355 0.322641 0.316438 0.312006 0.31173 0.31293 0.310185 0.304126 0.297432 0.29191 0.287577 0.282117 0.278311 0.282045 0.289642 0.290857 0.28477 0.277681 0.273076 0.273835 0.280132 0.286056 0.286396 0.284133 0.281844 0.277968 0.273917 0.273914 0.278593 0.286128 0.29696 0.307005 0.312036 0.318061 0.328863 0.339296 0.340916 0.334148 0.331114 0.330907 0.323565 0.309168 0.297204 0.295209 0.299716 0.308909 0.323516 0.337736 0.345913 0.350001 0.354942 0.361212 0.357139 0.344709 0.337849 0.329807 0.312369 0.29682 0.291435 0.292924 0.301712 0.315706 0.334007 0.356536 0.38531 0.433293 0.480011 0.505447 0.521235 0.54004 0.569499 0.600112 0.627067 0.657023 0.685768 0.693936 0.68997 0.681186 0.649101 0.596613 0.55421 0.518064 0.483572 0.447134 0.416532 0.397836 0.390444 0.393477 0.402744 0.417164 0.441558 0.479695 0.527832 0.589699 0.669335 0.747894 0.810291 0.863324 0.911904 0.935196 0.935554 0.937591 0.965876 1.02009 1.02962 0.988885 0.930482 0.861176 0.794941 0.742155 0.669762 0.567885 0.492153 0.438372 0.368902
+30445.38885 41538.7 15.7171 46.2162 90.0 Degrees 0.932453 0.11529 -0.390086 15.2496 0.362758 0.671081 -0.433181 45.0344 0.307798 0.315235 0.32366 0.333711 0.343479 0.353418 0.365932 0.380975 0.392346 0.395724 0.392597 0.383116 0.36995 0.357762 0.345371 0.332049 0.322802 0.319115 0.317212 0.315557 0.314116 0.310752 0.305488 0.301148 0.298155 0.29563 0.293246 0.291426 0.29131 0.291478 0.289176 0.28517 0.282394 0.283081 0.28667 0.289329 0.288738 0.285222 0.279214 0.273922 0.273677 0.27949 0.287825 0.294814 0.302312 0.310975 0.319157 0.329118 0.340065 0.347051 0.347279 0.341983 0.336262 0.330797 0.32539 0.320913 0.314026 0.307074 0.307649 0.316167 0.331599 0.347442 0.355857 0.360375 0.366295 0.373685 0.372819 0.357636 0.342953 0.333108 0.318103 0.298156 0.287727 0.288298 0.300365 0.322944 0.351225 0.381641 0.414804 0.462325 0.508162 0.536296 0.558214 0.580883 0.611752 0.652761 0.701831 0.753076 0.773026 0.757368 0.740625 0.720569 0.664674 0.592486 0.547629 0.513411 0.478692 0.445298 0.421257 0.40718 0.400384 0.402352 0.413084 0.430355 0.456255 0.495646 0.546357 0.611672 0.69828 0.791929 0.868873 0.931741 0.987795 1.00463 0.998213 1.01122 1.04639 1.05146 1.02235 0.980782 0.927941 0.865812 0.804526 0.748317 0.670591 0.5681 0.496042 0.446921 0.378759
+30442.56870 41541.6 14.3815 42.029 90.0 Degrees 0.905249 0.23199 -0.120727 14.3206 0.551078 0.580899 0.302411 41.9134 0.275996 0.281336 0.288021 0.296127 0.30553 0.319242 0.336083 0.350061 0.358902 0.363381 0.361566 0.351448 0.339166 0.331988 0.32629 0.317413 0.30835 0.30125 0.294846 0.288751 0.284182 0.281219 0.277418 0.271586 0.266943 0.266525 0.268296 0.269371 0.270325 0.271812 0.272924 0.272935 0.271457 0.268159 0.264385 0.261999 0.259139 0.253678 0.248386 0.247063 0.250837 0.257984 0.26438 0.270637 0.280373 0.289041 0.295447 0.305346 0.314063 0.315351 0.313197 0.309659 0.303012 0.295731 0.291475 0.287285 0.278373 0.271769 0.27261 0.277917 0.290429 0.307527 0.319906 0.330122 0.339678 0.344594 0.341314 0.328577 0.313863 0.300885 0.285156 0.270092 0.266007 0.271933 0.284404 0.299565 0.317343 0.338638 0.365494 0.408368 0.457772 0.499611 0.533946 0.55613 0.578909 0.605613 0.634302 0.67028 0.693103 0.679955 0.658213 0.637607 0.599455 0.547918 0.505536 0.464379 0.427531 0.406058 0.398292 0.394503 0.389323 0.382896 0.381879 0.393901 0.419228 0.456728 0.508543 0.576849 0.65236 0.725772 0.787754 0.830734 0.87574 0.918109 0.931696 0.941172 0.98521 1.02639 1.01303 0.965422 0.895035 0.817128 0.752043 0.70018 0.63478 0.547106 0.478186 0.425941 0.360816
+30445.38885 41541.6 14.8772 44.0914 90.0 Degrees 0.99419 0.253698 -0.46382 14.442 0.165709 0.0369469 -0.520385 42.7432 0.278061 0.285616 0.296555 0.307396 0.317424 0.330126 0.344675 0.358161 0.369946 0.377423 0.377385 0.369223 0.355253 0.340377 0.326778 0.313699 0.303088 0.298041 0.297174 0.295646 0.291818 0.28736 0.283078 0.279464 0.277319 0.276385 0.275309 0.27457 0.275451 0.275347 0.273311 0.273742 0.275722 0.274056 0.269505 0.265846 0.263896 0.261626 0.258284 0.2561 0.25822 0.266271 0.275993 0.28159 0.285567 0.291595 0.300127 0.311206 0.32076 0.324588 0.324598 0.321617 0.31658 0.312968 0.311023 0.306708 0.297342 0.288683 0.286742 0.293918 0.310666 0.325295 0.331223 0.337305 0.345869 0.352563 0.350187 0.3364 0.321053 0.30713 0.292731 0.281156 0.27747 0.282791 0.298447 0.31737 0.336779 0.363394 0.401254 0.454859 0.496345 0.517258 0.544144 0.580788 0.608868 0.632288 0.666646 0.720699 0.743401 0.707616 0.672794 0.648384 0.612518 0.56458 0.524783 0.486424 0.451896 0.427854 0.412592 0.400071 0.389774 0.387638 0.396976 0.416605 0.444431 0.482011 0.533175 0.601727 0.680907 0.764785 0.846463 0.908575 0.959524 0.990413 0.990422 0.992799 1.01118 1.0208 1.02108 0.997919 0.9443 0.879985 0.812642 0.744406 0.664742 0.565563 0.491425 0.440129 0.372922
+30442.56870 41538.7 15.0537 43.8985 135.0 Degrees 0.9999 0.0478818 -0.0930766 15.1023 0.476175 0.169995 0.198483 43.8747 0.296355 0.301549 0.305689 0.314784 0.3275 0.337496 0.346044 0.357989 0.370907 0.379747 0.380984 0.372685 0.35927 0.345931 0.333775 0.324493 0.318807 0.314851 0.310942 0.306114 0.30224 0.30133 0.298962 0.291707 0.285832 0.28587 0.287624 0.286062 0.282022 0.280752 0.281451 0.278292 0.275049 0.276787 0.279535 0.279709 0.27848 0.275335 0.26982 0.26575 0.264256 0.263189 0.265715 0.275073 0.288143 0.300233 0.310238 0.31839 0.324674 0.330739 0.333891 0.331066 0.327222 0.323358 0.316033 0.305628 0.297227 0.294554 0.295596 0.300793 0.312685 0.326939 0.338122 0.347917 0.355506 0.359809 0.359253 0.350057 0.337068 0.319959 0.296966 0.281124 0.277619 0.279835 0.289468 0.30892 0.335632 0.368016 0.411652 0.471032 0.509204 0.525144 0.547951 0.582089 0.61119 0.629064 0.648251 0.684942 0.708906 0.694238 0.675255 0.653507 0.60824 0.557207 0.523594 0.492837 0.454143 0.417444 0.402006 0.399085 0.395532 0.396426 0.407268 0.424794 0.446186 0.473607 0.512899 0.575513 0.65831 0.732609 0.785295 0.829165 0.88809 0.953116 0.975619 0.959682 0.959812 0.998877 1.02477 0.995982 0.940708 0.880326 0.805694 0.739958 0.673291 0.581948 0.510972 0.462253 0.394983
+30445.38885 41538.7 15.0569 43.6148 135.0 Degrees 0.932453 0.11529 -0.390086 15.2496 0.362758 0.671081 -0.433181 45.0344 0.301477 0.30644 0.306951 0.311193 0.322516 0.338186 0.354536 0.369088 0.37873 0.37996 0.374051 0.364074 0.352932 0.344684 0.338646 0.330569 0.321949 0.316448 0.313577 0.312518 0.311359 0.305611 0.296319 0.289434 0.28675 0.285216 0.28309 0.282428 0.283345 0.283424 0.282354 0.281469 0.283058 0.287598 0.29102 0.290655 0.289187 0.287391 0.282165 0.274012 0.267067 0.266053 0.273807 0.286124 0.297762 0.306748 0.314339 0.322356 0.328073 0.329372 0.330568 0.33249 0.33061 0.326268 0.321815 0.315179 0.306835 0.301874 0.302042 0.308327 0.323023 0.341936 0.354529 0.359698 0.362047 0.362438 0.360506 0.358578 0.352011 0.333703 0.307858 0.293739 0.293296 0.298911 0.31004 0.325544 0.345967 0.368977 0.393663 0.433303 0.477232 0.511675 0.546532 0.574696 0.595735 0.624584 0.659529 0.687231 0.697742 0.693255 0.677816 0.647955 0.594798 0.5555 0.536953 0.512279 0.478889 0.447507 0.426507 0.413487 0.40592 0.408086 0.420748 0.440755 0.468307 0.504389 0.547412 0.605901 0.684469 0.76759 0.839725 0.892759 0.931435 0.95242 0.9588 0.963645 0.980588 1.01497 1.0253 0.990629 0.936964 0.884796 0.819214 0.740905 0.654793 0.564359 0.496638 0.440015 0.365999
+30442.56870 41541.6 14.1485 40.9145 135.0 Degrees 0.905249 0.23199 -0.120727 14.3206 0.551078 0.580899 0.302411 41.9134 0.281953 0.282496 0.282395 0.288746 0.301186 0.31839 0.337653 0.35264 0.358921 0.355802 0.346556 0.337454 0.331438 0.325534 0.316412 0.306103 0.298664 0.293796 0.289414 0.28473 0.28046 0.277642 0.273987 0.268362 0.263836 0.261871 0.262274 0.263956 0.264241 0.263169 0.262793 0.262058 0.259936 0.258345 0.258182 0.257824 0.255621 0.25388 0.253378 0.250234 0.24667 0.249937 0.257591 0.263369 0.26912 0.277631 0.288549 0.300002 0.307808 0.31038 0.313999 0.317716 0.3104 0.296675 0.288077 0.282234 0.272599 0.264802 0.264852 0.272167 0.285469 0.299098 0.309609 0.320554 0.331468 0.337852 0.334036 0.320851 0.30759 0.294282 0.276594 0.261611 0.258311 0.264739 0.278928 0.296079 0.315258 0.33978 0.37134 0.410945 0.439866 0.463373 0.503252 0.548766 0.578466 0.600765 0.622475 0.642101 0.645695 0.634744 0.629994 0.62821 0.590136 0.528195 0.491179 0.465221 0.438358 0.409152 0.385622 0.372008 0.368414 0.373911 0.38149 0.389937 0.408499 0.441407 0.481775 0.531359 0.597635 0.677094 0.751793 0.804291 0.845932 0.8773 0.897639 0.92913 0.965943 0.999349 1.02362 1.00287 0.946252 0.87406 0.797505 0.723745 0.643321 0.555827 0.483474 0.42431 0.362506
+30445.38885 41541.6 14.2168 41.8786 135.0 Degrees 0.99419 0.253698 -0.46382 14.442 0.165709 0.0369469 -0.520385 42.7432 0.275122 0.279743 0.288303 0.298533 0.310462 0.324998 0.338862 0.349165 0.355432 0.356867 0.352343 0.341775 0.329581 0.32085 0.312545 0.301398 0.292602 0.288407 0.286731 0.288659 0.292468 0.29263 0.289044 0.285504 0.282276 0.278331 0.274756 0.272637 0.271811 0.271767 0.270966 0.268828 0.267031 0.26637 0.266595 0.266189 0.263667 0.260581 0.258675 0.258883 0.260854 0.26394 0.268008 0.271773 0.276992 0.286659 0.297921 0.30746 0.313316 0.315693 0.31838 0.319498 0.314978 0.307725 0.301218 0.295618 0.290523 0.286303 0.2845 0.286974 0.295278 0.309002 0.322257 0.330434 0.332712 0.330314 0.328918 0.331064 0.327171 0.311774 0.288605 0.274856 0.274673 0.279825 0.289143 0.30436 0.329322 0.359502 0.384703 0.417305 0.45932 0.493425 0.530479 0.577368 0.610587 0.61944 0.617458 0.623273 0.645714 0.661397 0.657493 0.632194 0.57505 0.523076 0.49636 0.477074 0.458838 0.434354 0.41174 0.401201 0.400798 0.406554 0.414796 0.426752 0.449558 0.486202 0.53221 0.594496 0.67377 0.750061 0.818724 0.871471 0.896784 0.904569 0.919683 0.945359 0.957156 0.963243 0.991826 0.996399 0.94319 0.855485 0.776906 0.721782 0.65651 0.567672 0.497404 0.440271 0.365088
diff --git a/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin_polar-results.tab b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin_polar-results.tab
new file mode 100644
index 000000000..cfad53d1a
--- /dev/null
+++ b/orangecontrib/spectroscopy/datasets/polar/4-angle-ftir_multiin_polar-results.tab
@@ -0,0 +1,19 @@
+map_x map_y 1214.0 - 1258.0 1500.0 - 1580.0 Polarisation Angle Azimuth Angle (1214.0 - 1258.0) Hermans Orientation Function (1214.0 - 1258.0) Intensity (1214.0 - 1258.0) Amplitude (1214.0 - 1258.0) R-squared (1214.0 - 1258.0) Azimuth Angle (1500.0 - 1580.0) Hermans Orientation Function (1500.0 - 1580.0) Intensity (1500.0 - 1580.0) Amplitude (1500.0 - 1580.0) R-squared (1500.0 - 1580.0) 1203.4202109667972 1207.277327027588 1211.1344430883792 1214.99155914917 1218.8486752099611 1222.7057912707523 1226.562907331543 1230.4200233923343 1234.277139453125 1238.1342555139163 1241.991371574707 1245.8484876354983 1249.705603696289 1253.5627197570802 1257.4198358178714 1261.2769518786622 1265.1340679394534 1268.9911840002442 1272.8483000610354 1276.7054161218261 1280.5625321826174 1284.4196482434086 1288.2767643041993 1292.1338803649905 1295.9909964257813 1299.8481124865725 1303.7052285473633 1307.5623446081545 1311.4194606689457 1315.2765767297365 1319.1336927905277 1322.9908088513184 1326.8479249121096 1330.7050409729004 1334.5621570336916 1338.4192730944824 1342.2763891552736 1346.1335052160648 1349.9906212768556 1353.8477373376468 1357.7048533984375 1361.5619694592287 1365.4190855200195 1369.2762015808107 1373.133317641602 1376.9904337023927 1380.847549763184 1384.7046658239747 1388.5617818847659 1392.4188979455566 1396.2760140063479 1400.133130067139 1403.9902461279298 1407.847362188721 1411.7044782495118 1415.561594310303 1419.4187103710938 1423.275826431885 1427.1329424926757 1430.990058553467 1434.8471746142582 1438.704290675049 1442.5614067358401 1446.418522796631 1450.275638857422 1454.1327549182129 1457.989870979004 1461.8469870397953 1465.704103100586 1469.5612191613773 1473.418335222168 1477.2754512829592 1481.13256734375 1484.9896834045412 1488.8467994653324 1492.7039155261232 1496.5610315869144 1500.4181476477052 1504.2752637084964 1508.1323797692871 1511.9894958300783 1515.846611890869 1519.7037279516603 1523.5608440124515 1527.4179600732423 1531.2750761340335 1535.1321921948243 1538.9893082556155 1542.8464243164062 1546.7035403771974 1550.5606564379887 1554.4177724987794 1558.2748885595706 1562.1320046203614 1565.9891206811526 1569.8462367419434 1573.7033528027346 1577.5604688635258 1581.4175849243165 1585.2747009851078 1589.1318170458985 1592.9889331066897 1596.8460491674805 1600.7031652282717 1604.5602812890625 1608.4173973498537 1612.2745134106449 1616.1316294714356 1619.9887455322269 1623.8458615930176 1627.7029776538088 1631.5600937145996 1635.4172097753908 1639.274325836182 1643.1314418969728 1646.988557957764 1650.8456740185547 1654.702790079346 1658.5599061401367 1662.417022200928 1666.2741382617191 1670.13125432251 1673.9883703833011 1677.8454864440919 1681.702602504883 1685.5597185656738 1689.416834626465 1693.2739506872558 1697.131066748047
+continuous continuous continuous continuous 0.0\ Degrees 45.0\ Degrees 90.0\ Degrees 135.0\ Degrees continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous continuous
+meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta
+30442.56870 41538.7 15.01 43.8794 0.0 Degrees -76.3886 0.00463121 15.1023 0.209341 0.9999 -20.2896 0.00397876 43.8747 0.522661 0.476175 0.287261 0.293882 0.297508 0.302286 0.312591 0.32878 0.346964 0.362572 0.373945 0.380348 0.380321 0.374495 0.363802 0.349067 0.33494 0.325305 0.318378 0.311427 0.30373 0.29774 0.295033 0.292611 0.29067 0.2909 0.289319 0.283677 0.277591 0.274682 0.274906 0.275084 0.272302 0.268401 0.267278 0.269375 0.272837 0.274141 0.2694 0.260834 0.254072 0.253377 0.257575 0.262868 0.270122 0.280275 0.288891 0.293777 0.300091 0.308883 0.31535 0.317585 0.317625 0.316181 0.311551 0.305746 0.302562 0.298723 0.290963 0.288164 0.294363 0.303229 0.311636 0.320071 0.328554 0.337744 0.347677 0.35353 0.344313 0.328142 0.319428 0.311504 0.293092 0.27016 0.259254 0.262548 0.280365 0.307472 0.334361 0.361379 0.396993 0.444328 0.477933 0.500553 0.537606 0.588599 0.626357 0.650183 0.672416 0.693028 0.698699 0.688528 0.676693 0.660426 0.617829 0.566765 0.528336 0.491682 0.461379 0.434376 0.409832 0.394715 0.386007 0.379658 0.381096 0.399153 0.431717 0.469617 0.513116 0.578222 0.66893 0.758444 0.8181 0.853371 0.897934 0.953696 1.00132 1.04376 1.06195 1.05437 1.04048 1.00985 0.955917 0.877086 0.787692 0.7115 0.637403 0.554745 0.49063 0.437823 0.371112
+30445.38885 41538.7 14.937 45.3498 0.0 Degrees -81.7675 0.0179421 15.2496 0.813532 0.932453 -61.4211 0.0118946 45.0344 1.59749 0.362758 0.281542 0.287401 0.29221 0.299888 0.314004 0.332075 0.350018 0.363424 0.369344 0.370461 0.371579 0.371787 0.36371 0.348212 0.336029 0.329395 0.322253 0.312866 0.305823 0.306542 0.310213 0.306977 0.298274 0.289972 0.282366 0.276259 0.275175 0.278512 0.280018 0.277063 0.272044 0.267816 0.266933 0.267989 0.267923 0.267012 0.265956 0.263926 0.261076 0.258419 0.257783 0.260914 0.266729 0.275201 0.287219 0.296864 0.301827 0.307955 0.316999 0.325933 0.330107 0.326264 0.316769 0.306048 0.298683 0.2956 0.291835 0.286729 0.287214 0.295572 0.312221 0.331286 0.342701 0.348662 0.354143 0.357323 0.351947 0.341523 0.334706 0.327077 0.306906 0.280963 0.269342 0.274902 0.295836 0.322182 0.34704 0.374486 0.410674 0.45882 0.495035 0.524703 0.571424 0.616929 0.635799 0.646581 0.6643 0.692803 0.720735 0.73008 0.728708 0.710415 0.643052 0.570625 0.535248 0.50936 0.480137 0.449539 0.426122 0.410452 0.399818 0.397541 0.406234 0.425255 0.455413 0.497125 0.547186 0.611775 0.690886 0.765513 0.827145 0.878587 0.937334 0.998684 1.02539 1.04238 1.07118 1.06373 1.03618 1.01079 0.978589 0.917378 0.822211 0.739631 0.666456 0.57625 0.502106 0.448678 0.388349
+30442.56870 41541.6 14.1401 42.6338 0.0 Degrees -58.7462 0.0122492 14.3206 0.523046 0.905249 -31.2495 0.0104713 41.9134 1.3098 0.551078 0.273524 0.276618 0.278062 0.283478 0.292883 0.303991 0.317558 0.334117 0.352017 0.364946 0.365643 0.355624 0.343398 0.333238 0.321642 0.30665 0.294834 0.291642 0.292195 0.291186 0.288884 0.284238 0.277727 0.271934 0.265597 0.259425 0.257221 0.258986 0.261565 0.263126 0.262592 0.258739 0.252251 0.246491 0.246158 0.25074 0.251079 0.242936 0.233431 0.230298 0.233159 0.238288 0.245505 0.253187 0.259248 0.265199 0.275303 0.290671 0.302653 0.301358 0.292954 0.28995 0.288333 0.283599 0.2826 0.285054 0.283092 0.278234 0.275594 0.275083 0.281919 0.297548 0.311005 0.317839 0.319715 0.316163 0.302851 0.288887 0.284106 0.278994 0.26557 0.253053 0.249939 0.254155 0.264713 0.279338 0.300319 0.328088 0.36086 0.41113 0.465244 0.505385 0.541336 0.569674 0.592659 0.618993 0.654198 0.699965 0.716811 0.700334 0.689275 0.669128 0.597113 0.523782 0.491777 0.463111 0.423863 0.389188 0.373266 0.368028 0.364984 0.368648 0.3797 0.393359 0.414583 0.447617 0.487752 0.541538 0.620548 0.718398 0.812932 0.884242 0.930256 0.951112 0.982504 1.0494 1.09659 1.05384 1.00317 0.973045 0.939802 0.874753 0.793703 0.731933 0.665755 0.570333 0.4922 0.436718 0.366888
+30445.38885 41541.6 13.9496 43.0506 0.0 Degrees -75.6612 0.0247058 14.442 1.05734 0.99419 -87.9694 0.00817012 42.7432 1.04339 0.165709 0.268188 0.276964 0.282715 0.285865 0.294003 0.308686 0.325357 0.338775 0.346471 0.35063 0.350595 0.343381 0.332646 0.324194 0.317819 0.309119 0.297905 0.288369 0.281959 0.278584 0.277796 0.27729 0.275504 0.271514 0.264176 0.256542 0.253681 0.255988 0.259754 0.261661 0.260684 0.257718 0.254793 0.253284 0.254129 0.256234 0.25349 0.245068 0.238051 0.236373 0.238273 0.242712 0.251497 0.262693 0.272818 0.281672 0.288911 0.292399 0.292749 0.29398 0.297668 0.300448 0.29965 0.297203 0.294566 0.292018 0.290966 0.289681 0.286869 0.287297 0.294661 0.306198 0.316544 0.324864 0.330393 0.330801 0.324372 0.314856 0.30824 0.299949 0.281402 0.263431 0.260508 0.269722 0.288608 0.309209 0.330476 0.359589 0.394992 0.438716 0.482242 0.516345 0.544324 0.56838 0.600074 0.637247 0.668141 0.680816 0.67177 0.667529 0.668915 0.658995 0.608525 0.545308 0.50507 0.472152 0.442809 0.418393 0.400147 0.388912 0.38633 0.39307 0.40593 0.426022 0.453767 0.484333 0.520235 0.57745 0.661105 0.756496 0.840723 0.882765 0.894606 0.913984 0.93713 0.963545 1.00522 1.02089 1.01057 0.990381 0.94209 0.863783 0.779679 0.70997 0.634537 0.545024 0.479588 0.430039 0.364289
+30442.56870 41538.7 15.1494 44.2385 45.0 Degrees -76.3886 0.00463121 15.1023 0.209341 0.9999 -20.2896 0.00397876 43.8747 0.522661 0.476175 0.297009 0.302209 0.304923 0.307724 0.314569 0.329118 0.347468 0.364445 0.377804 0.383433 0.382574 0.379936 0.371804 0.354726 0.33584 0.32314 0.314625 0.306658 0.301683 0.300786 0.299899 0.297028 0.292733 0.287233 0.283652 0.283516 0.283241 0.280708 0.276131 0.271551 0.27027 0.27059 0.269527 0.268324 0.269002 0.270869 0.270319 0.265984 0.259972 0.253967 0.250261 0.252534 0.261519 0.27237 0.281428 0.289454 0.298175 0.30566 0.312364 0.322586 0.331565 0.329237 0.319126 0.30918 0.302994 0.30057 0.298058 0.293225 0.291513 0.296074 0.304601 0.316134 0.330767 0.345829 0.35684 0.358853 0.351299 0.343106 0.336539 0.325608 0.303669 0.280183 0.269393 0.269814 0.281945 0.303262 0.327502 0.353464 0.386079 0.435568 0.481076 0.511135 0.542178 0.571141 0.594159 0.619005 0.648934 0.685694 0.711861 0.709826 0.696796 0.67449 0.634826 0.597634 0.567238 0.526635 0.478349 0.439925 0.418429 0.406126 0.397473 0.393216 0.399052 0.417651 0.444723 0.479152 0.521471 0.575433 0.6436 0.721718 0.801019 0.869395 0.925729 0.953298 0.954651 0.952871 0.962806 0.985442 0.991494 0.973168 0.946875 0.898564 0.813696 0.736485 0.660936 0.563956 0.49002 0.439666 0.377336
+30445.38885 41538.7 15.2875 44.9569 45.0 Degrees -81.7675 0.0179421 15.2496 0.813532 0.932453 -61.4211 0.0118946 45.0344 1.59749 0.362758 0.292544 0.296149 0.300557 0.308044 0.320356 0.336352 0.35449 0.371655 0.382156 0.384808 0.383701 0.379202 0.36919 0.356261 0.342525 0.329056 0.318705 0.311215 0.305751 0.303437 0.304124 0.304767 0.301519 0.295466 0.291742 0.290394 0.287971 0.285525 0.284011 0.282672 0.28252 0.282121 0.280259 0.278524 0.277594 0.276982 0.275079 0.270845 0.266734 0.265984 0.267873 0.271337 0.277082 0.283009 0.289208 0.297789 0.305525 0.31105 0.317468 0.323155 0.325258 0.328123 0.331092 0.326917 0.31751 0.309986 0.302761 0.294144 0.291177 0.295138 0.303864 0.31649 0.330366 0.344228 0.356212 0.361564 0.353966 0.340079 0.331447 0.3224 0.302722 0.282658 0.275106 0.27568 0.283898 0.301985 0.329169 0.358509 0.388042 0.437103 0.487286 0.512741 0.537119 0.5791 0.623401 0.656135 0.679499 0.701124 0.720571 0.725349 0.721212 0.70743 0.654441 0.589174 0.54983 0.514442 0.473509 0.43763 0.41841 0.409552 0.403537 0.401538 0.405069 0.417518 0.444527 0.484752 0.528496 0.576895 0.640589 0.719541 0.796243 0.855256 0.901152 0.919005 0.91289 0.916951 0.951858 0.984796 0.978514 0.950156 0.913201 0.858747 0.784819 0.717906 0.646791 0.558625 0.491076 0.439651 0.373372
+30442.56870 41541.6 14.6125 42.0763 45.0 Degrees -58.7462 0.0122492 14.3206 0.523046 0.905249 -31.2495 0.0104713 41.9134 1.3098 0.551078 0.280263 0.285479 0.291174 0.297267 0.304045 0.316351 0.336142 0.35594 0.368725 0.373443 0.370717 0.362672 0.351032 0.337819 0.32585 0.314657 0.303929 0.295355 0.288866 0.285078 0.284168 0.281935 0.276337 0.272009 0.270336 0.267917 0.265994 0.264893 0.260324 0.255263 0.255108 0.255504 0.253246 0.253574 0.257839 0.259142 0.255611 0.252284 0.248423 0.242942 0.240369 0.243283 0.24764 0.25014 0.25317 0.2601 0.271487 0.28451 0.292939 0.294158 0.294027 0.294219 0.290966 0.287036 0.284722 0.280577 0.273683 0.270643 0.272827 0.275344 0.280664 0.294323 0.310463 0.323319 0.329638 0.324703 0.310658 0.302133 0.300019 0.2905 0.265941 0.246221 0.243218 0.248825 0.262092 0.282402 0.305863 0.330537 0.361159 0.409957 0.457578 0.492236 0.530671 0.573128 0.604868 0.626327 0.64291 0.651612 0.661324 0.675088 0.670345 0.641436 0.582842 0.52767 0.499346 0.478586 0.449748 0.413311 0.387444 0.376612 0.373385 0.371086 0.370514 0.382822 0.412555 0.452223 0.49576 0.550498 0.624102 0.705725 0.773579 0.825238 0.876406 0.915692 0.942851 0.980782 1.00801 0.984912 0.964953 0.954917 0.936008 0.884946 0.803365 0.731596 0.653865 0.553915 0.485541 0.445544 0.389119
+30445.38885 41541.6 14.7242 41.9525 45.0 Degrees -75.6612 0.0247058 14.442 1.05734 0.99419 -87.9694 0.00817012 42.7432 1.04339 0.165709 0.277526 0.284678 0.289609 0.295291 0.304715 0.318498 0.336982 0.357656 0.373673 0.379897 0.376841 0.367608 0.353941 0.338138 0.323659 0.311503 0.302806 0.298979 0.296655 0.293383 0.289455 0.284357 0.279892 0.277906 0.276797 0.275426 0.274701 0.273617 0.270003 0.265527 0.263097 0.261782 0.260052 0.260003 0.262452 0.263879 0.263822 0.263857 0.261482 0.255431 0.249008 0.247883 0.254004 0.262248 0.270728 0.281494 0.293418 0.30392 0.309883 0.309833 0.3081 0.308054 0.305993 0.30021 0.293765 0.286607 0.277684 0.272897 0.273951 0.27839 0.289727 0.307605 0.32236 0.331534 0.334969 0.328812 0.318721 0.317832 0.31639 0.30331 0.280038 0.264894 0.263555 0.267915 0.278727 0.297982 0.323511 0.348979 0.370412 0.406665 0.458397 0.501191 0.534175 0.559287 0.586581 0.614111 0.62943 0.630658 0.648645 0.676721 0.67779 0.644812 0.578444 0.529881 0.507369 0.48188 0.452002 0.4274 0.411786 0.401811 0.395734 0.39636 0.404562 0.419417 0.439901 0.467325 0.506117 0.564421 0.644366 0.733556 0.806725 0.844638 0.86427 0.887299 0.906254 0.91094 0.907354 0.911164 0.918149 0.905033 0.864455 0.808501 0.756152 0.705617 0.627234 0.529663 0.466429 0.417986 0.347388
+30442.56870 41538.7 15.1961 43.4824 90.0 Degrees -76.3886 0.00463121 15.1023 0.209341 0.9999 -20.2896 0.00397876 43.8747 0.522661 0.476175 0.316435 0.316209 0.313171 0.316392 0.326833 0.340293 0.353014 0.364374 0.375522 0.385419 0.387713 0.377691 0.360731 0.344295 0.331355 0.322641 0.316438 0.312006 0.31173 0.31293 0.310185 0.304126 0.297432 0.29191 0.287577 0.282117 0.278311 0.282045 0.289642 0.290857 0.28477 0.277681 0.273076 0.273835 0.280132 0.286056 0.286396 0.284133 0.281844 0.277968 0.273917 0.273914 0.278593 0.286128 0.29696 0.307005 0.312036 0.318061 0.328863 0.339296 0.340916 0.334148 0.331114 0.330907 0.323565 0.309168 0.297204 0.295209 0.299716 0.308909 0.323516 0.337736 0.345913 0.350001 0.354942 0.361212 0.357139 0.344709 0.337849 0.329807 0.312369 0.29682 0.291435 0.292924 0.301712 0.315706 0.334007 0.356536 0.38531 0.433293 0.480011 0.505447 0.521235 0.54004 0.569499 0.600112 0.627067 0.657023 0.685768 0.693936 0.68997 0.681186 0.649101 0.596613 0.55421 0.518064 0.483572 0.447134 0.416532 0.397836 0.390444 0.393477 0.402744 0.417164 0.441558 0.479695 0.527832 0.589699 0.669335 0.747894 0.810291 0.863324 0.911904 0.935196 0.935554 0.937591 0.965876 1.02009 1.02962 0.988885 0.930482 0.861176 0.794941 0.742155 0.669762 0.567885 0.492153 0.438372 0.368902
+30445.38885 41538.7 15.7171 46.2162 90.0 Degrees -81.7675 0.0179421 15.2496 0.813532 0.932453 -61.4211 0.0118946 45.0344 1.59749 0.362758 0.307798 0.315235 0.32366 0.333711 0.343479 0.353418 0.365932 0.380975 0.392346 0.395724 0.392597 0.383116 0.36995 0.357762 0.345371 0.332049 0.322802 0.319115 0.317212 0.315557 0.314116 0.310752 0.305488 0.301148 0.298155 0.29563 0.293246 0.291426 0.29131 0.291478 0.289176 0.28517 0.282394 0.283081 0.28667 0.289329 0.288738 0.285222 0.279214 0.273922 0.273677 0.27949 0.287825 0.294814 0.302312 0.310975 0.319157 0.329118 0.340065 0.347051 0.347279 0.341983 0.336262 0.330797 0.32539 0.320913 0.314026 0.307074 0.307649 0.316167 0.331599 0.347442 0.355857 0.360375 0.366295 0.373685 0.372819 0.357636 0.342953 0.333108 0.318103 0.298156 0.287727 0.288298 0.300365 0.322944 0.351225 0.381641 0.414804 0.462325 0.508162 0.536296 0.558214 0.580883 0.611752 0.652761 0.701831 0.753076 0.773026 0.757368 0.740625 0.720569 0.664674 0.592486 0.547629 0.513411 0.478692 0.445298 0.421257 0.40718 0.400384 0.402352 0.413084 0.430355 0.456255 0.495646 0.546357 0.611672 0.69828 0.791929 0.868873 0.931741 0.987795 1.00463 0.998213 1.01122 1.04639 1.05146 1.02235 0.980782 0.927941 0.865812 0.804526 0.748317 0.670591 0.5681 0.496042 0.446921 0.378759
+30442.56870 41541.6 14.3815 42.029 90.0 Degrees -58.7462 0.0122492 14.3206 0.523046 0.905249 -31.2495 0.0104713 41.9134 1.3098 0.551078 0.275996 0.281336 0.288021 0.296127 0.30553 0.319242 0.336083 0.350061 0.358902 0.363381 0.361566 0.351448 0.339166 0.331988 0.32629 0.317413 0.30835 0.30125 0.294846 0.288751 0.284182 0.281219 0.277418 0.271586 0.266943 0.266525 0.268296 0.269371 0.270325 0.271812 0.272924 0.272935 0.271457 0.268159 0.264385 0.261999 0.259139 0.253678 0.248386 0.247063 0.250837 0.257984 0.26438 0.270637 0.280373 0.289041 0.295447 0.305346 0.314063 0.315351 0.313197 0.309659 0.303012 0.295731 0.291475 0.287285 0.278373 0.271769 0.27261 0.277917 0.290429 0.307527 0.319906 0.330122 0.339678 0.344594 0.341314 0.328577 0.313863 0.300885 0.285156 0.270092 0.266007 0.271933 0.284404 0.299565 0.317343 0.338638 0.365494 0.408368 0.457772 0.499611 0.533946 0.55613 0.578909 0.605613 0.634302 0.67028 0.693103 0.679955 0.658213 0.637607 0.599455 0.547918 0.505536 0.464379 0.427531 0.406058 0.398292 0.394503 0.389323 0.382896 0.381879 0.393901 0.419228 0.456728 0.508543 0.576849 0.65236 0.725772 0.787754 0.830734 0.87574 0.918109 0.931696 0.941172 0.98521 1.02639 1.01303 0.965422 0.895035 0.817128 0.752043 0.70018 0.63478 0.547106 0.478186 0.425941 0.360816
+30445.38885 41541.6 14.8772 44.0914 90.0 Degrees -75.6612 0.0247058 14.442 1.05734 0.99419 -87.9694 0.00817012 42.7432 1.04339 0.165709 0.278061 0.285616 0.296555 0.307396 0.317424 0.330126 0.344675 0.358161 0.369946 0.377423 0.377385 0.369223 0.355253 0.340377 0.326778 0.313699 0.303088 0.298041 0.297174 0.295646 0.291818 0.28736 0.283078 0.279464 0.277319 0.276385 0.275309 0.27457 0.275451 0.275347 0.273311 0.273742 0.275722 0.274056 0.269505 0.265846 0.263896 0.261626 0.258284 0.2561 0.25822 0.266271 0.275993 0.28159 0.285567 0.291595 0.300127 0.311206 0.32076 0.324588 0.324598 0.321617 0.31658 0.312968 0.311023 0.306708 0.297342 0.288683 0.286742 0.293918 0.310666 0.325295 0.331223 0.337305 0.345869 0.352563 0.350187 0.3364 0.321053 0.30713 0.292731 0.281156 0.27747 0.282791 0.298447 0.31737 0.336779 0.363394 0.401254 0.454859 0.496345 0.517258 0.544144 0.580788 0.608868 0.632288 0.666646 0.720699 0.743401 0.707616 0.672794 0.648384 0.612518 0.56458 0.524783 0.486424 0.451896 0.427854 0.412592 0.400071 0.389774 0.387638 0.396976 0.416605 0.444431 0.482011 0.533175 0.601727 0.680907 0.764785 0.846463 0.908575 0.959524 0.990413 0.990422 0.992799 1.01118 1.0208 1.02108 0.997919 0.9443 0.879985 0.812642 0.744406 0.664742 0.565563 0.491425 0.440129 0.372922
+30442.56870 41538.7 15.0537 43.8985 135.0 Degrees -76.3886 0.00463121 15.1023 0.209341 0.9999 -20.2896 0.00397876 43.8747 0.522661 0.476175 0.296355 0.301549 0.305689 0.314784 0.3275 0.337496 0.346044 0.357989 0.370907 0.379747 0.380984 0.372685 0.35927 0.345931 0.333775 0.324493 0.318807 0.314851 0.310942 0.306114 0.30224 0.30133 0.298962 0.291707 0.285832 0.28587 0.287624 0.286062 0.282022 0.280752 0.281451 0.278292 0.275049 0.276787 0.279535 0.279709 0.27848 0.275335 0.26982 0.26575 0.264256 0.263189 0.265715 0.275073 0.288143 0.300233 0.310238 0.31839 0.324674 0.330739 0.333891 0.331066 0.327222 0.323358 0.316033 0.305628 0.297227 0.294554 0.295596 0.300793 0.312685 0.326939 0.338122 0.347917 0.355506 0.359809 0.359253 0.350057 0.337068 0.319959 0.296966 0.281124 0.277619 0.279835 0.289468 0.30892 0.335632 0.368016 0.411652 0.471032 0.509204 0.525144 0.547951 0.582089 0.61119 0.629064 0.648251 0.684942 0.708906 0.694238 0.675255 0.653507 0.60824 0.557207 0.523594 0.492837 0.454143 0.417444 0.402006 0.399085 0.395532 0.396426 0.407268 0.424794 0.446186 0.473607 0.512899 0.575513 0.65831 0.732609 0.785295 0.829165 0.88809 0.953116 0.975619 0.959682 0.959812 0.998877 1.02477 0.995982 0.940708 0.880326 0.805694 0.739958 0.673291 0.581948 0.510972 0.462253 0.394983
+30445.38885 41538.7 15.0569 43.6148 135.0 Degrees -81.7675 0.0179421 15.2496 0.813532 0.932453 -61.4211 0.0118946 45.0344 1.59749 0.362758 0.301477 0.30644 0.306951 0.311193 0.322516 0.338186 0.354536 0.369088 0.37873 0.37996 0.374051 0.364074 0.352932 0.344684 0.338646 0.330569 0.321949 0.316448 0.313577 0.312518 0.311359 0.305611 0.296319 0.289434 0.28675 0.285216 0.28309 0.282428 0.283345 0.283424 0.282354 0.281469 0.283058 0.287598 0.29102 0.290655 0.289187 0.287391 0.282165 0.274012 0.267067 0.266053 0.273807 0.286124 0.297762 0.306748 0.314339 0.322356 0.328073 0.329372 0.330568 0.33249 0.33061 0.326268 0.321815 0.315179 0.306835 0.301874 0.302042 0.308327 0.323023 0.341936 0.354529 0.359698 0.362047 0.362438 0.360506 0.358578 0.352011 0.333703 0.307858 0.293739 0.293296 0.298911 0.31004 0.325544 0.345967 0.368977 0.393663 0.433303 0.477232 0.511675 0.546532 0.574696 0.595735 0.624584 0.659529 0.687231 0.697742 0.693255 0.677816 0.647955 0.594798 0.5555 0.536953 0.512279 0.478889 0.447507 0.426507 0.413487 0.40592 0.408086 0.420748 0.440755 0.468307 0.504389 0.547412 0.605901 0.684469 0.76759 0.839725 0.892759 0.931435 0.95242 0.9588 0.963645 0.980588 1.01497 1.0253 0.990629 0.936964 0.884796 0.819214 0.740905 0.654793 0.564359 0.496638 0.440015 0.365999
+30442.56870 41541.6 14.1485 40.9145 135.0 Degrees -58.7462 0.0122492 14.3206 0.523046 0.905249 -31.2495 0.0104713 41.9134 1.3098 0.551078 0.281953 0.282496 0.282395 0.288746 0.301186 0.31839 0.337653 0.35264 0.358921 0.355802 0.346556 0.337454 0.331438 0.325534 0.316412 0.306103 0.298664 0.293796 0.289414 0.28473 0.28046 0.277642 0.273987 0.268362 0.263836 0.261871 0.262274 0.263956 0.264241 0.263169 0.262793 0.262058 0.259936 0.258345 0.258182 0.257824 0.255621 0.25388 0.253378 0.250234 0.24667 0.249937 0.257591 0.263369 0.26912 0.277631 0.288549 0.300002 0.307808 0.31038 0.313999 0.317716 0.3104 0.296675 0.288077 0.282234 0.272599 0.264802 0.264852 0.272167 0.285469 0.299098 0.309609 0.320554 0.331468 0.337852 0.334036 0.320851 0.30759 0.294282 0.276594 0.261611 0.258311 0.264739 0.278928 0.296079 0.315258 0.33978 0.37134 0.410945 0.439866 0.463373 0.503252 0.548766 0.578466 0.600765 0.622475 0.642101 0.645695 0.634744 0.629994 0.62821 0.590136 0.528195 0.491179 0.465221 0.438358 0.409152 0.385622 0.372008 0.368414 0.373911 0.38149 0.389937 0.408499 0.441407 0.481775 0.531359 0.597635 0.677094 0.751793 0.804291 0.845932 0.8773 0.897639 0.92913 0.965943 0.999349 1.02362 1.00287 0.946252 0.87406 0.797505 0.723745 0.643321 0.555827 0.483474 0.42431 0.362506
+30445.38885 41541.6 14.2168 41.8786 135.0 Degrees -75.6612 0.0247058 14.442 1.05734 0.99419 -87.9694 0.00817012 42.7432 1.04339 0.165709 0.275122 0.279743 0.288303 0.298533 0.310462 0.324998 0.338862 0.349165 0.355432 0.356867 0.352343 0.341775 0.329581 0.32085 0.312545 0.301398 0.292602 0.288407 0.286731 0.288659 0.292468 0.29263 0.289044 0.285504 0.282276 0.278331 0.274756 0.272637 0.271811 0.271767 0.270966 0.268828 0.267031 0.26637 0.266595 0.266189 0.263667 0.260581 0.258675 0.258883 0.260854 0.26394 0.268008 0.271773 0.276992 0.286659 0.297921 0.30746 0.313316 0.315693 0.31838 0.319498 0.314978 0.307725 0.301218 0.295618 0.290523 0.286303 0.2845 0.286974 0.295278 0.309002 0.322257 0.330434 0.332712 0.330314 0.328918 0.331064 0.327171 0.311774 0.288605 0.274856 0.274673 0.279825 0.289143 0.30436 0.329322 0.359502 0.384703 0.417305 0.45932 0.493425 0.530479 0.577368 0.610587 0.61944 0.617458 0.623273 0.645714 0.661397 0.657493 0.632194 0.57505 0.523076 0.49636 0.477074 0.458838 0.434354 0.41174 0.401201 0.400798 0.406554 0.414796 0.426752 0.449558 0.486202 0.53221 0.594496 0.67377 0.750061 0.818724 0.871471 0.896784 0.904569 0.919683 0.945359 0.957156 0.963243 0.991826 0.996399 0.94319 0.855485 0.776906 0.721782 0.65651 0.567672 0.497404 0.440271 0.365088
diff --git a/orangecontrib/spectroscopy/tests/test_owhyper.py b/orangecontrib/spectroscopy/tests/test_owhyper.py
index 16158094f..78d605a68 100644
--- a/orangecontrib/spectroscopy/tests/test_owhyper.py
+++ b/orangecontrib/spectroscopy/tests/test_owhyper.py
@@ -770,3 +770,138 @@ def test_oldformat(self):
self.assertIn(w.imageplot.vis_img, w.imageplot.plot.items)
w.controls.show_visible_image.setChecked(False)
self.assertNotIn(w.imageplot.vis_img, w.imageplot.plot.items)
+
+
+class TestVectorPlot(WidgetTest):
+
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.whitelight = Orange.data.Table("whitelight.gsf")
+ cls.iris = Orange.data.Table("iris")
+
+ def setUp(self):
+ super().setUp()
+ self.widget = self.create_widget(OWHyper) # type: OWHyper
+
+ def test_enable_disable(self):
+ w = self.widget
+ for data in [None, self.whitelight, self.iris]:
+ self.send_signal(w.Inputs.data, data)
+ self.assertFalse(w.imageplot.show_vector_plot)
+ self.assertFalse(w.controls.imageplot.vector_magnitude.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_angle.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_color_index.isEnabled())
+ self.assertFalse(w.controls.imageplot.vcol_byval_index.isEnabled())
+ self.assertFalse(w.controls.imageplot.vcol_byval_feat.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_scale.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_width.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_opacity.isEnabled())
+ self.assertFalse(w.controls.imageplot.v_bin.isEnabled())
+
+ w.controls.imageplot.show_vector_plot.click()
+ self.assertTrue(w.imageplot.show_vector_plot)
+ self.assertTrue(w.controls.imageplot.vector_magnitude.isEnabled())
+ self.assertTrue(w.controls.imageplot.vector_angle.isEnabled())
+ self.assertTrue(w.controls.imageplot.vector_color_index.isEnabled())
+ self.assertTrue(w.controls.imageplot.vector_scale.isEnabled())
+ self.assertTrue(w.controls.imageplot.vector_width.isEnabled())
+ self.assertTrue(w.controls.imageplot.vector_opacity.isEnabled())
+ self.assertTrue(w.controls.imageplot.v_bin.isEnabled())
+
+ w.imageplot.vector_color_index = 8
+ w.imageplot._update_vector()
+ self.assertTrue(w.controls.imageplot.vcol_byval_index.isEnabled())
+ self.assertTrue(w.controls.imageplot.vcol_byval_feat.isEnabled())
+
+ w.imageplot.vector_color_index = 3
+ w.imageplot._update_vector()
+ self.assertFalse(w.controls.imageplot.vcol_byval_index.isEnabled())
+ self.assertFalse(w.controls.imageplot.vcol_byval_feat.isEnabled())
+
+ w.imageplot.vector_color_index = 8
+ w.imageplot._update_vector()
+ self.assertTrue(w.controls.imageplot.vcol_byval_index.isEnabled())
+ self.assertTrue(w.controls.imageplot.vcol_byval_feat.isEnabled())
+
+ w.controls.imageplot.show_vector_plot.click()
+ self.assertFalse(w.controls.imageplot.vector_magnitude.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_angle.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_color_index.isEnabled())
+ self.assertFalse(w.controls.imageplot.vcol_byval_index.isEnabled())
+ self.assertFalse(w.controls.imageplot.vcol_byval_feat.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_scale.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_width.isEnabled())
+ self.assertFalse(w.controls.imageplot.vector_opacity.isEnabled())
+ self.assertFalse(w.controls.imageplot.v_bin.isEnabled())
+
+ def test_legend(self):
+ self.send_signal(self.widget.Inputs.data, self.iris)
+ self.widget.controls.imageplot.show_vector_plot.setChecked(True)
+ self.widget.imageplot.enable_vector()
+ self.widget.imageplot.vector_color_index = 8
+ self.widget.imageplot._update_vector()
+ self.assertFalse(self.widget.imageplot.vect_legend.isVisible())
+ self.widget.imageplot.vcol_byval_feat = self.iris.domain.attributes[0]
+ self.widget.imageplot._update_cbyval()
+ self.assertTrue(self.widget.imageplot.vect_legend.isVisible())
+ self.widget.imageplot.vcol_byval_feat = None
+ self.widget.imageplot._update_cbyval()
+ self.assertFalse(self.widget.imageplot.vect_legend.isVisible())
+ self.widget.controls.imageplot.show_vector_plot.setChecked(False)
+ self.widget.imageplot.enable_vector()
+
+ def test_vect_color(self):
+ feat = self.iris.get_column(self.iris.domain.attributes[0])
+ self.send_signal(self.widget.Inputs.data, self.iris)
+ self.widget.controls.imageplot.show_vector_plot.setChecked(True)
+ self.widget.imageplot.enable_vector()
+ for i in range(8):
+ self.widget.imageplot.vector_color_index = i
+ self.widget.imageplot._update_vector()
+ self.assertEqual(len(self.widget.imageplot.get_vector_color(feat)), 4)
+ self.widget.imageplot.vector_color_index = 8
+ self.widget.imageplot._update_vector()
+ self.assertEqual(self.widget.imageplot.get_vector_color(feat)[0].shape, (feat.shape[0], 4))
+ self.widget.controls.imageplot.show_vector_plot.setChecked(False)
+ self.widget.imageplot.enable_vector()
+
+ def test_vect_bin(self):
+ self.send_signal(self.widget.Inputs.data, self.iris)
+ self.widget.controls.imageplot.show_vector_plot.setChecked(True)
+ self.widget.imageplot.enable_vector()
+ self.widget.imageplot.vector_angle = self.iris.domain.attributes[0]
+ self.widget.imageplot.vector_magnitude = self.iris.domain.attributes[0]
+ self.widget.imageplot._update_vector_params()
+
+ self.widget.imageplot.v_bin = 0
+ self.widget.imageplot._update_binsize()
+ self.widget.imageplot.update_view()
+ wait_for_image(self.widget)
+ print(self.widget.imageplot.vector_plot.params[0].shape)
+ self.assertEqual(self.widget.imageplot.vector_plot.params[0].shape[0],
+ self.iris.X.shape[0]*2)
+ self.assertEqual(self.widget.imageplot.vector_plot.params[1].shape[0],
+ self.iris.X.shape[0]*2)
+
+ self.widget.imageplot.v_bin = 1
+ self.widget.imageplot._update_binsize()
+ self.widget.imageplot.update_view()
+ wait_for_image(self.widget)
+ self.assertEqual(self.widget.imageplot.vector_plot.params[0].shape[0], 2)
+ self.assertEqual(self.widget.imageplot.vector_plot.params[1].shape[0], 2)
+
+ self.widget.imageplot.v_bin = 2
+ self.widget.imageplot._update_binsize()
+ self.widget.imageplot.update_view()
+ wait_for_image(self.widget)
+ self.assertEqual(self.widget.imageplot.vector_plot.params[0].shape[0], 2)
+ self.assertEqual(self.widget.imageplot.vector_plot.params[1].shape[0], 2)
+
+ self.widget.imageplot.v_bin = 3
+ self.widget.imageplot._update_binsize()
+ self.widget.imageplot.update_view()
+ wait_for_image(self.widget)
+ self.assertTrue(self.widget.Warning.bin_size_error.is_shown())
+ self.assertEqual(self.widget.imageplot.vector_plot.params[0].shape[0], 2)
+ self.assertEqual(self.widget.imageplot.vector_plot.params[1].shape[0], 2)
diff --git a/orangecontrib/spectroscopy/tests/test_owpolar.py b/orangecontrib/spectroscopy/tests/test_owpolar.py
new file mode 100644
index 000000000..b76f01609
--- /dev/null
+++ b/orangecontrib/spectroscopy/tests/test_owpolar.py
@@ -0,0 +1,306 @@
+import unittest
+import numpy as np
+from AnyQt.QtCore import QItemSelectionModel, QItemSelection, QItemSelectionRange
+import Orange
+from Orange.data import ContinuousVariable, DiscreteVariable, Domain
+from Orange.widgets.tests.base import WidgetTest
+from orangecontrib.spectroscopy.widgets.owpolar import OWPolar
+
+class TestOWPolar(WidgetTest):
+
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.multifile = Orange.data.Table("polar/4-angle-ftir_multifile.tab")
+ cls.in1 = Orange.data.Table("polar/4-angle-ftir_multiin1.tab")
+ cls.in2 = Orange.data.Table("polar/4-angle-ftir_multiin2.tab")
+ cls.in3 = Orange.data.Table("polar/4-angle-ftir_multiin3.tab")
+ cls.in4 = Orange.data.Table("polar/4-angle-ftir_multiin4.tab")
+ cls.multifile_polar = Orange.data.Table("polar/4-angle-ftir_multifile_polar-results.tab")
+ cls.multifile_model = Orange.data.Table("polar/4-angle-ftir_multifile_model-results.tab")
+ cls.multiin_polar = Orange.data.Table("polar/4-angle-ftir_multiin_polar-results.tab")
+ cls.multiin_model = Orange.data.Table("polar/4-angle-ftir_multiin_model-results.tab")
+
+ def setUp(self):
+ self.widget = self.create_widget(OWPolar)
+
+ def test_multifile_init(self):
+ self.send_signal("Data", self.multifile, 0)
+
+ testfeats = [ft for ft in self.multifile.domain.metas
+ if isinstance(ft, ContinuousVariable)]
+ testfeats = testfeats + [ft for ft in self.multifile.domain.attributes
+ if isinstance(ft, ContinuousVariable)]
+ polfeats = [ft for ft in self.widget.featureselect[:]
+ if isinstance(ft, ContinuousVariable)]
+ self.assertEqual(polfeats, testfeats)
+ testinputs = [inp for inp in self.multifile.domain
+ if isinstance(inp, DiscreteVariable)]
+ self.assertEqual(self.widget.anglemetas[:], testinputs)
+ testxy = [xy for xy in self.multifile.domain.metas
+ if isinstance(xy, ContinuousVariable)]
+ self.assertEqual(self.widget.x_axis[:], testxy)
+ self.assertEqual(self.widget.y_axis[:], testxy)
+
+ def test_multifile_in(self):
+ self.send_signal("Data", self.multifile, 0)
+
+ self.assertTrue(self.widget.isEnabled())
+ for i in self.widget.multiin_labels:
+ self.assertFalse(i.isEnabled())
+ for i in self.widget.multiin_lines:
+ self.assertFalse(i.isEnabled())
+ self.widget.angles = self.widget.anglemetas[0]
+ self.assertEqual(self.widget.angles, self.multifile.domain.metas[2])
+ self.widget._change_angles()
+ self.assertEqual(len(self.widget.labels), 4)
+ self.assertEqual(len(self.widget.lines), 4)
+ self.assertEqual(self.widget.polangles, list(np.linspace(0, 180, 5)[:4]))
+ for i in self.widget.labels:
+ self.assertTrue(i.isEnabled())
+ for i in self.widget.lines:
+ self.assertTrue(i.isEnabled())
+ self.widget.map_x = self.widget.x_axis[0]
+ self.assertEqual(self.widget.map_x, self.multifile.domain.metas[0])
+ self.widget.map_y = self.widget.y_axis[1]
+ self.assertEqual(self.widget.map_y, self.multifile.domain.metas[1])
+ self.widget.feats = [self.widget.feat_view.model()[:][2],
+ self.widget.feat_view.model()[:][3]]
+ self.assertEqual(self.widget.feats[0], self.multifile.domain.metas[3])
+ self.assertEqual(self.widget.feats[1], self.multifile.domain.metas[4])
+ self.widget.alphas = [0, 0]
+ self.widget.invert_angles = True
+ self.widget.autocommit = True
+ self.commit_and_wait(self.widget, 20000)
+
+ polar = self.get_output("Polar Data")
+ model = self.get_output("Curve Fit model data")
+
+ np.testing.assert_allclose(np.asarray(self.multifile_polar.metas, dtype=float),
+ np.asarray(polar.metas, dtype=float), rtol=4e-06)
+ np.testing.assert_allclose(np.asarray(self.multifile_polar.X, dtype=float),
+ np.asarray(polar.X, dtype=float), rtol=5e-06)
+ np.testing.assert_allclose(np.asarray(self.multifile_model.metas, dtype=float),
+ np.asarray(model.metas, dtype=float), rtol=4e-06)
+ np.testing.assert_allclose(np.asarray(self.multifile_model.X, dtype=float),
+ np.asarray(model.X, dtype=float), rtol=5e-06)
+
+ def test_multi_inputs(self):
+ self.send_signal("Data", self.in1, 0, widget=self.widget)
+ self.send_signal("Data", self.in2, 1, widget=self.widget)
+
+ self.assertFalse(self.widget.anglesel.isEnabled())
+ for i in self.widget.multiin_labels:
+ self.assertFalse(i.isEnabled())
+ for i in self.widget.multiin_lines:
+ self.assertFalse(i.isEnabled())
+ self.send_signal("Data", self.in3, 2, widget=self.widget)
+ self.send_signal("Data", self.in4, 3, widget=self.widget)
+ self.assertFalse(self.widget.anglesel.isEnabled())
+ for i in self.widget.multiin_labels:
+ self.assertTrue(i.isEnabled())
+ for i in self.widget.multiin_lines:
+ self.assertTrue(i.isEnabled())
+
+ self.widget.map_x = self.widget.x_axis[0]
+ self.assertEqual(self.widget.map_x, self.in1.domain.metas[0])
+ self.widget.map_y = self.widget.y_axis[1]
+ self.assertEqual(self.widget.map_y, self.in1.domain.metas[1])
+
+ self.widget.feats = [self.widget.feat_view.model()[:][2],
+ self.widget.feat_view.model()[:][3]]
+ self.assertEqual(self.widget.feats[0],
+ self.in1.domain.metas[2].copy(compute_value=None))
+ self.assertEqual(self.widget.feats[1],
+ self.in1.domain.metas[3].copy(compute_value=None))
+ self.widget.alphas = [0, 0]
+ self.widget.invert_angles = True
+ self.widget.autocommit = True
+ self.commit_and_wait(self.widget, 20000)
+
+ polar = self.get_output("Polar Data")
+ model = self.get_output("Curve Fit model data")
+
+ np.testing.assert_allclose(
+ np.asarray(self.multiin_polar.metas[:,np.r_[0:2,3:7]], dtype=float),
+ np.asarray(polar.metas[:,np.r_[0:2,3:7]], dtype=float), rtol=2e-06)
+ np.testing.assert_allclose(
+ np.asarray(self.multiin_polar.metas[:,7:], dtype=float),
+ np.asarray(polar.metas[:,7:], dtype=float), rtol=4e-06)
+ np.testing.assert_allclose(self.multiin_polar.X, polar.X, rtol=5e-06)
+ np.testing.assert_allclose(
+ np.asarray(self.multiin_model.metas[:,np.r_[0:2,3:7]], dtype=float),
+ np.asarray(model.metas[:,np.r_[0:2,3:7]], dtype=float), rtol=4e-06)
+ np.testing.assert_allclose(
+ np.asarray(self.multiin_model.metas[:,7:], dtype=float),
+ np.asarray(model.metas[:,7:], dtype=float), rtol=4e-06)
+ np.testing.assert_allclose(self.multiin_model.X, model.X, rtol=5e-06)
+
+ def test_pixelsubset(self):
+ #Test multi in with subset of pixels selected
+ rng = np.random.default_rng()
+ sub_idx = rng.choice(4, size=(2), replace=False)
+ subset = self.in1[sub_idx]
+
+ self.send_signal("Data", subset, 0, widget=self.widget)
+ self.send_signal("Data", self.in2, 1, widget=self.widget)
+ self.send_signal("Data", self.in3, 2, widget=self.widget)
+ self.send_signal("Data", self.in4, 3, widget=self.widget)
+
+ self.widget.map_x = self.widget.x_axis[0]
+ self.widget.map_y = self.widget.y_axis[1]
+ self.widget.feats = [self.widget.feat_view.model()[:][2],
+ self.widget.feat_view.model()[:][3]]
+ self.widget.alphas = [0, 0]
+ self.widget.invert_angles = True
+ self.widget.autocommit = True
+ self.commit_and_wait(self.widget, 20000)
+
+ polar = self.get_output("Polar Data")
+ model = self.get_output("Curve Fit model data")
+
+ self.assertEqual(len(polar), len(sub_idx)*4)
+ self.assertEqual(len(model), len(sub_idx)*4)
+
+ def test_multiin_mismatched_domain(self):
+
+ metadom = self.in1.domain.metas
+ metadom = [i for i in metadom if isinstance(i, ContinuousVariable)]
+ attdom = self.in1.domain.attributes
+ attdom = attdom[0::2]
+ mismatched_domain = Domain(attdom, metas = metadom)
+ mismatched_table = self.in1.transform(mismatched_domain)
+
+ self.send_signal("Data", mismatched_table, 0, widget=self.widget)
+ self.send_signal("Data", self.in2, 1, widget=self.widget)
+ self.send_signal("Data", self.in3, 2, widget=self.widget)
+ self.send_signal("Data", self.in4, 3, widget=self.widget)
+
+ feat_len = len(metadom) + len(attdom) + 1
+ XY_len = len(metadom)
+ self.assertEqual(feat_len, len(self.widget.feat_view.model()[:]))
+ self.assertEqual(XY_len, len(self.widget.x_axis[:]))
+ self.assertEqual(XY_len, len(self.widget.y_axis[:]))
+
+ self.send_signal("Data", self.in2, 0, widget=self.widget)
+ self.send_signal("Data", self.in3, 1, widget=self.widget)
+ self.send_signal("Data", mismatched_table, 2, widget=self.widget)
+ self.send_signal("Data", self.in4, 3, widget=self.widget)
+
+ feat_len = len(metadom) + len(attdom) + 1
+ XY_len = len(metadom)
+ self.assertEqual(feat_len, len(self.widget.feat_view.model()[:]))
+ self.assertEqual(XY_len, len(self.widget.x_axis[:]))
+ self.assertEqual(XY_len, len(self.widget.y_axis[:]))
+
+ def test_custom_angles(self):
+ # test inputting custom angles (multin and multifile)
+ self.send_signal("Data", self.multifile, 0, widget=self.widget)
+ angles = np.array([0, 22.5, 45.0, 90])
+
+ for i, j in enumerate(self.widget.lines):
+ j.setText(str(angles[i]))
+ self.widget._send_angles()
+ for i, j in enumerate(self.widget.polangles):
+ self.assertEqual(j, angles[i])
+
+ self.send_signal("Data", self.in1, 0, widget=self.widget)
+ self.send_signal("Data", self.in2, 1, widget=self.widget)
+ self.send_signal("Data", self.in3, 2, widget=self.widget)
+ self.send_signal("Data", self.in4, 3, widget=self.widget)
+
+ for i, j in enumerate(self.widget.multiin_lines):
+ j.setText(str(angles[i]))
+ self.widget._send_ind_angles()
+ for i, j in enumerate(self.widget.polangles):
+ self.assertEqual(j, angles[i])
+
+ def test_warnings(self):
+ #test all warnings
+ self.send_signal("Data", self.multifile, 0, widget=self.widget)
+ self.widget.autocommit = True
+
+ self.commit_and_wait(self.widget)
+ self.assertTrue(self.widget.Warning.nofeat.is_shown())
+
+ self.widget.feats = [self.widget.feat_view.model()[:][4]]
+ self.widget.map_x = None
+ self.widget.map_y = None
+ self.commit_and_wait(self.widget)
+ self.assertTrue(self.widget.Warning.noxy.is_shown())
+
+ self.widget.map_x = self.widget.x_axis[0]
+ self.widget.map_y = self.widget.y_axis[1]
+ self.widget.polangles = []
+ self.commit_and_wait(self.widget)
+ self.assertTrue(self.widget.Warning.pol.is_shown())
+ self.widget.polangles = [0.0,45.0,'hi',135.0]
+ self.commit_and_wait(self.widget)
+ self.assertTrue(self.widget.Warning.pol.is_shown())
+
+ self.widget.polangles = [0.0,45.0,90.0,135.0]
+ self.widget.feats = [self.widget.feat_view.model()[:][0]]
+ self.widget.alphas = [0]
+ self.commit_and_wait(self.widget)
+ self.assertTrue(self.widget.Warning.XYfeat.is_shown())
+
+ self.send_signal("Data", self.in1, 0, widget=self.widget)
+ self.send_signal("Data", self.in2, 1, widget=self.widget)
+ self.assertTrue(self.widget.Warning.notenough.is_shown())
+
+ self.send_signal("Data", self.in3, 2, widget=self.widget)
+ self.assertTrue(self.widget.Warning.notenough.is_shown())
+
+ self.send_signal("Data", self.in4, 3, widget=self.widget)
+ self.assertFalse(self.widget.Warning.notenough.is_shown())
+
+ def test_disconnect(self):
+ self.send_signal("Data", self.multifile, 0, widget=self.widget)
+ self.widget.angles = self.widget.anglemetas[0]
+ self.widget.map_x = self.widget.x_axis[0]
+ self.widget.map_y = self.widget.y_axis[1]
+ self.widget.alphas = [0, 0]
+ self.widget.invert_angles = True
+ self.widget.autocommit = True
+ self.widget.feats = [self.widget.feat_view.model()[:][2],
+ self.widget.feat_view.model()[:][3]]
+ self.widget.handleNewSignals()
+ self.wait_until_stop_blocking()
+ self.send_signal("Data", None, 0, widget=self.widget)
+
+ def test_alpha_changes(self):
+ self.send_signal("Data", self.multifile, 0, widget=self.widget)
+ self.widget.angles = self.widget.anglemetas[0]
+ self.widget.map_x = self.widget.x_axis[0]
+ self.widget.map_y = self.widget.y_axis[1]
+ self.widget.alpha = 0
+ vars = [self.widget.feat_view.model()[:][2],
+ self.widget.feat_view.model()[:][3]]
+ view = self.widget.feat_view
+ model = self.widget.featureselect
+ update_selection(model, view, vars)
+ self.widget.change_alphas()
+ self.assertEqual(self.widget.alphas, [0, 0])
+ self.widget.alpha = 90
+ update_selection(model, view, [vars[1]])
+ self.widget.change_alphas()
+ self.assertEqual(self.widget.alphas, [0, 90])
+ update_selection(model, view, [vars[0]])
+ self.widget.change_alphas()
+ self.assertEqual(self.widget.alphas, [90, 90])
+
+def update_selection(model, view, setting):
+ selection = QItemSelection()
+ sel_model = view.selectionModel()
+ model_values = model[:]
+ for var in setting:
+ index = model_values.index(var)
+ model_index = view.model().index(index, 0)
+ selection.append(QItemSelectionRange(model_index))
+ sel_model.select(selection, QItemSelectionModel.ClearAndSelect)
+ # def test_clearangles(self):
+ # #test clearing angles
+ # pass
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/orangecontrib/spectroscopy/widgets/owhyper.py b/orangecontrib/spectroscopy/widgets/owhyper.py
index b462f7843..349832ae5 100644
--- a/orangecontrib/spectroscopy/widgets/owhyper.py
+++ b/orangecontrib/spectroscopy/widgets/owhyper.py
@@ -6,9 +6,9 @@
from AnyQt.QtWidgets import QWidget, QPushButton, \
QGridLayout, QFormLayout, QAction, QVBoxLayout, QWidgetAction, QSplitter, \
- QToolTip, QGraphicsRectItem
+ QToolTip, QGraphicsRectItem, QLabel
from AnyQt.QtGui import QColor, QKeySequence, QPainter, QBrush, QStandardItemModel, \
- QStandardItem, QLinearGradient, QPixmap, QIcon
+ QStandardItem, QLinearGradient, QPixmap, QIcon, QPen
from AnyQt.QtCore import Qt, QRectF, QPointF, QSize
from AnyQt.QtTest import QTest
@@ -17,6 +17,7 @@
import bottleneck
import numpy as np
+import pandas as pd
import pyqtgraph as pg
from pyqtgraph import GraphicsWidget
import colorcet
@@ -244,8 +245,37 @@ def color_palette_table(colors, underflow=None, overflow=None):
# misc
("rainbow", {0: np.array(colorcet.rainbow_bgyr_35_85_c73) * 255}),
("isolum", {0: np.array(colorcet.isoluminant_cgo_80_c38) * 255}),
+ ("Jet", {0: pg.colormap.get("jet", source='matplotlib').getLookupTable(nPts=256)}),
+ ("Viridis", {0: pg.colormap.get("viridis", source='matplotlib').getLookupTable(nPts=256)}),
+
+ # cyclic
+ ("HSV", {0: pg.colormap.get("hsv", source='matplotlib').getLookupTable(nPts=256)}),
+]
+#r, g, b, c, m, y, k, w
+vector_color = [
+ ("Black", {0: (0,0,0)}),
+ ("White", {0: (255,255,255)}),
+ ("Red", {0: (255,0,0)}),
+ ("Green", {0: (0,255,0)}),
+ ("Blue", {0: (0,0,255)}),
+ ("Cyan", {0: (0,255,255)}),
+ ("Magenta", {0: (255,0,255)}),
+ ("Yellow", {0: (255,255,0)}),
+ ("By Feature", {0: ('by feature')})
]
+bins = [
+ ("1 x 1", {0, (1)}),
+ ("2 x 2", {0, (2)}),
+ ("3 x 3", {0, (3)}),
+ ("4 x 4", {0, (4)}),
+ ("5 x 5", {0, (5)}),
+ ("6 x 6", {0, (6)}),
+ ("7 x 7", {0, (7)}),
+ ("8 x 8", {0, (8)}),
+ ("9 x 9", {0, (9)}),
+ ("10 x 10", {0, (10)}),
+]
def palette_gradient(colors):
n = len(colors)
@@ -284,6 +314,355 @@ def color_palette_model(palettes, iconsize=QSize(64, 16)):
return model
+def vector_color_model(colors):
+ model = QStandardItemModel()
+ for name, palette in colors:
+ item = QStandardItem(name)
+ item.setData(palette, Qt.UserRole)
+ model.appendRow([item])
+ return model
+
+
+def circular_mean(degs):
+ sin = np.nansum(np.sin(np.radians(degs*2)))
+ cos = np.nansum(np.cos(np.radians(degs*2)))
+ return np.arctan2(sin, cos)/2
+
+
+class VectorSettingMixin:
+ show_vector_plot = Setting(False, schema_only=True)
+ vector_angle = ContextSetting(None)
+ vector_magnitude = ContextSetting(None)
+ vector_color_index = Setting(0)
+ vcol_byval_index = Setting(0)
+ vcol_byval_feat = ContextSetting(None)
+ vector_scale = Setting(1)
+ vector_width = Setting(1)
+ vector_opacity = Setting(255)
+ v_bin = Setting(0)
+
+ def setup_vector_plot_controls(self):
+
+ box = gui.vBox(self)
+
+ self.cb_vector = gui.checkBox(box, self, "show_vector_plot",
+ label="Show vector plot",
+ callback=self.enable_vector)
+
+ self.vectorbox = gui.widgetBox(box, box=False)
+
+ self.vector_opts = DomainModel(DomainModel.SEPARATED,
+ valid_types=DomainModel.PRIMITIVE, placeholder='None')
+
+ self.vector_cbyf_opts = DomainModel(DomainModel.SEPARATED,
+ valid_types=(ContinuousVariable,), placeholder='None')
+
+ self.vector_col_opts = vector_color_model(vector_color)
+ self.vector_pal_opts = color_palette_model(_color_palettes, (QSize(64, 16)))
+ self.vector_bin_opts = vector_color_model(bins)
+
+ self.vector_angle = None
+ self.vector_magnitude = None
+ self.vcol_byval_feat = None
+ self.color_opts = vector_color
+
+ gb = create_gridbox(self.vectorbox, box=False)
+
+ v_angle_select = gui.comboBox(None, self, 'vector_angle', searchable=True,
+ label="Vector Angle", model=self.vector_opts,
+ contentsLength=10,
+ callback=self._update_vector_params)
+ grid_add_labelled_row(gb, "Angle: ", v_angle_select)
+
+ v_mag_select = gui.comboBox(None, self, 'vector_magnitude', searchable=True,
+ label="Vector Magnitude", model=self.vector_opts,
+ contentsLength=10,
+ callback=self._update_vector_params)
+ grid_add_labelled_row(gb, "Magnitude: ", v_mag_select)
+
+ v_bin_select = gui.comboBox(None, self, 'v_bin', label="Pixel Binning",
+ model=self.vector_bin_opts,
+ contentsLength=10,
+ callback=self._update_binsize)
+ grid_add_labelled_row(gb, "Binning: ", v_bin_select)
+
+ v_color_select = gui.comboBox(None, self, 'vector_color_index',
+ label="Vector color", model=self.vector_col_opts,
+ contentsLength=10,
+ callback=self._update_vector)
+ grid_add_labelled_row(gb, "Color: ", v_color_select)
+
+ v_color_byval = gui.comboBox(None, self, 'vcol_byval_feat',
+ label="Vector color by Feature",
+ model=self.vector_cbyf_opts,
+ contentsLength=10,
+ callback=self._update_cbyval)
+ grid_add_labelled_row(gb, "Feature: ", v_color_byval)
+
+ v_color_byval_select = gui.comboBox(None, self, 'vcol_byval_index',
+ label="", model=self.vector_pal_opts,
+ contentsLength=5,
+ callback=self._update_cbyval)
+ v_color_byval_select.setIconSize(QSize(64, 16))
+ grid_add_labelled_row(gb, "Palette: ", v_color_byval_select)
+
+ gb = create_gridbox(self.vectorbox, box=False)
+
+ v_scale_slider = gui.hSlider(None, self, 'vector_scale', label="Scale",
+ minValue=1, maxValue=1000, step=10, createLabel=False,
+ callback=self._update_vector)
+ grid_add_labelled_row(gb, "Scale: ", v_scale_slider)
+
+ v_width_slider = gui.hSlider(None, self, 'vector_width', label="Width",
+ minValue=1, maxValue=20, step=1, createLabel=False,
+ callback=self._update_vector)
+ grid_add_labelled_row(gb, "Width: ", v_width_slider)
+
+ v_opacity_slider = gui.hSlider(None, self, 'vector_opacity', label="Opacity",
+ minValue=0, maxValue=255, step=5, createLabel=False,
+ callback=self._update_vector)
+ grid_add_labelled_row(gb, "Opacity: ", v_opacity_slider)
+
+ self.vectorbox.setVisible(self.show_vector_plot)
+ self.update_vector_plot_interface()
+
+ return box
+
+ def update_vector_plot_interface(self):
+ vector_params = ['vector_angle', 'vector_magnitude', 'vector_color_index',
+ 'vector_scale', 'vector_width', 'vector_opacity', 'v_bin']
+ for i in vector_params:
+ getattr(self.controls, i).setEnabled(self.show_vector_plot)
+
+ if self.vector_color_index == 8 and self.show_vector_plot:
+ self.controls.vcol_byval_index.setEnabled(True)
+ self.controls.vcol_byval_feat.setEnabled(True)
+ if self.vcol_byval_feat is not None and self.show_vector_plot:
+ self.vect_legend.setVisible(True)
+ self.vect_legend.adapt_to_size()
+ else:
+ self.vect_legend.setVisible(False)
+ else:
+ self.controls.vcol_byval_index.setEnabled(False)
+ self.controls.vcol_byval_feat.setEnabled(False)
+ self.vect_legend.setVisible(False)
+
+ def enable_vector(self):
+ self.vectorbox.setVisible(self.show_vector_plot)
+ self._update_vector()
+
+ def _update_vector(self):
+ self.update_vector_plot_interface()
+ self.update_vectors()
+
+ def _update_vector_params(self):
+ self.update_binsize()
+ self._update_vector()
+
+ def _update_cbyval(self):
+ self.cols = None
+ self._update_vector()
+
+ def _update_binsize(self):
+ self.v_bin_change = 1
+ self.cols = None
+ self.update_binsize()
+
+ def init_vector_plot(self, data):
+ domain = data.domain if data is not None else None
+ self.vector_opts.set_domain(domain)
+ self.vector_cbyf_opts.set_domain(domain)
+
+ # initialize values so that the combo boxes are not in invalid states
+ if self.vector_opts:
+ # TODO here we could instead set good default values if available
+ self.vector_magnitude = self.vector_angle = self.vcol_byval_feat = None
+ else:
+ self.vector_magnitude = self.vector_angle = self.vcol_byval_feat = None
+
+
+class VectorMixin:
+
+ def __init__(self):
+ self.a = None
+ self.th = None
+ self.cols = None
+ self.new_xs = None
+ self.new_ys = None
+ self.v_bin_change = 0
+
+ ci = self.plotview.centralWidget
+ self.vector_plot = VectorPlot()
+ self.vector_plot.hide()
+ self.plot.addItem(self.vector_plot)
+ self.vect_legend = ImageColorLegend()
+ self.vect_legend.setVisible(False)
+ ci.addItem(self.vect_legend)
+
+ def update_vectors(self):
+ v = self.get_vector_data()
+ if self.lsx is None: # image is not shown or is being computed
+ v = None
+ if v is None:
+ self.vector_plot.hide()
+ else:
+ valid = self.data_valid_positions
+ lsx, lsy = self.lsx, self.lsy
+ xindex, yindex = self.xindex, self.yindex
+ scale = self.vector_scale
+ w = self.vector_width
+ th = np.asarray(v[:,0], dtype=float)
+ v_mag = np.asarray(v[:,1], dtype=float)
+ wy = _shift(lsy)*2
+ wx = _shift(lsx)*2
+ if self.v_bin == 0:
+ y = np.linspace(*lsy)[yindex[valid]]
+ x = np.linspace(*lsx)[xindex[valid]]
+ amp = v_mag / max(v_mag) * (scale/100)
+ dispx = amp*wx/2*np.cos(np.radians(th))
+ dispy = amp*wy/2*np.sin(np.radians(th))
+ xcurve = np.empty((dispx.shape[0]*2))
+ ycurve = np.empty((dispy.shape[0]*2))
+ xcurve[0::2], xcurve[1::2] = x - dispx, x + dispx
+ ycurve[0::2], ycurve[1::2] = y - dispy, y + dispy
+ vcols = self.get_vector_color(v[:,2])
+ v_params = [xcurve, ycurve, w, vcols]
+ self.vector_plot.setData(v_params)
+ else:
+ if self.a is None:
+ self.update_binsize()
+ amp = self.a / max(self.a) * (scale/100)
+ dispx = amp*wx/2*np.cos(self.th)
+ dispy = amp*wy/2*np.sin(self.th)
+ xcurve = np.empty((dispx.shape[0]*2))
+ ycurve = np.empty((dispy.shape[0]*2))
+ xcurve[0::2], xcurve[1::2] = self.new_xs - dispx, self.new_xs + dispx
+ ycurve[0::2], ycurve[1::2] = self.new_ys - dispy, self.new_ys + dispy
+ vcols = self.get_vector_color(v[:,2])
+ v_params = [xcurve, ycurve, w, vcols]
+ self.vector_plot.setData(v_params)
+ self.vector_plot.show()
+ if self.vector_color_index == 8 and \
+ self.vcol_byval_feat is not None:
+ self.update_vect_legend()
+
+ def update_vect_legend(self):#feat
+ if self.v_bin != 0:
+ feat = self.cols
+ else:
+ feat = self.data.get_column(self.vcol_byval_feat)
+ fmin, fmax = np.min(feat), np.max(feat)
+ self.vect_legend.set_range(fmin, fmax)
+ self.vect_legend.set_colors(_color_palettes[self.vcol_byval_index][1][0])
+ self.vect_legend.setVisible(True)
+ self.vect_legend.adapt_to_size()
+
+ def get_vector_data(self):
+ if self.show_vector_plot is False or self.data is None:
+ return None
+
+ ang = self.vector_angle
+ mag = self.vector_magnitude
+ col = self.vcol_byval_feat
+ angs = self.data.get_column(ang) if ang else np.full(len(self.data), 0)
+ mags = self.data.get_column(mag) if mag else np.full(len(self.data), 1)
+ cols = self.data.get_column(col) if col else np.full(len(self.data), None)
+
+ return np.vstack([angs, mags, cols]).T
+
+ def get_vector_color(self, feat):
+ if self.vector_color_index == 8:
+ if feat[0] is None: # a feat has not been selected yet
+ return vector_color[0][1][0] + (self.vector_opacity,)
+ else:
+ if self.v_bin != 0:
+ if self.cols is None:
+ self.update_binsize()
+ feat = self.cols
+ fmin, fmax = np.min(feat), np.max(feat)
+ if fmin == fmax:
+ # put a warning here?
+ return vector_color[0][1][0] + (self.vector_opacity,)
+ feat_idxs = np.asarray(((feat-fmin)/(fmax-fmin))*255, dtype=int)
+ col_vals = np.asarray(_color_palettes[self.vcol_byval_index][1][0][feat_idxs],
+ dtype=int)
+ out = [np.hstack((np.expand_dims(feat_idxs, 1), col_vals)),
+ self.vector_opacity]
+ return out
+ else:
+ return vector_color[self.vector_color_index][1][0] + (self.vector_opacity,)
+
+ def update_binsize(self):
+ self.parent.Warning.bin_size_error.clear()
+ if self.v_bin == 0:
+ self.v_bin_change = 0
+ self.update_vectors()
+ else:
+ v = self.get_vector_data()
+ valid = self.data_valid_positions
+ lsx, lsy = self.lsx, self.lsy
+ xindex, yindex = self.xindex, self.yindex
+ if lsx is None:
+ v = None
+ if v is None:
+ self.v_bin_change = 0
+ self.vector_plot.hide()
+ else:
+ th = np.asarray(v[:,0], dtype=float)
+ v_mag = np.asarray(v[:,1], dtype=float)
+ col = np.asarray(v[:,2], dtype=float)
+ y = np.linspace(*lsy)[yindex]
+ x = np.linspace(*lsx)[xindex]
+ df = pd.DataFrame(
+ [x, y, np.asarray([1 if i else 0 for i in valid]),v_mag, th, col],
+ index = ['x', 'y', 'valid', 'v_mag', 'th', 'cols']).T
+
+ v_df = df.pivot_table(values = 'valid', columns = 'x', index = 'y', fill_value = 0)
+ a_df = df.pivot_table(values = 'v_mag', columns = 'x', index = 'y')
+ th_df = df.pivot_table(values = 'th', columns = 'x', index = 'y')
+ col_df = df.pivot_table(values = 'cols', columns = 'x', index = 'y')
+ bin_sz = self.v_bin+1
+ if bin_sz > v_df.shape[0] or bin_sz > v_df.shape[1]:
+ bin_sz = v_df.shape[0] if bin_sz > v_df.shape[0] else v_df.shape[1]
+ self.parent.Warning.bin_size_error(bin_sz, bin_sz)
+ x_mod, y_mod = v_df.shape[1] % bin_sz, v_df.shape[0] % bin_sz
+ st_x_idx = int(np.floor(x_mod/2))
+ st_y_idx = int(np.floor(y_mod/2))
+
+ nvalid = np.zeros((int((v_df.shape[0]-y_mod)/bin_sz),
+ int((v_df.shape[1]-x_mod)/bin_sz)))
+ a = np.zeros((int((v_df.shape[0]-y_mod)/bin_sz),
+ int((v_df.shape[1]-x_mod)/bin_sz)))
+ th = np.zeros((int((v_df.shape[0]-y_mod)/bin_sz),
+ int((v_df.shape[1]-x_mod)/bin_sz)))
+ cols = np.zeros((int((v_df.shape[0]-y_mod)/bin_sz),
+ int((v_df.shape[1]-x_mod)/bin_sz)))
+ columns = v_df.columns
+ rows = v_df.index
+ new_xs, new_ys = [], []
+ for i in range(st_y_idx, v_df.shape[0]-y_mod, bin_sz):
+ for j in range(st_x_idx, v_df.shape[1]-x_mod, bin_sz):
+ nvalid[int(i/bin_sz),int(j/bin_sz)] = \
+ np.nanmean(v_df.iloc[i:i+bin_sz,j:j+bin_sz].to_numpy())
+ a[int(i/bin_sz),int(j/bin_sz)] = \
+ np.nanmean(a_df.iloc[i:i+bin_sz,j:j+bin_sz].to_numpy())
+ th[int(i/bin_sz),int(j/bin_sz)] = \
+ circular_mean(th_df.iloc[i:i+bin_sz,j:j+bin_sz].to_numpy())
+ cols[int(i/bin_sz),int(j/bin_sz)] = \
+ np.nanmean(col_df.iloc[i:i+bin_sz,j:j+bin_sz].to_numpy())
+ new_xs.append(np.sum(columns[j:j+bin_sz])/bin_sz)
+ new_ys.append(np.sum(rows[i:i+bin_sz])/bin_sz)
+ nvalid = nvalid.flatten() > 0 & ~np.isnan(nvalid.flatten())
+ self.a = a.flatten()[nvalid]
+ self.th = th.flatten()[nvalid]
+ self.cols = cols.flatten()[nvalid]
+ self.new_xs = np.asarray(new_xs)[nvalid]
+ self.new_ys = np.asarray(new_ys)[nvalid]
+ if self.v_bin_change == 1:
+ self.v_bin_change = 0
+ self.update_vectors()
+
+
class AxesSettingsMixin:
def __init__(self):
@@ -706,6 +1085,16 @@ def update_rect(self):
class ImageParameterSetter(CommonParameterSetter):
IMAGE_ANNOT_BOX = "Image annotations"
+ BKG_CBAR = "Colorbar"
+ VECT_CBAR = "Vector Colorbar"
+
+ def update_cbar_label(self, **settings):
+ self.colorbar.setLabel(settings[self.TITLE_LABEL])
+ self.colorbar.resizeEvent(None)
+
+ def update_vcbar_label(self, **settings):
+ self.vcolorbar.setLabel(settings[self.TITLE_LABEL])
+ self.vcolorbar.resizeEvent(None)
def __init__(self, master):
super().__init__()
@@ -717,10 +1106,16 @@ def update_setters(self):
self.TITLE_LABEL: {self.TITLE_LABEL: ("", "")},
self.X_AXIS_LABEL: {self.TITLE_LABEL: ("", "")},
self.Y_AXIS_LABEL: {self.TITLE_LABEL: ("", "")},
+ self.BKG_CBAR: {self.TITLE_LABEL: ("", "")},
+ self.VECT_CBAR: {self.TITLE_LABEL: ("", "")},
},
}
self._setters[self.IMAGE_ANNOT_BOX] = self._setters[self.ANNOT_BOX]
+ self._setters[self.IMAGE_ANNOT_BOX].update({
+ self.BKG_CBAR: self.update_cbar_label,
+ self.VECT_CBAR: self.update_vcbar_label,
+ })
@property
def title_item(self):
@@ -729,7 +1124,7 @@ def title_item(self):
@property
def axis_items(self):
return [value["item"] for value in self.master.plot.axes.values()] \
- + [self.master.legend.axis]
+ + [self.master.legend.axis] + [self.master.vect_legend.axis]
@property
def getAxis(self):
@@ -739,6 +1134,98 @@ def getAxis(self):
def legend_items(self):
return []
+ @property
+ def colorbar(self):
+ return self.master.legend.axis
+
+ @property
+ def vcolorbar(self):
+ return self.master.vect_legend.axis
+
+
+class VectorPlot(pg.GraphicsObject):
+
+ def __init__(self):
+ pg.GraphicsObject.__init__(self)
+ self.params = None
+
+ self._maxSpotPxWidth = 0
+ self._boundingRect = None
+
+ def setData(self, params):
+ self._maxSpotPxWidth = 0
+ self._boundingRect = None
+
+ self.params = params
+ self.prepareGeometryChange()
+ self.informViewBoundsChanged()
+ self.update()
+
+ def viewTransformChanged(self):
+ self.prepareGeometryChange()
+
+ def paint(self, p, option, widget):
+ if self.params is not None:
+ if isinstance(self.params[3], tuple):
+ path = pg.arrayToQPath(self.params[0], self.params[1],
+ connect = 'pairs', finiteCheck=False)
+ pen = QPen(QBrush(QColor(*self.params[3])), self.params[2])
+ pen.setCosmetic(True)
+ p.setPen(pen)
+ p.drawPath(path)
+ elif isinstance(self.params[3], list):
+ pen = QPen(QBrush(QColor()), self.params[2])
+ pen.setCosmetic(True)
+ unique_cols = np.unique(self.params[3][0], return_index=True, axis=0)
+ irgbx2 = np.hstack((self.params[3][0],
+ self.params[3][0])).reshape(self.params[3][0].shape[0]*2, 4)
+ for i in unique_cols[0]:
+ path = pg.arrayToQPath(self.params[0][np.where(irgbx2[:,0] == i[0])],
+ self.params[1][np.where(irgbx2[:,0] == i[0])],
+ connect = 'pairs', finiteCheck=False)
+ pen.setColor(QColor(*i[1:], self.params[3][1]))
+ p.setPen(pen)
+ p.drawPath(path)
+
+ # These functions are the same as pg.plotcurveitem with small adaptations
+ def pixelPadding(self):
+ self._maxSpotPxWidth = self.params[2]*0.7072
+ return self._maxSpotPxWidth
+
+ def boundingRect(self):
+ if self.params is None:
+ return QRectF()
+ elif self._boundingRect is None and self.params is not None:
+ (xmn, xmx) = (np.nanmin(self.params[0]), np.nanmax(self.params[0]))
+ (ymn, ymx) = (np.nanmin(self.params[1]), np.nanmax(self.params[1]))
+ if xmn is None or xmx is None:
+ return QRectF()
+ if ymn is None or ymx is None:
+ return QRectF()
+
+ px = py = 0.0
+ pxPad = self.pixelPadding()
+ if pxPad > 0:
+ # determine length of pixel in local x, y directions
+ px, py = self.pixelVectors()
+ try:
+ px = 0 if px is None else px.length()
+ except OverflowError:
+ px = 0
+ try:
+ py = 0 if py is None else py.length()
+ except OverflowError:
+ py = 0
+
+ # return bounds expanded by pixel size
+ px *= pxPad
+ py *= pxPad
+ #px += self._maxSpotWidth * 0.5
+ #py += self._maxSpotWidth * 0.5
+ self._boundingRect = QRectF(xmn-px, ymn-py, (2*px)+xmx-xmn, (2*py)+ymx-ymn)
+
+ return self._boundingRect
+
class BasicImagePlot(QWidget, OWComponent, SelectionGroupMixin,
AxesSettingsMixin, ImageSelectionMixin,
@@ -772,6 +1259,8 @@ def __init__(self, parent):
self.data_values = None
self.data_imagepixels = None
self.data_valid_positions = None
+ self.xindex = None
+ self.yindex = None
self.plotview = GraphicsView()
ci = pg.GraphicsLayout()
@@ -948,6 +1437,12 @@ def update_view(self):
self.data_values = None
self.data_imagepixels = None
self.data_valid_positions = None
+ self.xindex = None
+ self.yindex = None
+
+ if isinstance(self, VectorMixin):
+ self.update_binsize()
+ self.update_vectors() # clears the vector plot
self.start(self.compute_image, self.data, self.attr_x, self.attr_y,
self.parent.image_values(),
@@ -973,7 +1468,8 @@ def set_visible_image_comp_mode(self, comp_mode: QPainter.CompositionMode):
@staticmethod
def compute_image(data: Orange.data.Table, attr_x, attr_y,
- image_values, image_values_fixed_levels, state: TaskState):
+ image_values, image_values_fixed_levels,
+ state: TaskState):
if data is None or attr_x is None or attr_y is None:
raise UndefinedImageException
@@ -1050,6 +1546,14 @@ def draw(self, res, finished=False):
self.update_color_schema()
self.update_legend_visible()
+ # indices need to be saved to quickly draw vectors
+ self.yindex = yindex
+ self.xindex = xindex
+
+ if isinstance(self, VectorMixin):
+ self.update_binsize()
+ self.update_vectors()
+
# shift centres of the pixels so that the axes are useful
shiftx = _shift(lsx)
shifty = _shift(lsy)
@@ -1082,15 +1586,45 @@ def on_exception(self, ex: Exception):
raise ex
-class ImagePlot(BasicImagePlot):
+class ImagePlot(BasicImagePlot,
+ VectorSettingMixin, VectorMixin):
+
attr_x = ContextSetting(None, exclude_attributes=True)
attr_y = ContextSetting(None, exclude_attributes=True)
+ def __init__(self, parent):
+ BasicImagePlot.__init__(self, parent)
+ VectorSettingMixin.__init__(self)
+ VectorMixin.__init__(self)
+
class CurvePlotHyper(CurvePlot):
viewtype = Setting(AVERAGE) # average view by default
+def create_gridbox(widget, box=False, add_space=False):
+ grid = QGridLayout()
+ grid.setColumnMinimumWidth(0, 50)
+ grid.setColumnStretch(1, 1)
+ b = gui.widgetBox(widget, box=box, orientation=grid)
+ if not box:
+ if add_space:
+ b.setContentsMargins(8, 4, 8, 4)
+ else:
+ b.setContentsMargins(0, 0, 0, 0)
+ # This must come after calling widgetBox, since widgetBox overrides it
+ grid.setVerticalSpacing(8)
+ return b
+
+
+def grid_add_labelled_row(grid, label, widget):
+ if not isinstance(grid, QGridLayout):
+ grid = grid.layout()
+ row = grid.rowCount()
+ grid.addWidget(QLabel(label), row, 0)
+ grid.addWidget(widget, row, 1)
+
+
class OWHyper(OWWidget, SelectionOutputsMixin):
name = "HyperSpectra"
@@ -1105,7 +1639,7 @@ class Outputs(SelectionOutputsMixin.Outputs):
replaces = ["orangecontrib.infrared.widgets.owhyper.OWHyper"]
keywords = ["image", "spectral", "chemical", "imaging"]
- settings_version = 7
+ settings_version = 8
settingsHandler = DomainContextHandler()
imageplot = SettingProvider(ImagePlot)
@@ -1136,6 +1670,7 @@ class Outputs(SelectionOutputsMixin.Outputs):
class Warning(OWWidget.Warning):
threshold_error = Msg("Low slider should be less than High")
+ bin_size_error = Msg("Selected bin size larger than image size, bin size {} x {} used")
class Error(OWWidget.Error):
image_too_big = Msg("Image for chosen features is too big ({} x {}).")
@@ -1185,6 +1720,8 @@ def __init__(self):
dbox = gui.widgetBox(self.controlArea, "Image values")
icbox = gui.widgetBox(self.controlArea, "Image colors")
+
+ ivbox = gui.widgetBox(self.controlArea, "Vector plot")
rbox = gui.radioButtons(
dbox, self, "value_type", callback=self._change_integration)
@@ -1197,7 +1734,6 @@ def __init__(self):
self.box_values_spectra, self, "integration_method",
items=(a.name for a in self.integration_methods),
callback=self._change_integral_type)
- gui.rubber(self.controlArea)
gui.appendRadioButton(rbox, "Use feature")
@@ -1235,10 +1771,16 @@ def __init__(self):
splitter.setOrientation(Qt.Vertical)
self.imageplot = ImagePlot(self)
self.imageplot.selection_changed.connect(self.output_image_selection)
+ # add image settings to the main panne after ImagePlot.__init__
+ iabox.layout().addWidget(self.imageplot.axes_settings_box)
+ icbox.layout().addWidget(self.imageplot.color_settings_box)
# add image settings to the main panne after ImagePlot.__init__
iabox.layout().addWidget(self.imageplot.axes_settings_box)
icbox.layout().addWidget(self.imageplot.color_settings_box)
+ ivbox.layout().addWidget(self.imageplot.setup_vector_plot_controls())
+
+ self.data = None
# do not save visible image (a complex structure as a setting;
# only save its name)
@@ -1292,6 +1834,8 @@ def __init__(self):
self._setup_plot_parameters()
+ gui.rubber(self.controlArea)
+
def _setup_plot_parameters(self):
parts_from_spectra = [SpectraParameterSetter.ANNOT_BOX,
SpectraParameterSetter.LABELS_BOX,
@@ -1303,16 +1847,19 @@ def _setup_plot_parameters(self):
VisualSettingsDialog(self, self.imageplot.parameter_setter.initial_settings)
def setup_visible_image_controls(self):
- self.visbox = gui.widgetBox(self.controlArea, True)
+ self.visbox = gui.widgetBox(self.controlArea, box="Visible image")
gui.checkBox(
self.visbox, self, 'show_visible_image',
label='Show visible image',
callback=lambda: (self.update_visible_image_interface(), self.update_visible_image()))
+ self.visboxhide = gui.widgetBox(self.visbox, box=False)
+ self.visboxhide.hide()
+
self.visible_image_model = VisibleImageListModel()
gui.comboBox(
- self.visbox, self, 'visible_image',
+ self.visboxhide, self, 'visible_image',
model=self.visible_image_model,
callback=self.update_visible_image)
@@ -1323,13 +1870,13 @@ def setup_visible_image_controls(self):
('Difference', QPainter.CompositionMode_Difference)
])
gui.comboBox(
- self.visbox, self, 'visible_image_composition', label='Composition mode:',
+ self.visboxhide, self, 'visible_image_composition', label='Composition mode:',
model=PyListModel(self.visual_image_composition_modes.keys()),
callback=self.update_visible_image_composition_mode
)
gui.hSlider(
- self.visbox, self, 'visible_image_opacity', label='Opacity:',
+ self.visboxhide, self, 'visible_image_opacity', label='Opacity:',
minValue=0, maxValue=255, step=10, createLabel=False,
callback=self.update_visible_image_opacity
)
@@ -1340,6 +1887,7 @@ def setup_visible_image_controls(self):
def update_visible_image_interface(self):
controlled = ['visible_image', 'visible_image_composition', 'visible_image_opacity']
+ self.visboxhide.setVisible(self.show_visible_image)
for c in controlled:
getattr(self.controls, c).setEnabled(self.show_visible_image)
@@ -1353,6 +1901,7 @@ def update_visible_image_opacity(self):
def init_interface_data(self, data):
self.init_attr_values(data)
self.init_visible_images(data)
+ self.imageplot.init_vector_plot(data)
def output_image_selection(self):
_, selected = self.send_selection(self.data, self.imageplot.selection_group)
diff --git a/orangecontrib/spectroscopy/widgets/owpolar.py b/orangecontrib/spectroscopy/widgets/owpolar.py
new file mode 100644
index 000000000..08a42580d
--- /dev/null
+++ b/orangecontrib/spectroscopy/widgets/owpolar.py
@@ -0,0 +1,975 @@
+import time
+import os
+import multiprocessing
+from multiprocessing.managers import SharedMemoryManager
+from typing import List, Optional, Sequence
+
+import math
+from types import SimpleNamespace
+import numpy as np
+import pandas as pd
+from AnyQt.QtCore import QItemSelectionModel, QItemSelection, QItemSelectionRange, Qt
+from AnyQt.QtWidgets import QFormLayout, QWidget, QListView, QLabel, QSizePolicy
+from AnyQt.QtGui import QDoubleValidator
+from scipy.optimize import curve_fit
+
+
+import Orange.data
+from Orange.data import DiscreteVariable, ContinuousVariable, Domain, Variable
+from Orange.data.table import Table
+from Orange.widgets.widget import OWWidget, Msg, Output, MultiInput
+from Orange.widgets import gui, settings
+
+from Orange.widgets.settings import \
+ Setting, ContextSetting, DomainContextHandler
+from Orange.widgets.utils.itemmodels import DomainModel
+from Orange.widgets.utils.concurrent import TaskState, ConcurrentWidgetMixin
+from Orange.widgets.data import owconcatenate
+from Orange.widgets.data.oweditdomain import disconnected
+from orangewidget.utils.listview import ListViewSearch
+
+class DiscDomainModel(DomainModel):
+
+ def data(self, index, role=Qt.DisplayRole):
+ value = super().data(index, role)
+ if role == Qt.DisplayRole:
+ try:
+ values = index.data(Qt.UserRole)
+ except TypeError:
+ pass # don't have user role (yet)
+ else:
+ if type(value) is str:
+ value += f" ({values})"
+ return value
+
+def _restore_selected_items(model, view, setting, connector):
+ selection = QItemSelection()
+ sel_model: QItemSelectionModel = view.selectionModel()
+ with disconnected(sel_model.selectionChanged,
+ connector):
+ valid = []
+ model_values = model[:]
+ for var in setting:
+ index = model_values.index(var)
+ model_index = view.model().index(index, 0)
+ selection.append(QItemSelectionRange(model_index))
+ valid.append(var)
+ sel_model.select(selection, QItemSelectionModel.ClearAndSelect)
+
+
+class Results(SimpleNamespace):
+ out = None
+ model = None
+ errorstate = 0
+
+def sort_domain(domain):
+ dom = [domain.metas, domain.attributes, domain.class_vars]
+ sorted_dom_lst = []
+ for i in dom:
+ cvs = [[i, j, j.name] for i, j in enumerate(i)]
+ rcvs_idx = []
+ rcvs = []
+ for j, k in enumerate(cvs):
+ try:
+ cvs[j][-1] = float(k[-1])
+ except ValueError:
+ rcvs.append(k[1])
+ rcvs_idx.append(j)
+ for j in reversed(rcvs_idx):
+ cvs.pop(j)
+ cvs_arr = np.array(cvs)
+ if cvs_arr.shape[0] > 0:
+ cvs_arr_sorted = cvs_arr[cvs_arr[:,2].argsort()]
+ odom_cv = [i[1] for i in cvs_arr_sorted]
+ odom = rcvs + odom_cv
+ else:
+ odom = rcvs
+ sorted_dom_lst.append(tuple(odom))
+ out = Domain(sorted_dom_lst[1], class_vars=sorted_dom_lst[2], metas=sorted_dom_lst[0])
+ return out
+
+def combine_visimg(data, polangles):
+ atts = []
+ for k, i in enumerate(data):
+ try:
+ temp = i.attributes['visible_images']
+ for j in temp:
+ j.name = str(j.name + f' ({polangles[k]} Degrees)')
+ atts.append(j)
+ except KeyError:
+ pass
+ except AttributeError:
+ pass
+ attsdict = {'visible_images': atts}
+ return attsdict
+
+def run(data, feature, alphas, map_x, map_y, invert_angles, polangles, average,
+ sep, state: TaskState):
+
+ results = Results()
+
+ output, model, spectra, origmetas, errorstate = process_polar_abs(data, alphas, feature, map_x,
+ map_y, invert_angles, polangles, average, state)
+
+
+ tempoutaddmetas = [[ContinuousVariable.make('Azimuth Angle (' + i.name + ')'),
+ ContinuousVariable.make('Hermans Orientation Function (' + i.name + ')'),
+ ContinuousVariable.make('Intensity (' + i.name + ')'),
+ ContinuousVariable.make('Amplitude (' + i.name + ')'),
+ ContinuousVariable.make('R-squared (' + i.name + ')')] for i in feature]
+ outaddmetas = []
+ for i in tempoutaddmetas:
+ outaddmetas = outaddmetas + i
+
+ tempmodaddmetas = [[ContinuousVariable.make('R-squared (' + i.name + ')'),
+ ContinuousVariable.make('a0 (' + i.name + ')'),
+ ContinuousVariable.make('a1 (' + i.name + ')'),
+ ContinuousVariable.make('a2 (' + i.name + ')')] for i in feature]
+ modaddmetas = []
+ for i in tempmodaddmetas:
+ modaddmetas = modaddmetas + i
+ ometadom = data[0].domain.metas
+ if average is False:
+ values = tuple(f'{i} Degrees' for i in polangles)
+ PolAng = DiscreteVariable.make('Polarization Angle', values=values)
+ outmetadom = (ometadom + tuple([PolAng]) + tuple(outaddmetas))
+ modmetadom = (ometadom + tuple([PolAng]) + tuple(modaddmetas))
+ output_stack = tuple(output for i in polangles)
+ model_stack = tuple(model for i in polangles)
+ output = np.vstack(output_stack)
+ model = np.vstack(model_stack)
+ elif average is True:
+ if sep is not None:
+ sep_idx = ometadom.index(sep)
+ try:
+ origmetas = np.c_[origmetas[:,0:sep_idx], origmetas[:,sep_idx+1:]]
+ except ValueError:
+ origmetas = np.r_[origmetas[:,0:sep_idx]]
+ ometadom = tuple(i for i in ometadom if i is not sep)
+ outmetadom = (ometadom + tuple(outaddmetas))
+ modmetadom = (ometadom + tuple(modaddmetas))
+
+ if state.is_interruption_requested():
+ results = None
+ return results
+
+ ofeatdom = data[0].domain.attributes
+ datadomain = Domain(ofeatdom, metas = outmetadom)
+ moddomain = Domain(ofeatdom, metas = modmetadom)
+ outmetas = np.hstack((origmetas, output))
+ modmetas = np.hstack((origmetas, model))
+
+ out = Table.from_numpy(datadomain, X=spectra, Y=None, metas=outmetas)
+ mod = Table.from_numpy(moddomain, X=spectra, Y=None, metas=modmetas)
+
+ if state.is_interruption_requested():
+ results = None
+ return results
+
+ results.out = out
+ results.model = mod
+ results.errorstate = errorstate
+
+ attsdict = combine_visimg(data, polangles)
+
+ results.out.attributes = attsdict
+ results.model.attributes = attsdict
+ return results
+
+#Calculate by fitting to function
+def azimuth(x,a0,a1,a2):
+ t = 2*np.radians(x)
+ return a0*np.sin(t)+a1*np.cos(t)+a2
+
+def azimuth_jac(x, a0, a1, a2):
+ t = 2*np.radians(x).reshape(-1, 1)
+ da0 = np.sin(t)
+ da1 = np.cos(t)
+ da2 = np.ones(t.shape)
+ return np.hstack((da0, da1, da2))
+
+def calc_angles(a0,a1):
+ return np.degrees(0.5*np.arctan(a0/a1))
+
+def ampl2(a0,a1):
+ return (2*(math.sqrt(a0**2+a1**2)))
+
+def orfunc(alpha,a0,a1,a2):
+ if alpha < 54.73:
+ Dmax = (2*a2+2*math.sqrt(a0**2+a1**2))/(2*a2-2*math.sqrt(a0**2+a1**2))
+ return ((Dmax-1)/(Dmax+2)*(2/(3*np.cos(np.radians(alpha))**2-1)))
+ elif alpha >= 54.73:
+ Dmin = (2*a2-2*math.sqrt(a0**2+a1**2))/(2*a2+2*math.sqrt(a0**2+a1**2))
+ return ((Dmin-1)/(Dmin+2)*(2/(3*np.cos(np.radians(alpha))**2-1)))
+ return None
+
+def find_az(params):
+ Az0 = calc_angles(params[0],params[1])
+ Abs0 = azimuth(Az0, *params)
+ Az1 = calc_angles(params[0],params[1])+90
+ Abs1 = azimuth(Az1, *params)
+ Az2 = calc_angles(params[0],params[1])-90
+
+
+ if Abs0 > Abs1:
+ Az = Az0
+ elif Abs1 > Abs0:
+ if Az1 < 90:
+ Az = Az1
+ elif Az1 > 90:
+ Az = Az2
+ return Az
+
+def compute(xys, yidx, smms, shapes, dtypes, polangles):
+ tcvs = smms[0]
+ cvs = np.ndarray(shapes[0], dtype=dtypes[0], buffer=tcvs.buf)
+ tout = smms[3]
+ out = np.ndarray(shapes[3], dtype=dtypes[3], buffer=tout.buf)
+ tmod = smms[4]
+ mod = np.ndarray(shapes[4], dtype=dtypes[4], buffer=tmod.buf)
+ tcoords = smms[5]
+ coords = np.ndarray(shapes[5], dtype=dtypes[5], buffer=tcoords.buf)
+ tvars = smms[6]
+ vars = np.ndarray(shapes[6], dtype=dtypes[6], buffer=tvars.buf)
+
+ x = np.asarray(polangles)
+
+ for i in range(yidx[0], yidx[1]):#y-values(rows)
+ if vars[-1] != 0:
+ break
+ for j in enumerate(xys[0]):#x-values(cols)
+ if vars[-1] != 0:
+ break
+ for l in range(cvs.shape[2]):
+ if np.any(np.isnan(cvs[i,j[0],l,:]), axis=0):
+ continue
+ out[i,j[0],l,0] = coords[i,j[0],1]#x-map
+ mod[i,j[0],l,0] = coords[i,j[0],1]
+ out[i,j[0],l,1] = coords[i,j[0],0]#y-map
+ mod[i,j[0],l,1] = coords[i,j[0],0]
+
+ temp = list(cvs[i,j[0],l,:])
+
+ params = curve_fit(azimuth, x, temp, jac=azimuth_jac)[0]
+
+ residuals = temp - azimuth(x, *params)
+ ss_res = np.sum(residuals**2)
+ ss_tot = np.sum((temp-np.mean(temp))**2)
+ if ss_tot == 0:
+ vars[-1] = 1
+ break
+ out[i,j[0],l,6] = 1-(ss_res/ss_tot)
+ mod[i,j[0],l,2] = 1-(ss_res/ss_tot)
+ out[i,j[0],l,2] = find_az(params)
+ out[i,j[0],l,3] = orfunc(vars[l], *params)
+ out[i,j[0],l,4] = params[2]
+ out[i,j[0],l,5] = ampl2(params[0],params[1])
+ mod[i,j[0],l,3] = params[0]
+ mod[i,j[0],l,4] = params[1]
+ mod[i,j[0],l,5] = params[2]
+
+
+def unique_xys(images, map_x, map_y):
+ lsxs = np.empty(0)
+ lsys = np.empty(0)
+ for i in enumerate(images):
+ tempdata = i[1].transform(Domain([map_x, map_y]))
+ lsx = np.unique(tempdata.X[:,0])
+ lsy = np.unique(tempdata.X[:,1])
+ lsxs = np.append(lsxs, lsx)
+ lsys = np.append(lsys, lsy)
+
+ ulsxs = np.unique(lsxs)
+ ulsys = np.unique(lsys)
+ return ulsxs, ulsys
+
+def start_compute(ulsxs, ulsys, names, shapes, dtypes, polangles, state):
+ # single core processing is faster for small data sets and small number of selected features
+ # if > x:
+ ncpu = os.cpu_count()
+ # ncpu = 6
+ tulsys = np.array_split(ulsys, ncpu)
+ state.set_status("Calculating...")
+ threads=[]
+ cumu = 0
+ for i in range(ncpu):
+ tlsxys = [ulsxs,tulsys[i]]
+ yidx = [cumu, cumu+len(tulsys[i])]
+ cumu += len(tulsys[i])
+ # compute(tlsxys, yidx, shapes, dtypes, polangles, i)
+ t = multiprocessing.Process(target=compute,
+ args=(tlsxys, yidx, names, shapes, dtypes, polangles))
+ threads.append(t)
+ t.start()
+
+ # for t in threads:
+ # t.join()
+
+ # else:
+ # ncpu = 1
+ # tulsys = np.array_split(ulsys, ncpu)
+ # state.set_status("Calculating...")
+ # threads=[]
+ # cumu = 0
+ # for i in range(ncpu):
+ # tlsxys = [ulsxs,tulsys[i]]
+ # yidx = [cumu, cumu+len(tulsys[i])]
+ # cumu += len(tulsys[i])
+ # compute(tlsxys, yidx, shapes, dtypes, polangles, i)
+ return threads
+
+def process_polar_abs(images, alphas, feature, map_x, map_y, invert, polangles, average, state):
+ state.set_status("Preparing...")
+
+ ulsxs, ulsys = unique_xys(images, map_x, map_y)
+
+ if len(ulsxs) > 1:
+ dx = np.sum(np.diff(ulsxs))/(len(ulsxs)-1)
+ else:
+ dx = 1
+ if len(ulsys) > 1:
+ dy = np.sum(np.diff(ulsys))/(len(ulsys)-1)
+ else:
+ dy = 1
+ minx = np.min(ulsxs)
+ miny = np.min(ulsys)
+
+ featnames = [i.name for i in feature]
+ cvs = np.full((np.shape(ulsys)[0], np.shape(ulsxs)[0], len(featnames), len(images)), np.nan)
+ spec = np.full((np.shape(ulsys)[0], np.shape(ulsxs)[0],
+ images[0].X.shape[1], len(images)), np.nan, dtype=object)
+ metas = np.full((np.shape(ulsys)[0], np.shape(ulsxs)[0],
+ images[0].metas.shape[1], len(images)), np.nan, dtype=object)
+ out = np.full((np.shape(ulsys)[0], np.shape(ulsxs)[0], len(featnames), 7), np.nan)
+ mod = np.full((np.shape(ulsys)[0], np.shape(ulsxs)[0], len(featnames), 6), np.nan)
+ coords = np.full((np.shape(ulsys)[0], np.shape(ulsxs)[0], 2), np.nan)
+ vars = np.hstack((np.asarray(alphas),0))
+ fill = np.full((np.shape(ulsys)[0], np.shape(ulsxs)[0]), np.nan)
+
+ for i, j in enumerate(images):
+ if state.is_interruption_requested():
+ return None, None, None, None, 2
+ cv = [j.domain[k] for k in featnames]
+ doms = [map_x, map_y] + cv
+ tempdata: Table = j.transform(Domain(doms))
+ temp_xy = tempdata.X[:,0:2].copy()
+ temp_xy[:,0] = np.rint(((temp_xy[:,0]-minx)/dx))
+ temp_xy[:,1] = np.rint(((temp_xy[:,1]-miny)/dy))
+ temp_xy = np.array(temp_xy, dtype=np.int_)
+ cvs[temp_xy[:,1],temp_xy[:,0],:,i] = tempdata[:,2:]
+ spec[temp_xy[:,1],temp_xy[:,0],:,i] = j.X
+ metas[temp_xy[:,1],temp_xy[:,0],:,i] = j.metas
+ xys = pd.DataFrame(fill, index=ulsys, columns=ulsxs, dtype=object)
+ for k, i in enumerate(xys.index):
+ for l, j in enumerate(xys.columns):
+ coords[k,l,0] = i
+ coords[k,l,1] = j
+
+ if state.is_interruption_requested():
+ return None, None, None, None, 2
+
+ with SharedMemoryManager() as smm:
+ tcvs = smm.SharedMemory(size=cvs.nbytes)
+ scvs = np.ndarray(cvs.shape, dtype=cvs.dtype, buffer=tcvs.buf)
+ scvs[:,:,:] = cvs[:,:,:]
+ tout = smm.SharedMemory(size=out.nbytes)
+ sout = np.ndarray(out.shape, dtype=out.dtype, buffer=tout.buf)
+ sout[:,:,:,:] = out[:,:,:,:]
+ tmod = smm.SharedMemory(size=mod.nbytes)
+ smod = np.ndarray(mod.shape, dtype=mod.dtype, buffer=tmod.buf)
+ smod[:,:,:,:] = mod[:,:,:,:]
+ tcoords = smm.SharedMemory(size=coords.nbytes)
+ scoords = np.ndarray(coords.shape, dtype=coords.dtype, buffer=tcoords.buf)
+ scoords[:,:,:] = coords[:,:,:]
+ tvars = smm.SharedMemory(size=vars.nbytes)
+ svars = np.ndarray(vars.shape, dtype=vars.dtype, buffer=tvars.buf)
+ svars[:] = vars[:]
+
+ smms = [tcvs, None, None, tout, tmod, tcoords, tvars]
+ shapes = [cvs.shape, spec.shape, metas.shape, out.shape, mod.shape, coords.shape, vars.shape]
+ dtypes = [cvs.dtype, spec.dtype, metas.dtype, out.dtype, mod.dtype, coords.dtype, vars.dtype]
+
+ if state.is_interruption_requested():
+ return None, None, None, None, 2
+ threads = start_compute(ulsxs, ulsys, smms, shapes, dtypes, polangles, state)
+
+ for t in threads:
+ t.join(0)
+
+ while any([i.exitcode == None for i in threads]):
+ if state.is_interruption_requested():
+ svars[1] = 2
+ time.sleep(0.10)
+
+ state.set_status("Finishing...")
+ if invert is True:
+ sout[:,:,:,2] = sout[:,:,:,2]*-1
+ outputs = np.reshape(sout[:,:,:,2:], (np.shape(ulsys)[0]*np.shape(ulsxs)[0], 5*len(featnames)))
+ model = np.reshape(smod[:,:,:,2:], (np.shape(ulsys)[0]*np.shape(ulsxs)[0], 4*len(featnames)))
+ vars[:] = svars[:]
+
+ if state.is_interruption_requested():
+ return None, None, None, None, 2
+
+ spectra = []
+ met = []
+ if average is False:
+ for i in range(len(polangles)):
+ spectratemp = np.reshape(spec[:,:,:,i],
+ (np.shape(ulsys)[0]*np.shape(ulsxs)[0], images[0].X.shape[1]))
+ spectratemp = spectratemp[~np.isnan(model).any(axis=1)]
+ spectra.append(spectratemp)
+ metatemp = np.reshape(metas[:,:,:,i],
+ (np.shape(ulsys)[0]*np.shape(ulsxs)[0], images[0].metas.shape[1]))
+ metatemp = metatemp[~np.isnan(model).any(axis=1)]
+ metatemp = np.append(metatemp, np.full((np.shape(metatemp)[0],1), i), axis=1)
+ met.append(metatemp)
+
+ if state.is_interruption_requested():
+ return None, None, None, None, 2
+
+ elif average is True:
+ average_spec = np.average(spec, axis=3)
+ spectratemp = np.reshape(average_spec,
+ (np.shape(ulsys)[0]*np.shape(ulsxs)[0], images[0].X.shape[1]))
+ spectratemp = spectratemp[~np.isnan(model).any(axis=1)]
+ spectra.append(spectratemp)
+ metatemp = np.reshape(metas[:,:,:,0],
+ (np.shape(ulsys)[0]*np.shape(ulsxs)[0], images[0].metas.shape[1]))
+ metatemp = metatemp[~np.isnan(model).any(axis=1)]
+ met.append(metatemp)
+
+ outputs = outputs[~np.isnan(model).any(axis=1)]
+ model = model[~np.isnan(model).any(axis=1)]
+
+ spectra = np.concatenate((spectra), axis=0)
+ meta = np.concatenate((met), axis=0)
+
+ return outputs, model, spectra, meta, vars[-1]
+
+
+class OWPolar(OWWidget, ConcurrentWidgetMixin):
+
+ # Widget's name as displayed in the canvas
+ name = "4+ Angle Polarization"
+
+ # Short widget description
+ description = (
+ "Calculate Azimuth Angle, Orientation function, Amplitude and Intensity of "
+ "vibrational mode(s) using polarized data measured at 4 or more polarization angles.")
+
+ icon = "icons/polar.svg"
+
+ settings_version = 2
+
+ # Define inputs and outputs
+ class Inputs:
+ data = MultiInput("Data", Orange.data.Table, default=True)
+
+ class Outputs:
+ polar = Output("Polar Data", Orange.data.Table, default=True)
+ model = Output("Curve Fit model data", Orange.data.Table)
+
+ autocommit = settings.Setting(False)
+
+ settingsHandler = DomainContextHandler()
+
+ want_main_area = False
+ resizing_enabled = True
+ alpha = Setting(0, schema_only=True)
+
+ map_x = ContextSetting(None, exclude_attributes=True, exclude_class_vars=True)
+ map_y = ContextSetting(None, exclude_attributes=True, exclude_class_vars=True)
+ invert_angles = Setting(False, schema_only=True)
+ average = Setting(False, schema_only=True)
+ angles = ContextSetting(None, exclude_attributes=True, exclude_class_vars=True)
+ spec_type = Setting(0)
+ alphas: List[float] = ContextSetting([])
+ feats: List[Variable] = ContextSetting([])
+
+ class Warning(OWWidget.Warning):
+ # nodata = Msg("No useful data on input!")
+ # noang = Msg("Must receive 4 angles at specified polarisation")
+ nofeat = Msg("Select one or more Features to calculate orientations with")
+ noxy = Msg("Select X and Y variables")
+ pol = Msg("Invalid Polarization angles")
+ notenough = Msg("Must have >= 4 angles")
+ wrongdata = Msg("Model returns inf. Inappropriate data")
+ # tomany = Msg("Widget must receive data at data input or discrete angles only")
+ # missingfeat = Msg("All inputs must have the selected feature")
+ # renamed_variables = Msg("Variables with duplicated names have been renamed.")
+ XYfeat = Msg("Selected feature(s) cannot be the same as XY selection")
+
+ class Information(OWWidget.Information):
+ meta_calc = Msg("Meta and Target variables are not transformed to absorptance during calculations")
+
+ def __init__(self):
+ super().__init__()
+ ConcurrentWidgetMixin.__init__(self)
+ gui.OWComponent.__init__(self)
+
+ self.anglst = []
+ self.lines = []
+ self.labels = []
+ self.multiin_anglst = []
+ self.multiin_lines = []
+ self.multiin_labels = []
+ self.polangles = []
+ self.n_inputs = 0
+
+ self._dumb_tables = owconcatenate.OWConcatenate._dumb_tables
+ self._get_part = owconcatenate.OWConcatenate._get_part
+ self.merge_domains = owconcatenate.OWConcatenate.merge_domains
+
+ self._data_inputs: List[Optional[Table]] = []
+
+ hbox = gui.hBox(self.controlArea)
+ #col 1
+
+ vbox2 = gui.vBox(hbox, None)
+
+ form2 = QWidget()
+ formlayout2 = QFormLayout()
+ form2.setLayout(formlayout2)
+
+ self.multifile = gui.widgetBox(vbox2, "Single input (with all angles)",
+ sizePolicy=(QSizePolicy.Minimum, QSizePolicy.Fixed))
+
+ self.anglemetas = DomainModel(DomainModel.METAS, valid_types=DiscreteVariable)
+ self.anglesel = gui.comboBox(self.multifile, self, 'angles', searchable=True,
+ label='Select Angles by:', callback=self._change_angles,
+ model=self.anglemetas)
+ self.anglesel.setDisabled(True)
+
+
+ self.multiin = gui.widgetBox(vbox2, "Multiple inputs (single angle per input)",
+ sizePolicy=(QSizePolicy.Minimum, QSizePolicy.Fixed))
+
+ vbox2.layout().addWidget(form2)
+
+ #col 2
+ vbox1 = gui.vBox(hbox, "Features")
+
+ self.featureselect = DiscDomainModel(DomainModel.SEPARATED,
+ valid_types=ContinuousVariable)
+ self.feat_view = ListViewSearch(selectionMode=QListView.ExtendedSelection)
+ self.feat_view.setModel(self.featureselect)
+ self.feat_view.selectionModel().selectionChanged.connect(self._feat_changed)
+ vbox1.layout().addWidget(self.feat_view)
+ vbox1.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Minimum))
+ self.contextOpened.connect(
+ lambda: _restore_selected_items(model=self.featureselect,
+ view=self.feat_view,
+ setting=self.feats,
+ connector=self._feat_changed))
+
+ gui.button(vbox1, self, "Don't use selected features",
+ callback=self.remove_feat)
+
+ #col 3
+ vbox = gui.vBox(hbox, None)
+
+ form = QWidget()
+ formlayout = QFormLayout()
+ form.setLayout(formlayout)
+
+ xybox = gui.widgetBox(vbox, "Data XY Selection",
+ sizePolicy=(QSizePolicy.Minimum, QSizePolicy.Fixed))
+
+ self.x_axis = DomainModel(DomainModel.METAS, valid_types=ContinuousVariable)
+ self.y_axis = DomainModel(DomainModel.METAS, valid_types=ContinuousVariable)
+
+ gui.comboBox(xybox, self, 'map_x', searchable=True, label="X Axis",
+ callback=self._change_input, model=self.x_axis)
+ gui.comboBox(xybox, self, 'map_y', searchable=True, label="Y Axis",
+ callback=self._change_input, model=self.y_axis)
+
+ vbox.layout().addWidget(form)
+
+ specbox = gui.widgetBox(vbox, "Spectra Type",
+ sizePolicy=(QSizePolicy.Minimum, QSizePolicy.Fixed))
+
+ self.spec_b1 = gui.radioButtons(specbox, self, 'spec_type', ['Absorptance', 'Absorbance', 'Transmittance'],
+ callback=self._process_spectype)
+
+ vbox.layout().addWidget(form)
+
+ pbox = gui.widgetBox(vbox, "Parameters", sizePolicy=(QSizePolicy.Minimum, QSizePolicy.Fixed))
+ self.alphaedit = gui.lineEdit(pbox, self, "alpha", u"TDM Tilt (\N{DEGREE SIGN})",
+ callback=self.change_alphas, valueType=float,
+ validator=QDoubleValidator(0.00, 90.00, 2), tooltip= \
+ "The angle (in degrees) between the long axis of the molecule and the transition dipole moment")
+
+ gui.checkBox(pbox, self, 'invert_angles', label="Invert Angles",
+ callback=self._change_input)
+
+ gui.checkBox(pbox, self, 'average', label='Average Spectra',
+ callback=self._change_input)
+
+ gui.auto_commit(self.controlArea, self, "autocommit", "Apply", commit=self.commit)
+
+ gui.rubber(vbox2)
+ cbox = gui.widgetBox(vbox2, "Citations")
+ citation = gui.widgetLabel(cbox)
+ citation.setOpenExternalLinks(True)
+ citation.setText('\
+ \
+ When publishing results, consider citing:
\
+ - Hikima et al. (2013)
\
+ - Gassner et al. (2025) \
+ ')
+
+ self._change_input()
+ self.contextAboutToBeOpened.connect(lambda x: self.init_attr_values(x[0]))
+
+ def sort_row(self, unsorted):
+ row, feats, alphas = list(zip(*[unsorted]))
+ return row
+
+ def sort_feats(self):
+ model = self.feat_view.model()
+ rows = [model.indexOf(row) for row in self.feats]
+ featalphas = list(zip(rows, self.feats, self.alphas))
+ temp = sorted(featalphas, key=self.sort_row)
+ rows, feats, alphas = list(zip(*temp))
+ self.feats = list(feats)
+ self.alphas = list(alphas)
+
+ def _feat_changed(self):
+ self.Warning.nofeat.clear()
+ rows = self.feat_view.selectionModel().selectedRows()
+ model = self.feat_view.model()
+ for row in rows:
+ if model[:][row.row()] not in self.feats:
+ self.feats.append(model[:][row.row()])
+ self.alphas.append(self.alpha)
+ model.setData(model.index(row.row()),
+ f'TDM = {self.alpha}\N{DEGREE SIGN}',
+ role=Qt.UserRole)
+ self.sort_feats()
+ if len(rows) > 0:
+ self.Warning.nofeat.clear()
+ else:
+ self.Warning.nofeat()
+ return
+ self.commit.deferred()
+
+ def remove_feat(self):
+ rows = self.feat_view.selectionModel().selectedRows()
+ model = self.feat_view.model()
+ for row in rows:
+ idx = self.feats.index(model[:][row.row()])
+ self.feats.remove(model[:][row.row()])
+ self.alphas.pop(idx)
+ model.setData(model.index(row.row()), 'Not used', role=Qt.UserRole)
+ self.commit.deferred()
+
+ def change_alphas(self):
+ model = self.feat_view.model()
+ rows = self.feat_view.selectionModel().selectedRows()
+ for row in rows:
+ try:
+ idx = self.feats.index(model[:][row.row()])
+ except ValueError:
+ self._feat_changed()
+ idx = self.feats.index(model[:][row.row()])
+ self.alphas[idx] = self.alpha
+ model.setData(model.index(row.row()), f"TDM = {self.alpha}\N{DEGREE SIGN}", role=Qt.UserRole)
+ self.commit.deferred()
+
+ def restore_alphas(self):
+ rows = self.feat_view.selectionModel().selectedRows()
+ model = self.feat_view.model()
+ for row in rows:
+ idx = self.feats.index(model[:][row.row()])
+ model.setData(model.index(row.row()), f"TDM = {self.alphas[idx]}\N{DEGREE SIGN}", role=Qt.UserRole)
+
+ def init_attr_values(self, data):
+ domain = data.domain if data is not None else None
+ self.featureselect.set_domain(domain)
+ self.x_axis.set_domain(domain)
+ self.y_axis.set_domain(domain)
+ self.anglemetas.set_domain(domain)
+ self.angles = self.anglemetas[0] if self.anglemetas else None
+ self.map_x = self.x_axis[0] if self.x_axis else None
+ self.map_y = self.y_axis[1] if len(self.y_axis) >= 2 \
+ else self.map_x
+ self.restore_alphas()
+
+ def _change_input(self):
+ self.commit.deferred()
+
+ def _change_angles(self):
+ # self.Warning.nodata.clear()
+ if self.angles:
+ self.clear_angles(self.anglst, self.lines, self.labels, self.multifile)
+ self.anglst = []
+ self.lines = []
+ self.labels = []
+ self.Warning.notenough.clear()
+ if len(self.angles.values) < 4:
+ self.Warning.notenough()
+ else:
+ tempangles = np.linspace(0, 180, len(self.angles.values)+1)
+ for i, j in enumerate(self.angles.values):
+ self.add_angles(self.anglst, j, self.labels, self.lines, self.multifile,
+ i, tempangles[i], self._send_angles)
+ self._send_angles()
+ for i in self.labels:
+ i.setDisabled(False)
+ for i in self.lines:
+ i.setDisabled(False)
+ self.commit.deferred()
+
+ def add_angles(self, anglst, lab, labels, lines, widget,
+ i, place, callback): #to be used in a loop
+ file = os.path.basename(lab)
+ anglst.append(lab)
+ ledit = gui.lineEdit(widget, self, None, label = file, callback = callback)
+ ledit.setText(str(place))
+ lines.append(ledit)
+ for j in ledit.parent().children():
+ if isinstance(j, QLabel):
+ labels.append(j)
+
+ def clear_angles(self, anglst, lines, labels, widget):
+ if widget is self.multiin:
+ for i in reversed(range(self.multiin.layout().count())):
+ self.multiin.layout().itemAt(i).widget().setParent(None)
+ if widget is self.multifile:
+ for i in reversed(range(self.multifile.layout().count())):
+ if i != 0:
+ self.multifile.layout().itemAt(i).widget().setParent(None)
+ anglst.clear()
+ lines.clear()
+ labels.clear()
+ self.polangles.clear()
+
+ def _send_ind_angles(self):
+ self.polangles.clear()
+ for i in self.multiin_lines:
+ self.polangles.append(i.text())
+ try:
+ pol = []
+ for i in self.polangles:
+ pol.append(float(i))
+ self.polangles = pol
+ self.commit.deferred()
+ except ValueError:
+ pass
+
+ def _send_angles(self):
+ self.polangles.clear()
+ for i in self.lines:
+ self.polangles.append(i.text())
+ try:
+ pol = []
+ for i in self.polangles:
+ pol.append(float(i))
+ self.polangles = pol
+ self.commit.deferred()
+ except ValueError:
+ pass
+
+ def input_select(self):
+ self.angles = None
+ if len(self.data) == 0 or 1 < len(self.data) < 4:
+ self.anglesel.setDisabled(True)
+ for i in self.multiin_labels:
+ i.setDisabled(True)
+ for i in self.multiin_lines:
+ i.setDisabled(True)
+ elif len(self.data) == 1:
+ self.anglesel.setDisabled(False)
+ for i in self.multiin_labels:
+ i.setDisabled(True)
+ for i in self.multiin_lines:
+ i.setDisabled(True)
+ elif len(self.data) > 3:
+ self.anglesel.setDisabled(True)
+ for i in self.multiin_labels:
+ i.setDisabled(False)
+ for i in self.multiin_lines:
+ i.setDisabled(False)
+ self._send_ind_angles()
+
+ def _process_spectype(self):
+ self.commit.deferred()
+
+ def check_params(self):
+ self.Warning.nofeat.clear()
+ if self.feats is None or len(self.feats) == 0:
+ self.Warning.nofeat()
+ return
+ self.Warning.noxy.clear()
+ if self.map_x is None or self.map_y is None:
+ self.Warning.noxy()
+ return
+ self.Warning.pol.clear()
+ if len(self.polangles) == 0:
+ self.Warning.pol()
+ return
+ for i in self.polangles:
+ if isinstance(i, float) is False:
+ self.Warning.pol()
+ return
+ self.Warning.XYfeat.clear()
+ for i in self.feats:
+ if i in (self.map_x, self.map_y):
+ self.Warning.XYfeat()
+ return
+ self.Warning.wrongdata.clear()
+
+ @Inputs.data
+ def set_data(self, index: int, dataset: Table):
+ self._data_inputs[index] = dataset
+
+ @Inputs.data.insert
+ def insert_data(self, index, dataset):
+ self._data_inputs.insert(index, dataset)
+ self.n_inputs += 1
+ self.idx = index
+
+ @Inputs.data.remove
+ def remove_data(self, index):
+ self._data_inputs.pop(index)
+ self.n_inputs -= 1
+ self.polangles.clear()
+
+ @property
+ def more_data(self) -> Sequence[Table]:
+ return [t for t in self._data_inputs if t is not None]
+
+ def handleNewSignals(self):
+ self.cancel()
+ self.check_and_close_context()
+ self.data = None
+ self.Warning.clear()
+ self.Outputs.polar.send(None)
+ self.Outputs.model.send(None)
+ self.data = self.more_data
+
+ self.clear_angles(self.anglst, self.lines, self.labels, self.multifile)
+ self.clear_angles(self.multiin_anglst, self.multiin_lines,
+ self.multiin_labels, self.multiin)
+
+ names = [i.name for i in self.data]
+
+ tempangles = np.linspace(0, 180, len(self.data)+1)
+ for i in range(len(self.data)):
+ self.add_angles(self.multiin_anglst, names[i], self.multiin_labels,
+ self.multiin_lines, self.multiin, i, tempangles[i],
+ self._send_ind_angles)
+
+ self.input_select()
+
+ if len(self.data) == 0:
+ self.Outputs.polar.send(None)
+ self.Outputs.model.send(None)
+ self.contextAboutToBeOpened.emit([Table.from_domain(Domain(()))])
+ return
+
+ if len(self.data) == 1:
+ self.openContext(self.data[0])
+ self.angles = self.anglemetas[0] if self.anglemetas else None #Fixes self.angles being None if it was first a text variable and then changed to categorical, but I feel this could be done better...
+ self._change_angles()
+ elif 1 < len(self.data) < 4 or len(self.data) == 0:
+ self.Warning.notenough()
+ self.contextAboutToBeOpened.emit([Table.from_domain(Domain(()))])
+ return
+ else:
+ tables = self._dumb_tables(self)
+ domains = [table.domain for table in tables]
+ self._get_part = self._get_part
+ self.merge_type = 0
+ domain1 = self.merge_domains(self, domains)
+ domain1 = sort_domain(domain1)
+ self.merge_type = 1
+ domain2 = self.merge_domains(self, domains)
+
+ self.sorted_data = [table.transform(domain1) for table in tables]
+ self.openContext(Table.from_domain(domain2))
+
+ for i in range(len(self.feat_view.model())):
+ self.feat_view.model().setData(self.feat_view.model().index(i), 'Not used', role=Qt.UserRole)
+ self.restore_alphas()
+
+ self.commit.now()
+
+ @gui.deferred
+ def commit(self):
+ self.cancel()
+ self.check_params()
+ self.Information.meta_calc.clear()
+ if len(self.Warning.active) > 0:
+ return
+
+ if len(self.data) == 1:
+ if self.angles:
+ fncol = self.data[0][:, self.angles.name].metas.reshape(-1)
+ images = []
+ for fn in self.anglst:
+ images.append(self.data[0][self.angles.to_val(fn) == fncol])
+ sorted_data = images
+ else:
+ return
+ elif 1 < len(self.data) < 4:
+ self.Warning.notenough()
+ self.Outputs.polar.send(None)
+ self.Outputs.model.send(None)
+ return
+ else:
+ sorted_data = self.sorted_data
+
+ if self.spec_type != 0:
+ if self.spec_type == 1:
+ for i, j in enumerate(sorted_data):
+ sorted_data[i].X = 1-np.power(10, j.X*-1)
+ elif self.spec_type == 2:
+ for i, j in enumerate(sorted_data):
+ sorted_data[i].X = 1-j.X
+ if any(i not in sorted_data[0].domain.attributes for i in self.feats):
+ self.Information.meta_calc()
+
+ self.start(run, sorted_data, list(self.feats), self.alphas, self.map_x,
+ self.map_y, self.invert_angles, list(self.polangles),
+ self.average, self.angles)
+
+ def on_done(self, result: Results):
+ if result is None:
+ self.Outputs.polar.send(None)
+ self.Outputs.model.send(None)
+ return
+ if result.errorstate == 1:
+ self.Warning.wrongdata()
+ else:
+ if self.spec_type != 0:
+ if self.spec_type == 1:
+ result.out.X = -np.log10(1-result.out.X)
+ result.model.X = -np.log10(1-result.model.X)
+ elif self.spec_type == 2:
+ result.out.X = 1-result.out.X
+ result.model.X = 1-result.model.X
+ self.Outputs.polar.send(result.out)
+ self.Outputs.model.send(result.model)
+
+ def on_partial_result(self, result):
+ pass
+
+ def onDeleteWidget(self):
+ self.shutdown()
+ super().onDeleteWidget()
+
+ def check_and_close_context(self):
+ if hasattr(self, 'data'):
+ if len(self.data) == 1:
+ self.closeContext()
+ else:
+ self.angles = None
+ self.closeContext()
+
+
+if __name__ == "__main__": # pragma: no cover
+ from Orange.widgets.utils.widgetpreview import WidgetPreview
+ import orangecontrib.spectroscopy # so that can be loaded
+ WidgetPreview(OWPolar).run(insert_data=[(0, Orange.data.Table("polar/4-angle-ftir_multifile.tab"))])