Refactor energy calibration pipeline, introduce modern arguments blocks, and add universal logging
* Transitioned nappNorm, nappDetermineShift, and nappCopyShift to use modern MATLAB arguments blocks, removing their legacy functionSignatures.json entries.
* Refactored nappNorm to rely on prior peak fitting results (e.g., from nappFitGaussXps) for normalization rather than performing the fitting internally.
* Decoupled energy calibration: nappDetermineShift now solely calculates internal binding energy shifts, and nappCopyShift distributes them using a unified matching engine ('earlier', 'after', 'spectrumNumber').
* Implemented a Universal Logging Block to track data provenance, automatically appending execution timestamps and caller script names to processed rows.
* Updated nappCombineSpectra to output a logDataSource cell array and cleanly name combined spectra.
* Created nappSaveDataTable for automatic, script-named .mat file saving, complete with a Live Editor interceptor.
* Added a publish-mode silencer to nappFitGaussXps to prevent optimizer spam in generated PDFs.
* Updated readme.md to document the new arguments structure, the 3-step calibration workflow, the matching engine, and the new table variables.
This commit is contained in:
1 parent
b4cb748cfa
commit
091cf00e77
18 files changed
+822
-1106
No files matched your search
Binary file not shown.
@@ -3,6 +3,7 @@
|
||||
%[text] [https://gitea.psi.ch/5505/functionsMatlab/src/branch/main/beamtime](https://gitea.psi.ch/5505/functionsMatlab/src/branch/main/beamtime)
|
||||
%[text] and
|
||||
%[text] [https://gitea.psi.ch/5505/functionsMatlab/src/branch/main/beamtime/documentedExampleScripts](https://gitea.psi.ch/5505/functionsMatlab/src/branch/main/beamtime/documentedExampleScripts)
|
||||
%%
|
||||
%[text] ## Load Data
|
||||
%[text] Import raw beamtime data into the Matlab workspace for analysis. Data is organized in a single *matlab data table* where XPS intensities from region iterations are averaged and normalized to counts per second (CPS). This ensures comparison regardless of dwell time or region iteration settings.
|
||||
%[text] There are several options to import. The preferred way is to write a importData.m script to call the import function and to add notes to data. Once imported, data is saved to a FileList.mat file, which should be updated regularly to ensure the MATLAB works with the most recent data.
|
||||
@@ -16,6 +17,15 @@ FileList = outerjoinRowToTable(FileList,tmpData.FileList);
|
||||
clearvars tmp*
|
||||
|
||||
%%
|
||||
%[text] ## Align sample
|
||||
%[text] - Approach and take spectra too far away, too close, in working distance.
|
||||
%[text] - At least note dwell time and pass energy and area reading for a few distances
|
||||
%[text] - also note x,y,z \
|
||||
%[text] ## Reference spectra
|
||||
%[text] 1. sample prior to dosing.
|
||||
%[text] 2. sample prior to adding dosing carrier gas.
|
||||
%[text] 3. gas-phase with all settings used for sample.
|
||||
%[text] 4. cold and warm sample holder without sample (if contamination is an issue). \
|
||||
%[text] ## Survey: Characterize sample
|
||||
%[text] Survey spectra are used to characterize new samples and to monitor samples over time. They should show all expected elements and no unexpected ones, and are typically recorded at key times (before/after experiments, when dosing changes, at regular intervals).
|
||||
%[text] **If unexpected peaks appear**
|
||||
@@ -134,8 +144,8 @@ tmpDataSelection = month(FileList.lastModifiedDatenum) == 11 ...
|
||||
% List the selected files in the command window.
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'})) %[output:2f867eb6]
|
||||
% plot
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','image','mode','iterations','plotStep',2); %[output:30898c2d]
|
||||
legend
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','image','mode','iterations','plotStep',2); %[output:30898c2d] %[output:0b22a369]
|
||||
legend %[output:0b22a369]
|
||||
%%
|
||||
%[text] ### Plot shifting images
|
||||
%[text] The two O1s images MgO ice in Ar HONO, 21-Aug-2021 and MgO ice AA in N2, 25-Oct-2021 illustrate the difference between unusable and usable data.
|
||||
@@ -147,7 +157,7 @@ tmpDataSelection = matches(FileList.name,'0067067_O1s_1000eV.ibw');
|
||||
% List the selected files in the command window.
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'})) %[output:27ab5aa8]
|
||||
% plot
|
||||
nappPlot(FileList,tmpDataSelection);
|
||||
nappPlot(FileList,tmpDataSelection); %[output:3f52d2f2] %[output:2edd5c8e]
|
||||
%[text]
|
||||
%%
|
||||
%[text] #### Remove a single iteration from image
|
||||
@@ -158,11 +168,11 @@ tmpDataSelection = month(FileList.lastModifiedDatenum) == 10 ...
|
||||
% List the selected files in the command window.
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'})) %[output:9949b5fb]
|
||||
% plot
|
||||
nappPlot(FileList,tmpDataSelection);
|
||||
nappPlot(FileList,tmpDataSelection); %[output:0ab749aa]
|
||||
% remove iteration #9
|
||||
FileList(tmpDataSelection,:).image{:}(:,9)=[];
|
||||
% plot again
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','image');
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','image'); %[output:26c3d5db]
|
||||
%%
|
||||
%[text] ## Binding energy scale
|
||||
%[text] To compare spectra taken at different photon energies or to present your data, convert kinetic energy to binding energy using three steps:
|
||||
@@ -205,10 +215,10 @@ tmpDataSelection = matches(FileList.sample,'Ice with N2')...
|
||||
& (day(FileList.lastModifiedDatenum) >= 27);
|
||||
FileList = nappBindingEnergyXps(FileList,'tableSelection',tmpDataSelection);
|
||||
% plot C1s spectra
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond',...
|
||||
'mode','AllInOne','energyScale','kinetic');
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond',...
|
||||
'mode','AllInOne','energyScale','binding');
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond',... %[output:group:1b93bfe3] %[output:6c799ef9]
|
||||
'mode','AllInOne','energyScale','kinetic'); %[output:group:1b93bfe3] %[output:6c799ef9]
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond',... %[output:group:01cb9662] %[output:644d063f]
|
||||
'mode','AllInOne','energyScale','binding'); %[output:group:01cb9662] %[output:644d063f]
|
||||
%[text] ## Normalize spectra
|
||||
%[text] Normalization is done to get an estimate of surface concentration and to identify changes in intensity driven by chemical or physical processes from experimental variations, such as changes in working distance.
|
||||
%%
|
||||
@@ -239,10 +249,10 @@ tmpDataSelection = (month(FileList.lastModifiedDatenum) == 2) ...
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'})) %[output:1cf215b8]
|
||||
%%
|
||||
% fit
|
||||
FileList = nappFitGaussXps(FileList,tmpFitParameters,tmpDataSelection,... %[output:group:67ea982a] %[output:22c700e4] %[output:3b9a689c] %[output:712f3db2]
|
||||
'tableVariable','spectrum_countsPerSecond','energyScale','kinetic',... %[output:22c700e4] %[output:3b9a689c] %[output:712f3db2]
|
||||
'mode','unconstrained','backgroundMode','linear','showFigures','on'); %[output:group:67ea982a] %[output:22c700e4] %[output:3b9a689c] %[output:712f3db2]
|
||||
xlim([360, 366]);
|
||||
FileList = nappFitGaussXps(FileList,tmpFitParameters,tmpDataSelection,... %[output:group:67ea982a] %[output:22c700e4] %[output:3b9a689c] %[output:712f3db2] %[output:7541066b]
|
||||
'tableVariable','spectrum_countsPerSecond','energyScale','kinetic',... %[output:22c700e4] %[output:3b9a689c] %[output:712f3db2] %[output:7541066b]
|
||||
'mode','unconstrained','backgroundMode','linear','showFigures','on'); %[output:group:67ea982a] %[output:22c700e4] %[output:3b9a689c] %[output:712f3db2] %[output:7541066b]
|
||||
xlim([360, 366]); %[output:7541066b]
|
||||
%%
|
||||
|
||||
% filter
|
||||
@@ -251,25 +261,25 @@ tmpDataSelection = (month(FileList.lastModifiedDatenum) == 2) ...
|
||||
& (day(FileList.lastModifiedDatenum) >= 27) ...
|
||||
& matches(FileList.name,"0056056_O1s_900eV.ibw");
|
||||
% show data
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'})) %[output:8f9f23b4]
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'})) %[output:969d4f09]
|
||||
% fit
|
||||
FileList = nappFitGaussXps(FileList,tmpFitParameters,tmpDataSelection,... %[output:group:1a1bf894] %[output:969d4f09] %[output:608e038f] %[output:598292bc]
|
||||
'tableVariable','spectrum_countsPerSecond','energyScale','kinetic',... %[output:969d4f09] %[output:608e038f] %[output:598292bc]
|
||||
'mode','unconstrained','backgroundMode','linear','showFigures','on'); %[output:group:1a1bf894] %[output:969d4f09] %[output:608e038f] %[output:598292bc]
|
||||
xlim([360, 366]);
|
||||
FileList = nappFitGaussXps(FileList,tmpFitParameters,tmpDataSelection,... %[output:group:1a1bf894] %[output:880f99d8] %[output:608e038f] %[output:598292bc] %[output:342429e8]
|
||||
'tableVariable','spectrum_countsPerSecond','energyScale','kinetic',... %[output:880f99d8] %[output:608e038f] %[output:598292bc] %[output:342429e8]
|
||||
'mode','unconstrained','backgroundMode','linear','showFigures','on'); %[output:group:1a1bf894] %[output:880f99d8] %[output:608e038f] %[output:598292bc] %[output:342429e8]
|
||||
xlim([360, 366]); %[output:342429e8]
|
||||
% select
|
||||
tmpDataSelection = (month(FileList.lastModifiedDatenum) == 2) ...
|
||||
& (year(FileList.lastModifiedDatenum) == 2022) ...
|
||||
& (day(FileList.lastModifiedDatenum) >= 27) ...
|
||||
& matches(FileList.name,"0060060_O1s_900eV.ibw");
|
||||
% List the selected files in the command window.
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'})) %[output:0ab41352]
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','scientaPassEnergy_eV'})) %[output:326c5622]
|
||||
%%
|
||||
% fit
|
||||
FileList = nappFitGaussXps(FileList,tmpFitParameters,tmpDataSelection,... %[output:group:9c54ed73] %[output:326c5622] %[output:5bd5684a] %[output:42116ac3]
|
||||
'tableVariable','spectrum_countsPerSecond','energyScale','kinetic',... %[output:326c5622] %[output:5bd5684a] %[output:42116ac3]
|
||||
'mode','unconstrained','backgroundMode','linear','showFigures','on'); %[output:group:9c54ed73] %[output:326c5622] %[output:5bd5684a] %[output:42116ac3]
|
||||
xlim([360, 366]);
|
||||
FileList = nappFitGaussXps(FileList,tmpFitParameters,tmpDataSelection,... %[output:group:9c54ed73] %[output:7f2dd5ee] %[output:5bd5684a] %[output:42116ac3] %[output:31491535]
|
||||
'tableVariable','spectrum_countsPerSecond','energyScale','kinetic',... %[output:7f2dd5ee] %[output:5bd5684a] %[output:42116ac3] %[output:31491535]
|
||||
'mode','unconstrained','backgroundMode','linear','showFigures','on'); %[output:group:9c54ed73] %[output:7f2dd5ee] %[output:5bd5684a] %[output:42116ac3] %[output:31491535]
|
||||
xlim([360, 366]); %[output:31491535]
|
||||
%%
|
||||
%[text] ### Norm the spectra
|
||||
%[text] The example table lists the three C1s spectra ( 0035035\_C1s\_900eV.ibw , 0056056\_C1s\_900eV.ibw , 0060060\_C1s\_900eV.ibw ) and their plots. After scaling, you can compare the C1s spectra directly, since the intensities now reflect a concentration (carbon relative to ice).
|
||||
@@ -282,14 +292,14 @@ tmpDataSelection = matches(FileList.sample,'Ice with N2')...
|
||||
& (year(FileList.lastModifiedDatenum) == 2022) ...
|
||||
& (day(FileList.lastModifiedDatenum) >= 27);
|
||||
% show data
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','sample'})) %[output:0e8d0cec]
|
||||
disp(FileList(tmpDataSelection,{'name','sampleTemp_dC','cellPressure_mbar'})) %[output:65618880]
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','sample'})) %[output:65618880]
|
||||
disp(FileList(tmpDataSelection,{'name','sampleTemp_dC','cellPressure_mbar'})) %[output:9c77f960]
|
||||
% scale
|
||||
FileList = nappScale(FileList,tmpDataSelection,'regionOld','C1s','regionNew','O1s'); % C1s with O1s area
|
||||
% plot scaled data
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsNorm');
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsNorm'); %[output:43e6e41e]
|
||||
% plot original data
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond');
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond'); %[output:8d96736e]
|
||||
|
||||
% filter the data O1s
|
||||
tmpDataSelection = matches(FileList.sample,'Ice with N2')...
|
||||
@@ -300,15 +310,15 @@ tmpDataSelection = matches(FileList.sample,'Ice with N2')...
|
||||
& (year(FileList.lastModifiedDatenum) == 2022) ...
|
||||
& (day(FileList.lastModifiedDatenum) >= 27);
|
||||
% show data
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','sample'})) %[output:9c77f960]
|
||||
disp(FileList(tmpDataSelection,{'name','sampleTemp_dC','cellPressure_mbar'})) %[output:506ce9c9]
|
||||
disp(FileList(tmpDataSelection,{'name','lastModifiedDatestr','sample'})) %[output:506ce9c9]
|
||||
disp(FileList(tmpDataSelection,{'name','sampleTemp_dC','cellPressure_mbar'})) %[output:5432d349]
|
||||
% scale
|
||||
FileList = nappScale(FileList,tmpDataSelection,'regionOld','O1s','regionNew','O1s'); % O1s with O1s area
|
||||
|
||||
% plot scaled data
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsNorm');
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsNorm'); %[output:15414432]
|
||||
% plot original data
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond');
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond'); %[output:93ebe7fc]
|
||||
%%
|
||||
%[text] ## Calculate surface coverage
|
||||
%[text] Ensure that the dosing yields a surface coverage that is low enough to address your science question, but high enough to provide spectra with sufficient intensity for reliable fitting and interpretation (remember, you can always measure longer to improve signal‑to‑noise).
|
||||
@@ -327,86 +337,128 @@ nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond');
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>sample<\/strong> \n <strong>____________________________<\/strong> <strong>________________________<\/strong> <strong>________________________________<\/strong>\n\n {'0128128_Survey_850eV.ibw'} {'28-Nov-2025 14:08:31'} {'this is a sample description'}\n\n","truncated":false}}
|
||||
%---
|
||||
%[output:04fdda4a]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABPwAAAMeCAYAAACJFhrxAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQXUJMXZtmvx\/XFZbNmFEFicwALBITgkuLtDIAkuGwi+i2uwLMGdQHB31wSCbAghuPsuHgiB\/9z9fTVfdb01Mz3zTk\/XdF91zh4OM9Ul11Mz7\/Tdjwz44YcffjA0CEAAAhCAAAQgAAEIQAACEIAABCAAAQhAoBQEBiD4lcKObAICEIAABCAAAQhAAAIQgAAEIAABCEAAAgkBBD8OAgQgAAEIQAACEIAABCAAAQhAAAIQgAAESkQAwa9ExmQrEIAABCAAAQhAAAIQgAAEIAABCEAAAhBA8OMMQAACEIAABCAAAQhAAAIQgAAEIAABCECgRAQQ\/EpkTLYCAQhAAAIQgED8BL777jvz3\/\/+10w88cTxL5YVQgACEIAABCAAAQj0JAEEv540G4uGAAQgAIFeIfD999+b119\/3fznP\/8xs88+u5lgggnaWvqHH35Yu27gwIFmsskmyzyOBCatYYoppjCDBg3KfJ3tqLW\/\/fbb5ocffjCzzDKLmXDCCdsaY9y4cbXrppxySjPRRBNlHieGPWRerNfxk08+MRdeeKF5\/vnnzSuvvGJeffXVpMe0005r5plnHjP\/\/PObbbfd1kw\/\/fTtTsF1XSTw5ZdfmnfeeSf5DM4wwwxmvPHG6+Ls\/zPVe++9Zz766CPzox\/9yEw66aS5za+z+uCDD6bGHzZsmFliiSUazvnII4+Yl156KdVnueWWM7PNNlvwOn1GRo8enXpvs802S\/an9vnnn5tbbrml9r6Y\/\/znP89177lBZWAIQAACEIBAlwgg+HUJNNNAAAIQgEC1CFx66aXmjjvuME899ZSRQGDbYostZpZZZhmz6667Zhb\/dGP\/05\/+tDaGbrYvu+yyhkA\/+OADc\/HFF5u\/\/OUv5oknnqj1lTgw77zzml122cWssMIKdcf49ttvzSWXXGK0DytQ2c4S\/bbZZhuz1VZbZRbtxEJz2rb33nub3\/zmNz21h1ZPsITSCy64wJx66qmpM1BvnJ133tnsscceRoIuLS4CEqR+\/\/vfJ6LTxx9\/nFrcggsumJzllVdeObhoiV+jRo3KvKHtt9\/ebLjhhn36axx97h9\/\/PHUGuaee24zfPhws+eee5rpppsu8zxZOj700ENm6623TnXV98dNN93U8PKVVlqpz\/eGhMPBgwcHr\/vHP\/5hfvGLX6Teu+KKK2rfe\/oO0phuu\/rqq83CCy+cZRv0gQAEIAABCFSSAIJfJc3OpiEAAQhAIC8C8oI7\/vjj+3ir+PPJO+Wkk07KJJidcsopiWhkWzPBT96Am266aZ8bbn8NEii0Vnnbue3dd981W265ZdPr5X0jUXHmmWduinOjjTYyTz75ZK3fXnvtZXbbbbe618W4h6ab9Doce+yx5qyzzmrpMp0L2boIr7GWFlqhzhK9JNC7wn1o+\/o8nXnmmX2EfHl3Hn744ZmJHXDAAWannXZK9b\/rrruMBOFGTZ9HCfQzzjhj5rmadZRnrUQ1f+8SH+vN89Zbbxl587ltkUUWMVdddVXd6RD8mlmC9yEAAQhAAAKtE0Dwa50ZV0AAAhCAAATqEvDFuUaoJO6cfvrpdbt88803yQ287x3USPAbO3as2WKLLcwLL7yQyUrrrrtuIjzapht8XS\/PwCxNnofyBKwXqizhTkwuv\/zy1HCNBL\/Y9pCFg9\/n3nvvNTvssEM7lyZefvpHK56AxO9VV121qdhnV7r77rsnnnZuO\/LII825556beTO+4CfPOHnUZmnyvpX3ncL3O9UOO+wwc9FFF6WGO\/HEE816660XnEKeeQceeGDqPY3hewq6HRD8OmUtxoEABCAAAQj8HwEEP04DBCAAAQhAoEMEvv76azPffPP1GW2ttdZKwjRvvvnmPsLB3XffXctTpQvlTfT0008n+bkUBqtcXX5rJPgp7FD\/3KYw3qWWWspIzJMQ5TflzpKooVZPqNIexh9\/fHPdddf1uf6Pf\/xjKpxRnjzKcfbmm2+aa665Jki3keAXwx76eyQU4unmHNN4ykmmMGp5O8kWyuknVn4\/9X3xxRczh3z3d61cX59AyEtTuRcVfqp8jPq8+k2erFNPPXXtZXnmyUMvazv66KPNJptsUuuu\/I4PPPBA6nKlBZhjjjmSceVR57YTTjjBrL\/++lmna9rvscceM5tvvnmqn\/Z\/2mmnBa8N7beRR6AGUQoC96GAPFzlZWw5EtLb1Ex0gAAEIAABCPQhgODHoYAABCAAAQh0iMBtt91mfvWrX6VGc8W0MWPGmLXXXjv1\/r777pu6Rp4x8pBp1BoJfgqlcwWAH\/\/4x+bKK6+s3TiHBD3Xy++4447rE47s5t5S8Y5ll102tTzfq0niYkiodC9qJPjFsIf+HAlV4F1ooYVS4q7EPnl6+U1FXXQGfCFV4rAKenSrffHFF+a1114z8shceumlM4Wat7o2cXnjjTeSUPHJJ5882V8rxWdana8T\/fXZePbZZ2tDKWz29ttvr4mxN954Yx9vTHnDSZCzbZVVVjEvv\/xy8r8SC7N6z6q\/7LH44ountrLddtuZgw8+OHlNdpNY737eNLfvkecO0KodJE4vueSSqbyBeojwt7\/9rY8oHXroIS\/gZt9pzWzVTPBTUQ8J6EovIC\/HAQMGNBuS9yEAAQhAAAKlJ4DgV3oTs0EIQAACEOgWAYl9Ev1sUzJ\/X8hRqKZEAtskIMjLz7b+CH6fffZZIjS5zfe+03shQe3OO+9MLpP45HrlhcRFefvI68c2Pyy4P4JfLHvoz5kJiTRHHXVUklcx1CQAuR5d6uN6edmwUvdajSevS7eF+imHoOyhJs9RFVqxTd5T999\/vzn77LPNMcccU3tdxRD88EsJPjpLflMBiR133DH1snIzuvnm5K06cuTI1Lm3F0iQVjGGX\/\/614kIaJs8JLU2t8kTcsiQIX3WoPyQbgi7qh27n6n+2FJFdtwiHb5QHRK4XNspp6f2aJvEcuX0y9ok3Ckc1m3PPPNMilUohDbkUdeOHey8RxxxRFKAxm3yTpW3qttCRT4anX17rbwl11lnndRYms+OX0\/wUyVgFTIRE9skRkpkFTc3tFnfU1Z4VV\/Zxf1+tvkK3UXIk9H9bEhg1WfBbfLA3GeffbKalH4QgAAEIACBrhFA8OsaaiaCAAQgAIGyE\/DFAeXdOvTQQ1PbVi4v39NLHkTW00k3748++mjqGt28u6JDPQ+\/f\/7zn2aNNdZIXRuqjBnKyaUbYXnFSNRxb3B9QVKDux5L+v\/99tsvKWpgmwoUqKqp21yRU6\/X8\/CLZQ\/9OasSDoYNG5YaQpVNJd5MM800fYZW\/9dffz31ujyVbLXekFdlKGxTNpRt3CZxyXpk+rngJIxIrPNDwCXiSXzxvTTdc2rnCHmESjy2Ipc8SuUB2qzghTzfJDQOHTo0GTr0OZFoqPySbmvmAdcfO+paP5xWgqlbgEOhqPo8us0Vwvz1ibef367RGn0BPvR5lNjl59M7\/\/zzzfLLL18bul072AFConQoX6HEvXPOOSe1JZ2nQYMGNTRFOzn89ODCD3V2J5GnnzjYs+izVF+J4FYUDK1BY7hzaC\/y1nWbzmqjiuf9PYNcDwEIQAACEGiXAIJfu+S4DgIQgAAEIOAQUGimcmq5LeTZEkrAL0+mkOeSHUvCoa6zrZ7gp2IXKvIhryLbfvnLX\/YJz\/RFDDfMMJSvSx5L8o5Rk3C3\/\/77p\/bphzCGDsbss8+eerme4BfzHlo58H5VYnutcqtJiJHnUpbqxrouL8Gv3n6eeOKJpBCLWxlafUPChi\/+SthU0Yh6627EUGKWrpXQGdqzRBW\/+MUNN9zQp0iGhENVlu1EU566k08+uTaURNLzzjvPLLroombcuHGJWOqHz7rC6HPPPZfyXFMhl6+++sr8\/e9\/T7zN5I0oZiuuuGLSz6\/O7H9W5dXpC7TyOpM3sdtcQTjEMqsdbD+FAet7x33wMPfcc\/fJP+l7D2f1aGxH8MtiXzcEOxR+rXNuPWDl2SxR0G9\/\/etfa0K9\/0BEfWVjnQsaBCAAAQhAIDYCCH6xWYT1QAACEIBATxL49NNP+4gMZ5xxRh+PO+W92mCDDVJ71I2mH4rrdsgq+GUBF5pfN+k2XE9ioebzixHYG1rfU0sChCp21qvSa9eUVfCLeQ9Z1mb7+EJR6NoZZ5wxCa9WjjPlaRs8eHBwiiIEPwmvq622Wmo9Ep8OOeSQ2muhdbnVWEOFSyTaKYRXIpVCiV0BSQNLzLKhygqBlvjoNt\/LcO+9906FZYrpww8\/3LEcbuIgG\/nnXiK5v3atU6GvKjZh26233pqEK2dpEoHlMSmRyjZV8nbDlX0Pw3qfr9\/+9re1sOr+2sHOEao27IYOh8JutZ8NN9yw6fb7I\/jJFhI8dVZCnqSqQq4HFiFvUNc7WR6k8gj0m+sl67MMidBNN0sHCEAAAhCAQJcIIPh1CTTTQAACEIBAuQkoB9XKK6+c2mTIIyp0Y6sQOHn41GudEvxUNVchkX5Vz1NOOSVVTEQJ8BW2piT4jZqEKuXP8r2SQtd0SvArcg+tnGCF6cqby\/XMbHa9hK5ddtmlT7GOvAU\/eWopZ59spDx6c845ZyLgrrnmmqkz4Ic3hnLH2fDN0DmXeCUh1BZUUNi3POXc5orPf\/rTn8wBBxyQet\/NSRkqjqL8gfIe7WQLhUqHxld+Tv1zWyg0udHaJPYpV+HEE0+cdPPTBMhjd8SIEX2GWGCBBVJil+3XCTvYyVR9WJ6rbpPYb8OJ5S3nCsLine truncated
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQW0XEXWtguCfgNBEyQQLAQI7jDY4O7BXQfXQQdPcBIYNAxOcAZ3h+DMwCDBnaAJEJyBQf71nu+r\/qvrnu4+3Xf3vZ3qZ6+VNUN3nX1qP7u6773v2bVrvN9\/\/\/13h0EAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMA4S2A8hN5xNndMHAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBARgChl4UAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGAcJ4DQO44nkOlDAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEEDoZQ1AAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEBjHCSD0juMJZPoQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABBB6WQMQgAAEIAABCEAAAl1O4JdffnG\/\/vqrm3jiibv83twQAhCAAAQgAAEIQAACKRJA6E0xq8QEAQhAAAIQaDECv\/32m3v\/\/ffdf\/\/7Xzf77LO7CSaYoKEZjhkzpnTdpJNO6iabbLLCfiQsag49e\/Z0vXr1KnydH6i5f\/TRR+733393M800k5twwgkb8vHVV1+VrptiiincRBNNVNhPK8RQeLLRwC+\/\/NJddtll7pVXXnHvvPOOe\/fdd7MR00wzjZtnnnncfPPN57bffnvXu3fvRm\/BdV1I4Pvvv3cff\/xx9hmcbrrp3Pjjj9+Fd\/\/fW3366afu888\/d7PNNpv7wx\/+0LT7a60++uijZf779+\/vllpqqar3fOKJJ9xbb71VNmb55Zd3s846a+51+owMGzas7L0tttgii0\/27bffujvvvLP0vpivtdZaTY29aVBxDAEIQAACEIBAUwgg9DYFK04hAAEIQAACEBCBK6+80t17773uueeecxKGvC2++OJu2WWXdbvvvnth0VeCzhJLLFHyIZHlqquuqgp69OjRbvjw4e6f\/\/yne+aZZ0pjJQoNGDDA7bbbbm7FFVes6OPnn392V1xxRRaHFyb9YIm92223ndtmm20Ki7VioXt6O+CAA9xee+01TsVQ78qWQH7ppZe6M888s2wNVPKz6667un333ddJyMdai4CEyL\/97W+Z2PjFF1+UTW6BBRbI1vIqq6ySO2mJnoMHDy4c0I477ugGDhzYYbz86HP\/9NNPl81h7rnndosssojbb7\/93LTTTlv4PkUGPvbYY27bbbctG6rvj9tvv73q5SuvvHKH7w0Jxn369Mm97tVXX3Vrr7122XvXXHNN6XtP30HyGdoNN9zgFl544SJhMAYCEIAABCAAgTYggNDbBkkmRAhAAAIQgEBXE1DV66mnntqhOi2eh6rRhg4dWkgoPeOMMzKx0FstoVfVv5tvvnkHoSWeg4QpzVXVtaF98sknbuutt655vartJCbPOOOMNTFvsskm7tlnny2N23\/\/\/d3ee+9d8bpWjKFmkNGAk08+2Z1\/\/vl1XaZ1oVx3R5VoXRNto8ESO\/VgJnxgkxe+Pk\/nnntuhwc4quY+9thjCxM77LDD3C677FI2\/v7773d6EFDN9HnUg5npp5++8L1qDVQlvcTUOHaJzpXu8+GHHzpV74a26KKLuuuvv77i7RB6a2WC9yEAAQhAAAIQqEUAobcWId6HAAQgAAEIQKBuArEoW82BRL2zzz674pCffvopE27iasBqQu\/YsWPdVltt5V577bVCc99ggw0ywdmbhB1dr0rgIqZKY1X+VmpJIcFWTK6++uoyd9WE3laLoQiHeMxDDz3kdtppp0Yuzap69Q\/rfgJ66LHaaqvVFHn9TPfZZ5+ssja0448\/3l100UWFg4mFXlXCqoK+iKnaXtW2atNiZcccc4y7\/PLLy9wNGTLEbbjhhrm3UCXu4YcfXvaefMSVweEAhF6rbOEHAhCAAAQg0L4EEHrbN\/dEDgEIQAACEGgKgR9\/\/NHNO++8HXyvu+662Xb8O+64o4Ng9MADD5T6UOpCVQ8+\/\/zzWf9NtTtQL87Yqgm92l6uf6GpXcMf\/\/hHJxFXAmRs6o0pMUtWSaBUDD169HA333xzh+v\/\/ve\/l21bV+WeepiOGjXK3Xjjjbmsqwm9rRBDZxeItvKHPUXlTz1H1S5D1Y3KhXr2ilU8TmPfeOONwq09OjtXrq9MIK8qW72V1WZA\/Zb1eY1NletTTTVV6WVV4qoit6ideOKJbrPNNisNV\/\/mESNGlF2u9i\/9+vXL\/KqCNrTTTjvNbbTRRkVvV3PcU0895bbccsuycYr\/rLPOyr02L95qFcByolYz4cMgVbRrV4HnSOuGmmliAAQgAAEIQKDtCSD0tv0SAAAEIAABCEDAlsDdd9\/t9thjjzKnoYg6cuRIt95665W9\/5e\/\/KXsGlXCqSKumlUTerVlOhR+5phjDnfdddeVBJM8ITes6j3llFM6tJ0Ie2vqULbllluubHpxFaNE5TyBOryomtDbCjF0ZmX8+uuvbqGFFioT9SXyqrIzNh3WpzUQC+h6KKCD2rrKvvvuO\/fee+85VWAvs8wyhVqK1Ds3cfnggw+yliCTTz55Fl89hwrWez+L8fpsvPjiiyVXao9wzz33lET42267rUP1tapfJcR6W3XVVd3bb7+d\/adE4qLV8hqvfCy55JJloeywww7uyCOPzF5T3vSQJvy86d5xBW7ooN486KHE0ksvXdYXWA+P\/v3vf3d4GJH3sEtV\/7W+02rlqpbQq8Pa9OBEbWRU1TzeeOPVcsn7EIAABCAAAQgkRgChN7GEEg4EIAABCECguwlI5JXY602HNMUCnrbkSxzyJuFIVb3eOiP0fvPNN5nAGFpcbav38oTU++67L7tMomNYhZsnKqu6T1V+3uL2D50Relslhs6spTxx7oQTTsj6JueZhL+wglNjwqpO3z4gvFb+VGUdWt449QhWPmSqFNcBet5ULfnII4+4Cy64wJ100kml13XIVbzNXkKf1lJsOhhs5513LntZvZfDfrKqTh80aFDZuvcX6EGEDtnac889M\/HXmyqiNbfQVPk888wzd5iD+j+HrUp69+5d9pnqTC51eGJ4+Fr8gCJP2Axzp57ditGbHpKoZ29Rk2CrtgehvfDCC2Ws8lol5FXQNpIHf9\/jjjsuO1gwNFWjqzo9tLzD26qtfX+tqqPXX3\/9Ml+6n\/dfSeh96623sgPqxMSbRGiJ6+IWtrDQ95QX3DVWeQm\/n30\/4nASqlwOPxsS1vVZCE0V1wceeGDRlDIOAhCAAAQgAIEmEUDobRJY3EIAAhCAAATalUAsCqmv5tFHH12GQ70648pOVQz6ykaJNk8++WTZNRJtQrGpUkXv66+\/7tZcc82ya\/NOus\/ruSkBRFVwEvNCYSMWouU8rFDUfx900EHZYVXedPDUl19+WTaPUNzWG5Uqelslhs6sYQlG\/fv3L3MxYMCArMpy6qmn7uBa499\/\/\/2y11WZqHYfsrwq6rzt+cqhchOaREVfgR33epUgJpE2bvUh8VaiW1yVHa5Tf4+8CnA9NPDipirIVfFd6yAzVbpKYO7bt2\/mOu9zIrFY\/aNDq1Xx2pk86tq4bYKE8vBgNbUc0OcxtFAAjecn3nH\/2mpzjB+85H0eJXLG\/XIvueQSt8IKK5RcN5oH7yDvYUReP2KJuhdeeGFZSFpPvXr1qpqKRnr06oFV3NIivIkqe8XBr8WYpcbq4YcXg\/PmIB\/hPRSLqvND01pVSxYMAhCAAAQgAIHuJYDQ2738uTsEIAABCEAgKQLagq+emaHlVbLlHaykysW8SkXvS4KxrvNWSejVIWY6vE1VhN7+\/Oc\/d9iGH4tX4XbyvH6cqlBUNZxMgu3BBx9cFme8VT0vsbPPPnvZy5WE3laOoZ4FqypT9WqNTb1TJcCpUlFibhFrltBb6d7PPPNMdsDemWeeWTYkT9CKRX8J2joMTJY372rxSsTUtRK4866VmBYfanbrrbd2OPxMgvHCCy9cBG3NMepDe\/rpp5fGSRy\/+OKL3WKLLea++uqrTCSP2ySEgvhLL71UVqmqA\/p++OEH9\/LLL2fVpao+FrOVVlopG6fetKHFn1VVccfCvKpMtXsgtPBBQGfy4H2q3YO+d8IHTnPPPXeH\/tLxboGiFcyNCL01k+dc1v\/ct9rIa7Ohde4r3rWTQWJwbP\/6179KD2jiB2EaqxxrXWAQgAAEIAABCHQvAYTe7uXP3SEAAQhAAAJJEfj66687iEvnnHNOhwpb9bXceOONy2KXwBC3XAgHFBV6iwDNu7\/EGb8tWyKx7hcfMuWFjLgyU8LTkCFDah4cVlTobeUYiszNj4kFwrxrp59++qyNhnqYqg9rnz59cm\/RHUKvBPfVV1+9bD4SHY866qjSa3nzUrW4b\/uQdyCdxFq1apA4qZYRoXAoxxIxfUsKtbqQ6BxaXFV8wAEHlG2\/F9PHH3\/crEerOChH8brXw5F47pqnWhzoEDFvd911V9aWoohJ\/FeFtMRJb2uttVZZW4q4otiPiz9fhx56aKl9Rmfz4O+hnQix0B62iMhrr6B4Bg4cWDP8zgi9yoWEbq2VvMrxoUOHZg+q8qq\/w90IqhhXBXBsYVV8zDLv4UPNYBkAAQhAAAIQgEBTCCD0NgUrTiEAAQhAAALtSUA9JldZZZWy4PMqIPMEDW11VkVfJbMSekeNGpVtfQ8Pa9M9zzjjjLJD4nSwkbYn63CjaiaBUv0x4yrEvGushN7ujKGela12DKreDCuxa10vgXO33XbrcAhbs4VeVWZKnFWO1Cd3zjnnzIT7ddZZp2wNxNvY83rD+Line truncated
|
||||
%---
|
||||
%[output:8d5664cd]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABPwAAAMeCAYAAACJFhrxAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQXUJMXZtmvx\/XFZfIEgu3hggeAQCB4guLsFSHDZQFhsF4JDsCxBgweCu7smEGRDgOAQCLqLB\/\/P3d9X81XXWzPTM+\/0dE33Vefs4TBTXXI9NfNO3\/3IgB9++OEHQ4MABCAAAQhAAAIQgAAEIAABCEAAAhCAAARKQWAAgl8p7MgmIAABCEAAAhCAAAQgAAEIQAACEIAABCCQEEDw4yBAAAIQgAAEIAABCEAAAhCAAAQgAAEIQKBEBBD8SmRMtgIBCEAAAhCAAAQgAAEIQAACEIAABCAAAQQ\/zgAEIAABCEAAAhCAAAQgAAEIQAACEIAABEpEAMGvRMZkKxCAAAQgAAEIxE\/g22+\/Nd99952ZeOKJ418sK4QABCAAAQhAAAIQ6EkCCH49aTYWDQEIQAACvULg+++\/N6+\/\/rr55ptvzJxzzmkmmGCCtpb+\/vvv164bOHCgmWyyyTKPI4FJa5hiiinMoEGDMl9nO2rt\/\/73v80PP\/xgZp11VjPhhBO2Nca4ceNq10055ZRmookmyjxODHvIvFiv40cffWT+9Kc\/meeee8688sor5tVXX016TDvttGa++eYzCy64oNluu+3M9NNP3+4UXNdFAp9\/\/rl5++23k8\/gDDPMYMYbb7wuzv4\/U\/3nP\/8xH3zwgfnRj35kJp100tzm11l94IEHUuMPGTLELLXUUg3nfPjhh81LL72U6rPCCiuYOeaYI3idPiOjR49Ovbf55psn+1P79NNPzc0331x7X8zXWmutXPeeG1QGhgAEIAABCHSJAIJfl0AzDQQgAAEIVIvAJZdcYm6\/\/Xbz5JNPGgkEti2xxBJmueWWM7vttltm8U839j\/5yU9qY+hm+9JLL20I9L333jMXXXSR+etf\/2oef\/zxWl+JA\/PPP7\/ZddddzUorrVR3jK+\/\/tpcfPHFRvuwApXtLNFv2223NVtvvXVm0U4sNKdt++67r\/n1r3\/dU3to9QRLKL3gggvMqaeemjoD9cbZZZddzF577WUk6NLiIiBB6ve\/\/30iOn344YepxS288MLJWV5llVWCi5b4NWrUqMwb2mGHHcxGG23Up7\/G0ef+scceS61h3nnnNcOGDTN77723mW666TLPk6Xjgw8+aLbZZptUV31\/3HjjjQ0v\/9nPftbne0PC4SyzzBK87p\/\/\/Kf5+c9\/nnrv8ssvr33v6TtIY7rtqquuMosuumiWbdAHAhCAAAQgUEkCCH6VNDubhgAEIACBvAjIC+7444\/v463izyfvlJNOOimTYHbKKackopFtzQQ\/eQNuttlmfW64\/TVIoNBa5W3ntnfeecdstdVWTa+X941ExZlnnrkpzo033tg88cQTtX777LOP2WOPPepeF+Memm7S63Dssceas846q6XLdC5k6yK8xlpaaIU6S\/SSQO8K96Ht6\/N05pln9hHy5d15xBFHZCZ20EEHmZ133jnV\/8477zQShBs1fR4l0M8444yZ52rWUZ61EtX8vUt8rDfPW2+9ZeTN57bFFlvMXHnllXWnQ\/BrZgnehwAEIAABCLROAMGvdWZcAQEIQAACEKhLwBfnGqGSuHP66afX7fLVV18lN\/C+d1AjwW\/s2LFmyy23NM8\/\/3wmK6233nqJ8GibbvB1vTwDszR5HsoTsF6osoQ7MbnssstSwzUS\/GLbQxYOfp977rnH7Ljjju1cmnj56R+teAISv1dbbbWmYp9d6Z577pl42rntqKOOMueee27mzfiCnzzj5FGbpcn7Vt53Ct\/vVDv88MPNhRdemBruxBNPNOuvv35wCnnmHXzwwan3NIbvKeh2QPDrlLUYBwIQgAAEIPB\/BBD8OA0QgAAEIACBDhH48ssvzQILLNBntHXWWScJ07zpppv6CAd33XVXLU+VLpQ30VNPPZXk51IYrHJ1+a2R4KewQ\/1zm8J4l1lmGSMxT0KU35Q7S6KGWj2hSnsYf\/zxzbXXXtvn+j\/+8Y+pcEZ58ijH2ZtvvmmuvvrqIN1Ggl8Me+jvkVCIp5tzTOMpJ5nCqOXtJFsop59Y+f3U98UXX8wc8t3ftXJ9fQIhL03lXlT4qfIx6vPqN3myTj311LWX5ZknD72s7Xe\/+53ZdNNNa92V3\/H+++9PXa60AHPPPXcyrjzq3HbCCSeYDTbYIOt0Tfs9+uijZosttkj10\/5PO+204LWh\/TbyCNQgSkHgPhSQh6u8jC1HQnqbmokOEIAABCAAgT4EEPw4FBCAAAQgAIEOEbj11lvN7rvvnhrNFdPGjBlj1l133dT7+++\/f+oaecbIQ6ZRayT4KZTOFQDmmmsuc8UVV9RunEOCnuvld9xxx\/UJR3Zzb6l4x\/LLL59anu\/VJHExJFS6FzUS\/GLYQ3+OhCrwLrLIIilxV2KfPL38pqIuOgO+kCpxWAU9utU+++wz89prrxl5ZC677LKZQs1bXZu4vPHGG0mo+OSTT57sr5XiM63O14n++mw888wztaEUNnvbbbfVxNgbbrihjzemvOEkyNm26qqrmpdffjn5X4mFWb1n1V\/2WHLJJVNb2X777c2IESOS12Q3ifXu501z+x557gCt2kHi9NJLL53KG6iHCH\/\/+9\/7iNKhhx7yAm72ndbMVs0EPxX1kICu9ALychwwYECzIXkfAhCAAAQgUHoCCH6lNzEbhAAEIACBbhGQ2CfRzzYl8\/eFHIVqSiSwTQKCvPxs64\/g98knnyRCk9t87zu9FxLU7rjjjuQyiU+uV15IXJS3j7x+bPPDgvsj+MWyh\/6cmZBIc\/TRRyd5FUNNApDr0aU+rpeXDSt1r9V48rp0W6ifcgjKHmryHFWhFdvkPXXfffeZs88+2xxzzDG111UMwQ+\/lOCjs+Q3FZDYaaedUi8rN6Obb07eqiNHjkyde3uBBGkVY\/jVr36ViIC2yUNSa3ObPCEHDx7cZw3KD+mGsKvasfuZ6o8tVWTHLdLhC9Uhgcu1nXJ6ao+2SSxXTr+sTcKdwmHd9vTTT6dYhUJoQx517djBznvkkUcmBWjcJu9Ueau6LVTko9HZt9fKW\/IXv\/hFaizNZ8evJ\/ipErAKmYiJbRIjJbKKmxvarO8pK7yqr+zifj\/bfIXuIuTJ6H42JLDqs+A2eWDut99+WU1KPwhAAAIQgEDXCCD4dQ01E0EAAhCAQNkJ+OKA8m4ddthhqW0rl5fv6SUPIuvppJv3Rx55JHWNbt5d0aGeh98LL7xg1lxzzdS1ocqYoZxcuhGWV4xEHfcG1xckNbjrsaT\/P+CAA5KiBrapQIGqmrrNFTn1ej0Pv1j20J+zKuFgyJAhqSFU2VTizTTTTNNnaPV\/\/fXXU6\/LU8lW6w15VYbCNmVD2cZtEpesR6afC07CiMQ6PwRcIp7EF99L0z2ndo6QR6jEYytyyaNUHqDNCl7I801C42yzzZYMHfqcSDRUfkm3NfOA648dda0fTivB1C3AoVBUfR7d5gph\/vrE289v12iNvgAf+jxK7PLz6Z1\/\/vlmxRVXrA3drh3sACFROpSvUOLeOeeck9qSztOgQYMamqKdHH56cOGHOruTyNNPHOxZ9Fmqr0RwKwqG1qAx3Dm0F3nruk1ntVHF8\/6eQa6HAAQgAAEItEsAwa9dclwHAQhAAAIQcAgoNFM5tdwW8mwJJeCXJ1PIc8mOJeFQ19lWT\/BTsQsV+ZBXkW2\/\/OUv+4Rn+iKGG2YYytcljyV5x6hJuDvwwANT+\/RDGEMHY84550y9XE\/wi3kPrRx4vyqxvVa51STEyHMpS3VjXZeX4FdvP48\/\/nhSiMWtDK2+IWHDF38lbKpoRL11N2IoMUvXSugM7Vmiil\/84vrrr+9TJEPCoSrLdqIpT93JJ59cG0oi6XnnnWcWX3xxM27cuEQs9cNnXWH02WefTXmuqZDLF198Yf7xj38k3mbyRhSzlVdeOennV2f2P6vy6vQFWnmdyZvYba4gHGKZ1Q62n8KA9b3jPniYd955++Sf9L2Hs3o0tiP4ZbGvG4IdCr\/WObcesPJslijot7\/97W81od5\/IKK+srHOBQ0CEIAABCAQGwEEv9gswnogAAEIQKAnCXz88cd9RIYzzjijj8ed8l5tuOGGqT3qRtMPxXU7ZBX8soALza+bdBuuJ7FQ8\/nFCOwNre+pJQFCFTvrVem1a8oq+MW8hyxrs318oSh07YwzzpiEVyvHmfK0zTLLLMEpihD8JLyuvvrqqfVIfDr00ENrr4XW5VZjDRUukWinEF6JVAoldgUkDSwxy4YqKwRa4qPbfC\/DfffdNxWWKaYPPfRQx3K4iYNs5J97ieT+2rVOhb6q2IRtt9xySxKunKVJBJbHpEQq21TJ2w1X9j0M632+fvOb39TCqvtrBztHqNqwGzocCrvVfjbaaKOm2++P4CdbSPDUWQl5kqoKuR5YhLxBXe9keZDKI9BvrpeszzIkQjfdLB0gAAEIQAACXSKA4Ncl0EwDAQhAAALlJqAcVKusskpqkyGPqNCNrULg5OFTr3VK8FPVXIVE+lU9TznllFQxESXAV9iakuA3ahKqlD\/L90oKXdMpwa\/IPbRyghWmK28u1zOz2fUSunbdddc+xTryFvzkqaWcfbKR8ujNM888iYC79tprp86AH94Yyh1nwzdD51zilYRQW1BBYd\/ylHObKz7\/+c9\/NgcddFDqfTcnZag4ivIHynu0ky0UKh0aX\/k59c9todDkRmuT2KdchRNPPHHSzU8TII\/d4cOH9xlioYUWSoldtl8n7GAnU\/Vhea66TWK\/DLine truncated
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQW0XEXWtguCfgNBEyQQLAQI7jDY4O7BXQfXQQdPcBIYNAxOcAZ3h+DMwCDBnaAJEJyBQf71nu+r\/qvrnu4+3Xf3vZ3qZ6+VNUN3nX1qP7u6773v2bVrvN9\/\/\/13h0EAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMA4S2A8hN5xNndMHAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBARgChl4UAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGAcJ4DQO44nkOlDAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEEDoZQ1AAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEBjHCSD0juMJZPoQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABBB6WQMQgAAEIAABCEAAAl1O4JdffnG\/\/vqrm3jiibv83twQAhCAAAQgAAEIQAACKRJA6E0xq8QEAQhAAAIQaDECv\/32m3v\/\/ffdf\/\/7Xzf77LO7CSaYoKEZjhkzpnTdpJNO6iabbLLCfiQsag49e\/Z0vXr1KnydH6i5f\/TRR+733393M800k5twwgkb8vHVV1+VrptiiincRBNNVNhPK8RQeLLRwC+\/\/NJddtll7pVXXnHvvPOOe\/fdd7MR00wzjZtnnnncfPPN57bffnvXu3fvRm\/BdV1I4Pvvv3cff\/xx9hmcbrrp3Pjjj9+Fd\/\/fW3366afu888\/d7PNNpv7wx\/+0LT7a60++uijZf779+\/vllpqqar3fOKJJ9xbb71VNmb55Zd3s846a+51+owMGzas7L0tttgii0\/27bffujvvvLP0vpivtdZaTY29aVBxDAEIQAACEIBAUwgg9DYFK04hAAEIQAACEBCBK6+80t17773uueeecxKGvC2++OJu2WWXdbvvvnth0VeCzhJLLFHyIZHlqquuqgp69OjRbvjw4e6f\/\/yne+aZZ0pjJQoNGDDA7bbbbm7FFVes6OPnn392V1xxRRaHFyb9YIm92223ndtmm20Ki7VioXt6O+CAA9xee+01TsVQ78qWQH7ppZe6M888s2wNVPKz6667un333ddJyMdai4CEyL\/97W+Z2PjFF1+UTW6BBRbI1vIqq6ySO2mJnoMHDy4c0I477ugGDhzYYbz86HP\/9NNPl81h7rnndosssojbb7\/93LTTTlv4PkUGPvbYY27bbbctG6rvj9tvv73q5SuvvHKH7w0Jxn369Mm97tVXX3Vrr7122XvXXHNN6XtP30HyGdoNN9zgFl544SJhMAYCEIAABCAAgTYggNDbBkkmRAhAAAIQgEBXE1DV66mnntqhOi2eh6rRhg4dWkgoPeOMMzKx0FstoVfVv5tvvnkHoSWeg4QpzVXVtaF98sknbuutt655vartJCbPOOOMNTFvsskm7tlnny2N23\/\/\/d3ee+9d8bpWjKFmkNGAk08+2Z1\/\/vl1XaZ1oVx3R5VoXRNto8ESO\/VgJnxgkxe+Pk\/nnntuhwc4quY+9thjCxM77LDD3C677FI2\/v7773d6EFDN9HnUg5npp5++8L1qDVQlvcTUOHaJzpXu8+GHHzpV74a26KKLuuuvv77i7RB6a2WC9yEAAQhAAAIQqEUAobcWId6HAAQgAAEIQKBuArEoW82BRL2zzz674pCffvopE27iasBqQu\/YsWPdVltt5V577bVCc99ggw0ywdmbhB1dr0rgIqZKY1X+VmpJIcFWTK6++uoyd9WE3laLoQiHeMxDDz3kdtppp0Yuzap69Q\/rfgJ66LHaaqvVFHn9TPfZZ5+ssja0448\/3l100UWFg4mFXlXCqoK+iKnaXtW2atNiZcccc4y7\/PLLy9wNGTLEbbjhhrm3UCXu4YcfXvaefMSVweEAhF6rbOEHAhCAAAQg0L4EEHrbN\/dEDgEIQAACEGgKgR9\/\/NHNO++8HXyvu+662Xb8O+64o4Ng9MADD5T6UOpCVQ8+\/\/zzWf9NtTtQL87Yqgm92l6uf6GpXcMf\/\/hHJxFXAmRs6o0pMUtWSaBUDD169HA333xzh+v\/\/ve\/l21bV+WeepiOGjXK3Xjjjbmsqwm9rRBDZxeItvKHPUXlTz1H1S5D1Y3KhXr2ilU8TmPfeOONwq09OjtXrq9MIK8qW72V1WZA\/Zb1eY1NletTTTVV6WVV4qoit6ideOKJbrPNNisNV\/\/mESNGlF2u9i\/9+vXL\/KqCNrTTTjvNbbTRRkVvV3PcU0895bbccsuycYr\/rLPOyr02L95qFcByolYz4cMgVbRrV4HnSOuGmmliAAQgAAEIQKDtCSD0tv0SAAAEIAABCEDAlsDdd9\/t9thjjzKnoYg6cuRIt95665W9\/5e\/\/KXsGlXCqSKumlUTerVlOhR+5phjDnfdddeVBJM8ITes6j3llFM6tJ0Ie2vqULbllluubHpxFaNE5TyBOryomtDbCjF0ZmX8+uuvbqGFFioT9SXyqrIzNh3WpzUQC+h6KKCD2rrKvvvuO\/fee+85VWAvs8wyhVqK1Ds3cfnggw+yliCTTz55Fl89hwrWez+L8fpsvPjiiyVXao9wzz33lET42267rUP1tapfJcR6W3XVVd3bb7+d\/adE4qLV8hqvfCy55JJloeywww7uyCOPzF5T3vSQJvy86d5xBW7ooN486KHE0ksvXdYXWA+P\/v3vf3d4GJH3sEtV\/7W+02rlqpbQq8Pa9OBEbWRU1TzeeOPVcsn7EIAABCAAAQgkRgChN7GEEg4EIAABCECguwlI5JXY602HNMUCnrbkSxzyJuFIVb3eOiP0fvPNN5nAGFpcbav38oTU++67L7tMomNYhZsnKqu6T1V+3uL2D50Relslhs6spTxx7oQTTsj6JueZhL+wglNjwqpO3z4gvFb+VGUdWt449QhWPmSqFNcBet5ULfnII4+4Cy64wJ100kml13XIVbzNXkKf1lJsOhhs5513LntZvZfDfrKqTh80aFDZuvcX6EGEDtnac889M\/HXmyqiNbfQVPk888wzd5iD+j+HrUp69+5d9pnqTC51eGJ4+Fr8gCJP2Axzp57ditGbHpKoZ29Rk2CrtgehvfDCC2Ws8lol5FXQNpIHf9\/jjjsuO1gwNFWjqzo9tLzD26qtfX+tqqPXX3\/9Ml+6n\/dfSeh96623sgPqxMSbRGiJ6+IWtrDQ95QX3DVWeQm\/n30\/4nASqlwOPxsS1vVZCE0V1wceeGDRlDIOAhCAAAQgAIEmEUDobRJY3EIAAhCAAATalUAsCqmv5tFHH12GQ70648pOVQz6ykaJNk8++WTZNRJtQrGpUkXv66+\/7tZcc82ya\/NOus\/ruSkBRFVwEvNCYSMWouU8rFDUfx900EHZYVXedPDUl19+WTaPUNzWG5Uqelslhs6sYQlG\/fv3L3MxYMCArMpy6qmn7uBa499\/\/\/2y11WZqHYfsrwq6rzt+cqhchOaREVfgR33epUgJpE2bvUh8VaiW1yVHa5Tf4+8CnA9NPDipirIVfFd6yAzVbpKYO7bt2\/mOu9zIrFY\/aNDq1Xx2pk86tq4bYKE8vBgNbUc0OcxtFAAjecn3nH\/2mpzjB+85H0eJXLG\/XIvueQSt8IKK5RcN5oH7yDvYUReP2KJuhdeeGFZSFpPvXr1qpqKRnr06oFV3NIivIkqe8XBr8WYpcbq4YcXg\/PmIB\/hPRSLqvND01pVSxYMAhCAAAQgAIHuJYDQ2738uTsEIAABCEAgKQLagq+emaHlVbLlHaykysW8SkXvS4KxrvNWSejVIWY6vE1VhN7+\/Oc\/d9iGH4tX4XbyvH6cqlBUNZxMgu3BBx9cFme8VT0vsbPPPnvZy5WE3laOoZ4FqypT9WqNTb1TJcCpUlFibhFrltBb6d7PPPNMdsDemWeeWTYkT9CKRX8J2joMTJY372rxSsTUtRK4866VmBYfanbrrbd2OPxMgvHCCy9cBG3NMepDe\/rpp5fGSRy\/+OKL3WKLLea++uqrTCSP2ySEgvhLL71UVqmqA\/p++OEH9\/LLL2fVpao+FrOVVlopG6fetKHFn1VVccfCvKpMtXsgtPBBQGfy4H2q3YO+d8IHTnPPPXeH\/tLxboGiFcyNCL01k+dc1v\/ct9rIa7Ohde4r3rWTQWJwbP\/6179KD2jiB2EaqxxrXWAQgAAEIAABCHQvAYTe7uXP3SEAAQhAAAJJEfj66687iEvnnHNOhwpb9bXceOONy2KXwBC3XAgHFBV6iwDNu7\/EGb8tWyKx7hcfMuWFjLgyU8LTkCFDah4cVlTobeUYiszNj4kFwrxrp59++qyNhnqYqg9rnz59cm\/RHUKvBPfVV1+9bD4SHY866qjSa3nzUrW4b\/uQdyCdxFq1apA4qZYRoXAoxxIxfUsKtbqQ6BxaXFV8wAEHlG2\/F9PHH3\/crEerOChH8brXw5F47pqnWhzoEDFvd911V9aWoohJ\/FeFtMRJb2uttVZZW4q4otiPiz9fhx56aKl9Rmfz4O+hnQix0B62iMhrr6B4Bg4cWDP8zgi9yoWEbq2VvMrxoUOHZg+q8qq\/w90IqhhXBXBsYVV8zDLv4UPNYBkAAQhAAAIQgEBTCCD0NgUrTiEAAQhAAALtSUA9JldZZZWy4PMqIPMEDW11VkVfJbMSekeNGpVtfQ8Pa9M9zzjjjLJD4nSwkbYn63CjaiaBUv0x4yrEvGushN7ujKGela12DKreDCuxa10vgXO33XbrcAhbs4VeVWZKnFWO1Cd3zjnnzIT7ddZZp2wNxNvY83rD+Line truncated
|
||||
%---
|
||||
%[output:3f09c9f5]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>scientaPassEnergy_eV<\/strong>\n <strong>__________________________<\/strong> <strong>________________________<\/strong> <strong>____________________<\/strong>\n\n {'0146146_Al2p_850eV.ibw'} {'29-Nov-2025 15:25:25'} 50 \n {'0146146_Ar2p_850eV.ibw'} {'29-Nov-2025 15:25:25'} 50 \n {'0146146_C1s_850eV.ibw' } {'29-Nov-2025 15:25:25'} 50 \n {'0146146_Cl2p_850eV.ibw'} {'29-Nov-2025 15:25:25'} 50 \n {'0146146_O1s_850eV.ibw' } {'29-Nov-2025 15:25:25'} 50 \n\n","truncated":false}}
|
||||
%---
|
||||
%[output:340587e5]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABPwAAAMeCAYAAACJFhrxAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQmUXEX5t2u6Z8lGAoFEw6KI7JuC7G4kioIgyCYiIIqouIOs8mcL4IIIKIKCC7uAqCwCgqBsioKKCiqrIpCwBSTJJJnM3t\/5Xbzz3aV67nt7ujvd00+d4\/Ew8966dZ+qW9P95K2qtlKpVHIUCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYFwQaEP4jYt+5CEgAAEIQAACEIAABCAAAQhAAAIQgAAEIBAQQPgxECAAAQhAAAIQgAAEIAABCEAAAhCAAAQgMI4IIPzGUWfyKBCAAAQgAAEIQAACEIAABCAAAQhAAAIQQPgxBiAAAQhAAAIQgAAEIAABCEAAAhCAAAQgMI4IIPzGUWfyKBCAAAQgAAEIQAACEIAABCAAAQhAAAIQQPgxBiAAAQhAAAJNQOCFF15wL7\/8snvDG97gJk+eXFGLX3rppZHrJk6c6KZMmVJRPZVctHTpUjdv3jz33\/\/+182YMcOtueaaFT3HinwG3fu5555zy5Ytc7NmzQqeoaOjoxIcY7pG7bjllltSdbznPe9xr33ta0etW\/1www03uKGhoZG4XXbZJeiTcqVUKrn58+e7tra24LmLxeKY2r8iL164cKETPz3vKqusskKaUo132dLw++67zz3++OOx0Le\/\/e3BHDJaue6669ySJUtiIfvuu6\/TnOErr7zyirvgggtiv9p\/\/\/1H7vPkk0+6P\/3pTyO\/17yz6667Wh6BGAhAAAIQgAAExkAA4TcGeFwKAQhAAAIQqCWB3\/\/+9+7KK690999\/fyDKwrLhhhu6Lbfc0h1++OFutdVWMzVBsnCbbbYZid1uu+2CuvOU3\/72t+7ggw+OXSLBpHaWK5IrZ511lrvmmmtSIZtvvrk7\/vjjY+0arT0r6hkefPDB4Bl+97vfpZoncXH00Ue7173udXlQjin2Bz\/4gfva176WquOII45wn\/\/850et+9\/\/\/rfbaaedYjE\/\/\/nP3RZbbBH72cDAgLvsssuCsfeHP\/whkJzR8bfPPvu4gw46aIUIz7zwJL2++c1vpp5D4lzvwVFHHeU22GADb7Ua26effrr5locccogTm2Sp5rtsbcy3vvUtd+6558bCP\/nJT7rjjjtu1Pd12223jf1eYvvuu+8OhK+vPPLIIymBd\/XVV4+81z\/72c\/cMcccE7tUEpACAQhAAAIQgEBtCSD8asuX2iEAAQhAAAIVEfj1r3\/t9OV8tKJMnR\/\/+MeZWV2qI\/nlP6\/w6+vrC0SRMr2iZdVVV41l70R\/p8yf\/fbbz0kyjVYkqSSrssqKeIa\/\/e1vbq+99spqmvvRj37kZs+enRlXjYD3ve997tFHH01VJTFzzz33jHoLi\/AbHBwM+uPmm28eta43vvGNgVDaaKONqvFYNanj+9\/\/vvv617+eWbek7ac\/\/elU3KWXXurmzp2beX0Y8OUvf9l94hOfiMVX+122NsYn4jRn\/OY3vylbxfXXX+++9KUvxX6f9X4i\/Kw9QhwEIAABCECgvgQQfvXlzd0gAAEIQAACmQR8mXTlLpLkuemmm9zUqVO9IRJ1koLJLKW8wu+8885zZ599duoe5YTf4sWL3QEHHOAefvjhzOdVgMTMu9\/97oZ6BomMD37wg7HstnIPo2wxLbNVf9Sy+ORK9H5ajvmmN72pbBOyhN\/w8HCQjXXttdeaHkPPq+eudJm56SYVBuV5j3QLZTS+7W1vi93tK1\/5SiBzrSUp\/PK0IetdtrYhGveud73L\/ec\/\/4ldetddd5XNSP3iF7\/obrzxxli8xO9oUhfhV0nPcA0EIAABCECg9gQQfrVnzB0gAAEIQAACuQh89KMfTWVqSUSsu+66TtlCySw7LVeMZqFp6aky07QE9rbbbnPaMyxZ8gi\/Z555xu24447eZygn\/E466SR3xRVXxK7REl5JPdWnZX7Rot8puygsK\/oZJL6U0ZiUJRIob3nLW4L+0R5p0XLYYYelli7m6nhDsJYWn3\/++WUjDz300GCZdLmSJfz0TB\/+8IdTl2v8SSpraWd0ea8CP\/axj7kTTzzR0Pr6hnzgAx9wDz30UOymykrUWJb0Smaeaqn8L3\/5y1i8smz1zlmLllorqzUsY32XrfctF\/ed73zHnXPOObFfS\/77+liZnVraHe3frIxAVbxgwQJ31VVXjdyjUCi4Aw88cGSPRJb0jrUXuR4CEIAABCBQGQGEX2XcuAoCEIAABCBQEwLa8y65h1ZUqOjQBR3OEJV4kjHKTgqLhI\/20Bqt5BF+WqJYbhmgT\/jpYARJsWiR6FMWX1h84uqBBx4YkQQr+hl8mVknn3zyyB6GkiPKYIweRrDxxhsH2Za1KpKQGhvR\/RyT91J\/aM+99vZ2bzOyhN\/\/\/d\/\/xeSNKtEhH5tttllQ37PPPut23nnnmBQabVl3tBE6\/OPFF18MDm\/RwQ3rrbde2XaOlaEOnUhmOuogCWXsheWEE05I7WP5z3\/+M3Y4haRvKAatzxnWX413OclBGbva\/04M11prreAfAUY7OEb7F6q\/RnsXw9\/p\/dPhHNGi5b2f+9znxtQdWcLv+eefD\/4RQDLWuifpmBrExRCAAAQgAIEWIYDwa5GO5jEhAAEIQKA5CEjcnXLKKbHG6tCIlVZaaeRnknnJLC4dChCe0FpNWZbcf0yHVET3dvNJkF\/84hfBgSLRosMfoifBSlj+6le\/GgnRgQDKUgxPDl7Rz5C8vzIQdbhF9IRa9YsyKcOiDLg999yzZgNNDCWtokVZacn9\/HxLU8NrsoTfbrvtFluG7csY9EnBP\/\/5z2769OnBbbTHoIRUWL7xjW+4mTNnutNOOy2VcfeOd7wj+LnkVTWLMjOVjRktykKLynQfT433ddZZJ7hMglISKiw64VZ7+llLNd7l8F5aNqusWUm5ZJFcf\/\/73x8IaN8JylFpGa2vq6srVpUyAZURGC16RyVmRysSkHvssUcs5JJLLhmR\/j7h99hjjwVbBGguiWYsaw5T9qH2U4w+i7I1oxmZ6pdoRnCYnRhthOaq6P6N+seS7bffPtZOZWAeeeSR1i4lDgIQgAAEINBUBBB+TdVdNBYCEIAABMY7AZ0YGt0\/zbekTqIpKZYuvvhi9853vjPAIyGoLK9okRCMZoZZMvyWL18eSJMwm1BSQV+Yo7LRJ\/xOPfVUpy\/8YZHUif63pQ9X9DMkJYnvMAbLc1QzxpeRJmEisREt2new3EEVWcJPmXzRJZ06KGX33XeP1a97Jk8Djp70q\/6OShwt70wu705y0TLlXXbZpWq4JIDWX3\/9WH3Je9x6663uM5\/5TCxG8rSzszP4WTJDL2u5dLLx1XiXVef3vvc9d+aZZ2ayUaavTnBOijzf\/ps+KZw8DMa3xNnXiEr28NP7dfvtt5d9Js07EoLhP3QkWepCyfZw71JfG5KH2PgEbz0P28nsQAIgAAEIQAACVSaA8KsyUKqDAAQgAAEIjIVAcs8vSbZvf\/vbsSqVqaKMs2hJ7uOXbMPBBx\/stEw1LBbhlzwVV9frf1nCT8sCo5lIX\/jCF4K9+5Q9pUM8dKCHZIKWwEpWhVl9Wdzq9QwSnZtsskmsORJWPT097o9\/\/GOQUaeMRLVfe55JXui\/a1m0lHOrrbaKyTidCixh4durLrk0NWxblvC76KKLYvdQxp+kc7RIKmmvumi544473Nprrx38KCn8rFzuvfdeN2vWLGt4ZtyHPvShoL\/Cokw4ZRvqeZQBeNxxx8WWZOv3P\/3pT0fi\/\/73v8cy1z7+8Y8HY0BsxVFZixoDc+bMCeK0d120VONd1oEon\/3sZzOfNQzYZ599gmeMFmXgJQ\/EScpLLat961vfGrtOh7doX8qsUonwy6pTv1emX3jYkA4S0YEi0aJ3cocddgh+pH8kkRRMlmjmqe\/EZvVxIx44Y+FDDAQgAAEIQCCLAMIvixC\/hwAEIAABCNSRQDLL5qCDDnJz585NtSBcdhj+QvJCBwyUK3llWVIShHt5JZcT+zL89CU8usegMm2SB42E7dTvJDQlzrJKvZ5By1HDbMmwTRI75U4c1lLPM844Y2RJddZzVPL75NJq1SGxI8HjExnf\/e53U3u36Zos4ZfVNslayaPkPoLaKy7cN3A04SdJKbmUXIas+2pJt8R1tYpkn6RfsmjZaPIgG0kfZb1Fx2Ee2RaVieH9xvouJzNsw3qVMSkh\/dRTT7kLL7ww9XyS8mussUbs58m2JDOHfctutW9nUvb6+mYswk9Lc7XUP3kATnif8ERh336IRx99dLD0V0XLwpXlnCxagq33U0V7EUYPZQmFebXGG\/VAAAIQgAAEGo0Awq\/ReoT2QAACEIBASxPYeuutYzLlU5\/6lDv22GNTTJJLL8vFhRfmlWXReAkSffmfOHFisFw4K8MvKSMtHaplohtttNGoofV6hn\/84x+pZaxZzyBGWqJYq2yhpKxQe8LsJZ\/E00ENkn7JMhbhJwGldtx5552xaiXVvvrVr478zCf8JJy0RDNcLivx4jsMIrnXYxb3rN\/7lh\/7rlFmX\/KgGWVPRg\/5yLqX5JieK1xSO9Z32bcHoPb3\/MhHPjLSFPWFMg+jxSf\/fcuCQ5mma5PjK88BNJUKv+uuu27kYBVlLWscJaV69MCiZCZr9CAgbXGgrQ6S5YgjjhhZfp7sD209IHlKgQAEIAABCIxXAgi\/8dqzPBcEIAABCDQlgaQsi35hjT5Q8svraPu26bo8siyZ2aSN\/MN94sYq\/JQR6DtlVieqKLine truncated
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQe4HFX5h7\/dvSU9gZDQMSKEIiC9CUpVEQQpigiIIipYEKQJfyBSRJQqoqJIExREpAnSFAERAcWCGkoAKaGFUJKQ5Lbd\/T+\/uZnLzOzszjl7997cu\/c9z8PDk7vfnDnzzpnZ2Xe\/\/U6uXC6XjQYBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALDlkAO0Ttszx0DhwAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAQEED0MhEgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCAxzAojeYX4CGT4EIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAUQvcwACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwDAngOgd5ieQ4UMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQQPQyByAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIDHMCiN5hfgIZPgQgAAEIQGAkEXjllVds7ty59u53v9vGjh1b16G\/9tprfduNHj3axo0bV1c\/9Wz09ttv2wsvvGCvv\/66TZkyxVZZZZW6jmNpHoP2\/dJLL9nChQttxRVXDI6htbW1Hhz92kbjuO222yr6+NCHPmQrrLBCzb51Hm666SYrFot9cbvssktwTqq1crlss2fPtlwuFxx3oVDo1\/iX5sZvvvmmiZ+Od5llllkqQ2nEtewy8AcffNCefPLJWOi2224b3ENqtRtuuMEWLFgQC\/nEJz5humektTfeeMMuuuii2Ev77bdf336eeeYZ++tf\/9r3uu47u+66q8shEAMBCEAAAhCAAAScCSB6nVERCAEIQAACEIDA0iDwwAMP2C9\/+Ut76KGHAkEatrXXXts23nhjO+KII2y55ZZzGpok8eabb94Xu+WWWwZ9+7Q\/\/elPdtBBB8U2kVjUOKs1SbVzzjnHrr322oqQDTbYwE444YTYuGqNZ2kdw7\/+9a\/gGO6\/\/\/6K4UlYHXPMMbbaaqv5oOxX7MUXX2zf+c53Kvo48sgj7Wtf+1rNvp9++mnbeeedYzG\/+c1vbKONNor9rbu7237+858Hc+8vf\/lLILej82+fffaxAw88cKmIbl94kp1nn312xXHoCxNdB0cffbSttdZaqd1qbp9++unOuzz44INNbJKtkdey62DOP\/98u+CCC2LhX\/ziF+2b3\/xmzet1iy22iL2uLzTuvffeQPSntccee6xC3F5zzTV91\/V1111nxx57bGxTyV8aBCAAAQhAAAIQaCQBRG8jadIXBCAAAQhAAAINJfD73\/\/eJGVqNWXm\/eIXv8jM4lQfSenjK3o7OzsDQajMzmibPHlyLFsv+poy\/fbdd1+TXKzVJCclKbPa0jiGf\/7zn7bXXntlDc0uueQS23777TPjGhHw0Y9+1B5\/\/PGKriTk7rvvvpq7cBG9PT09wfm49dZba\/b1nve8JxCJ66yzTiMOa0D6+OlPf2pnnnlmZt+S9YcddlhF3BVXXGGnnHJK5vZhwPHHH29f+MIXYvGNvpZdB5MmYHXP+MMf\/lC1ixtvvNG+8Y1vxF7Puj4Rva5nhDgIQAACEIAABAaSAKJ3IOnSNwQgAAEIQAACdRNIy5yt1pnk3i233GITJkxIDZGglQxOZiX6it4LL7zQzj333Ip9VBO98+bNs\/33399mzpzpxEFCbqeddhpSxyCB9clPfjKWzVrtYJQdqnIKOh8D2dKkWnR\/+tn9+973vqpDyBK9pVIpyL68\/vrrnQ5Dx6vjrreciNNO6gzyuY60C2Uwb7PNNrG9ffvb3w4kvmtLil6fMWRdy65jiMbtuOOO9r\/\/\/S+26T333FM1A\/3rX\/+6\/fa3v43FS\/jXkvmI3nrODNtAAAIQgAAEINBoAojeRhOlPwhAAAIQgAAEGkLgs5\/9bEVmpgTUGmusYcoOTGbV6mfp0axTlRhQJqpKHdx5552mmqDJ5iN6n3\/+edtuu+1Sj62a6D355JPtqquuim2jUg2SuepPP+eONr2mbMKwLe1jkPBUBnNSkkmcbbLJJsH5UQ3UaDv00EMrfqLekAkR6UQlJH74wx9W7faQQw4JymFUa1miV8f06U9\/umJzzT99maCf8EfLOCjwc5\/7nJ100kmNPtR+9\/fxj3\/cHn300Vg\/ykLWXJbsTGaaqyTK7373u1i8sup1zbk2ldRQFnvY+nstu+63WtwPfvADO++882Iv60uftHOsTG6V8Iie36wMYHU8Z84cu\/rqq\/v2kc\/n7YADDuirgUzphv6eRbaHAAQgAAEIQMCFAKLXhRIxEIAABCAAAQgMKgHVtE3WyIyKNC2mpUW3ovJWEk7ZiGGT6FONzFrNR\/Tqp+jVfu6dJnq14JVkaLRJ8CprN2xpwvKRRx7pk0NL+xjSMjFnzJjRV6NYUkwZy9FFptZdd90gu3qgmuSz5ka0XnNyXzofqqnb0tKSOows0ft\/\/\/d\/MWmnTrR42\/rrrx\/09+KLL9pHPvKRmAysVb4jOggt6vbqq68Gi\/JpQa4111yz6jj7y1CLiSUzm7VAmDJ0w3biiSdW1Kn+73\/\/G1t0TLI\/FMKuxxn234hrOclBGfqqbyuGq666avDlT60FAVWfWOer1rUYvqbrT4uuRZvKOHz1q1\/t1+nIEr0vv\/xy8OWPJLxrzfF+DYiNIQABCEAAAhBoSgKI3qY8rRwUBCAAAQhAYHgTkLD91re+FTsILQY2fvz4vr9J4iazNrXYkxZGU2ukJE3WF9XiY9HarWny6+abbw4Wios2Leo1ZcqUvj9JVN9xxx19\/9ZCT8pKlgAcCseQZKiMYy1aVigU+sas86LM6bAp43XPPfccsAkohpKV0aYs1GS93rQSBOE2WaJ3t912i5XbSMsQTpPBf\/vb32zZZZcNdqMawhKRYfve975nU6dOtdNOO60iw\/YDH\/hA8HdJy0Y2ZWIr+zralHUa\/RIljafm++qrrx5sJjEt+Ri2bbfd1lSz17U14loO96XyCMqSl4xNNn2p8rGPfSz44iE6P8O4qKyO9tfe3h7rSpm\/ygCONl2jEvK1msTzHnvsEQu5\/PLL+77sSRO9TzzxRFAKRveS6C8UdA9TtrHqJUePRdnZ0QxsnZfoLwDCbOToIHSvitZn1pdkW221VWycyrg+6qijXE8pcRCAAAQgAAEIDGECiN4hfHIYGgQgAAEIQGCkEjj66KNj9VHTfjotwZgUipdddpl98IMfDLBJBCurM9okgqOZoC4ZvYsXLw5kWZg9LJkkURKVzGmi99RTTzWJnrBJ5kX\/7XJul\/YxJOVY2iJbLsfRyJi0DFSJMgmtaFNd4WoLkGWJXmXuRn+6rwXwdt9991j\/2qcW6Io2SXD97F9N5zsq7\/Qz\/mQZjyQXlaPYZZddGoZL4m\/69Omx\/pL7uP322+3LX\/5yLEbSvK2tLfhbMiM3qyxGcvCNuJbV549\/\/GM766yzMtkos\/\/iiy+2pMBNq6+d9mVAcpG\/tFIWaYOop0avrq+77rqr6jHpviMRHH7BlWSpDfUlS1ibPG0MycUJ08T+YC6imHkCCYAABCAAAQhAoF8EEL39wsfGEIAABCAAAQgMBIFkTU\/J1e9\/\/\/uxXSkzTRmm0Zas05sc20EHHWQqRxA2F9EryXfBBRf0baPt9V+W6NXPv6OZh4cffnhQm1fZklqcTQu1SSKp1IEkZZjFm8VzsI5Bgvu9731vbDgSlYsWLbKHH344yKBVBrLGL7kpaaV\/D2TTT\/Y33XTTmITdfvvtg4XC0mrRJksQhGPLEr2XXnppbB\/K8NWXDdEmmahatNF2991327Rp04I\/JUWvK5c\/\/\/nPtuKKK7qGZ8Z96lOfCs5X2JT5quxiHY8yfr\/5zW\/GSm\/o9V\/\/+td98f\/+979jmaqf\/\/zngzkgtuKoLGXNgR122CGIU23aaGvEtayF7r7yla9kHmsYsM8++wTHGG3KuE0udJiU1iqf8P73vz+2nRblU93prFaP6M3qU68rszdcRFILxGmhuGjTNbn11lsHf9LigZLByRbNNFfpmOQXIDrHQ3EhQRc+xEAAAhCAAAQgECeA6GVGQAACEIAABCAw5Agks+oOPPBAO+WUUyrGGf68PHxB0koLR1VrvpI0KYfCWp3JshFpGb2SL9EawsqsSy4gF45Tr0lkh9mgtU7IYB2Dyg6E2dHheCT0JKnTmn7S\/93vfrevdMZATKpkCQ3tQ0JPYi9NYP3oRz+qqM2qbbJEb9bYJeklDZN1glULNqwLXEv0Sk5LKibLTWi\/Kt2hLywa1SR5JXuTTeUBkgsUSvYpyzU6D30ka1Qih\/vr77WczKgP+1WGtL6IePbZZ+0nP\/lJxfHpy5iVV1459vfkWJK\/FEgrr6C63EnJn3Zu+iN6VYJBJV2SCxuG+9GieauttlpFdrVeP+aYY4ISD2oq\/6FfNSSbSm3o+lRTreHoYnvhFyWNmm\/0AwEIQAACEIDA0iWA6F26\/Nk7BCAAAQhAAAIpBDbbbLOYRPvSl75kxx13XEVk8if21eLCDX0laTReYkzSZ\/To0UFZiKyM3qSEdjnRKgewzjrr1AwdrGP4z3\/+U1GuIOsYxEg\/RR+o7MCkpNJ4wmzFNHmrBbgke5OtP6JX4lHj+OMf\/xjrVjL1jDPO6PtbmuiVaNRP8cOyCBJuaYt8JWs5Z3HPej2tzETaNsrkTS4gqGzp6OJtWfuSFNVxhaUT+nstp9X4Vf3uz3zmM31D0blQpnG0pX3pk1b+IZSo2jY5v3wWFqxX9N5wwLine truncated
|
||||
%---
|
||||
%[output:7b803654]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABPwAAAMeCAYAAACJFhrxAAAAAXNSR0IArs4c6QAAIABJREFUeF7svQe4JFWZ\/3+6++Z7JydmmCEMeUCSAuIaAAkiaQEREdBdhDXsmlEUJSisYRVUxLQqirgCroJIUnRJhh8oqAjCSA6TZxjmTrixw\/\/\/rbHuVNV7+nb1TdO37+c8j48P1aeqzvmcU3W7P\/Oe82ZKpVLJUSAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIG6IJBB+NXFONIJCEAAAhCAAAQgAAEIQAACEIAABCAAAQgEBBB+TAQIQAACEIAABCAAAQhAAAIQgAAEIAABCNQRAYRfHQ0mXYEABCAAAQhAAAIQgAAEIAABCEAAAhCAAMKPOQABCEAAAhCAAAQgAAEIQAACEIAABCAAgToigPCro8GkKxCAAAQgAAEIQAACEIAABCAAAQhAAAIQQPgxByAAAQhAAAI1TGD9+vXuueeec3PnznUzZ84cUku7u7vdxo0bB87VdTKZzJCuVe1JfX19bsmSJW7FihWuvb3dbbfddm7atGnVXsZ1dnY6XUuloaFhSNeo+qb\/OGGk+jDU+4fnlUold+2117p8Ph+71D777OP0v9Euuq\/m4uTJk92sWbNG+3ajdv1isehWrlwZPBPz5s0L5uVYl97eXvf000+7jo4ON3\/+\/FF9Hn\/2s585vUei5eSTTx6036qv86JFz+1xxx1XFtXNN9\/sHn744YHP9ayfccYZA\/993333BfMnLAsXLnQHHHDAWKPnfhCAAAQgAIEJQwDhN2GGmo5CAAIQgMB4ISBBduWVV7o\/\/vGP7plnnhlo9jbbbBP8QD7rrLOqEjyXXHKJ+973vjdwneuvv76qH9oSJKeddlrQnmi57LLL3IknnujF2t\/f777+9a+773znO27Tpk2xOjNmzHDnnXee++d\/\/udA3qUpRxxxhHvqqacGqj7++OOpz9VJtdCHNP0crM5DDz3k5f3KV77S\/ehHPxru5b3nr1q1yl1zzTXB2P\/hD38YqCNJtmjRIveud73LHXrooaNy75G+6J133umuuOIK99e\/\/tXMx2OOOcb9x3\/8R1mp\/p73vMc9++yzqZqUzWbdLbfcYupKvOv+El8ay7CI5YEHHhg8D4MJtVQ391Q65ZRT3IMPPhj7RM\/lYYcdVvaSt99+u\/v3f\/\/32Odvectb3Gc+85my57zzne90v\/rVrwY+V5+uu+66gf8+99xz3Q033DDw3695zWvc1VdfPdRucR4EIAABCEAAAhUIIPyYIhCAAAQgAIEaIiDB9+Y3v9m9+OKLg7ZKkV4HHXRQxZa\/9NJL7rWvfW1MuqU9N7z4T37yE\/fRj37U3Ou\/\/uu\/3Jve9CZzXJFgH\/7wh50ifgYrEgKSSY2NjYPW++1vf+ve9ra3xepUK\/y2dh8qDlSKCklxGz1FjBStNpJl9erVTpInKp191z\/88MPdF77wBTdlypSRvP2IXUvzUfIqKqN8F5d4+8Y3vuFe\/epXm48VjVZNUfRetCiaUNJQ4zRY+eQnPxkI\/ZEsP\/jBD9zFF18cu6Sep+SxaIWPfexj7sc\/\/nHsHF3HxyashPAbyVHjWhCAAAQgAIHhE0D4DZ8hV4AABCAAAQiMCAEte1WETyXZF97sxhtvHDTS77HHHnOf+tSnYpFZOrca4ecThuH9fcJPkXTnn3++kQXlAL3jHe9wn\/jEJ7wfawnr\/\/3f\/7kLL7wwWBIcLdUIv63ZhxGZGM4Fy3j3228\/Ey0ZXl8MxXKkipidfvrpbvHixakuqei0yy+\/PFXdsa6kSNSvfe1rqW4r6ac5N3v27IH6YvHyl7881flhpajw0zyWOE1GyJa7oERcUnBXdfNEZT07r3rVq2JHFS38+9\/\/3ntZPcP6x4Toe0hc\/vznPw8aVYvwG84ocS4EIAABCEBg5Akg\/EaeKVeEAAQgAAEIDInAf\/\/3f7vPfe5zsXN33313d\/DBBwfLEJPL8k466ST3xS9+caC+oogk87Tf3d\/\/\/vdAXPhKNcJPsu2HP\/yh9zo+4XfbbbcFSyOjRXLhhBNOcLlcLljmmyx\/+ctfgn3hVCRK7rjjDrd27dpAVCaXX4bnViP8xroPQxr8Cif95je\/cW9\/+9vL1tI8EfuRKl\/5ylec\/hctkj4SR5KPd911l7nVN7\/5TXfkkUeOVBNG5Drai27fffc119Iy6F133dXdeuutRrCfffbZgbQOyyOPPOKOP\/741O3RkvWo3JMo05550aI6Rx11lFMUZTLyUM+LIgG1NHikioRjdEm2rvuLX\/wiYJAsvv5WigjUNRTRGxWdu+22m3vDG94wcHmW9I7UaHIdCEAAAhCAQDoCCL90nKgFAQhAAAIQGHUCyX3qtEeaNs4P97mTSEtKnb\/97W+utbU1aNvSpUud9sWqVNIKv3J7xoXX9wk\/7ekX3Z9MYkN7p02aNCk4zSeuovuJ\/fznP3cf+MAHKnXBpRV+W6MPFRs\/hApJWeK7RDmBU+l22m9Ry3aVyELiUAk5tAxce0mGZaeddgqiNsOEKxJ+yYjCtFF+2svu+eefd+vWrXO67lCT0VTqlz6\/55573L\/+67\/GqkpkhnvlSV5KvEWXLSua73\/\/938HzpGA1l6Fg837wdry6U9\/2n3\/+9+PVdFzsO222wbHfEtuK+2zuWHDBvfkk08GsnLnnXd222+\/\/aCJP\/7nf\/7HXXDBBbE2lFs+rGXNWqIdLdqLT0vwh1MGE36KgnziiSeCCFZJyK2RSGU4feNcCEAAAhCAQC0SQPjV4qjQJghAAAIQmHAEtPxWiQOiRYk2Xve61w0c0g9iyYlo+epXvzpw3kgKv0KhEEQlhRF22rtLkUrRBBxJ4ee7fzI5gJYLKmJQP\/DDIrm04447Bv85ksJva\/VhpCevmL\/sZS+LXVZiLrnc9n3ve19ZWaqssBrDnp6egevcdNNNQSIKiZ9wybQiMBXFl4yKU\/Sp9uqLFp8UDKPVFDmnfeDCIiEliabrJ5fXKqJNQu3MM88c8Wy1vr0bo5Jc7dMz9KUvfWmgrckIvauuuspdeumlA5\/\/9Kc\/DZZXpymSqfvvv3\/suVFfo3tiap4q4jC6hLZcRJ2Ev6KAozJW7QgTf0hu+vbZU\/IV3SNaVE+yMVmSST7EQ4lGFKE7WNF4a9zDIkH43e9+d+C\/fcJPYlH90byJvlskgj\/ykY\/EIkZ\/\/etfuw9+8IOxJmjcovNSYxUdy\/CdEr5f9N8SvnovRYsiKmt1D8o084w6EIAABCAAAR8BhB\/zAgIQgAAEIFADBJS9Uj+Io+X+++8Poq3CIjGwyy67xOpE5YGWwWrPvmjR\/mPJRAFpIvyU9VUiKCyKHpMAHEz4qY4SE0SLlhZXSsoRra+lkMklxI8++mgsQ6\/qp4nw21p9GOnppKWS73\/\/+2OXlUi56KKLYuJH4ux3v\/udV5ppuffee+8du4bGNyqy9KGW5UrOHX300bG60Yi08APtNZcURsqknMlkguWd0TarbZKWgyXOULZfyZpwefdIcPQtp9XedWpPWJIReEkRlvxcS+vDSMdKbZRQTWbDlfBM8j3nnHNiS\/A1VoruDYuWJitCr1IiHNVXghIlzUmWt771rYG4ixYJ\/Y6OjoFDeoe84hWviNWRRExGB\/r6Xe0efvPnzw8uk5SX0WtLYut\/Wt6sKMzXv\/71sVvrnsr4HRZfFHQ0olP1khwUSe3LqlxpbPkcAhCAAAQgUOsEEH61PkK0DwIQgAAEJgSB5P59ith5+OGHTd+1bDK6r50y+ib3\/YueJDmhiJ1oqST8tK+YJEUo9\/7lX\/4lSJwhYTOY8JOsUbRUWLQ0UhFdEheKYHzhhRcCmaQf2NrrLfzBX2mAfUsMKwm\/WutDpT4O9nlSBmluPPDAA0GkkgRdtJSLPvMJP989db0DDjjAaQloNApTYqWpqSl2iubFvffeO3AsGhnnk5RpGKSVS2mupTpaPrznnnvGqkv4fOhDHwqk3Z\/+9CenfkTndTJSMspf7JUgReJSc1pLa3V9PRvaYzE5p33CUecqgi1atBdndH\/LZFINifyrr746bbedEpVoeX20aJnwxz\/+8dixZOSmb9zSRjRWK\/zSdiYq7JJRpcnl14pOTSb4ic4pLeFO7lsoMZ0U6mnbRj0IQAACEIBALRNA+NXy6NA2CEAAAhCYMAQ+85nPxJaZaQmaL+lGUrIoKiq6bC4JbCjCT0vztF+bigSHpI7kSCXhFz0vPLelpaVs1mHfHoC+AR+K8Ku1Pgx1IktcKmNqtITJWnwyKZSzyftVI\/zSJN7w3VsyJtyrbjDhJ9m13XbbBUkkoqItbLOWbi5cuHCoyMx5ySW7YQUJymRGbLVNkaHRyFpFlUX3+BusYclsyerLv\/3bv8VOSUbu6kNfwp4wWtK33F\/Ppa6rbMKKWExG\/kk8av9CRVuGxTeXkkuHk8tuq0kgMhzhJ8msuaBo3mTRu\/CXv\/xlsJfpJZdc4rTVQbRoabtktK9\/qheNlvSxVHS1L7HLiE1ALgQBCEAAAhDYSgQQflsJPLeFAAQgAAEIRAko4ii6hC+5pC+sm1yyVmk5WrXCL1lfP7BPP\/304PaVhF\/yB3+aEY5ev1z9aoVfLfYhDQtfHV+yhTAqS\/shSgZGpZVEkKLWksuoywk\/1X\/ve9\/r9thjjyB5xrx58yruZaZITc2J5FLML3\/5ywPZbMsJv2i0mKLjzjrrLJN9eqSj\/MRJS1IV2VqpSGRG93LTuUqKUU25\/PLLnSJxVXxRddGs1OF1fYk7wnq+ZaraK09jFpbPf\Line truncated
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQeYXFX9v8\/M7OzOZjc9m5CQAIYeOgIBfqj0Ik0IvYgiCIKgCIJEOggoRUBUVDooYAFEmqg0EQUBaQICKYTUTSGbsn1n\/v\/Pndzhzj1n2tbZ3fc8T548e+fcc89577l3Zt77ne+JpFKplKFAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBAvyUQQfT223NHxyEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIeAQQvUwECEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAL9nACit5+fQLoPAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQADRyxyAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEINDPCSB6+\/kJpPsQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABBC9zAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAv2cAKK3n59Aug8BCEAAAhAYDARWrFhhPvroIzN+\/HgzZsyYTg25qanJrFq1KrOv2olEIp1qq9SdWltbzdy5c83ChQtNTU2NWWeddczIkSNLbcY0NDQYtaVSUVHRqTZKPuiaHbprDJ09vr9fKpUy9913n2lvb89qaquttjL619NFx9VcHDZsmKmrq+vpw\/VY+8lk0ixatMi7JiZMmODNy94uLS0tZubMmaa2ttZMnDixR6\/Hhx9+2Og+EizTpk3LO27V137Bouv2wAMPzInqT3\/6k3nrrbcyr+taP+644zJ\/\/+tf\/\/Lmj18mT55stt9++95Gz\/EgAAEIQAACEBigBBC9A\/TEMiwIQAACEIBAfycgMXrzzTebf\/\/732bWrFmZ4ay11lqeGDnxxBNLEnuXX365ueOOOzLtPPDAAyUJFomxo48+2utPsFx33XXmkEMOceJua2szP\/vZz8ytt95qVq9enVVn9OjR5rzzzjNf+tKXPGlbTNlrr73MjBkzMlXff\/\/9ovfVTuUwhmLGma\/OG2+84eS94447mt\/85jddbd65f319vbnnnnu8c\/\/yyy9n6kiOTpkyxZx66qlmt91265Fjd3ejTz\/9tLnpppvMm2++ac3H\/fff33zzm9\/M+TDltNNOM7Nnzy6qS9Fo1Dz66KNWXT1w0fElPHUu\/SKWO+ywg3c95BOpRR3cUenwww83r776atYrui533333nE0+8cQT5vTTT896\/aijjjJXXnllzn1OOeUU85e\/\/CXzusZ0\/\/33Z\/4+55xzzIMPPpj5+3Of+5y56667Ojss9oMABCAAAQhAAAJZBBC9TAgIQAACEIAABMqOgMTuEUccYZYuXZq3b4rsnDp1asH+f\/LJJ+bzn\/98lmwtdl+\/8d\/\/\/vfm3HPPtY71ox\/9yBx22GHWdkV+nn322UYRfvmKRJAkYjwez1vvhRdeMF\/+8pez6pQqevt6DAVPVBEVwsI+uIsYKTq1O8vixYuN5F7wYYOr\/T333NNcc801Zvjw4d15+G5rS\/NR0jIoIV2NS7j+\/Oc\/N7vssov1sqJPSymK1g0WRQ9LFus85SsXXHCB9yCnO8vdd99tLrnkkqwmdT2FtwUrfO973zO\/\/e1vs\/ZROy42fiVEb3eeNdqCAAQgAAEIQKBUAojeUolRHwIQgAAEIACBHiWg9AaK6Cskef1OPPTQQ3kje999911z6aWXZkViat9SRK9LFPvHd4leRc5Onz7dkkS5wH3ta18z3\/\/+950vK1XB3\/72N3PRRRd5qR+CpRTR25dj6K4JI1m5zTbbWNHRfvtiKJbdVcTs2GOPNe+9915RTSoa9frrry+qbm9XUuT5T3\/606IOK9mrOTd27NhMfbH47Gc\/W9T+fqWg6NU8ljAPR8TnalACNvxgo6SDhyrr2tl5552zturXAS+++KKzWV3DeogUvA+Jy3\/+85+8UfSI3q6cJfaFAAQgAAEIQKCrBBC9XSXI\/hCAAAQgAAEIdCuBX\/7yl+bqq6\/OanOTTTYxO+20k\/dz8\/DPrw899FBz7bXXZuoralASV\/ls\/\/e\/\/3nCylVKEb2SrPfee6+zHZfoffzxx72fwAeLpNLBBx9sYrGYl84hXF5\/\/XUv76uKBNlTTz1lli1b5gnq8M\/s\/X1LEb29PYZunRRrGvv73\/9uTjjhhJxNa56IfXeVG2+80ehfsEj2SRhKOj\/zzDPWoW655Raz9957d1cXuqUd5ZrdeuutrbaU7mKjjTYyjz32mPVg5aSTTvIeVvjl7bffNgcddFDR\/VFqkqDUlSBVTtxgUZ199tnHKGo6HGms60WRv0oB0V1FojmYekPtPvnkkx6DcHGNt1AEsNpQBH9QcG+88cZm3333zTRP6obuOpu0AwEIQAACEICAiwCil3kBAQhAAAIQgEBZEQjnoVUOVC2I5OexlUANy7z\/\/ve\/prq62hvHvHnzjPJeFirFit5cOWH99l2iVzl7g\/lHJbSUG3Xo0KHebi5hGcwX+sgjj5hvf\/vbhYZgihW9fTGGgp3vRIWwJHM1kUvcFTqc8ikrPYMWKJMw1kJrSvehXNF+WX\/99b0obX8hPYnecARxsVG9ylU7Z84cs3z5cqN2O7vIYKFx6fXnnnvOfPWrX82qKoHt58KVtJZwDaanUPTu7373u8w+evCgXMT55n2+vlx22WXmzjvvzKqi62Dttdf2trlSKxTKo71y5Urz4YcfepJ6gw02MOuuu27eBd1+\/etfmwsvvDCrD7nSRCh9hVJxBIty7SrVSldKPtGrqOcPPvjAi1iXfO6LBfK6Mjb2hQAEIAABCECg7wkgevv+HNADCEAAAhCAAATWEFCaBS0IFSxaQO0LX\/hCZpNEiKRUsPzkJz\/J7Nedorejo8OLQvQjapWbU5GJwYXVwqLXdfzwok\/6WbgihCV2\/CKp+JnPfMb7sztFb1+NobsntZhvscUWWc1KyIbTKpx55pk5JXlLS4uXX7W5uTnTzh\/\/+EdvgTEJPz81hiKuFbUbjoJVtLly8QaLSwb70amKlFWeV79IREqeqv1wGgVFsEqkHn\/88XllZWe4unIzBx+OqE1dQz\/+8Y8zzYcjcm+\/\/XZzxRVXZF7\/wx\/+4KXRKKZIom+77bZZ143GGsx5rXmqCONgqoRcEbR60KOo\/6CEVz\/8Bd0ktV15dLWono4RLKonyRwu4cXbxEMLyCkiP1\/R+dZ594vE8G233Zb52yV6JZQ1Hs2b4L1FDwC++93vZkWI\/\/WvfzVnnXVWVhd03oLzUucqeC79e4p\/f9HfEv26LwWLIqjLNcd0MfOMOhCAAAQgAAEIGIPoZRZAAAIQgAAEIFA2BLQavURIsLz00ktedKVfJIQ23HDDrDpBaaR0B8rJGyzKLxpeAKqYiN7f\/OY3ngD0i6JFJX7ziV7V0YJTwaIUEoUWWwvW10\/ew6ki3nnnHTNjxoysdouJ6O2rMXT3pNJP4r\/1rW9lNSuBdvHFF2cJPwnTf\/zjH05ZqrQeW265ZVYbOr9BgakXlX5BUna\/\/fbLqhuMQPVfUC7ZsCjUeYpEIt7P+IN9Vt8kq\/MtiLbbbrt5ks5P49EdHF1pE5SbVv3xSzjiNixAw68rhYof2VyojxLpu+++e1Y1ie4w35NPPjkr1YrOlaL5\/aIUFIrILbTAoepr4TkthhguxxxzjCdsg0UPcmprazObdA\/ZbrvtsupIHoejgV3jLjVH78SJE71mwtI62LYeXuif0lgo6nqPPfbIOrSOed5552W2uX71EIzgVsUwB\/1y4tFHHy10KnkdAhCAAAQgAIEyJ4DoLfMTRPcgAAEIQAACg4lAOD+vIvTeeustC4F+Hh\/MW3vEEUdYeX2DO0lKKUIvWAqJXuUNlZzype5XvvIVb0E0ibp8oleSTtGRftFP4BXBKWGliOWPP\/7Yk4gSK8rl6oueQufZ9VPyQqK33MZQaIz5Xg9LQM2NV155xYtMlJgNllzRpi7R6zqm2tt+++2NfuofjLqWUKusrMzaRfPi+eefz2wLRsK65HQxDIqVisW0pTpKE7HZZptlVZfo+853vuPJ2tdee81oHMF5HY6MDvIXey18J2GtOa0UCmpf14ZyKIfntEs0a19FrAaLcm0H81eHF0vTA5y77rqr2GEbLUCnNCrBonQQ559\/fta2cKS267wVG8FcqugtdjBBURuOIg+n2VA0enjhxuCcUqqOcF5iPZAIP0gptm\/UgwAEIAABCECgfAggesvnXNATCEAAAhCAwKAncOWVV2b9nFg\/NXYtphaWa4qCDP48OgyyM6JXP8FWPlYViS3JPEmxQqI3uJ+\/byKRsBa78vvoyvHrmgidEb3lNobOTnAJ66lTp2bt7i\/C55KIvpQPH68U0VvMgmquY0vC+blo84leSc511lnHWxwsKFj9Pusn+pMnT+4sMmu\/cGoGv4LEdDBdgrarb4oED0bSK4o0mMM3X8ckgYO5izWWr3\/961m7hCP19aJrIUY\/OtqV1kXXpdodO3asUYRyONJXwln5iRVd7RfXXAqniAinVyhlYbiuiF49XNBcUPR+uOhe+Oc\/\/9nLVX755ZcbpbQJFqUw0UMI1\/hULxgd7WKpX1O4FuzrtglIQxCAAAQgAAEI9AoBRG+vYOYgEIAABCAAAQgUQ0ARhsGfaod\/uu23Ef5pcqGfHZcqesP1JVaOPfZY7\/CFRG9Y9BQz7mD7ueqXKnrLcQzFsHDVcS2i5UdhKt+xJHBQVkoAKko1nC4jl+hV\/TPOOMNsuumm3qJoEyZMKJirVJHZmhPhn9zfcMMN5qCLine truncated
|
||||
%---
|
||||
%[output:7ec3927c]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABPwAAAMeCAYAAACJFhrxAAAAAXNSR0IArs4c6QAAIABJREFUeF7snXecFdX5\/88CCyy9lxUQkSKiRIm9ArFgD9aoUaMxiSZ2jSZGscaSRI3GGlssicYeey9ojD0WVEDFgBSl7rq0hYX9vT7X7+xv2t157jbuvfM+r5d\/eO8zZ+a8z5nZO2+ec05JbW1traNAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACRUGgBOFXFP1IIyAAAQhAAAIQgAAEIAABCEAAAhCAAAQgkCGA8GMgQAACEIAABCAAAQhAAAIQgAAEIAABCECgiAgg\/IqoM2kKBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQQfowBCEAAAhCAAAQgAAEIQAACEIAABCAAAQgUEQGEXxF1Jk2BAAQgAAEIQAACEIAABCAAAQhAAAIQgADCjzEAAQhAAAIQKEACa9eudTNnznSrV692Q4YMcW3atGlQKxYsWFB3XFlZmevUqVOD6mnIQTr33Llz3bJly1z\/\/v3dgAEDXGlpaU5Vqf0VFRV1x3Tt2tW1bds2pzoaE9wUbWjM+XXsnDlz3HvvveemT5\/uPvnkEzdv3jzXrVs317t3bzd69Gg3bty4zBjJtVRWVrpVq1ZlDtP46t69e65VrNN4jSuNL43pvn37ulatWrX49Xz99ddu4cKFboMNNnAdO3ZstvN\/+eWX7tVXXw3UP3z4cLfNNtvUe87XX3\/dff7554GYnXbayQ0ePDj2uMWLF7sbb7wx8N2hhx6aaZ9KVVWVe\/LJJ+u+F\/M999yzWdvebFCpGAIQgAAEIFDgBBB+Bd6BXD4EIAABCKSLwN\/\/\/nf37LPPZgSPhIZXttxyS7fDDju4448\/3iz\/JCK22mqrujokB\/7xj3\/kBFSS4aijjgoc069fPyeRkK188MEH7oorrnCvvfZaJGSvvfZyv\/71r92gQYNM1yEWxx13XF3saaed5k444QTTsV7Qum5DThfrC66pqXE333yz++Mf\/5hYhSTO+eefn1XkxFWw6667ui+++KLuKwnFhorlxAtsogAJqauvvjojnRYtWhSoVfJTY2OXXXaJPZvG7MUXX2y+kmOOOcYdeOCBkXjVo\/vozTffDFzDRhtt5MaMGeNOOeUU16tXL\/N5LIG6l4488shA6MYbb+wef\/zxeg\/\/wQ9+4CQL\/UX3w3rrrRd73Keffup0j\/rLvffeW\/ccUV2q018efPBBt\/nmm1uaQQwEIAABCEAAAk1IAOHXhDCpCgIQgAAEINBcBGprazNiJ5xdEz6fsmmuvPJKU5bbn\/\/8Z3fNNdfUVZGr8KuurnaSQrNnzw5cRs+ePd3bb78di+L99993+++\/fyKmW2+9NZOZllQOOugg9+6779aFnXrqqe7EE09MOqzu+3xog\/lifYESK2rrhx9+mNPhfjlT34FxAinfhZ+uWcLbL8Lj2ijhd\/3110fk5R133OEuuOACM8\/f\/va37mc\/+1kg\/vnnn3c\/\/\/nP661D2XAS9xLjTVUkfyXVwm2XfMx2Ht23EsH+8v3vf9\/df\/\/9WS8L4ddUPUY9EIAABCAAgeYngPBrfsacAQIQgAAEINBoAmE5V1+Fkn7XXntt1hBJLgmHcDZTrsJP55BcDJdswk+y4OCDD04UMqpP0x+feuqpzDTfuKKptGJyzz33BL7OVfityzY0dFBI7vzwhz\/MTN9tSHn66aedpnvGFYnlF154wU2aNMlpOqq\/5LPw0zTm3XbbzTS21KaTTjopk2nnL7\/\/\/e+dRLO1hIVfXKZotro0rpV916VLF+vpEuOUwXnnnXcG4pRJO3HixNhjJX\/PPvvswHeqI5wp6A9A+CV2AwEQgAAEIACBvCGA8MubruBCIAABCEAAAvEEVqxY4UaNGhX5cp999nFad++JJ56IiA5JG29dLR2o7Cdl12kar6bBhmWOYnIRfrNmzXJjx46NveA44ac1B5UNGJ4+qOl\/yiqaPHmye+ONNwL1aarumWeeWfeZMo+0JttXX33lHnroodhz5yL81kUbmmKMS+pIzISLpqwqe00yb\/78+Zlp1ZJ74aKp334xNGPGjMyY0HTYt956K2vWYD4Lv8svv9zddNNNgaZqHGr6qdoXN31cmaH+dQmVmacMPWu59NJL3SGHHFIX\/pOf\/CQzjv1FrIcOHZqpN5wJ+6c\/\/cmU7Wq9Ht0\/hx12WCBc7f\/LX\/4SW0Vce+vLCFQlGld+ya41+n784x\/XcWRKr7W3iIMABCAAAQg0PwGEX\/Mz5gwQgAAEIACBRhGQtPnlL38ZqENTe5XRpDJlyhS37777Br4\/44wzAscok0cZPfWVXISfpjJKKsaVOOEXl\/103nnn1a3\/p6y1ww8\/PDAVOLwG2XbbbRcrKv3XkIvwWxdtaNRAcC7TfnEIF60lpwy18KYnypL81a9+FYn\/5z\/\/6bTuo8qjjz4ayXaLu06r8NNmH5Ky+q9169auT58+mWmlTTmFNXx9ynj0T2+W7H7mmWfqpu0+9thj7uSTTw4cJukpIecV\/5qF9U1Lj2OjjNOtt9468NXRRx\/tzj333MxnS5cuzdyvftEeFq\/hetesWeMkpSXROnfu7EaOHFnvpjq6h7bddtvAuoHKlP3vf\/8bmb4c948IWs8z6RmRNH6ThJ829VBmanl5eSZ7t6SkJKlKvocABCAAAQhAoIEEEH4NBMdhEIAABCAAgZYiINnnz9RSJtcjjzwSOL1khqSGVyQ8\/EKuKYVfeJ0yZREpy9ArcbIkfH61QYv5Swh5RZt5KAvRK5ru6J+O2JTCb121obFj5qKLLnK33357oBqJI60\/l02eaCOT8HjxT2ltKuGnTDplvWUTwRKMmi4a3vShsUx0vOr2b9IRFr9xgsufoaepzBtuuGHdpey4444ZptYSl3Wp8SxR55W4KbRxGXXKwlU\/++9nrw5do7JiJXH9dXvfX3jhhe5vf\/tb4LKVGassWn+JW6PxkksucT\/60Y\/qbbL6eL\/99gvE6Hxe\/dmEn3YC1kYmYuIVyUhJVmWr+qc2S976N4tRm\/3j11uv0H8RGlOXXXZZ3UcSrJKf\/qIMzNNPP93apcRBAAIQgAAECp4Awq\/gu5AGQAACEIBAsRMIywztiqvsOH\/R2mPK8PIXZTx16tQp85Fkw3\/+85\/A95INfkliyfCTOJFw8DKVNK1YL9b+tcDihF94x9e4DQ+S+lEbKmjaqb+EpYglw29dtiGpjUnfawppeEMUiSkJqmxl2rRpkd1kDzjggLppwarv7rvvDhyuLCy\/dNGX9WX4vfjii+7YY49NuvzM97\/5zW8SN7YwVeQLCk+nPeKIIwIbcGgqqsa3v\/hFWDhDT20Jr29X3zUpo9Y\/zTws3HWsZFd4PT3J25133rmu6pdeeimzvmDSxiO6xyTMw7tZqy\/904xVcdx6hZJ7t9xyS6BJ2lW4d+\/e9aJvyBp+2hgkPNXZfxJl+omDJ1zDLBWrfwjwpGDcNagO\/znUlkMPPTTyjLRsBJTr2CMeAhCAAAQgkK8EEH752jNcFwQgAAEIQMA5p7XvtAaYv8Rl4sRNmX3llVfcwIEDs3KUONRxXrEIv\/DmITpe\/9Un\/OKyqySYli9fnlkzburUqZnsNE3h1U6jkoPWqX5DhgwJtM8i\/PKtDbkM9E033TQggzRNVtlaWkutKcsNN9yQ2RXaX7IJP62ruPvuuydKKn9d1t2CrW3SOnVXXXVVXbiyx2677Ta3xRZbuIqKCnf11VdHNrTwC\/GPPvookLn205\/+NDM+P\/7444z41LRkjc\/x48dn4sK8w8JRIlzn9BdlnSmz1V\/86\/jNmTOnXnEbZiGpqI0\/tI6nVzQNWPexX+RvtNFG7sknnwwcLgnnX1PQmtHYEOFn6UP\/FOy46dd6XnhT2SVWJQXD5Z133nE9evTIfPzXv\/41kPGnz9THGhcUCEAAAhCAQFoIIPzS0tO0EwIQgAAECpKA1kOTBPOX6667zu2xxx6Bz7ROl7K2\/EUvxptttlnWducq\/DSdT5tCeEVTRU844YRM9mB9wk9rufmzmHS85Em2XWYlH7QJg2XNt1yFXz62wTowlyxZEpmaKXETnsJpra++uFyEnzIMlX3pL5qmqczUtm3bZnZbDu\/mnGsGXVKbxEYswplxyoTzyy+vHk191WYTXsm21mHceTV99Q9\/+ENgUxztjC1x7ZVwhqH3eXi8+rMddS+FxZwy0pRRK1l48803R9oiqSi56C9xuw37pw7HTbtVe7QOZFJpjPBTX0h4SvLHZTBqjGg6b9x6iL\/+9a\/d8ccfn7m8uGnt+tyf6RpmKY657MCcxIHvIQABCEAAAoVAAOFXCL3ENUIAAhCAQGoJhAWVQOjFNTw1Le5FXFP2lJGUreQq\/PzxknFaq03ZRUnCL25TkaQOVf3PPfdcYkZOrsIvH9uQxML7XtMa999\/\/0C4pi2Gp3Jb66svLhfh94tf\/CLTV16R2JFg8m8gEt4RNi7rrLHXrUw8ZYcmFa13Gd7AI25KfH31KCNNcq5du3aZsPC0ezE566yzIlWEMzS9uLj7VxJRmYtetqumsytj0V\/ihK92Hz7ooIMCcVdccUXddGJly02aNCnwfXjH4mxtb6jw8wtWrcGn\/w9PI9eUXm8chTdh0T80KGtPRdOi\/WsBetfqz+4N90dY8CaNEb6HAAQgAAEIFAMBhF8x9CJtgAAEIACBoiUQl7mnxe\/D65HFZe34pwvGAcpF+IUzoCQivM0XkoRfnKjyX0+2LKzjjjvOnXnmmfX2bS7CL1\/bYB284Y1GdJw2b2iOjLine truncated
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snXe8FNX5hw\/l0nvnCohKEVQi2I1RIPb6Q+xGjcbYYtdoNIqxG41YYu+9xRY7FlQ0KJbELiCgIF2k91v4fb5znWVmdnbP2XsX7tzd53w+\/MHuO2fPPOfM7p1n331PvTVr1qwxNAhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEKizBOoheuvs3DFwCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIeAUQvCwECEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQB0ngOit4xPI8CEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIIHpZAxCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE6jgBRG8dn0CGDwEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAA0csagAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCBQxwkgeuv4BDJ8CEAAAhCAQDETqKysNFOnTjVlZWVm4403Ng0bNqwWjp9++il1XNOmTU2LFi2q1U91DtJrz5w50yxbtsx07drVdOvWzZSUlOTUlc5\/4cKFqWNat25tGjVqlFMfNQnOxznU5PV17IwZM8x\/\/\/tfM3HiRPPNN9+YWbNmmTZt2piOHTuaAQMGmCFDhnhrJNe2aNEis3r1au8wra+2bdvm2kWtxmtdaX1pTXfu3NnUr19\/vY9n9uzZZt68eWajjTYyzZs3X2ev\/\/3335v33nsv1H+fPn3M9ttvn\/U1x44dayZNmhSK2XnnnU3Pnj1jj5s\/f7654447Qs8dfvjh3vmpLVmyxLzyyiup58V87733Xqfnvs6g0jEEIAABCEAAAnWKAKK3Tk0Xg4UABCAAAQhAQAQeffRR8\/rrr3tiTyLLb9tss43ZaaedzMknn+wsfSWgtt1221QfkkKPPfZYTqAll4455pjQMV26dDESSJna559\/bq6\/\/nrz\/vvvp4Xss88+5s9\/\/rPp0aOH0zjE4qSTTkrFnn322ebUU091OtYPqu1zyGmwgeDy8nJz9913m+uuu87aheTd3\/72t4wCL66D3XbbzUyePDn1lERydb9QsA4wTwESkTfddJMnG3\/++edQr5LeWhu77rpr7KtpzV5xxRXOIznuuOPMQQcdlBavfnQdjRs3LjSGTTfd1AwaNMiceeaZpkOHDs6v4xKoa+noo48Ohfbv39+89NJLWQ\/\/7W9\/aySJg03XwwYbbBB73Lfffmt0jQbbE088kXofUV\/qM9ieeeYZM3DgQJfTIAYCEIAABCAAAQhUmwCit9roOBACEIAABCAAgfVNYM2aNZ7Qi2bTRceh7LmRI0c6ZbXeeOON5uabb051kavoXbVqlZEMnD59emgY7du3Nx9\/\/HEsos8++8wceOCBVnz33nuvl4lqawcffLD59NNPU2FnnXWWOe2002yHpZ5Pwjk4DzYQKKGmc\/3iiy9yOjwo5bIdGCcOky56NWZ90RH8AiTuHCV6b7vttjRp\/eCDD5pLL73UmecFF1xg\/vjHP4bi33zzTXPCCSdk7UPZr\/rCRl+I5KtJ+kumRs9d0jnT6+i61RcAwbbVVluZf\/3rXxmHhejN14zRDwQgAAEIQAAC+SaA6M03UfqDAAQgAAEIQGCdEYhK2WwvJNl7yy23ZAyR3JRoimYv5ip69RqSytGWSfRKEh1yyCFWEaf+9DP3V1991SvnENdUMkFMHn\/88dDTuYre2jyH6i4WSb3\/+7\/\/88o0VKe99tprRj\/rj2v6QuGtt94yI0aMMCo7EGxJFr0qV7H77rs7rS2d0+mnn+5l1gbblVdeafQFg2uLit64zPBMfWldK9u2VatWri9njVPG9kMPPRSKU+b8sGHDYo+V9L\/wwgtDz6mPaGZwMADRa50GAiAAAQhAAAIQqCUCiN5aAs\/LQgACEIAABCCQG4EVK1aYzTbbLO2g\/fbbz6iu7ssvv5wmuCTr\/LqZOlDZjsqmVbkGlTuISjzF5CJ6p02bZgYPHhx7InGiVzWFlf0b\/Zm4fuatLMIxY8aYDz\/8MNSfSjKcd955qceUaaiaqz\/++KN59tlnY187F9FbG+eQ28zHR0vmSchFm0oTKFtVEnfu3Lle+QxJ3WhTiY+gEJwyZYq3JlT24KOPPsqYJZxk0fv3v\/\/d3HnnnaFT1TpUmQGdX1yZEGWCB+sOKxNXGbmu7eqrrzaHHnpoKvz3v\/+9t46DTax79erl9RvNfP\/HP\/7hlN3uOh5dP0cccUQoXOf\/z3\/+M7aLuPPNlgGsTrSugl+uqAbv7373uxRHSje4zhZxEIAABCAAAQjkmwCiN99E6Q8CEIAABCAAgXVCQLLulFNOCfWtEg7KYFT76quvzP777x96\/txzzw0do8w9ZfBla7mIXv1kXTI5rsWJ3rhsx0suuSRV31dZqkceeWSo5EO0xuiOO+4YK6iDY8hF9NbGOdR0gUjQi0O0qVasMlKjm9kpK\/pPf\/pTWvyTTz5pVNdZ7YUXXkjLbo0bp6vo1SZukvH616BBA9OpUyevfEA+SxVEx6cM52AZC33JMWrUqFR5hhdffNGcccYZocMkuyVi\/RasSZyt\/EgcG2WYb7fddqGnjj32WHPxxRd7jy1dutS7XoNfsESFe7TfiooKoy8jJE9btmxp+vXrl3WzRF1DO+ywQ6gusDLj\/\/e\/\/6WVqYj78kj1um3vEbb1axO92qxNmeilpaVetn69evVsXfI8BCAAAQhAAAIQcCKA6HXCRBAEIAABCEAAArVNQJI3mJmpzM3nn38+NCxJLMksv0l0BUVsPkVvtA6psgaVVey3OEkWfX2dgzZpkgj0mzZpU9ax3\/Sz9uDPzvMpemvrHGq6li6\/\/HJz\/\/33h7qRMFR92UzSTBvURddLsHRBvkSvMmeV5ZrpCwCJZZUFiG7mVVMmOl59Bzdfiwr\/OLEZzMhVyYpNNtkkNZTf\/OY3HlPXFpdlrfUsQeu3uFIJcRm0yrrXPAevZ78PjVFZ8JL3wb795y+77DLzwAMPhIatTHhlzQdbXA3mq666yhx22GFZT1lzfMABB4Ri9Hp+\/5lE76RJk7wN6sTEb5LQkuvKTg+WsJC0D24CqHMOrl+\/HnFwEFpT11xzTeohiXVJ72BTxvU555zjOqXEQQACEIAABCBQxwggeuvYhDFcCEAAAhCAQLESiEqsY445xigbNthUW1QZncGmDMcWLVp4D0kyffDBB6HnJZmCcswlo1fCTKLJz0xU+QgJlWCtzzjRG8yW1CDiNrKyza82ylJ5gWCLyjCXjN7aPAfbOdqeV6mA6EZ3EpISk5nahAkTjDJ+g2348OGp8g\/q75FHHgk9r6zLoGzTk9kyekePHm2OP\/542\/C95\/\/yl79YNyxz6igQFC2bcNRRR4U2VlPJAa3vYAsK0GhGrs4lWr8225iUQR8sJxL9okXHSnJG6+VK2u+yyy6prt9++22vfrBtQzldY\/qipEePHqFhaS6D5ST0ZFw9Yknde+65J3TsuHHjTMeOHbOir06NXm34Fi1pEXwRZfaKgy\/aoywVqy+AfBkcNwb1EXwNncvhhx8eOhfXDR5zXXvEQwACEIAABCCQDAKI3mTMA6OAAAQgAAEIQCALAdW2VY3PYIvLvIsrjfDuu++a7t27Z+xdwljH+c1F9EY3hdPx+pdN9MZlU0osLl++3KsJO378eC8bVaUaBg4c6GX5uf6ke+ONNw6dn4voTdo55HIBbLHFFiEJqHIIys5UrdR8tttvv91cd911oS4ziV7VTd5jjz2scjLYmb54UKmAfDXVob3hhhtS3Slb9L777jNbb721WbhwobnpppvSNioLfhHy5ZdfhjJV\/\/CHP3jr8+uvv\/aEt8pPaH0OHTrUi4vyjopmfQGi1ww2ZZkqkz3YgnV6Z8yYkVXYR1lJJmtDN9Xp9pvKPeg6Dn6Bs+mmm5pXXnkldLjka7BmsGsGc3VEr8scB0ttxJXZ0PuFX7JEQl0yONo++eQT065dO+\/hu+66K5Thq8c0x1oXNAhAAAIQgAAECpMAorcw55WzggAEIAABCBQUAdU7lfwMtltvvdXstddeocdUh1NZmsEmIbLllltm5JGr6NXPtrXZl99UEuDUU0\/1soWziV7Vag1mLep4STNljcY1SSdtruVS0zVX0ZvEc3BdsAsWLEj7Cb6EXfSn+q79ZYvLRfQqo1jZ1sGmn+MrE71Ro0ZGdYJHjhwZej7XjFnbOYmNWEQzYZX5GpSefj8qcaBNxPyWqZZx3OuqTMG1114b2uxw77339r6w8Fs0o9h\/PLpeg9nNupaiQnbIkCFeBr0k8d133512LpLJksrBpsx+Za8GW7BERFx5BZ1PNOs77txrIno1FxLd+nInLmNZa0RlG+LqHf\/5z382J598sjekuPIlejyY2R5lKY5RJrY1xfMQgAAEIAABCNQtAojeujVfjBYCEIAABCBQlASiYlIQ4n6CHCdg9NNsZSBmarmK3mC8JKxqsSqb0CZ64zaLs02m+n\/jjTesGXi5it4knoONhf+8fr5+4IEHhsL18\/RoyQ7X\/rLF5SJ6TzzxRG+u\/CahJ7EY3BjuhBNOMKqL7Le4LNOajluZt8oGtzXVs45uzBZX+iRbP8pAlZRt3LixFxYtryIm559\/floX0YxsPy7u+pU8Vqayn92usiXKUA62ONH\/6aefmoMPPjgUd\/3116fKRig7dsSIEaHndUzbtm1t6Ex1RW9QrKvGrv4fLRei0g3+OopurqcvmJSlq6byF8Fav\/6gg9n80fmIin3riRIAAQhAAAIQgECLine truncated
|
||||
%---
|
||||
%[output:5e5ac45c]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABPwAAAMeCAYAAACJFhrxAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQd4HMXdh0eyZFu23Kvk3rGNsU0xoSWYEiAQ\/BFTQk8IfOkJJAQSQodUSiBfQkhCIAQCARJaINTQHXoxxbgbI1tusmVbcpElS9\/zO7I7M6s93Z3KWeWd5+FJ5mZ2Z\/bd2T3d6\/\/M5NTV1dUZEgQgAAEIQAACEIAABCAAAQhAAAIQgAAEINAuCOQg\/NrFfeQiIAABCEAAAhCAAAQgAAEIQAACEIAABCCQIIDwYyBAAAIQgAAEIAABCEAAAhCAAAQgAAEIQKAdEUD4taObyaVAAAIQgAAEIAABCEAAAhCAAAQgAAEIQADhxxiAAAQgAAEIQAACEIAABCAAAQhAAAIQgEA7IoDwa0c3k0uBAAQgAAEIQAACEIAABCAAAQhAAAIQgADCjzEAAQhAAAIQaAMEVq9ebcrKysyoUaNM9+7dG9XjdevWhccVFBSYwsLCRp2nMQdVVlaakpISs379ejNgwAAzdOjQRl3HrrwGtV1aWmq2bNliioqKEteQn5\/fGByNPmbTpk3mzTffNAsWLDDz5s0zS5YsSXAcNGhQYmwccsghZo899jCdOnWKbUP34aGHHjI7d+4My4866qjEPUmW6urqzIoVK0xOTk7iupOdu9EXlcUDy8vLje6jrrdPnz5ZbNk21RzPcjodf+WVV8zChQu9qgcddFBinDSUHnjgAVNRUeFVOeGEE4zeGXFpw4YN5uabb\/aKTj755LCdpUuXmtdffz0s13vn6KOPTucSqAMBCEAAAhCAQBMIIPyaAI9DIQABCEAAAi1J4D\/\/+Y+56667zKuvvpoQZUHabbfdzJ577mnOPfdc079\/\/7S6IFk4Y8aMsO6nPvWpxLkzSS+++KI588wzvUMGDx5s1M9kSXLluuuuM\/fee2+9KhJTF110kdevhvqzq65h7ty5iWt46aWX6nVP4uIHP\/iBGT58eCYoG1X36aefNj\/60Y+8sRB3Igmdq666yuy\/\/\/71iiUIDz\/8cO\/zf\/zjH2b69OneZ9XV1eYvf\/lLYuy9\/PLLCcnpjr\/jjz\/enH766VkXno0BJ+l17bXX1rsOiVI9B+eff76ZMGFC7Kk1tq+++uq0mz3rrLOM2ERTcz7L6XbmhhtuML\/+9a+96v\/7v\/9rfvjDHzb4vO67775eucT2888\/nxC+cenDDz+sJ\/D+9re\/hc\/13\/\/+d3PBBRd4h0oCkiAAAQhAAAIQaFkCCL+W5cvZIQABCEAAAo0iILmjH+cNJYmdv\/71r0bSLVWK\/vjPVPhVVVUlRJEivdzUr18\/L3rHLVPkz0knnZSIQmsoffvb3zbnnXdeqkswu+Ia3nnnHfOFL3whZd\/+9Kc\/mZkzZ6as15gKisq79NJLzYMPPpjR4RI70TGUjvCrqalJ3I9HH320wfbGjBmTEEoTJ07MqF\/ZrPyHP\/zB\/PznP0\/ZpKTt17\/+9Xr1br\/9dnPFFVekPD6oICF7zjnnePWb+1lOtzNxIk7vjH\/\/+99JT6Ex9r3vfc8rT\/V8IvzSvSPUgwAEIAABCGSXAMIvu7xpDQIQgAAEIJCSQFwkXbKDFH3zyCOPmJ49e8ZWkaiTFIxGKWUq\/H7zm9+Y66+\/vl4byYSfpp6eeuqpiWmn6SSJmcMOO6xVXYNExoknnuhFtyW7FkWLPfbYY4lpvs2dFK132223Neq0imxzhWUq4VdbW5uIxrr\/\/vvTak\/Xq+tu7DTztBppZKVMniM1oYjGAw880GvtJz\/5iZHMTTdFhV8mfUj1LKfbB7feoYceapYtW+Yd+txzzyWNSP3ud79r\/vnPf3r1JX4bkroIv8bcGY6BAAQgAAEItDwBhF\/LM6YFCEAAAhCAQEYEvvSlL5kXXnjBO0YiYuzYsUbRQtEou6jU0dRTRaZpCuyTTz5ptGZYNGUi\/D7++GNz8MEHx15DMuGniLQ777zTO0ZTeCX1dD5N83OTytwItl19DRJfimiMyhIJlL322itxf7RGmpu+9rWv1Zu6mNGNj6n8\/vvvm2OPPbZeibgfd9xxZtq0aWbr1q3mgw8+MIpGiyaJOE0n7dGjR6IolfDTNZ1yyin1zqPxJ6msqZ3u9F5V\/PKXv2wuueSSpl5qsx\/\/P\/\/zP+bdd9\/1zquoRI1lSa9o5Kmmyv\/rX\/\/y6itCUs9cuulnP\/tZIqo1SE19ltNtN1m9\/\/u\/\/zO\/+tWvvGLJ\/7h7rMhOTe1272+qiECdeO3atebuu+8O28jNzTWnnXZauEYiU3qbehc5HgIQgAAEINA4Agi\/xnHjKAhAAAIQgECLENCad9E1tFyhoumdn\/3sZz2JJxmj6KQgaV08raHVUMpE+GmKYrJpgHHCTxsjSIq5SaJPUXxB0pp4v\/3tb7062owi2EhhV19DXGTWZZddFq5hKDmiCEZ3M4JJkyYloi2bK2ljjdmzZ9eTVmpHEX\/RjTYUaXXGGWfUW+NPUzS\/9a1vJbqVSvj9+Mc\/9uSNjtEmH1OmTEkcv3LlSnPkkUd6Uqihad0uC23+sWbNmsTmLdq4Ydy4cSYvL6+5cHnn0aYTU6dO9T7TRhKK2AvSxRdfXG8dS4lTd3MKSd9ADKZ7ncH5m+NZjsJRxK7WvxPDYcOGJf4RoKGNY7R+oe5XQ89iUKbnT5tzuMkdO429UamE36pVqxL\/CCAZm+6apI3tC8dBAAIQgAAEOhIBhF9HuttcKwQgAAEItHoCEneXX365109tGhFEaKlAMk9CzE2K4grW8mtOWRZdf0ybVLhru8VJkIcffjixoYibtPmDK6gUdfjEE0+EVbQhgKaeBjsH7+priLavCERtbuHuUKv7okjKICkCTlF3zZUUnamoQTcpYm\/OnDlJp3Dfc889iY093CT5et999yU+SiX8jjnmGG8a9tlnn11vrMVJwTfeeMP07ds30cbnPve5hJAK0i9\/+UszcODAxEYi0Yi7T3\/604nPJa+aMykyU9GYblIUmivTNSYlAd2k8T569OjERxKUklBB0g63cVGUyfrdHM9ycG7JXEXNSspFk+7v5z\/\/+YSAjttB2ZWW7vm6dOninUqRgIoIdJOeUYnZhpIE5KxZs7wqf\/7zn0PpHyf8tMu0lgjQu8SNWNY7TNGHWk\/RvRZFa7oRmbovbkRwEJ3odkLvKnf9Rv1jyX777ef1UxGY3\/\/+95tz6HEuCEAAAhCAQKshgPBrNbeCjkAAAhCAAARMYsdQd\/20uCl1Ek1RsaSIr8985jMJhBKC2lnVTRKC7k6\/6UT4bdu2LSFNginBkgr6wezKxjjhd+WVVxr94A+SpI6bT+c+7+priEqSuM0Y0rmOptS58cYbjf5z0ze+8Y3EGEmWFAEmaedO45ZEeeqppxKHpBJ+iuRzp3Rqo5TolGJJGm3k4CZ3p1\/db1fiaHpndHp3tP+K9jzqqKOagss7VgJo\/Pjx3mfRNh5\/\/HEjnm6aP3++6dy5c+KjaIRenPxsqMPN8Szr\/L\/73e\/MNddck5KNIn3\/+Mc\/mqjIi1t\/M269QolaXX+Q4qY4x3WiMWv46fkKxmTcOfXekRAM\/qEjylLHSLYHa5fG9UFrIrpLI8QJ3pbcbCflDaMCBCAAAQhAoIUJIPxaGDCnhwAEIAABCGRCILrmlyRbVPooUkURZ26KruMXbfPMM880mqYapHSEX3RXXB2v\/1IJP00LdCORvvOd7yTW7lP0lDbx0IYekgmamqoonCCqLxWnbF2DROfkyZO97khYaa281157LSFFFJGo\/mvNM8kL5Zs7xW2g0NCGC+m0n0r43XrrrZ7wkzyUdHaTpJLWqnPTM888Y0aOHJn4KCr80umX6ihysaioKN3qKet98YtfTNyvICkSTtGGuh5FAGoXY3dKthsJqWPee+89L3LtK1\/5SrheojgqalFj4JBDDknU09p1bmqOZ1kbonzzm99Mea1BheOPPz5xjW5SBF50Q5yovNS02gMOOMA7Tpu3RCNM4zrSGOGXzgUp0i\/YbEgbieh5cJOeyf333z\/xkf6RJE6Eu5GncTs26x63xg1n0uFDHQhAAAIQgEAqAgi\/VIQohwAEIAABCGSRQDTK5vTTTzdXXHFFvR4E0w6DAskLbTCQLGUqy6KSIFjLKzqdOC7CTz\/C3QgzRdpENxoJ+qkyCU2Js1QpW9eg6ahBtGTQJ4mdZDsOa6rnL37xi3BKdarrSLc8OhZ03OLFi+uJpXTPp3qphF+qc0nWSh650aI6RmvFBevxNST8Zs6caSSX3EiyoE1N6Za4bq4k2SfpF02KeIxuZCPpo6g3dxxmIttcmRi019RnORphG5xXEZMS0h999JH5\/e9\/X+\/6JOWHDBnifR7tSzRyOG7ardbtjMreuHvTFOGnqbma6h\/dACdoJxDccesh\/uAHP0hM\/VVKtpO1pmDr+VTSOpbupiwai5nswNxc45LzQAACEIAABLJFAOGXLdK0AwEIQAACEEiDwD777OPJlK9+9avmwgsvrHdkdOplsnrBgZnKMre+BIl+\/Gszg3SEX1RGpnHZibW8Jk6c2GDVbF1Dsp1xG+pcMG22uaKFtGFHdO206BTFdLhG6zRF+ElASZo8++yz3mkl1X7605+Gn8UJPwknTdEMpstKvAQbibgni6712JhrdI+Jm34cd06tcRjdaEYyyN3kI1VfJMd0XcGU2qY+y3FrAGp9T23MEiTdC0UeuilO\/sdNC3ajRaMyLJMNaBor\/B544IFwYxVFLWscRaW6u2FRdNdldyMgLXGgpQ6i6bzzzgunn0fvh5YekDwlQQLine truncated
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQeYVNX5hw+9LV1EQBQRREARG0asWBKNLYolxpYYEzX5x0hs0SjWqIndGGOK3diS2GI31qjEXlEUEZGm9I70\/\/O735zZe+7e2ZndnV0u8J7n8cEzt537nu\/O7r7zzXcarVq1apWjQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwBpLoBGid42dOwYOAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQCAigOglECAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIrOEEEL1r+AQyfAhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACiF5iAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAGk4A0buGTyDDhwAEIAABCEAAAhCAAAQgAAEIQAACEIAABCCA6CUGIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQis4QQQvWv4BDJ8CEAAAhCAwLpE4KuvvnIzZsxwm2yyiWvTpk2tbn369On541q1auUqKipqdZ7aHLRgwQI3ceJEN3PmTNelSxe34YYb1uo+Vuc96NpTpkxxCxcudN26dYvuoVmzZrXBUetj5s6d69566y33ySefuI8++siNGzcu4ti1a9coNvbYYw83aNAg16RJk9RraB4efvhht2LFivz2fffdN5qTQm3VqlVu0qRJrlGjRtF9Fzp3rW+qAQ+cPXu20zzqfjt27NiAV668VDme5VIG\/r\/\/\/c99+umnwa677LJLFCfVtQcffNDNnz8\/2OWwww5zes9Ia7NmzXI33XRTsOnII4\/MX+fzzz93b7zxRn673nf222+\/Um6BfSAAAQhAAAIQgEDJBBC9JaNiRwhAAAIQgAAEVgeBV1991d19993utddeiwSpb5tvvrnbZptt3KmnnurWW2+9koYmSTxkyJD8vt\/61reic9ek\/fe\/\/3XHHXdccMgGG2zgNM5CTVLtqquucvfff3+VXSQkzznnnGBc1Y1ndd3De++9F93Dyy+\/XGV4ElZnnHGG22ijjWqCslb7\/uc\/\/3Fnn312EAtpJ5LIu\/jii93QoUOrbJYY3nvvvYPX\/\/Wvf7mtt946eG3ZsmXujjvuiGJv1KhRkdyOx9+hhx7qjjnmmAYX3bUBJ9l55ZVXVrkPCXI9B6effrrr169f6qkV25dccknJlz3++OOd2CRbOZ\/lUgdz7bXXuuuvvz7Y\/ac\/\/an79a9\/Xe3zusMOOwTb9YHGiy++GIn+tPbxxx9XEbf33ntv\/rn+5z\/\/6c4888zgUMlfGgQgAAEIQAACECgnAURvOWlyLghAAAIQgAAEykpAUk9Spromoff3v\/\/dSbYWa0npU1PRu2TJkkgQKrMz3jp37hxk68W3KdPviCOOiLJOq2u\/+MUv3IgRI4rdglsd9\/Duu++6Qw45pOjYbr75Zjds2LCi+9VmB2Xhjhw50j300EM1OlxCLxlDpYje5cuXR\/Px2GOPVXu9TTfdNBKJ\/fv3r9G4GnLnv\/zlL+7yyy8veknJ+pNPPrnKfrfffru78MILix7vd5CI\/8lPfhLsX+5nudTBpAlYvWc8++yzBU+hGPvVr34VbC\/2fCJ6S50R9oMABCAAAQhAoD4JIHrrky7nhgAEIAABCECg1gTSMmcLnUzZdo8++qhr165d6i4StJLByazEmoreG264wV199dVVrlFI9KrEwFFHHRWVFyilScjttddemboHCazDDz88yGYtdC\/KDn3iiSeicg7lbsrOvfXWW2t1WmWyxkV1MdG7cuXKKPvygQceKOl6ul\/dd23LiZR0kVruVJPnSJdQBvPOO+8cXO23v\/2tk8QvtSVFb03GUOxZLnUM8f323HNPN378+ODQF154oWAG+i9\/+Uv373\/\/O9hfwr86mY\/orc3McAwEIAABCEAAAuUmgOgtN1HOBwEIQAACEIBAWQj88Ic\/dC+99FJwLgmoPn36OGUHJrNqkzJPJQaUiapSB08\/\/bRTTdBkq4no\/fLLL93uu++eem+FRK8yUO+6667gGJVqkMzV+fR17njTtnjG6uq+BwlPZTAnJZnE2bbbbhvNj2qgxttJJ51U5SvqdQ2IDz\/80B144IFVTiPuBx98sBs8eLBbtGiRGz16tFP2abJJwKpsQNu2baNNxUSv7ukHP\/hBlfMo\/vRhgr7CHy\/joB1\/9KMfufPOO6+ut1r247\/3ve+5999\/PzivspAVy5KdyUxzlUR5\/PHHg\/2VEa1nrtR22WWXRVnsvtX1WS71uoX2+8Mf\/uCuueaaYLM+9EmbY2Vyq4RHfH6LZQDrxNOmTXP33HNP\/hqNGzd2Rx99dL4GMqUb6jqLHA8BCEAAAhCAQCkEEL2lUGIfCEAAAhCAAAQalIBq2iZrZMZFmr7G\/+1vfzuQt5Jwykb0TXVvVSOzulYT0auvohf6unea6NWCV5Kh8SbBq6xd31Tz9o9\/\/GOwjxYZ8wtkre57SMvEPP\/88\/M1iiXFlLEcX2RqwIABUXZ1uZoWTBs+fHgVWanrKMM3uYCaMiuPPfbYKjV89VX8\/\/u\/\/4uGVUz0\/uY3vwmknY7R4m1bbrlldPzkyZPdPvvsE8jA6sp3xFloUbevv\/46WpRPC3L17dvXNW3atFy4gvNoMbGtttoqeE0LhClD17dzzz23Sp1qCfP4omOS\/V4Il3qf\/vzleJaTcJShr\/q2YtizZ8\/ow5\/qFgRUfWLNV3XPot+m50+LrsVbPHZqO1HFRO\/UqVOjD38k4UutOV7bsXAcBCAAAQhAAAJrLwFE79o7t9wZBCAAAQhAYI0lIGF7wQUXBOPXYmA+I1MbJHElQuNNWZu+Vm85JWmyvqgWH4vXbk2TX4888ki0UFy8aVGvuJhUlvFTTz2V30ULPanEgASg2uq+h+T1lXGsRcuaNGmSH7PmRZnTvinjVVm25WrKxlaWcLwpQ\/eVV14pWKrjvvvuixZsizdJ93\/84x\/RS8VE7\/777x+U2zjhhBOqxFqaDH7zzTddp06domt897vfjUSkb7\/\/\/e\/d+uuvHy0Ql8yw3XXXXaPXJS3L2ZSJrezreFPWafxDFMWk5G+8Kd579+4dvSQxLfno2y677JKaNV1o3OV4lv25JfGVJS8Zm2ya3wMOOCD64CEen36\/uKyOn69FixbBqZT5qwzgeNMzKiFfXZN4Puigg4JdbrvttvyHPWmi95NPPolKwei9JP4NBb2HKdtY9ZLj96Ls7HgGtuYl\/g0An40cH4Teq+L1mfUh2Y477hiMUxnXp512WjlDj3NBAAIQgAAEILCaCCB6VxN4LgsBCEAAAhCAQGECp59+elAfNe2r0xKMSaGoDM\/ddtstOrFE8KhRo4KLSATPnDkz\/1opGb2LFy+OZJkv\/SCZJFESl8xpoveiiy5yEj2+SebF+6XM\/+q+h6QcS1tkq5T7qMs+1113ndN\/8fazn\/3MKUYKNWV8StbGy3VInj3zzDPRIcVErzJ341\/d1wJ4ydIRknNaoCveJMH1tX81zXdc3ulr\/MkyHsnxK7t73333rQuu4FiJv8022yx4LXmNJ5980olnvI0ZM8Y1b948eimZkZsmvasbcDmeZZ3\/T3\/6k7viiiuKslFm\/1\/\/+leXFLhp9bXT6hFL0Ov+fUsrZZE2iNrU6NXz5WMy7Zx635EI9h9wJVnqGH3I4muTp41BNY\/jJXDSxH59LqJYdMLYAQIQgAAEIACBshJA9JYVJyeDAAQgAAEIQKAcBJI1PSVXk7JPmWnKMI23ZJ3e5FiOO+44p3IEvpUieiX5rr\/++vwxOl7\/FRO9+vp3PPPwlFNOiWrzKltSi7NpoTZJJJUgUNadz+Itxq+h7kGCe+DAgcFwJCpVC\/f111+PZJgykDV+yU1JK\/XL3dIWxqpuIa1Srl9M9N5yyy2B6JU01ocN8SaZqFq08fbcc8+5Xr16RS8lRW8p49I+ylTu1q1bqbsX3e\/73\/9+NF++KfNV2cW6H2X8\/vrXvw5Kb8Qzn3XMBx98EGSq\/vjHP87XQxZHZSkrBvbYY49oP9WmjbdyPMta6O7nP\/950Xv1Oxx66KHRPcabMm6TCx0mpbXKJ+y0007BcVqUL5lRnjaQ2ojeUm5Imb1+EUktEKfnId70TA4dOjR6SYsHpn0AEs80V+mYeIavn+MsLiRYCh\/2gQAEIAABCEAgJIDoJSIgAAEIQAACEMgcgWRW3THHHOMuvPDCKuP0Xy\/3GySttHBUoVZTSZqUQ75WZ7JsRFpGr+RLPKNUmXXJBeT8OLVNIttng1Y3IQ11Dyo74LOj\/Xgk9CSp05q+0v+73\/0uXzqjXEGVjAWd97PPPqsiFGtyvWKit9i5JOklDePZ4TpGtWB9vd3qRO+wYcOcpGI8c9RfU6U79IFFuZokr2RvsinDOblAoWSfslzjcVgTyRqXyP56dX2Wkxn1\/rzKkNYHEV988YX785\/\/XOX+9GFMjx49gteTY0l+UyCtvILqciclf9rc1EX0qgSDSrokFzb01\/EfbKTVOz7jjDOiEg9qKv+hbzUkmxYo1POppjrV8cX2FIvK6KVBAAIQgAAEILB2EED0rh3zyF1AAAIQgAAE1ioC22+\/fSDRTjzxRHfWWWdVucfkV+wL7ecPrKkkje8vMSbpo0WqShG9SQldygSpHED\/\/v2r3bWh7uHDDz+sUq6g2D348gjlyg7UQmzJ2qjJr6IXG1Pa9rqIXolHybLnn38+OLVk6qWXXpp\/LU30SjTqq\/i+LIKEm18gLn6yZC3n2txj\/Line truncated
|
||||
%---
|
||||
%[output:244f5944]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABPwAAAMeCAYAAACJFhrxAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQeYZEW5hqt7pidt3mWBJbkiQUAQUKKiLEpGlCwiooiKGQRBkQyKqEQBQZQsIAqoREFJihJFUWAJorBL2gAbmNnpmenu+3yNZ+5JPec\/3b27091vPY\/PvUzXqVP1Vp0O7\/5Vf6ZUKpUcBQIQgAAEIAABCEAAAhCAAAQgAAEIQAACEGgKAhmEX1PMI4OAAAQgAAEIQAACEIAABCAAAQhAAAIQgECZAMKPhQABCEAAAhCAAAQgAAEIQAACEIAABCAAgSYigPBroslkKBCAAAQgAAEIQAACEIAABCAAAQhAAAIQQPixBiAAAQhAAAIQgAAEIAABCEAAAhCAAAQg0EQEEH5NNJkMBQIQgAAEIACB1iYwNDTk+vr63Pjx41sbBKOHAAQgAAEIQAACLU4A4dfiC4DhQwACEIBAYxJ49dVX3bx589zb3\/52N2bMmKoGMXfu3OHruru73dixY6tqp5qL3nzzTTdr1iw3f\/58N3XqVLfaaqtVNY5mGEM1\/LxrtA5+9atfuWeeecb9+9\/\/djNnziy\/pDWx\/vrru7XWWsttsskm7mMf+5hrb29PfavlyTd1Z2MueOONN5zGoDU2adKkejSZuo16PKuWmz7wwAPldeAv22yzTfk9YqRy4403usWLFweq7LPPPk7vCXHl73\/\/u7v11lsDLx199NGura2t\/Lfnn3\/ePfzww8Ov631l1113tQyBOhCAAAQgAAEI1JEAwq+OMGkKAhCAAAQgsDQJ\/OUvf3FXX321e\/DBB8uizCvvfOc73aabbuoOO+wwt8IKK5i6IFm4+eabD9fdcssty22nKRIp2223nevt7Q1cdtddd7np06fHNqVrzjjjDHfddddFXt9oo43cMcccE+jXSP2pxxj+9Kc\/uYMOOihwm5VXXtmJdaVSzzGk4e2vWywWywy\/+93vRvjHtSn59\/3vf9+9613vMt+yHnzNN6tjRUmvH\/3oR+6vf\/1rgI0kqNb5kUce6dZdd93YO1544YXud7\/7nbk3WsvrrbdepH49n1VrZ84++2x37rnnBqp\/\/vOfd9\/61rdGXMtbbLFF4HXJ93vvvddlMpnY66644gp34oknBl4Tc08o\/\/rXv3ZHHXVU4HVJQAoEIAABCEAAAsuWAMJv2fLmbhCAAAQgAIGqCPzhD39w+vE+UlEkzy9+8QsnYZVUwnKgGuEncXLDDTdEbvXHP\/4xNqro9ddfd\/vtt185Em2k8tWvftUdfvjhSUNwtY4hn8+77bff3s2ePTtwrylTpgQilPwv1nsMiYOMqTAwMOA+\/elPO0V0pS2nnHKKO+CAA0yX1crXdJM6V\/rpT39aFptJ5Zvf\/Kb74he\/GKn2hS98wd15551Jlw+\/fv3115cjKP2l3s+qtTNPPfVUJJJO7wl6HiuV3\/zmN+4b3\/hG4OWk5w\/hZ50R6kEAAhCAAASWLwGE3\/Llz90hAAEIQAACiQTiotAqXaTonJtvvrniGW6SXJKCp556aqCJtMJPUYb7779\/bDfihN\/ChQvLounJJ59MHK8qSNx8+MMfjq1brzGcd9557swzz4zco5Lwq+cYTBAqVFJU2fnnn191ExJa73jHOypeXy++VXewygvTPCe6hcTV+9\/\/\/sDddtlll+Ft0ZZuhIVfmj4kPauW+4frfOhDH3L\/+c9\/An++55573BprrBHb3Ne\/\/nV30003BV675ZZbYqMWvUoIv2pmhmsgAAEIQAACy54Awm\/ZM+eOEIAABCAAgVQEFM113333Ba6RqND5bIomCkeoaTvjnnvuOVz\/z3\/+s9O5W9qieccddzidKRYuaYTf4OCgkxipFKkXJ\/yOP\/54d9VVVwVuqy28knovvvii0zZAf9Frij7ySr3HoHtuu+22sfNQSfjVOoZUk16h8qOPPup0vlq4KKpTEZfasrvSSiuVz3ITsx\/\/+MeRuu9+97vL5\/75z\/SrN996jDVtGzqn8PHHHw9cJrGpeZb0Cq9XbYX3n0VXKpVGFKFx\/fn973\/v1l577eGXan1W0445XF\/zfdZZZwX+LLn\/iU98ItK0ErwoOtG\/JT8pIlCNPPbYY4H3I53Rd\/DBBw9vAWZLb62zyPUQgAAEIACB+hBA+NWHI61AAAIQgAAElgoBnRcXPmPrM5\/5jDvuuOPK91Pyix122CEg8SQDFYXjFZ2Ld+21147YvzTC75JLLolECPobDws\/JU54z3veE7i\/RJ+i+LwSF7UmueUlWqj3GD73uc9V3OoYJ\/zqMYZaF4gEzQc+8IGIsFViBm2\/jUtKobPktE01fM7iscceW5Y0S2uNKBpSSVn0PyVzWHHFFctbzS3bzavhpKQTEpn+oghUnXHoFY05fE7lE088MZycInxmoaS55Lm11ONZDd9L0ZY6\/04cV1999bLkz+VyFbsk0bvTTjuN+Kx5L8bJY23v\/cpXvmIdcmy9JOH3yiuvlCW\/ZKz1zNGaOsTFEIAABCAAgRYlgPBr0Yln2BCAAAQg0BgE4rbP\/eMf\/3Djxo0bHoBknoSYv0j0eHKlnrJMP9bf9773Dd9K2Te1BdBfwsJPSRCUUMRftCVYmVO9oqhDRUt5RQkDJFy8zMH1HEP4jLXwGOKEXz3GUOuKizujTYko7r\/\/\/opbuHVPnbOo6D9\/CScmqRdfyanTTjutokzdbLPN3Kc+9am6Z23VNlZtZ\/WXa665JiDL47ahay2sueaa5cv+9a9\/ud133324CSWeOPTQQ83TVo9n1buZ5loRpZJy4SJ5\/pGPfKS8Rd7LjOuvo3Mpw9GMaq+zszPQlCIBwxGg4YjFuMFL6J100kmBlxT1N1LSjqeffrq8fV7vFf6IZK1DRR\/qPEX\/WBSt6R+D5KA\/4teLTvR3Qs+x\/\/xG\/WPIVlttFeinIjCPOOII85xSEQIQgAAEINDIBBB+jTx79B0CEIAABJqeQDgxRtyWOwnAPfbYI8Di0ksvdR\/84AfLf5MQVMZSf5EQ9Gf6tUb46UB\/T\/Dpx7qi9PySRPcIC7+TTz7ZXXbZZcO3V5Sa\/78tk1ivMSxZsqQshrxtzRInkgJ+YRon\/OoxBss4R6qjbbhHH310oIqSm2hORiragq21EN7K7Y9uqwdfZWc+5JBDTMNU5tikJDSmhv5XSQJonXXWCVyicw533nnn4b\/dfvvt7ktf+lKgzsyZM11HR0f5b+HXRzpHMq5v9XhW1e5PfvIT98Mf\/jBx+IrkvfjiiyMiL+5sSst5heEtzpU6UM0ZfpKQIyVD0TMpIej9Q0ZcQiAdSzB+\/Phyt+Lkt85E9B99ECd4f\/7zn7sZM2YksqUCBCAAAQhAoBkIIPyaYRYZAwQgAAEINC2B8JlgElTnnHNOYLyKZNGZd\/4SPscvDOiggw5ySjDgFYvw0zlvis7yygUXXFA+v0w\/5v0lLPx05pw\/UulrX\/ta+ew+RVcpiYe2f0o2rL\/++uXILy+qL2lSqxlDOPOsGOh\/ScJvaY0haYz+17\/zne84Ra35i6L7pk2blthM3NluSckZ0vB9+eWX3Y477hjZOjxSxyQZN99888S+Wyt8\/OMfdw899NBwdUXC\/eAHPyhnjFYEoCTjww8\/HHhdEtUr4a3qJ5xwQrm+5JKu1\/rUGYl77bWXU6RiuNTjWb3tttvcl7\/8ZeuQ3d57710eo78oyjKc8EYi1r\/Gw5G6ut4a0ViN8LMMSJF+XjIhJRJRQhF\/0RmgW2+9dflPcVGr+vsjjzziJk+eXK4Tl7H5n\/\/8p1NULAUCEIAABCDQCgQQfq0wy4wRAhCAAAQalkA4a+iBBx4Y2U6nwXnbEr2BJkVQpZE5alNniakvXgZQTxBq212S8NOPdH90mSJxwolGvH7rNQlNJRNIKmnHEBYh3nll4S3RcRF+S2sMSWP0vx6XQfa5555z2Ww2sZm4LcnhCLhwI2n4Xn755ZF1eeKJJ5bFmCLoJLLCGZHDEipxEAkVJPsk\/cJFkajh6EZJH4kr\/zrTNlWNw1L23XdfpzMB\/XK61mc1HH3q9eOTn\/yk22CDDdx\/\/\/tfd9FFF0W6J2G96qqrBv4e7ks4MjjunL24ZDtxLGoRftqaq638DzzwQCxmL6Nw3HmI3\/zmN8tbf1VOOeUUpyjmcNH86UxLFZ1F6E\/Kosg+RfhRIAABCEAAAq1CAOHXKjPNOCEAAQhAoCEJSJj4t94qAUN4W6cGtuGGGwaiqyrV8yCkkTm6JrzN0IsOswi\/sIy0TERS9JnaSDsGf31JIAmO7u7u8pbnpAi\/pTUGCwuvTrgPloyq3rWKVNtvv\/0Ct0tK0JCGr9abf8umpKm2jfsTTGgLr6I6vWLdQpqGkdZN0hZntafIvnAimZESucT1QdLPf2Zcrc9qnEiTNPVH1d59993us5\/9bKA7cXI\/bluwJ9PiZJiiF2+++WYT6mqF34033jicWEVRyZKzivD1F39ConDWZX+iHx1hoKMMwsW\/xT08H9qWL3lKgQAEIAABCLQKAYRfq8w044QABCAAgYYkEJY8lc5sC\/+4DcuI8ODTyBxF4+ncPa9IQEhEqNQq\/CSG\/ELTu4cyrioKKS4pgVcnzRjCWyW1xVXbh1VqFX61jCHNogyvBW3j9icyGKmtcEIK1dUWVCWGqFTS8A1HU6lN9U9iRmJNcq+vr88tWrRo+HZdXV11zdKqCDltF5fITSp6XhTt5Y\/Q0zlyXgSrd73mdvr06eXourh16j8TrtZnVeLuuuuuC3T98ccfD\/SxWCw6nd3nj1iME79Line truncated
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQeYJEX5\/9+dTZe4yB1HRgROQJAgIP5AD5SMKFlERBGVoAiCJMkgQckiIkiOogKSg8KBShL+KBIOBBTuCN4RLnB7G2f+z7f3eunp6Zmq3p2dnZ351PPw6G3XVFd9qrpn+jPvvNWQy+VyRoEABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIFhS6AB0Tts546OQwACEIAABCAAAQhAAAIQgAAEIAABCEAAAhAICCB6WQgQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABIY5AUTvMJ9Aug8BCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAANHLGoAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgMMwJIHqH+QTSfQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACiF7WAAQgAAEIQAACEIBATRHo7u62trY2Gzt2bE2Ni8FAAAIQgAAEIAABCECgFAFEL+sDAhCAAAQgAIFhS+Cdd96xd9991z72sY\/Z6NGj+zWOuXPn9r1u5MiRNmbMmH61058XffjhhzZr1ix77733bPLkybbCCiv0axy1MIb+8Atfo3Xwu9\/9zl5++WV79dVXbebMmcEhrYm11lrLVlttNVt\/\/fXtK1\/5ijU1NaU+1VDyTd3ZhBd88MEHpjFojU2YMKEcTaZuoxzXqs9JH3\/88WAdRMvmm28e3CNKlVtvvdUWLlyYV2X33Xc33ROSyj\/+8Q+7++678w4dddRR1tjYGPzttddes7\/\/\/e99x3Vf2WGHHXyGQB0IQAACEIAABCDQbwKI3n6j44UQgAAEIAABCAwFgUcffdRuuOEGe+KJJwJBGpZPfOITtsEGG9ihhx5qSy+9tFfXJIk33njjvrqf+cxngrbTFAm0Lbfc0hYtWpT3sgcffNBWWWWVxKb0mnPOOcduvvnmguPrrruuHXvssXn9KtWfcozhL3\/5i+277755p5k6daqJdbFSzjGk4R2tm81mA4Y\/\/elPC\/gntSnpe+aZZ9onP\/lJ71OWg6\/3ycpYUbLz7LPPtsceeyyPjeS31vkRRxxh06ZNSzzjJZdcYrfffrt3b7SW11xzzYL65bxWfTtz\/vnn24UXXphX\/bvf\/a4dffTRJdfyJptskndcX7o8\/PDD1tDQkPi6a665xk466aS8Y2IefpHw+9\/\/3o488si845K\/FAhAAAIQgAAEIDCYBBC9g0mXtiEAAQhAAAIQKCuBP\/3pTyZpU6oocu\/66683iUpXiUuh\/oheCbNbbrml4FR\/\/vOfE6MI33\/\/fdtzzz2DyNNS5Qc\/+IEddthhriHYQMfQ0dFhW221lc2ePTvvXJMmTcqLSIweLPcYnINMqNDZ2Wnf\/OY3TRGcacupp55qe++9t9fLBsrX6yRlrnTppZcGQttVfvzjH9uBBx5YUO173\/uePfDAA66X9x3\/wx\/+EERMR0u5r1Xfzrz44osFkbO6J+h6LFZuu+02+9GPfpR32HX9IXp9Z4R6EIAABCAAAQhUkgCit5K0ORcEIAABCEAAAv0mkBR1WqwxRePdeeedRXO0Sm5KBp922ml5TaQVvYoq3muvvRK7kSR658+fHwjGF154wYuDhN0Xv\/jFxLrlGsNFF11k5557bsE5ioneco7BC0KRSooi\/eUvf9nvJiQyP\/7xjxd9fbn49ruD\/XxhmutEp5Cw3GyzzfLOtv322\/elv\/DpRlz0pumD61r1OX+8zhe+8AX7z3\/+k\/fnGTNm2EorrZTY3A9\/+EO744478o7dddddiVHKYSVEb39mhtdAAAIQgAAEIDDYBBC9g02Y9iEAAQhAAAIQKAsBRW8+8sgjeW1JUCn\/qqIH4xGp+tn6Lrvs0lf\/r3\/9qymvpn6Kf\/\/995tyhsZLGtHb1dVlEmLFInOTRO8JJ5xg1113Xd5plapBMveNN94w\/dw7WnRM0YZhKfcYdM7p06cnzk8x0TvQMZRjMTz99NOm\/KnxoihuRVgrNcMyyywT5GoVs1\/84hcFdT\/1qU8FeX2jOXvLzbccY03bhvIQP\/vss3kvk9DWPEt2xterUp5Ec83mcrmSAjypP\/fdd5+tvvrqfYcGeq2mHXO8vub7vPPOy\/uzvtT52te+VtC0Nu5TNHI09YorAliNPPPMM3n3I+Xg3W+\/\/fpSPZC6YaCzyOshAAEIQAACEOgPAURvf6jxGghAAAIQgAAEKkpA+WDjOTS\/9a1v2fHHHx\/0Q5uabb311nnyVhJYUXdhUd7bm266qWS\/04jeK664oiAiONp4XPRqQ6wNN9ww7\/wSvIraDUtSlKqkZriBVrnH8J3vfKfoT9qTRG85xjDQhSMx97nPfa5A1GvDLaVZSNpsTLlilY4gnkf5uOOOC+TcYK0RRT9rsz39p026pkyZEqQU8Ukr0h9O2kxMAjtaFHGuHMZh0Zjjeaiff\/75vk3H4jmJ9WWJvjTxLeW4VuPnUnS18tuK44orrhh8udPc3Fy0SxL82267bclrLTyY9KWB0jh8\/\/vf9x1yYj2X6H377beDL3ck4X1zig+oQ7wYAhCAAAQgAIG6IIDorYtpZpAQgAAEIACB4U0g6WfS\/\/znP22ppZbqG5gkrkRotEjwhVKtnJJUkub\/\/u\/\/+k61ww47mH7qHS1x0avNrbRRXLQo9cPkyZP7\/qQoY0VHhkUbQUm0KVpQpZxjiOdQjY8hSfSWYwwDXYlJOVi1wdjf\/va3oqk6dE7lUVa0b7TEN5wrF19JyTPOOKOoRN9oo43sG9\/4RkEu2YGyUboCpS2IlhtvvDHvS5KkdCNaC6uuumrwsueee8522mmnvia0odgBBxzg3bVyXKvhyTTXiiCXjI0XfWnypS99KUiFIokeL8o7HY9eVnutra15VRX5G4\/4jkcoJw1eIvfkk0\/OO6Qo31Kbsb300ktBmhTdK6K\/QNA6VLSx8iVHx6Lo7OgYJIWjEf5hNHK0E7qOo\/mZ9SXYpptumtdPRVwffvjh3nNKRQhAAAIQgAAEhg8BRO\/wmSt6CgEIQAACEKhbAvENz5J+Wi3xu\/POO+cxuvLKK+3zn\/988DeJ4MceeyzvuETwe++91\/c334hebdQUil1JGkXlRuWYGoyL3lNOOcWuuuqqvnMpKjX6b5\/JLdcYFi9eHAjBMH2FhJlkUFSUJ4necozBZ5yl6ijdwlFHHZVXRZvWaU5KFaXa0FqIp+yIRrOWg++DDz5o+++\/v9cwjz76aOfmgl4NLakk8bfGGmvkvUR5jLfbbru+v91777120EEH5dWZOXOmtbS0BH+LHy+VJzqpb+W4VtXur371K\/v5z3\/uHL4i9y+77LICgZuUe9onH3E8lUWxDvQnR6\/kc6lN7nRNSgSHX2AlbfSo9DNjx44NupX0pYdyHkdT3CSJ\/csvv9y22GILJ1sqQAACEIAABCAw\/AggeoffnNFjCEAAAhCAQN0RiOf8lJi84IIL8jgock05baMlnqc3Dm7fffc1bRwVFh\/RqzyuisYMy8UXXxzkJ5XEiZa46FVO2Whk4iGHHBLk5lU0pTZn08\/8JZnWWmutINIzjOJ1TXZ\/xqAUBxdeeGFf02Kg\/1yid7DG4Bpj9PhPfvITU5RqtCiad9lll3U2k5S71bXpVhq+b731lm2zzTYFKSJKdUxyeeONN3b23bfCV7\/6VXvyySf7qivy9Wc\/+5npyxFF\/Eou\/\/3vf887LnkelnhKkhNPPDGoL6mo12t9KgfyrrvuaopMjpdyXKv33HOPHXzwwb5Dtt122y0YY7Qoqjq+kaEEfHSNxyPz9XrfCOb+iF6fASmyN9wkUhvEaaO4aFGO789+9rPBn5Ki1PX3p556yiZOnBjUkaiPRvjqb\/\/6179MUfAUCEAAAhCAAARqjwCit\/bmlBFBAAIQgAAEao6ANj1T1GFY9tlnn4KfTetY+PPzsJ4rYjKNxFObyhWqvkh4qYRiWD+vdoleyZloNKki7+IbyIX91jGJbG0S5SppxxAXYGE+0njqi6SI3sEag2uM0ePxtaBjr7zyimUyGWczSakn4hGv8UbS8L366qsL1uVJJ50UCFFFzEpgKmIzWuLy0TkIRwVJXsneeFHkeTyaWbJPwjK6zpSOQOPwKXvssYcp52\/0S4mBXqvxaPOwH1\/\/+tdt7bXXtv\/+97\/261\/\/uqB7+qJi+eWXz\/t7vC\/xXwIk5dFN2kQxicVARK9SMChly+OPP56IWZvmrbTSSpaU7\/jHP\/5xkOJB5dRTTzX9aiFeNH\/KWa2iXMPRzfYUyauIXgoEIAABCEAAArVJANFbm\/PKqCAAAQhAAAI1RUCiLJpiQRtrxX++rwGvs846edGUxeqFcNJIPL0m\/nPyMBrUR\/TGJbTPBLmiTdVG2jFE60v+SWyNHDkySG3hiugdrDH4sAjrxPuQlMajWHuKTN1zzz3zDrs23krDV+st+tN8yXKlB4luHPbd7343iOIOi2+qgDSMtG5cqSzUniJ54xsEltqgL6kPkr3RiNGBXqtJAlWyPBpF\/9BDD9m3v\/3tvO4kfamTlP4hlKh6cVyCKlr5zjvv9ELdX9F766239m2Yp18hSMoroj9aohtNKk\/vs88+23c4uoGjUtUoZU28RFOZxOdD6VckzSkQgAAEIAABCNQmAURvbc4ro4IABCAAAQjUFIG43CuWkzUuNeISKg4ljcRT9K3y6oZF4kkCSmWgoldCMCqyw3N86lOfMkUdJm02FdZJM4b4T+KVykBpIlQGKnoHMoY0izW+FpSuI7pBVLine truncated
|
||||
%---
|
||||
%[output:2f867eb6]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>scientaPassEnergy_eV<\/strong>\n <strong>__________________________<\/strong> <strong>________________________<\/strong> <strong>____________________<\/strong>\n\n {'0146146_Al2p_850eV.ibw'} {'29-Nov-2025 15:25:25'} 50 \n\n","truncated":false}}
|
||||
%---
|
||||
%[output:30898c2d]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABPwAAAMeCAYAAACJFhrxAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Ql4XXWduPHfzd7QUqC0FWmhFilLBQVB2QcRLDgiIuIIMqOgIo4g4qPA8JcRXAZREUaRdQQFUaaDFGFmYHApyvKgLCLYsgkIRJYWaOma7eb+n3NCQ8IJzftNmqTtffM884xNvme57705ST6cc0+pUqlUkh8WGMUCN954Y3rve9+b78F5552XTjzxxFHcG77pd73rXelPd7+cdnrz9wsLlUq1fEWvTHZ1Lo8tE9xGTW1TbP2DmC53LAkvVappCC1TKbcG59tD89lwTcOGhWXaOhbmn2usnxheX38LRF8j0bb1zZuH97OrY2loma7yytB8NlzbuGlomXLbC6H5mtoxoflsuL\/vvbbO7u021vWzv6Wa8Daij7sSbBv9vshf53UbhB5HaRDHkJrmTULb6FrxUmh+MMM1jf18f7c92\/18N25WXOUgnu9Sc6xtiv4q1hg7bmYPqm3a+FCuFRvEfz1sHdcR2kbbJrFjzqPTngytPxuetsHThWU6F7yYf65u0oTC13bb4M7wNnbqeji0zH7LHwzNl0ul0Hw2PKkjdpyauGvwd5DsGPL82NB+1a+oC82nF4rfqwOtoKtSbNWysC1fbMrExsLitePjj\/srtdsOtBt9vl5XKYfmr2l9f2g+G56\/dEZomamL4r\/L1LfWh7Yx7vFJofmxy2Kv2Wzlzc91P7e9P1pXtOT\/bGqeUtx+V\/y4FnoQ2fCSFbFFumKvj2zl5Ze7fyelHzUNwZ9J2e9G7bHvjZr62O9flc747+dd7YsLD7mtY0H+ucb6fl5vwb+VsvWU6ppp1u65rtjPvUpwPrYz3dOVrkG0jf4dGtyx6N972eprGzYqPt\/tz3c\/3w2TC18L\/y09iN+Fw89f8PifP6jg38a1TcVOveOUBL\/gq9XxNV7g9NNPT1\/\/+tfz9Z5yyilp7NjV\/wI5ZsyYdNJJJ6WamvgvBmty5wW\/Ys0oSuU\/WIMHtShsVMrxH3qCH\/tOEfxYp\/yXliB0Cn68bXRS8GPFBD\/WKZsS\/FgrwY91EvxYp2xK8GOtBD\/WKf+7RPDjsQKT0b\/38t+dBT9UWPBDmRwazQJ77bVXuv3220O70Nramhobi\/+lNrSSIQ4LfoLfUF5CnuHH6nmGH+sUhfBsrZ7h92rbNs\/wK7zQBD\/2vSf48U6CH2sl+LFOgh\/vJPjxVoIfbxWZFPwCtYInwwh+gbaOjnyBzs7OVF8fu0Qg20vBL\/tPULHLhr2kl7++PcOPtfIMP9Ypm\/IMP9bKS3pZp+QlvTCUl\/TSUF7SS0ul5CW9rJWX9LJOyUt6YajsMmMv6SWxvKSXVOqeif7Hby\/p5W2dtMA6X8Az\/IpPoZf08pe1Z\/ixVp7hxzp5hh\/rlP9y53v4oVie4Ycy5UNe0staeYYf6+QZfqxTNuUlvayVZ\/ixTtmUZ\/jxVpFJz\/AL1PIMv0AsRy0wjAUEP8FvKC8vwY\/VE\/xYJ8GPdRL8eCfBj7cS\/FgrwY91EvxYJ8GPdxL8eCvBj7eKTAp+gVqCXyCWoxYYxgKCn+A3lJeX4MfqCX6sk+DHOgl+vJPgx1sJfqyV4Mc6CX6sk+DHOwl+vJXgx1tFJgW\/QC3BLxDLUQsMYwHBT\/AbystL8GP1BD\/WSfBjnQQ\/3knw460EP9ZK8GOdBD\/WSfDjnQQ\/3krw460ik4JfoJbgF4jlqAWGsYDgJ\/gN5eUl+LF6gh\/rJPixToIf7yT48VaCH2sl+LFOgh\/rJPjxToIfbyX48VaRScEvUEvwC8Ry1ALDWEDwE\/yG8vIS\/Fg9wY91EvxYJ8GPdxL8eCvBj7US\/FgnwY91Evx4J8GPtxL8eKvIpOAXqCX4BWI5aoFhLCD4CX5DeXkJfqye4Mc6CX6sk+DHOwl+vJXgx1oJfqyT4Mc6CX68k+DHWwl+vFVkUvAL1BL8ArEctcAwFhD8BL+hvLwEP1ZP8GOdBD\/WSfDjnQQ\/3krwY60EP9ZJ8GOdBD\/eSfDjrQQ\/3ioyKfgFagl+gViOWmAYCwh+gt9QXl6CH6sn+LFOgh\/rJPjxToIfbyX4sVaCH+sk+LFOgh\/vJPjxVoIfbxWZFPwCtQS\/QCxHLTCMBQQ\/wW8oLy\/Bj9UT\/FgnwY91Evx4J8GPtxL8WCvBj3US\/FgnwY93Evx4K8GPt4pMCn6BWoJfIJajFhjGAoKf4DeUl5fgx+oJfqyT4Mc6CX68k+DHWwl+rJXgxzoJfqyT4Mc7CX68leDHW0UmBb9ALcEvEMtRCwxjAcFP8BvKy0vwY\/UEP9ZJ8GOdBD\/eSfDjrQQ\/1krwY50EP9ZJ8OOdBD\/eSvDjrSKTgl+gluAXiOWoBYaxgOAn+A3l5SX4sXqCH+sk+LFOgh\/vJPjxVoIfayX4sU6CH+sk+PFOgh9vJfjxVpFJwS9QS\/ALxHLUAsNYQPAT\/Iby8hL8WD3Bj3US\/FgnwY93Evx4K8GPtRL8WCfBj3US\/HgnwY+3Evx4q8ik4BeoJfgFYjlqgWEsIPgJfkN5eQl+rJ7gxzoJfqyT4Mc7CX68leDHWgl+rJPgxzoJfryT4MdbCX68VWRS8AvUEvwCsRy1wDAWEPwEv6G8vAQ\/Vk\/wY50EP9ZJ8OOdBD\/eSvBjrQQ\/1knwY50EP95J8OOtBD\/eKjIp+AVqCX6BWI5aYBgLCH6C31BeXoIfqyf4sU6CH+sk+PFOgh9vJfixVoIf6yT4sU6CH+8k+PFWgh9vFZkU\/AK1BL9ALEctMIwFBD\/BbygvL8GP1RP8WCfBj3US\/HgnwY+3EvxYK8GPdRL8WCfBj3cS\/HgrwY+3ikwKfoFagl8glqMWGMYCgp\/gN5SXl+DH6gl+rJPgxzoJfryT4MdbCX6sleDHOgl+rJPgxzsJfryV4MdbRSYFv0AtwS8Qy1ELDGMBwU\/wG8rLS\/Bj9QQ\/1knwY50EP95J8OOtBD\/WSvBjnQQ\/1knw450EP95K8OOtIpOCX6CW4BeI5agFhrGA4Cf4DeXlJfixeoIf6yT4sU6CH+8k+PFWgh9rJfixToIf6yT48U6CH28l+PFWkUnBL1BL8AvEctQCw1hA8BP8hvLyEvxYPcGPdRL8WCfBj3cS\/HgrwY+1EvxYJ8GPdRL8eCfBj7cS\/HiryKTgF6gl+AViOWqBYSwg+Al+Q3l5CX6snuDHOgl+rJPgxzsJfryV4MdaCX6sk+DHOgl+vJPgx1sJfrxVZFLwC9QS\/AKxHLXAMBYQ\/AS\/oby8BD9WT\/BjnQQ\/1knw450EP95K8GOtBD\/WSfBjnQQ\/3knw460EP94qMin4BWoJfoFYjlpgGAsIfoLfUF5egh+rJ\/ixToIf6yT48U6CH28l+LFWgh\/rJPixToIf7yT48VaCH28VmRT8ArUEv0AsRy0wjAUEP8FvKC8vwY\/VE\/xYJ8GPdRL8eCfBj7cS\/FgrwY91EvxYJ8GPdxL8eCvBj7eKTAp+gVqCXyCWoxYYxgKCn+A3lJeX4MfqCX6sk+DHOgl+vJPgx1sJfqyV4Mc6CX6sk+DHOwl+vJXgx1tFJgW\/QC3BLxDLUQsMYwHBT\/AbystL8GP1BD\/WSfBjnQQ\/3knw460EP9ZK8GOdBD\/WSfDjnQQ\/3krw460ik4JfoJbgF4jlqAWGsYDgJ\/gN5eUl+LF6gh\/rJPixToIf7yT48VaCH2sl+LFOgh\/rJPjxToIfbyX48VaRScEvUEvwC8Ry1ALDWEDwE\/yG8vIS\/Fg9wY91EvxYJ8GPdxL8eCvBj7US\/FgnwY91Evx4J8GPtxL8eKvIpOAXqCX4BWI5aoFhLCD4CX5DeXkJfqye4Mc6CX6sk+DHOwl+vJXgx1oJfqyT4Mc6CX68k+DHWwl+vFVkUvAL1BL8ArEctcAwFhD8BL+hvLwEP1ZP8GOdBD\/WSfDjnQQ\/3krwY60EP9ZJ8GOdBD\/eSfDjrQQ\/3ioyKfgFagl+gViOWmAYCwh+gt9QXl6CH6sn+LFOgh\/rJPjxToIfbyX4sVaCH+sk+LFOgh\/vJPjxVoIfbxWZFPwCtQS\/QCxHLTCMBbrBb0naeesfFLZS6eoIb7lU2xRbplIOzXd1Lg\/NZ8OV4DbqmiaFtxFdINq2s3VBdBOppp\/noq1jYb6exvqJhfWFn7uUUhT8Uqk29jiCz91gnu+ujqWxfcpeU+X20DJ1zZuF5svti0Lz+ePu5\/u1rfOF7ue7btPi811TH95GXfPmoWW62l4KzZc7loTms+H+XuerXUn0NZhto37D0H6VSjWx+YaxoflsuFRTV1imre3Z7ue7sZ\/XW01sn\/JtNAaP59FH0dQYXSJ1bbJBaJklk4LHnNDau4cXvuWZ0FLlutjPvWzlT018uriNha\/8XJhY\/Jl12CY3hfYpG35Tagkt8\/lFd4fm547dODSfDR+63VOhZSorGkLz2XDzXyaElulsjW8jtIGU0tM13T+re388u7Az\/+dmE4vf+2+qjbe9fEzs+3t27f6hh\/G31mmh+Wy4pT32XCxvjf++tu0DM2L7VaqE5ic83Ryaf73htmXd34+NY6cURhqfjP+sTHXBY2Fb7G+AypKXw4+70tX9mqYfpbr4916lbQVdfT4X\/f08DeL31P5+72zr6D6eN9YXX9OVrtjvnNl6ahtj30vRx13TMD7UNW9bbgstU6qN\/47Qubyfn5Wr2WpNXex3itADeGW4v79DV\/d8DwYVo6\/D6N\/Gg9mn6N8yA70GS5VKJXY0Hsyz5TIWWA8LCH7FJ1Xw4y90wY+1EvxYJ8GPdcqLine truncated
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQe4HFX5h7\/dvSU9gZDQMSKEIiC9CUpVEQQpigiIIipYEKQJfyBSRJQqoqJIExREpAnSFAERAcWCGkoAKaGFUJKQ5Lbd\/T+\/uZnLzOzszjl7997cu\/c9z8PDk7vfnDnzzpnZ2Xe\/\/U6uXC6XjQYBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAALDlkAO0Ttszx0DhwAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAQEED0MhEgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCAxzAojeYX4CGT4EIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAUQvcwACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwDAngOgd5ieQ4UMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQQPQyByAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIDHMCiN5hfgIZPgQgAAEIQGAkEXjllVds7ty59u53v9vGjh1b16G\/9tprfduNHj3axo0bV1c\/9Wz09ttv2wsvvGCvv\/66TZkyxVZZZZW6jmNpHoP2\/dJLL9nChQttxRVXDI6htbW1Hhz92kbjuO222yr6+NCHPmQrrLBCzb51Hm666SYrFot9cbvssktwTqq1crlss2fPtlwuFxx3oVDo1\/iX5sZvvvmmiZ+Od5llllkqQ2nEtewy8AcffNCefPLJWOi2224b3ENqtRtuuMEWLFgQC\/nEJz5humektTfeeMMuuuii2Ev77bdf336eeeYZ++tf\/9r3uu47u+66q8shEAMBCEAAAhCAAAScCSB6nVERCAEIQAACEIDA0iDwwAMP2C9\/+Ut76KGHAkEatrXXXts23nhjO+KII2y55ZZzGpok8eabb94Xu+WWWwZ9+7Q\/\/elPdtBBB8U2kVjUOKs1SbVzzjnHrr322oqQDTbYwE444YTYuGqNZ2kdw7\/+9a\/gGO6\/\/\/6K4UlYHXPMMbbaaqv5oOxX7MUXX2zf+c53Kvo48sgj7Wtf+1rNvp9++mnbeeedYzG\/+c1vbKONNor9rbu7237+858Hc+8vf\/lLILej82+fffaxAw88cKmIbl94kp1nn312xXHoCxNdB0cffbSttdZaqd1qbp9++unOuzz44INNbJKtkdey62DOP\/98u+CCC2LhX\/ziF+2b3\/xmzet1iy22iL2uLzTuvffeQPSntccee6xC3F5zzTV91\/V1111nxx57bGxTyV8aBCAAAQhAAAIQaCQBRG8jadIXBCAAAQhAAAINJfD73\/\/eJGVqNWXm\/eIXv8jM4lQfSenjK3o7OzsDQajMzmibPHlyLFsv+poy\/fbdd1+TXKzVJCclKbPa0jiGf\/7zn7bXXntlDc0uueQS23777TPjGhHw0Y9+1B5\/\/PGKriTk7rvvvpq7cBG9PT09wfm49dZba\/b1nve8JxCJ66yzTiMOa0D6+OlPf2pnnnlmZt+S9YcddlhF3BVXXGGnnHJK5vZhwPHHH29f+MIXYvGNvpZdB5MmYHXP+MMf\/lC1ixtvvNG+8Y1vxF7Puj4Rva5nhDgIQAACEIAABAaSAKJ3IOnSNwQgAAEIQAACdRNIy5yt1pnk3i233GITJkxIDZGglQxOZiX6it4LL7zQzj333Ip9VBO98+bNs\/33399mzpzpxEFCbqeddhpSxyCB9clPfjKWzVrtYJQdqnIKOh8D2dKkWnR\/+tn9+973vqpDyBK9pVIpyL68\/vrrnQ5Dx6vjrreciNNO6gzyuY60C2Uwb7PNNrG9ffvb3w4kvmtLil6fMWRdy65jiMbtuOOO9r\/\/\/S+26T333FM1A\/3rX\/+6\/fa3v43FS\/jXkvmI3nrODNtAAAIQgAAEINBoAojeRhOlPwhAAAIQgAAEGkLgs5\/9bEVmpgTUGmusYcoOTGbV6mfp0axTlRhQJqpKHdx5552mmqDJ5iN6n3\/+edtuu+1Sj62a6D355JPtqquuim2jUg2SuepPP+eONr2mbMKwLe1jkPBUBnNSkkmcbbLJJsH5UQ3UaDv00EMrfqLekAkR6UQlJH74wx9W7faQQw4JymFUa1miV8f06U9\/umJzzT99maCf8EfLOCjwc5\/7nJ100kmNPtR+9\/fxj3\/cHn300Vg\/ykLWXJbsTGaaqyTK7373u1i8sup1zbk2ldRQFnvY+nstu+63WtwPfvADO++882Iv60uftHOsTG6V8Iie36wMYHU8Z84cu\/rqq\/v2kc\/n7YADDuirgUzphv6eRbaHAAQgAAEIQMCFAKLXhRIxEIAABCAAAQgMKgHVtE3WyIyKNC2mpUW3ovJWEk7ZiGGT6FONzFrNR\/Tqp+jVfu6dJnq14JVkaLRJ8CprN2xpwvKRRx7pk0NL+xjSMjFnzJjRV6NYUkwZy9FFptZdd90gu3qgmuSz5ka0XnNyXzofqqnb0tKSOows0ft\/\/\/d\/MWmnTrR42\/rrrx\/09+KLL9pHPvKRmAysVb4jOggt6vbqq68Gi\/JpQa4111yz6jj7y1CLiSUzm7VAmDJ0w3biiSdW1Kn+73\/\/G1t0TLI\/FMKuxxn234hrOclBGfqqbyuGq666avDlT60FAVWfWOer1rUYvqbrT4uuRZvKOHz1q1\/t1+nIEr0vv\/xy8OWPJLxrzfF+DYiNIQABCEAAAhBoSgKI3qY8rRwUBCAAAQhAYHgTkLD91re+FTsILQY2fvz4vr9J4iazNrXYkxZGU2ukJE3WF9XiY9HarWny6+abbw4Wios2Leo1ZcqUvj9JVN9xxx19\/9ZCT8pKlgAcCseQZKiMYy1aVigU+sas86LM6bAp43XPPfccsAkohpKV0aYs1GS93rQSBOE2WaJ3t912i5XbSMsQTpPBf\/vb32zZZZcNdqMawhKRYfve975nU6dOtdNOO60iw\/YDH\/hA8HdJy0Y2ZWIr+zralHUa\/RIljafm++qrrx5sJjEt+Ri2bbfd1lSz17U14loO96XyCMqSl4xNNn2p8rGPfSz44iE6P8O4qKyO9tfe3h7rSpm\/ygCONl2jEvK1msTzHnvsEQu5\/PLL+77sSRO9TzzxRFAKRveS6C8UdA9TtrHqJUePRdnZ0QxsnZfoLwDCbOToIHSvitZn1pdkW221VWycyrg+6qijXE8pcRCAAAQgAAEIDGECiN4hfHIYGgQgAAEIQGCkEjj66KNj9VHTfjotwZgUipdddpl98IMfDLBJBCurM9okgqOZoC4ZvYsXLw5kWZg9LJkkURKVzGmi99RTTzWJnrBJ5kX\/7XJul\/YxJOVY2iJbLsfRyJi0DFSJMgmtaFNd4WoLkGWJXmXuRn+6rwXwdt9991j\/2qcW6Io2SXD97F9N5zsq7\/Qz\/mQZjyQXlaPYZZddGoZL4m\/69Omx\/pL7uP322+3LX\/5yLEbSvK2tLfhbMiM3qyxGcvCNuJbV549\/\/GM766yzMtkos\/\/iiy+2pMBNq6+d9mVAcpG\/tFIWaYOop0avrq+77rqr6jHpviMRHH7BlWSpDfUlS1ibPG0MycUJ08T+YC6imHkCCYAABCAAAQhAoF8EEL39wsfGEIAABCAAAQgMBIFkTU\/J1e9\/\/\/uxXSkzTRmm0Zas05sc20EHHWQqRxA2F9EryXfBBRf0baPt9V+W6NXPv6OZh4cffnhQm1fZklqcTQu1SSKp1IEkZZjFm8VzsI5Bgvu9731vbDgSlYsWLbKHH344yKBVBrLGL7kpaaV\/D2TTT\/Y33XTTmITdfvvtg4XC0mrRJksQhGPLEr2XXnppbB\/K8NWXDdEmmahatNF2991327Rp04I\/JUWvK5c\/\/\/nPtuKKK7qGZ8Z96lOfCs5X2JT5quxiHY8yfr\/5zW\/GSm\/o9V\/\/+td98f\/+979jmaqf\/\/zngzkgtuKoLGXNgR122CGIU23aaGvEtayF7r7yla9kHmsYsM8++wTHGG3KuE0udJiU1iqf8P73vz+2nRblU93prFaP6M3qU68rszdcRFILxGmhuGjTNbn11lsHf9LigZLByRbNNFfpmOQXIDrHQ3EhQRc+xEAAAhCAAAQgECeA6GVGQAACEIAABCAw5Agks+oOPPBAO+WUUyrGGf68PHxB0koLR1VrvpI0KYfCWp3JshFpGb2SL9EawsqsSy4gF45Tr0lkh9mgtU7IYB2Dyg6E2dHheCT0JKnTmn7S\/93vfrevdMZATKpkCQ3tQ0JPYi9NYP3oRz+qqM2qbbJEb9bYJeklDZN1glULNqwLXEv0Sk5LKibLTWi\/Kt2hLywa1SR5JXuTTeUBkgsUSvYpyzU6D30ka1Qih\/vr77WczKgP+1WGtL6IePbZZ+0nP\/lJxfHpy5iVV1459vfkWJK\/FEgrr6C63EnJn3Zu+iN6VYJBJV2SCxuG+9GieauttlpFdrVeP+aYY4ISD2oq\/6FfNSSbSm3o+lRTreHoYnvhFyWNmm\/0AwEIQAACEIDA0iWA6F26\/Nk7BCAAAQhAAAIpBDbbbLOYRPvSl75kxx13XEVk8if21eLCDX0laTReYkzSZ\/To0UFZiKyM3qSEdjnRKgewzjrr1AwdrGP4z3\/+U1GuIOsYxEg\/RR+o7MCkpNJ4wmzFNHmrBbgke5OtP6JX4lHj+OMf\/xjrVjL1jDPO6PtbmuiVaNRP8cOyCBJuaYt8JWs5Z3HPej2tzETaNsrkTS4gqGzp6OJtWfuSFNVxhaUT+nstp9X4Vf3uz3zmM31D0blQpnG0pX3pk1b+IZSo2jY5v3wWFqxX9N5wwLine truncated
|
||||
%---
|
||||
%[output:0b22a369]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQv8VGP+xx8Km7so11xWV5K7Wkskt5bCslqXpCxyyV1kicLK2hC5ZW0REbYIyf26LiUUUUshUkpC4e9S\/V+fs3tmnzlzZubMmTMz55x5P69XL34zz+X7vL\/f+f3mfM73fJ+VVqxYscLQIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAILEEVkLoTazvMBwCEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAgEMAoZdAgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCCQcAIIvQl3IOZDAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEEDoJQYgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCCScAEJvwh2I+RCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEEHqJAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACCSeA0JtwB2I+BCAAAQhAoJ4IzJ8\/33z55Zdmq622MmussUaorS9cuDAzrlGjRmbNNdcMNU+YQUuXLjWffvqpWbRokWnSpInZbLPNQu2jlnvQ2p9\/\/rn57rvvzMYbb+zsYZVVVgmDo6wxsuPxxx\/PmWP\/\/fc3G220UcG55YeHH37YLFu2LNOvS5cujk\/ytRUrVpjPPvvMrLTSSs6+GzRoUJb9tRy8ePFiI37a73rrrVcTU6L4LAcx\/LXXXjP\/\/ve\/s7ruueeezu+QQm3cuHFmyZIlWV3+8Ic\/GP3O8GtfffWVufXWW7PeOuqoozLrzJ4920yePDnzvn7vHHTQQUG2QB8IQAACEIAABCAQmABCb2BUdIQABCAAAQhAoBYEXnnlFTN69Gjz+uuvOwKp21q3bm122mknc9ZZZ5kNNtggkGkSiXfbbbdM3w4dOjhzl9Jeeukl07Nnz6whEhZlZ74mUW3IkCHm\/vvvz+nSrl07c9FFF2XZVcieWu1h6tSpzh5efvnlHPMkWJ1\/\/vlm8803LwVlWX1vv\/12c9VVV+XMcfbZZ5u+ffsWnHvWrFlmv\/32y+rzz3\/+0+y4445Zr\/3888\/mrrvucmLv1VdfdcRtO\/6OOOII06NHj5oI3aXCk9j5t7\/9LWcfumGiz8F5551nWrVq5TutYvuKK64IvGTv3r2N2HhblJ\/loMZcf\/315oYbbsjqftJJJ5kLL7yw4Oe1ffv2We\/rhsYLL7zgCP1+7f33388Rbu+7777M5\/rBBx80\/fr1yxoq8ZcGAQhAAAIQgAAEoiSA0BslTeaCAAQgAAEIQCBSAk8\/\/bSRKFOoKTPvnnvuKZrFqTm8ok+pQu+PP\/7oCITK7LTb+uuvn5WtZ7+nTL\/u3bsbiYuFmsRJiZTFWi328Pbbb5vf\/\/73xUwzd9xxh+nUqVPRflF0+N3vfmdmzJiRM5UEuRdffLHgEkGE3l9++cXxx2OPPVZwrq233toREtu0aRPFtioyx\/Dhw83gwYOLzi2x\/pRTTsnpd+edd5qBAwcWHe926N+\/vznxxBOz+kf9WQ5qjJ8Aq98ZzzzzTN4pHnroIXPOOedkvV\/s84nQG9Qj9IMABCAAAQhAoJIEEHorSZe5IQABCEAAAhAITcAvczbfZBL3Hn30UbP22mv7dpFAKzHYm5VYqtA7bNgwc+211+askU\/o\/eabb8wxxxxj3nvvvUAcJMjtu+++sdqDBKwjjzwyK5s132aUHapyCvJHJZufqGavp8fut99++7wmFBN6ly9f7mRfjh07NtA2tF\/tO2w5kUCLhOxUyudISyiDeY899sha7corr3RE\/KDNK\/SWYkOxz3JQG+x+nTt3Nh999FHW0Oeffz5vBvqZZ55pHnnkkaz+EvwLifkIvWE8wxgIQAACEIAABKImgNAbNVHmgwAEIAABCEAgEgLHH398TmamBKjmzZsbZQd6s2r1WLqddaoSA8pEVamDJ5980qgmqLeVIvTOmTPH7L333r57yyf0DhgwwNx9991ZY1SqQWKu5tPj3HbTe8omdFut9yDBUxnMXpFMwtnOO+\/s+Ec1UO3Wp0+fnEfUIwkIaxKVkLjpppvyTvunP\/3JKYeRrxUTerWno48+Ome44k83E\/QIv13GQR179eplLrnkkqi3WvZ8hx56qJk2bVrWPMpCVixL7PRmmqskyoQJE7L6K6ten7mgTSU1lMXutnI\/y0HXzdfvxhtvNNddd13W27rp4+djZXKrhIft32IZwJp4wYIF5t57782ssfLKK5tjjz02UwOZ0g3lepHxEIAABCAAAQgEIYDQG4QSfSAAAQhAAAIQqCoB1bT11si0hTQdpqVDt2zxViKcshHdJqFPNTILtVKEXj2Knu9xbz+hVwdeSQy1mwReZe26zU+wnDJlSkYcqvUe\/DIxL7300kyNYoliyli2D5naZpttnOzqSjWJz4oNu16zdy35QzV1GzZs6GtGMaH3z3\/+c5Zop0l0eNt2223nzDd37lxz4IEHZomBhcp32EboULcvvvjCOZRPB3K1aNEir53lMtRhYt7MZh0Qpgxdt1188cU5daqnT5+edeiYxH5XEA66T3f+KD7LXg7K0Fd9WzFs1qyZc\/On0IGAqk8sfxX6LLrv6fOnQ9fspjIOp59+elnuKCb0zps3z7n5IxE+aM3xsgxiMAQgAAEIQAACqSSA0JtKt7IpCEAAAhCAQLIJSLC97LLLsjahw8DWWmutzGsScb1ZmzrsSQejqUUpknrri+rwMbt2q5\/4NX78eOegOLvpUK8mTZpkXpJQ\/cQTT2R+1kFPykqWABiHPXgZKuNYh5Y1aNAgY7P8osxptynj9bDDDqtYAIqhxEq7KQvVW6\/XrwSBO6aY0HvwwQdnldvwyxD2E4PfeOMN07hxY2cZ1RCWEOm2v\/71r6Zp06bm8ssvz8mw7dixo\/O6RMsomzKxlX1tN2Wd2jdR\/Hgq3n\/96187wyRMS3x025577mlUszdoi+Kz7K6l8gjKkpcY6226qdK1a1fnxoMdn24\/W6y251tttdWyplLmrzKA7abPqAT5Qk3C8yGHHJLVZeTIkZmbPX5C78yZM51SMPpdYj+hoN9hyjZWvWR7L8rOtjOw5Rf7CQA3G9k2Qr+r7PrMukn2m9\/8JstOZVyfe+65QV1KPwhAAAIQgAAEYkwAoTfGzsE0CEAAAhCAQL0SOO+887Lqo\/o9Oi2B0Ssojhgxwuy1114ONgnByuq0m4RgOxM0SEbvDz\/84IhlbvawxCQJJbbI7Cf0Dho0yEjocZvEPPvnIL6t9R684pjfIVtB9hFlH78MVAllErTsprrC+Q4gKyb0KnPXfnRfB+B169Yta36tqQO67CYRXI\/9q8nftninx\/i9ZTy8XFSOokuXLpHhkvDXsmXLrPm8a0ycONGceuqpWX0kmq+66qrOa96M3GJlMbzGR\/FZ1py33HKLueaaa4qyUWb\/7bffbrwCrl99bb+bAd5D\/vxKWfgZEaZGrz5fTz31VN496feOhGD3BpeXpQbqJotbm9zPBu\/hhH7CfjUPUSzqQDpAAAIQgAAEIFAWAYTesvAxGAIQgAAEIACBShDw1vSUuDp06NCspZSZpgxTu3nr9Hpt69mzp1E5ArcFEXol8t1www2ZMRqvf8WEXj3+bWcennHGGU5tXmVL6nA2HdQmEUmlDiRSulm8xXhWaw8SuLfddtsscyRUfv\/992bSpElOBq0ykGW\/xE2JVvq5kk2P7O+yyy5ZImynTp2cg8L8atF6SxC4thUTev\/xj39kraEMX91ssJvERNWitduzzz5rttxyS+clr9AblMu\/\/vUvs\/HGGwftXrTfH\/\/4R8dfblPmq7KLtR9l\/F544YVZpTf0\/gMPPJDp\/84772Rlqp5wwglODIitOCpLWTGwzz77OP1Um9ZuUXyWddDdaaedVnSvbocjjjjC2aPdlHHrPejQK1qrfMJvf\/vbrHE6lE91p4u1MEJvsTn1vjJ73UMkdUCcDoqzmz6Tu+++u\/OSDg+UGOxtdqa5Ssd4b4DIx3E8SDAIH\/pAAAIQgAAEIJBNAKGXiIAABCAAAQhAIHYEvFl1PXr0MAMHDsyx03283H1DopUOjsrXShVJveKQW6vTWzbCL6NX4otdQ1iZdd4D5Fw79Z6EbDcbtJBDqrUHlR1ws6NdeyToSaT2a3qk\/+qrr86UzqhEUHlLaGgNCXoS9vwErJtvvjmnNqvGFBN6i9kukV6iobdOsGrBunWBCwm9EqclKnrLTWhdle7QDYuomkReib3epvIA3gMKJfYpy9WOw1JEVltEdtcr97Pszah351WGtG5EfPzxx+a2227L2Z9uxmy66aZZr3tt8T4p4FdeQXW5vSK\/n2\/KEXpVgkElXbwHG7rr6NC8zTffPCe7Wu+ff\/75TokHNZX\/0FMN3qZSG\/p8qqnWsH3YnnujJKp4Yx4IQAACEIAABGpLAKG3tvxZHQIQgAAEIAABHwK77rprloh28sknmwsuuCCnp\/cR+3z93IGliqR2fwljEn0aNWrklIUoltHrFaGDOFrlANq0aVOwa7X28O677+aUKyi2BzHSo+iVyg70ilSyx81W9BNvdQCXxF5vK0folfAoO5577rmsaSWm\/uUvf8m85if0SmjUo\/huWQQJbn6HfHlrORfjXux9vzITfmOUyes9QFDZ0vbhbcXWkiiqfbmlE8r9LPvV+FX97uOOOy5jinyhTGO7+d308Sv\/4IqoGuuNr1IOFgwr9I4bNy5zYJ6eUlAceW+m2AdRejPX7QMeVcpGJW287eyzz86UGfH6QyVmJJrTIAABCEAAAhBIBLine truncated
|
||||
%---
|
||||
%[output:27ab5aa8]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>scientaPassEnergy_eV<\/strong>\n <strong>__________________________<\/strong> <strong>________________________<\/strong> <strong>____________________<\/strong>\n\n {'0067067_O1s_1000eV.ibw'} {'21-Aug-2021 18:05:35'} 50 \n {'0067067_O1s_1000eV.ibw'} {'25-Okt-2021 09:04:27'} 50 \n\n","truncated":false}}
|
||||
%---
|
||||
%[output:3f52d2f2]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQeYFMX69Ws2kkTJCqaLimJGxZwwi5hARS6YIwZMmMWsqJjTX6\/XnFHRK1fMCXNOqBivGEBRkSSbZ77v9HR1v1VTPdM7u7Px1PP4uHRXVVf9qjrM6bdPJVKpVEoxkQAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJtFoCCQq9rXbs2HASIAESIAESIAESIAESIAESIAESIAESIAESIAES8AhQ6OVEIAESIAESIAESIAESIAESIAESIAESIAESIAESIIFWToBCbysfQDafBEiABEiABEiABEiABEiABEiABEiABEiABEiABCj0cg6QAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQCsnQKG3lQ8gm08CJEACJEACJEACJEACJEACJEACJEACJEACJEACFHo5B0iABEiABEiABEiABFoVgdraWrVkyRLVtWvXVtVuNpYESIAESIAESIAESIAECkmAQm8h6bJuEiABEiABEiCBBhH49ddf1R9\/\/KH+8Y9\/qM6dO9e7roULF6pZs2ap5ZZbTvXs2bNe5ZPJpJozZ46aPXu2V2755ZdXffr0UUVFRfWqp6GZ20IfGsoA8+CRRx5RX3\/9tfruu+\/UzJkzvSoxJ9Zcc0216qqrqkGDBqm99tpLlZSU1Ptwv\/\/+e1CmY8eOqkuXLvWuo7kLNKQPVVVV6vvvv\/f6jXmeSCTq1R2cKzjPampqVP\/+\/fMag4ae63Eb\/L\/\/\/U+99tprRvYBAwaoTTfdNGsVb775pvr222+NPFtvvbVaeeWVneXmzZunbrnlFmPfqFGjvGsZEni\/9957wX6w32233eJ2g\/lIgARIgARIgARIwEmAQi8nBgmQAAmQAAmQQIsiAEHlgQceUO+88476888\/g7atscYaaoMNNlAnnnhiVtH2559\/VjfeeKMnokDU0WnZZZdVgwcPVoceeqhab731svZ56tSp6tprrzXK6wLHHnusOvLII9VSSy0V1PHyyy+rSZMm5cVx5513VieccIJRti30IS8YViEIiJMnT1aXXHKJ+vvvv3NWCdH3sssuU2uvvXbOvDoDXiRsvPHGQX4Ifph\/rSnl04eKigp1\/fXXq7ffflt98sknQXchnoMHRPPdd989K4b7779fPffcc+rDDz80xgfn2ZZbbqnGjh2bVfRt6Lmezxi9\/vrr6sADDzSKYt7897\/\/zVrd9ttvn3E9gGDcr18\/Z7kvv\/wyQ7h96KGHgrn26KOPqtNOO80oC\/GXiQRIgARIgARIgAQaQoBCb0PosSwJkAAJkAAJkECjEnjhhRc8ETVbQkQcBCYIt3aCsLvffvsZArGrrgcffFBtsskmzsOg7gkTJmRtQ48ePdQTTzwRiDz4++STT86LBdoLcVKnttCHvEBYhaqrq9XBBx\/sCZH1TRdddJEaPXp0rGIQ9CF46tQahd769mHx4sXqmGOOURA9s6VzzjnHezFip1Qq5b3YsCNW7XxDhw5VV199tSorK8uoo6HneqzBdWSC7Qeiv+0XBxCdXdcUVIEXL4jelWnDDTf0osyjEoXefEeI5UiABEiABEiABBpCgEJvQ+ixLAmQAAmQAAmQQKMRQHTcQQcdFKs+fF6OCDzp0YpPvxGBKKOAs1X2+OOPZ0T2uqLsoupYd911vWhTiFhTpkxR48ePj9V2O5MUettCH\/KC4Ch01VVXqZtuuinv6p5\/\/nm1yiqrRJaHXQFE\/YsvvtjI05qE3nz6AJF2\/\/33N2wDskE+\/\/zzMyJgbWE5W3mIvYiwl6mh53rek8IviD7dc889RjWYb3vvvbezakTinnXWWcY+FxeZgUJvQ0eJ5UmABEiABEiABPIhQKE3H2osQwIkQAIkQAIk0OgEEL05ffp0o158\/g3\/VUT\/IapOpiuvvFINHz482PSvf\/3LiIzFDtg9bLbZZurTTz9VH3zwgVEeZVGHTr\/88ovaaqutjDz4jB2+mRCWIerabbjzzjvVNttsox5++GF15pln5sUE\/T733HO9sm2hD3lBsAphrPbdd9+MqhBxCUEd1gzwS4ZnL6JSb7jhhoy8sOdAxKX07EXejz\/+2PN9huUAhHU7tXSht6F9+Oijj9SIESOMbiNCHRYi8PmFQC4TmOOY2psalg9rrbVWBje8ZIG\/8VNPPZURLfviiy8G3rQo2NBzvaFzDFHi\/\/znP41qcJ675hEy4SsDXINkyhYBjHxz585V+HJAJ\/AbM2aM6tatm7eJ1g0NHUWWJwESIAESIAEScBGg0Mt5QQIkQAIkQAIk0OwEIDDZVgqHHHJIYKGAT8132mknQ5iDCCyj8nbccUdvoS6d4LsJSwUt9B133HFq2rRpRl8\/\/\/xzT5xCckWQyqhf2wdVC0BnnHGGwoJp2J8rnX766YbgDBsKRAMvvfTSXtG20IdcDHLtx6f1+EzeFmEhwiOSVAtlsh6IbkcddVSGwGhbDyAqE9GZ2VJcoReRsb\/99pvCCwIs2IfFtCCK9u3bNxjPXH3NZ39D+3DhhRequ+66yzi09JrFOYVoVZnwIgO+u0jPPPOMZ\/sgEywccH4izZgxQ+2xxx7GfojzukxjnOs2t7q6OvXjjz96Hrrwzh44cGDWBfUwx\/ACSEb\/46UORHB7MT+XsA0P41zzKNfY5hJ6sRAk+oSo9PouJJnr2NxPAiRAAiRAAiTQdglQ6G27Y8uekQAJkAAJkECrIeASl7BAlFzwzPX5tI6qc30mraNtNYRvvvnGi1qUCRF8eqX7zTff3BAXIRxCmJUJUaAQYHRabbXVFMrFSa4+Ikqwf\/\/+XvG20Ic4HHLlcXGACPfGG28YVh12PS77DAivmCM6NVQk1fUgwvWCCy4wXizI9iC6Nc6if7lYuPY3pA81NTXegobSn\/boo482FgWDaAqxW4qgWLxMi78QbCH26gQLE7xQkQmLC2JBQ53wQgNRvUgNPdflcfByBX7M8lh6PwRSLKCGxRPldUTvdwneiACH965MrsXbLr30Us\/+IlvCwmp77rmnkQUCu67fJfR+9dVXnqcxoqLl1wOYx4hAxuJ2xcXFQZ1YME++3EKf5VhoP2LZCFzvpCc4XqJB9JYJEdennHJKPtOTZUiABEiABEiABJqZAIXeZh4AHp4ESIAESIAESEB5n+NDqNNJCkN6G4Rf20NTi7kuke+dd95RvXr1CuqEgAVhViYtcrmiDB977DFv0abGSC7x0raeaAt9aAxWENtsgf2kk05Sxx9\/fNbqIWLCRsOOBJZR23hZ8NZbbxn1QAiWomauiF6M28033xyrq9kW\/YtVgSNTQ\/rwww8\/qO22286oFT7Iu+66q7HtiCOOCIRZ7JBiLiJ7JS\/4ap933nlG+dtvv11dcsklxjbYpyDquaHnuq705ZdfVuPGjcuI4raRwZYC5\/KKK65o7HrvvffUyJEjjW2o78QTTzS2QdT997\/\/bWyzry2usczHoxcR\/bZ1hqwbwjWEYC1c2yyRF9Yk2rvc1QbY0EiLHPRl1KhRGeM3ZMiQfKcoy5EACZAACZAACTQjAQq9zQifhyYBEiABEiABEkgTsD07ERF53XXXGXgQeQbBSSYtltretogA\/eyzzzLwIgIOgpNOeiE0V9QehGVE1qEeeMHCE3b11VdXsIyojwCMqLp99tnHOC5sCO6++26jfW2hD40xn88++2zD2xR1Ipp3ueWWy1k9IrSvueYaIx\/GEJ\/yRyUIlbAu0Cmb0PvSSy+pww8\/PGc7dAbMQwjJrojS2JXEyBi3Dy5\/XteidbaYrSOjk8mk55ktkyu61bXY2quvvqpWWGGFBp\/rOLbLTzsbJrw4wuKN2qYFeV2Ry\/D0tu1dYCMio2td567r2PkIvTGG2ovs1QsIIpIZ0dMy3XfffcFXBlGLRL7\/\/vuqe\/fuXjGXLziueZi7TCRAAiRAAiRAAq2PAIXe1jdmbDEJkAAJkAAJtDkCQ4cOVTNnzgz6dcABB3ifxttJ2xzo7fDHxUJJdtSdKyIYZWxBGVFriD50CSIQlaUoLNsCsQ+fNpeXl+cci9tuu01NnDjRyIdP3wcMGGBsawt9yAkjRgZ7LqDIt99+GywGlq2KJ598MiMi0xWxKuuIK5KijL0oF6JFMU8hJMMO4dZbb\/VeDsgEIW2HHXaI0fP8s8TtA6xC0AeZXNGpLvEPFgHworZfcrj4ugRlnGPrr7++aui5jra7\/LZxLiPiFS+EcM7JqGOUwYsjvECSCVHHOP9lkouswfMXdcp0xRVXeC9ucqWGCL2wYMDXCFg0zpVeeeUVL0LZ9SXCqaee6lk8IMHWAl892AkvmfTCkzZLfU3M1T\/uJwESIAESIAESaJkEKPS2zHFhq0iABEiABEigXRGwPwd3+eMCyDrrrGN8qq3znXzyyYY3pcs3FOVtUQMLtiHSD8KHS1jONggQrG688cas4+QSYqJE7LbQh8aYtLaYHyXau47l+hwfXDHuUSmuSIrydtvsOVBdXe15sEoPXLwUgK9uIVPcPmBRtTPPPNNoivzUX+9w+egiHzxxbdEaQqn9mb9L5IT9AWwjGnquu+rGOCCaO5FIeF2YN2+e2mijjYx+IjLXXoTugw8+UPvuu6+RD4syaosYRMeee+65xn6UcS0IaI9vvkKvXAASojW8gL\/44gujerlQpf2VAsYHQj0S+oEvE+wkrVDs8YB38ZgxYwo5XVk3CZAACZAACZBAAQlQ6C0gXFZNAiRAAiRAAiQQj4AtoEV5stqihLZesCN1N954YwUvUzvZnpb6k3RXBKMuqz9hluKd3mcv+GYfLine truncated
|
||||
%---
|
||||
%[output:2edd5c8e]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQecG8X5v9\/TNXfjQjPdgOkY0yFAYiAETAvFhGJIoRM6BEIxpoZeA4SE3gmh\/UIwBEINhNCS0IxD6BhMM+7lmvT\/f9desbtaaWd1Ovt098zn40+CNDs788ysTnr23XdqcrlczigQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCBQtQRqEL1VO3d0HAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEICARwDRy0KAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIFDlBBC9VT6BdB8CEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAKKXNQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAoMoJIHqrfALpPgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABRC9rAAIQgAAEIAABCECgqgi0trbanDlzrF+\/flXVbzoLAQhAAAIQgAAEIACBjiSA6O1IurQNAQhAAAIQgEC7CHzxxRf2zTff2EorrWS9e\/dO3daMGTPs448\/tqWXXtoGDx6c6vhsNmuTJ0+2zz\/\/3Dtu2WWXtSWXXNIymUyqdtpbuSuMob0MtA7+9Kc\/2bvvvmvvv\/++TZw40WtSa2LNNde0VVZZxUaMGGE\/\/vGPra6uLvXpvv766\/wxPXv2tD59+qRuY1Ef0J4xNDU12QcffOCNW+u8pqYm1XB0reg6a2lpsaFDh5Y1B+291l07\/OGHH9rf\/\/73UPVhw4bZpptuWrKJf\/zjH\/bee++F6my11Va24oorxh737bff2nXXXRd6b5999vE+y1TE+5VXXsm\/L\/Y77rij6zCoBwEIQAACEIAABGIJIHpZGBCAAAQgAAEIdCoCEip33XWXvfTSSzZlypR831ZffXVbf\/317dhjjy0pbSdNmmRXX321J1Ekdfyy1FJL2UYbbWS\/+MUvbPjw4SXH\/PDDD9sVV1wROt4\/4Je\/\/KUdcsgh1rdv33wbTz\/9tF188cVlcfzRj35kxxxzTOjYrjCGsmBEDpJAvPfee+28886z2bNnJzYp6XvBBRfY2muvnVjXr6AbCRtvvHG+voSf1l81lXLGMHfuXLvqqqvsn\/\/8p73++uv54Uqei4ek+c4771wSw5133mmPP\/64\/etf\/wrNj66zLbbYwg4\/\/PCS0re913o5c\/T888\/bAQccEDpU6+Yvf\/lLyea22Wabgs8DCeNlllkm9rh33nmnQNzec889+bV233332UknnRQ6VvKXAgEIQAACEIAABNpDANHbHnocCwEIQAACEIBARQn87W9\/8yRqqaKIOAkmidtokdjda6+9QoI4rq27777bNtlkk9jTqO2xY8eW7MOgQYPsoYceykse\/f\/jjz++LBbqr+SkX7rCGMoCETmoubnZfvazn3kiMm0555xzbL\/99nM6TEJfwtMv1Sh6045h1qxZdsQRR5ikZ6ly+umnezdGoiWXy3k3NqIRq9F6o0aNsssuu8waGhoK2mjvte40uTGVlPZD0d\/RGweSznGfKWpCN14UvRssG2ywgRdlXqwgesudIY6DAAQgAAEIQKA9BBC97aHHsRCAAAQgAAEIVIyAouN++tOfOrWnx8sVgRfM0apHvxWBGIwCLtXYgw8+WBDZGxdlV6yNdddd14s2lcR64IEH7MQTT3Tqe7RSUPR2hTGUBSHmoEsvvdSuueaaspt74oknbOWVVy56vNIVSOqfe+65oTrVJHrLGYMk7d577x1KG1AK8plnnlkQARsVy6WOl+xVhH2wtPdaL3tRLDhQY7rttttCzWi97bbbbrFNKxL31FNPDb0XxyVYAdHb3lnieAhAAAIQgAAEyiGA6C2HGsdAAAIQgAAEIFBxAorefO6550Lt6vFv5V9V9J+i6oLlkksusd133z3\/0h\/+8IdQZKzeULqHzTbbzN544w177bXXQsfrWLXhl88++8y23HLLUB09xq68mRLLkrrRPtx88832\/e9\/3\/74xz\/aKaecUhYTjfuMM87wju0KYygLQuQgzdXo0aMLmlLEpYS6UjMoX7Jy9ioq9be\/\/W1BXaXnUMRlMGev6v7nP\/\/x8j4r5YDEerR0dtHb3jH8+9\/\/tj322CM0bEWoK4WI8vxKkAeLmOucfm5qpXxYa621CrjpJovyGz\/yyCMF0bJPPvlkPjetDmzvtd7eNaYo8X333TfUjK7zuHWkSnrKQJ9BwVIqAlj1vvrqK9OTA34RvzFjxtiAAQO8l0jd0N5Z5HgIQAACEIAABOIIIHpZFxCAAAQgAAEILHICEkzRVAo\/\/\/nP8ykU9Kj5dtttFxJzksDBqLwf\/vCH3kZdflHeTaVU8EXfkUceaePHjw+N9e233\/bklEpcBGkw6jeaB9UXQL\/+9a9NG6bp\/aRy8sknh4Sz0lAoGrh\/\/\/7eoV1hDEkMkt7Xo\/V6TD4qYSXhFUnqi7JgO5Juhx56aIFgjKYeUFSmojNLFVfRq8jYL7\/80nSDQBv2aTMtSdEhQ4bk5zNprOW8394xnH322XbLLbeETh3MNatrStGqwaIbGcq7q\/LYY495aR+CRSkcdH2qvPXWW7bLLruE3pec94+pxLUe5dbW1maffPKJl0NXubPXWGONkhvqaY3pBlAw+l83dSTBo5v5xYlt5TBOWkdJc5skerURpMakqPS0G0kmnZv3IQABCEAAAhDougQQvV13bhkZBCAAAQhAoGoIxMklbRAV3PAs7vFpP6ou7jFpP9rWh\/C\/\/\/3Pi1oMFkXw+Tvdb7755iG5KHEoMRssigKVgPHLqquuajrOpcSNUVGCQ4cO9Q7vCmNw4ZBUJ46DJNwLL7wQStURbScufYbEq9aIX9orSf12FOF61llnhW4sBPuj6FaXTf+SWMS9354xtLS0eBsaBvPTHnbYYaFNwSRNJbuDElSbl\/nyV8JWstcvSmGiGyrBos0FtaGhX3RDQ1G9Ku291oPn0c0V5WMOnst\/X4JUG6hp88Tg54j\/fpzwVgS4cu8GS9zmbb\/5zW+89BelijZW23XXXUNVJNj99uNE73\/\/+18vp7GiooNPD2gdKwJZm9vV1tbm29SGecGbWxpzcC78fMTBTujzLpgTXDfRJL2DRRHXJ5xwQjnLk2MgAAEIQAACEFjEBBC9i3gCOD0EIAABCEAAAuY9ji9R55egGPJfk\/iN5tD0ZW6c5HvppZds8cUXz7cpgSUxGyy+5IqLMrz\/\/vu9TZsqUeLkZTT1RFcYQyVYSbZFBftxxx1nRx11VMnmJTGVRiMaCRyM2tbNghdffDHUjkRwUGomRfRq3q699lqnoZba9M+pgZhK7RnDRx99ZFtvvXWoVeVB3mGHHUKvHXzwwXkxqzeCMleRvUFeyqs9bty40PE33nijnXfeeaHXlD5FUc\/tvdb9Rp9++mk7+uijC6K4o8iUlkLX8vLLLx9665VXXrGf\/OQnodfU3rHHHht6TVL3hhtuCL0W\/WyJm8tycvQqoj+aOiPYtsS1RLAvrqMsVVepSfzc5XF9UBqaYIocjWWfffYpmL+RI0eWu0Q5DgIQgAAEIACBRUgA0bsI4XNqCEAAAhCAAATmE4jm7FRE5JVXXhnCo8gzCadg8WVpNLetIkDffPPNAryKgJNw8ou\/EVpc1J7EsiLr1I5ywSon7GqrrWZKGZFGACuqbs899wydV2kIbr311lD\/usIYKrGeTzvttFBuU7WpaN6ll146sXlFaF9++eWheppDPcpfrEhUKnWBX0qJ3qeeesoOOuigxH74FbQOJZLjIkqdG3Go6DqGuPy8cZvWRWW2HxmdzWa9nNnBEhfdGrfZ2rPPPmvLLbdcu691nTsun3YpTLpxpM0b\/TQtqhsXuayc3tH0LkojEoyujbt2485djuh1mGovstffQFCRzIqeDpY77rgj\/5RBsU0iX331VRs4cKB3WFxecH3mae1SIAABCEAAAhCoPgKI3uqbM3oMAQhAAAIQ6HIERo0aZRMnTsyPa\/\/99\/cejY8WP82B\/7ry42qjpGjUXVxEsI6JCmVFrSn6ME6ISCoHpXCwL5J9erS5sbExcS6uv\/56O\/\/880P19Oj7sGHDQq91hTEkwnCoEF0LOuS9997LbwZWqok\/\/\/nPBRGZcRGrwTZcJamOiW7KpWhRrVOJZKVD+P3vf+\/dHAgWibRtt93WYeTlV3Edg1KFaAzBEhedGif\/lCJAuaijNzni+MYJZV1j6623nrX3Wlff4\/Jt61pWxKtuCOmaC0Yd6xjdONINpGBR1LGu\/2AJbrKmnL9qM1guuugi78ZNUmmP6FUKBj2NoE3j4sozzzzjRSjHPYnwq1\/9ykvxoKK0FnrqIVp0k8nfeDLK0v9MTBof70MAAhCAAAQg0DkJIHo757zQKwhAAAIQgEC3IhB9HDwuP66ArLPOOqFHtf16xx9\/fCg3ZVzeUB0flRrasE2RfhIfcWK51CRIWF199dUl5ylOxBST2F1hDJVYtFGZX0zax50r7nF8cdW8FyuuklTHR\/sWXQPNzc1eDtZgDlzdFFBe3Y4srmPQpmqnnHJKqCvBR\/39N+Ly6KqecuJGpbVEafQx\/zjJqfQHShvR3ms9rm3Ng6K5a2pqvCF8++23tuGGG4bGqcjc6CZ0r732mo0ePTpUT5sy+iliFB17xhlnhN7XMXEbAkbnt1zRG9wAUtJauYAnTJgQaj64UWX0KQXNj0S9isahJxOiJZgKJTofyl08ZsyYjlyutA0BCEAAAhCAQAcSQPR2IFyahgAEIAABCEDAjUBUoBXLyRqVEn7qhWLine truncated
|
||||
%---
|
||||
%[output:9949b5fb]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>scientaPassEnergy_eV<\/strong>\n <strong>__________________________<\/strong> <strong>________________________<\/strong> <strong>____________________<\/strong>\n\n {'0067067_O1s_1000eV.ibw'} {'25-Okt-2021 09:04:27'} 50 \n\n","truncated":false}}
|
||||
%---
|
||||
%[output:0ab749aa]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQecG8X5v9\/TNXfjQjPdgOkY0yFAYiAETAvFhGJIoRM6BEIxpoZeA4SE3gmh\/UIwBEINhNCS0IxD6BhMM+7lmvT\/f9desbtaaWd1Ovt098zn40+CNDs788ysTnr23XdqcrlczigQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCBQtQRqEL1VO3d0HAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEICARwDRy0KAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIFDlBBC9VT6BdB8CEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAKKXNQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAoMoJIHqrfALpPgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABRC9rAAIQgAAEIAABCECgqgi0trbanDlzrF+\/flXVbzoLAQhAAAIQgAAEIACBjiSA6O1IurQNAQhAAAIQgEC7CHzxxRf2zTff2EorrWS9e\/dO3daMGTPs448\/tqWXXtoGDx6c6vhsNmuTJ0+2zz\/\/3Dtu2WWXtSWXXNIymUyqdtpbuSuMob0MtA7+9Kc\/2bvvvmvvv\/++TZw40WtSa2LNNde0VVZZxUaMGGE\/\/vGPra6uLvXpvv766\/wxPXv2tD59+qRuY1Ef0J4xNDU12QcffOCNW+u8pqYm1XB0reg6a2lpsaFDh5Y1B+291l07\/OGHH9rf\/\/73UPVhw4bZpptuWrKJf\/zjH\/bee++F6my11Va24oorxh737bff2nXXXRd6b5999vE+y1TE+5VXXsm\/L\/Y77rij6zCoBwEIQAACEIAABGIJIHpZGBCAAAQgAAEIdCoCEip33XWXvfTSSzZlypR831ZffXVbf\/317dhjjy0pbSdNmmRXX321J1Ekdfyy1FJL2UYbbWS\/+MUvbPjw4SXH\/PDDD9sVV1wROt4\/4Je\/\/KUdcsgh1rdv33wbTz\/9tF188cVlcfzRj35kxxxzTOjYrjCGsmBEDpJAvPfee+28886z2bNnJzYp6XvBBRfY2muvnVjXr6AbCRtvvHG+voSf1l81lXLGMHfuXLvqqqvsn\/\/8p73++uv54Uqei4ek+c4771wSw5133mmPP\/64\/etf\/wrNj66zLbbYwg4\/\/PCS0re913o5c\/T888\/bAQccEDpU6+Yvf\/lLyea22Wabgs8DCeNlllkm9rh33nmnQNzec889+bV233332UknnRQ6VvKXAgEIQAACEIAABNpDANHbHnocCwEIQAACEIBARQn87W9\/8yRqqaKIOAkmidtokdjda6+9QoI4rq27777bNtlkk9jTqO2xY8eW7MOgQYPsoYceykse\/f\/jjz++LBbqr+SkX7rCGMoCETmoubnZfvazn3kiMm0555xzbL\/99nM6TEJfwtMv1Sh6045h1qxZdsQRR5ikZ6ly+umnezdGoiWXy3k3NqIRq9F6o0aNsssuu8waGhoK2mjvte40uTGVlPZD0d\/RGweSznGfKWpCN14UvRssG2ywgRdlXqwgesudIY6DAAQgAAEIQKA9BBC97aHHsRCAAAQgAAEIVIyAouN++tOfOrWnx8sVgRfM0apHvxWBGIwCLtXYgw8+WBDZGxdlV6yNdddd14s2lcR64IEH7MQTT3Tqe7RSUPR2hTGUBSHmoEsvvdSuueaaspt74oknbOWVVy56vNIVSOqfe+65oTrVJHrLGYMk7d577x1KG1AK8plnnlkQARsVy6WOl+xVhH2wtPdaL3tRLDhQY7rttttCzWi97bbbbrFNKxL31FNPDb0XxyVYAdHb3lnieAhAAAIQgAAEyiGA6C2HGsdAAAIQgAAEIFBxAorefO6550Lt6vFv5V9V9J+i6oLlkksusd133z3\/0h\/+8IdQZKzeULqHzTbbzN544w177bXXQsfrWLXhl88++8y23HLLUB09xq68mRLLkrrRPtx88832\/e9\/3\/74xz\/aKaecUhYTjfuMM87wju0KYygLQuQgzdXo0aMLmlLEpYS6UjMoX7Jy9ioq9be\/\/W1BXaXnUMRlMGev6v7nP\/\/x8j4r5YDEerR0dtHb3jH8+9\/\/tj322CM0bEWoK4WI8vxKkAeLmOucfm5qpXxYa621CrjpJovyGz\/yyCMF0bJPPvlkPjetDmzvtd7eNaYo8X333TfUjK7zuHWkSnrKQJ9BwVIqAlj1vvrqK9OTA34RvzFjxtiAAQO8l0jd0N5Z5HgIQAACEIAABOIIIHpZFxCAAAQgAAEILHICEkzRVAo\/\/\/nP8ykU9Kj5dtttFxJzksDBqLwf\/vCH3kZdflHeTaVU8EXfkUceaePHjw+N9e233\/bklEpcBGkw6jeaB9UXQL\/+9a9NG6bp\/aRy8sknh4Sz0lAoGrh\/\/\/7eoV1hDEkMkt7Xo\/V6TD4qYSXhFUnqi7JgO5Juhx56aIFgjKYeUFSmojNLFVfRq8jYL7\/80nSDQBv2aTMtSdEhQ4bk5zNprOW8394xnH322XbLLbeETh3MNatrStGqwaIbGcq7q\/LYY495aR+CRSkcdH2qvPXWW7bLLruE3pec94+pxLUe5dbW1maffPKJl0NXubPXWGONkhvqaY3pBlAw+l83dSTBo5v5xYlt5TBOWkdJc5skerURpMakqPS0G0kmnZv3IQABCEAAAhDougQQvV13bhkZBCAAAQhAoGoIxMklbRAV3PAs7vFpP6ou7jFpP9rWh\/C\/\/\/3Pi1oMFkXw+Tvdb7755iG5KHEoMRssigKVgPHLqquuajrOpcSNUVGCQ4cO9Q7vCmNw4ZBUJ46DJNwLL7wQStURbScufYbEq9aIX9orSf12FOF61llnhW4sBPuj6FaXTf+SWMS9354xtLS0eBsaBvPTHnbYYaFNwSRNJbuDElSbl\/nyV8JWstcvSmGiGyrBos0FtaGhX3RDQ1G9Ku291oPn0c0V5WMOnst\/X4JUG6hp88Tg54j\/fpzwVgS4cu8GS9zmbb\/5zW+89BelijZW23XXXUNVJNj99uNE73\/\/+18vp7GiooNPD2gdKwJZm9vV1tbm29SGecGbWxpzcC78fMTBTujzLpgTXDfRJL2DRRHXJ5xwQjnLk2MgAAEIQAACEFjEBBC9i3gCOD0EIAABCEAAAuY9ji9R55egGPJfk\/iN5tD0ZW6c5HvppZds8cUXz7cpgSUxGyy+5IqLMrz\/\/vu9TZsqUeLkZTT1RFcYQyVYSbZFBftxxx1nRx11VMnmJTGVRiMaCRyM2tbNghdffDHUjkRwUGomRfRq3q699lqnoZba9M+pgZhK7RnDRx99ZFtvvXWoVeVB3mGHHUKvHXzwwXkxqzeCMleRvUFeyqs9bty40PE33nijnXfeeaHXlD5FUc\/tvdb9Rp9++mk7+uijC6K4o8iUlkLX8vLLLx9665VXXrGf\/OQnodfU3rHHHht6TVL3hhtuCL0W\/WyJm8tycvQqoj+aOiPYtsS1RLAvrqMsVVepSfzc5XF9UBqaYIocjWWfffYpmL+RI0eWu0Q5DgIQgAAEIACBRUgA0bsI4XNqCEAAAhCAAATmE4jm7FRE5JVXXhnCo8gzCadg8WVpNLetIkDffPPNAryKgJNw8ou\/EVpc1J7EsiLr1I5ywSon7GqrrWZKGZFGACuqbs899wydV2kIbr311lD\/usIYKrGeTzvttFBuU7WpaN6ll146sXlFaF9++eWheppDPcpfrEhUKnWBX0qJ3qeeesoOOuigxH74FbQOJZLjIkqdG3Go6DqGuPy8cZvWRWW2HxmdzWa9nNnBEhfdGrfZ2rPPPmvLLbdcu691nTsun3YpTLpxpM0b\/TQtqhsXuayc3tH0LkojEoyujbt2485djuh1mGovstffQFCRzIqeDpY77rgj\/5RBsU0iX331VRs4cKB3WFxecH3mae1SIAABCEAAAhCoPgKI3uqbM3oMAQhAAAIQ6HIERo0aZRMnTsyPa\/\/99\/cejY8WP82B\/7ry42qjpGjUXVxEsI6JCmVFrSn6ME6ISCoHpXCwL5J9erS5sbExcS6uv\/56O\/\/880P19Oj7sGHDQq91hTEkwnCoEF0LOuS9997LbwZWqok\/\/\/nPBRGZcRGrwTZcJamOiW7KpWhRrVOJZKVD+P3vf+\/dHAgWibRtt93WYeTlV3Edg1KFaAzBEhedGif\/lCJAuaijNzni+MYJZV1j6623nrX3Wlff4\/Jt61pWxKtuCOmaC0Yd6xjdONINpGBR1LGu\/2AJbrKmnL9qM1guuugi78ZNUmmP6FUKBj2NoE3j4sozzzzjRSjHPYnwq1\/9ykvxoKK0FnrqIVp0k8nfeDLK0v9MTBof70MAAhCAAAQg0DkJIHo757zQKwhAAAIQgEC3IhB9HDwuP66ArLPOOqFHtf16xx9\/fCg3ZVzeUB0flRrasE2RfhIfcWK51CRIWF199dUl5ylOxBST2F1hDJVYtFGZX0zax50r7nF8cdW8FyuuklTHR\/sWXQPNzc1eDtZgDlzdFFBe3Y4srmPQpmqnnHJKqCvBR\/39N+Ly6KqecuJGpbVEafQx\/zjJqfQHShvR3ms9rm3Ng6K5a2pqvCF8++23tuGGG4bGqcjc6CZ0r732mo0ePTpUT5sy+iliFB17xhlnhN7XMXEbAkbnt1zRG9wAUtJauYAnTJgQaj64UWX0KQXNj0S9isahJxOiJZgKJTofyl08ZsyYjlyutA0BCEAAAhCAQAcSQPR2IFyahgAEIAABCEDAjUBUoBXLyRqVEn7qhWLine truncated
|
||||
%---
|
||||
%[output:26c3d5db]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQe8FNX5v9+7t1EuIGDFEiUqtojYNWqCGgu2WDAWNDH2XmNHrLHXqDExauzG2H5RscWuMbYYuxKsoNgA6dy6\/\/93YNaZ2dmdM3v3wr13n\/P58Em8e+bMOc85s+WZd95Tlc1ms0aBAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACBLkugCtHbZeeOjkMAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ8AggelkIEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAS6OAFEbxefQLoPAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQADRyxqAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEINDFCSB6u\/gE0n0IQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAohe1gAEIAABCEAAAhCAQJci0NLSYrNnz7a+fft2qX7TWQhAAAIQgAAEIAABCHQkAURvR9KlbQhAAAIQgAAE2kXgq6++su+++85WWGEF6927d+q2pk+fbp999pkttdRStuiii6Y6vq2tzSZNmmRffvmld9wyyyxjSyyxhGUymVTttLdydxhDexloHfz973+3cePG2UcffWQffPCB16TWxGqrrWYrrriiDRs2zH75y19aTU1N6tN9++23uWN69uxpDQ0NqdtY2Ae0ZwyNjY328ccfe+PWOq+qqko1HF0rus6am5tt8ODBJc1Be6911w5\/8skn9vzzz4eqr7zyyrbhhhsWbeJf\/\/qXjR8\/PlRns802s+WXXz72uClTpth1110Xem3PPff03stUxPvVV1\/NvS722223neswqAcBCEAAAhCAAARiCSB6WRgQgAAEIAABCHQqAhIqd9xxh7388ss2efLkXN9WWWUVW3vtte2YY44pKm0nTpxoV199tSdRJHX8suSSS9p6661nv\/3tb23o0KFFx\/zggw\/aFVdcETreP+Dwww+3gw46yPr06ZNr4+mnn7aLL764JI5bb721HX300aFju8MYSoIROUgC8e6777bzzjvPZs2aldikpO8FF1xga6yxRmJdv4JuJKy\/\/vq5+hJ+Wn9dqZQyhjlz5thVV11l\/\/73v+3NN9\/MDVfyXDwkzXfYYYeiGG6\/\/XZ7\/PHH7T\/\/+U9ofnSdbbLJJnbooYcWlb7tvdZLmaMXXnjB9t1339ChWjcPPfRQ0ea22GKLvPcDCeOll1469rj3338\/T9zeddddubV2zz332Iknnhg6VvKXAgEIQAACEIAABNpDANHbHnocCwEIQAACEIBAWQn885\/\/9CRqsaKIOAkmidtokdjdfffdQ4I4rq0777zTNthgg9jTqO3Ro0cX7cPAgQPtgQceyEke\/f\/jjjuuJBbqr+SkX7rDGEoCETmoqanJfvOb33giMm0555xzbO+993Y6TEJfwtMvXVH0ph3DzJkz7bDDDjNJz2Ll9NNP926MREs2m\/VubEQjVqP1RowYYZdddpnV1dXltdHea91pcmMqKe2Hor+jNw4knePeU9SEbrwoejdY1llnHS\/KvFBB9JY6QxwHAQhAAAIQgEB7CCB620OPYyEAAQhAAAIQKBsBRcf9+te\/dmpPj5crAi+Yo1WPfisCMRgFXKyx+++\/Py+yNy7KrlAba665phdtKol133332QknnODU92iloOjtDmMoCULMQZdeeqldc801JTf3xBNP2I9\/\/OOCxytdgaT+ueeeG6rTlURvKWOQpN1jjz1CaQOKQT7zzDPzImCjYrnY8ZK9irAPlvZe6yUvivkHaky33HJLqBmtt5133jm2aUXinnrqqaHX4rgEKyB62ztLHA8BCEAAAhCAQCkEEL2lUOMYCEAAAhCAAATKTkDRm88991yoXT3+rfyriv5TVF2wXHLJJbbLLrvk\/vTnP\/85FBmrF5TuYaONNrK33nrLXn\/99dDxOlZt+OWLL76wTTfdNFRHj7Erb6bEsqRutA833XST\/exnP7O\/\/e1vdsopp5TEROM+44wzvGO7wxhKghA5SHM1cuTIvKYUcSmhrtQMypesnL2KSv3DH\/6QV1fpORRxGczZq7r\/\/e9\/vbzPSjkgsR4tnV30tncMb7zxhu26666hYStCXSlElOdXgjxYxFzn9HNTK+XD6quvnsdNN1mU3\/jhhx\/Oi5Z98sknc7lpdWB7r\/X2rjFFie+1116hZnSdx60jVdJTBnoPCpZiEcCq980335ieHPCL+I0aNcr69+\/v\/YnUDe2dRY6HAAQgAAEIQCCOAKKXdQEBCEAAAhCAwEInIMEUTaWw33775VIo6FHzrbbaKiTmJIGDUXm\/+MUvvI26\/KK8m0qp4Iu+I444wsaOHRsa67vvvuvJKZW4CNJg1G80D6ovgE4++WTThml6PamcdNJJIeGsNBSKBu7Xr593aHcYQxKDpNf1aL0ek49KWEl4RZL6oizYjqTbwQcfnCcYo6kHFJWp6MxixVX0KjL266+\/Nt0g0IZ92kxLUnTQoEG5+Uwaaymvt3cMZ599tv31r38NnTqYa1bXlKJVg0U3MpR3V+XRRx\/10j4Ei1I46PpUeeedd2zHHXcMvS457x9Tjms9yq21tdU+\/\/xzL4eucmevuuqqRTfU0xrTDaBg9L9u6kiCRzfzixPbymGctI6S5jZJ9GojSI1JUelpN5JMOjevQwACEIAABCDQfQkgervv3DIyCEAAAhCAQJchECeXtEFUcMOzuMen\/ai6uMek\/WhbH8L\/\/vc\/L2oxWBTB5+90v\/HGG4fkosShxGywKApUAsYvK620kuk4lxI3RkUJDh482Du8O4zBhUNSnTgOknAvvvhiKFVHtJ249BkSr1ojfmmvJPXbUYTrWWedFbqxEOyPoltdNv1LYhH3envG0Nzc7G1oGMxPe8ghh4Q2BZM0lewOSlBtXubLXwlbyV6\/KIWJbqgEizYX1IaGftENDUX1qrT3Wg+eRzdXlI85eC7\/dQlSbaCmzROD7yP+63HCWxHgyr0bLHGbt\/3+97\/30l8UK9pYbaeddgpVkWD3248TvR9++KGX01hR0cGnB7SOFYGsze2qq6tzbWrDvODNLY05OBd+PuJgJ\/R+F8wJrptokt7Boojr448\/vpTlyTEQgAAEIAABCCxkAojehTwBnB4CEIAABCAAAfMex5eo80tQDPl\/k\/iN5tD0ZW6c5Hv55ZdtscUWy7UpgSUxGyy+5IqLMrz33nu9TZvKUeLkZTT1RHcYQzlYSbZFBfuxxx5rRx55ZNHmJTGVRiMaCRyM2tbNgpdeeinUjkRwUGomRfRq3q699lqnoRbb9M+pgZhK7RnDp59+aptvvnmoVeVB3nbbbUN\/O\/DAA3NiVi8EZa4ie4O8lFd7zJgxoeNvuOEGO++880J\/U\/oURT2391r3G3366aftqKOOyovijiJTWgpdy8stt1zopVdffdV+9atfhf6m9o455pjQ3yR1\/\/KXv4T+Fn1viZvLUnL0KqI\/mjoj2LbEtUSwL66jLFVXqUn83OVxfVAammCKHI1lzz33zJu\/4cOHl7pEOQ4CEIAABCAAgYVIANG7EOFzaghAAAIQgAAE5hGI5uxUROSVV14ZwqPIMwmnYPFlaTS3rSJA33777Ty8ioCTcPKLvxFaXNSexLIi69SOcsEqJ+yQIUNMKSPSCGBF1e22226h8yoNwc033xzqX3cYQznW82mnnRbKbao2Fc271FJLJTavCO3LL788VE9zqEf5CxWJSqUu8Esx0fvUU0\/ZAQcckNgPv4LWoURyXESpcyMOFV3HEJefN27TuqjM9iOj29ravJzZwRIX3Rq32dqzzz5ryy67bLuvdZ07Lp92MUy6caTNG\/00LaobF7msnN7R9C5KIxKMro27duPOXYrodZhqL7LX30BQkcyKng6W2267LfeUQaFNIl977TUbMGCAd1hcXnC952ntUiAAAQhAAAIQ6HoEEL1db87oMQQgAAEIQKDbERgxYoR98MEHuXHts88+3qPx0eKnOfD\/rvy42igpGnUXFxGsY6JCWVFrij6MEyKSykEpHOyLZJ8eba6vr0+ci+uvv97OP\/\/8UD09+r7yyiuH\/tYdxpAIw6FCdC3okPHjx+c2AyvWxD\/+8Y+8iMy4iNVgG66SVMdEN+VStKjWqUSy0iH86U9\/8m4OBItE2pZbbukw8tKruI5BqUI0hmCJi06Nk39KEaBc1NGbHHF844SyrrG11lrL2nutq+9x+bZ1LSviVTeEdM0Fo451jG4c6QZSsCjqWNd\/sAQ3WVPOX7UZLBdddJF34yaptEf0KgWDnkbQpnFx5ZlnnvEilOOeRPjd737npXhQUVoLPfUQLbrJ5G88GWXpvycmjY\/XIQABCEAAAhDonAQQvZ1zXugVBCAAAQhAoKIIRB8Hj8uPKyA\/+clPQo9q+\/WOO+64UG7KuLyhOj4qNbRhmyL9JD7ixHKxSZCwuvrqq4vOU5yIKSSxu8MYyrFoozK\/kLSPO1fc4\/jiqnkvVFwlqY6P9i26BpqamrwcrMEcuLopoLy6HVlcx6BN1U455ZRQV4KP+vsvxOXRVT3lxI1Ka4nS6GP+cZJT6Q+UNqK913pc25oHRXNXVVV5Q5gyZYqtu+66oXEqMje6Cd3rr79uI0eODNXTpox+ihhFx55xxhmh13VM3IaA0fktVfQGN4CUtFYu4Pfeey\/UfHCjyuhTCpofiXoVjUNPJkRLMBVKdD6Uu3jUqFEduVxpGwIQgAAEIACBDiSA6O1AuDQNAQhAAAIQgIAbgahAK5STNSol\/NQL0Ujd9ddf35TLNLine truncated
|
||||
%---
|
||||
%[output:6c799ef9]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQncVmP+\/68oNJQkS9n\/Ik2hxKjs2UnWGIwlwthLxr4NIoxk32WZkX0nuywl+5CoKRoaIrsYW\/i\/3pffdc91n+ec+z7Pfc5zeu5zPt\/Xy0vPfa71c13nWd7nez5Xi19\/\/fVXo5ACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIgbpVoIVAb92unQYuBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUsAoI9GojSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBepcAYHeOl9ADV8KSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkg0Ks9IAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFKhzBQR663wBNXwpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAQK\/2gBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUqDOFRDorfMF1PClgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACAr3aA1JACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSIE6V0Cgt84XUMOXAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKCPRqD0gBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAXqXAGB3jpfQA1fCkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpINCrPSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSocwUEeut8ATV8KSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgECv9oAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlKgzhUQ6K3zBdTwpYAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAgK92gNSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkiBOldAoLfOF1DDlwJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACgj0ag9IASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAF6lwBgd46X0ANXwpIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSDQqz0gBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUqHMFBHrrfAE1fCkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIBAr\/aAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSoM4VEOit8wXU8KWAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAICvdoDUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIgTpXQKC3zhdQw5cCUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQAoI9GoPSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBepcAYHeOl9ADV8KSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkg0Ks9IAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFKhzBQR663wBNXwpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAQK\/2gBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUqDOFRDorfMF1PClgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACAr3aA1JACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSIE6V0Cgt84XUMOXAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKCPRqD0gBKSAFpIAUmMcKfPfdd6Z169bzeBTqXgpIASkgBaSAFJACUkAKSAEpIAXqWQGB3npePY1dCkgBKVAgBd5\/\/30zbty4qjNeZJFFzHLLLWeWXXZZs\/TSS5sWLVqE1nnllVfM5MmTq7YXVWCLLbaw7Tc2fvzxR3PbbbeZiRMnmnfffddMmTLFNrHwwgub1VZbzayyyipmjz32MN27d29s0yovBaSAFJACUkAKSAEpIAWkgBSQAgVWQKC3wIuvqUsBKSAF6kmBxx9\/3Bx44IGNGnKvXr3MCSecYHr27Nmg3t\/+9jdz2WWXNao9v\/Ctt95q1llnnUbVf\/TRR82ZZ55p\/vOf\/1Stt80225hjjz3WQus8x5w5c8ynn35amiLAe8kll8zzlDU3KSAFpIAUkAJSQApIASkgBaRAkygg0NsksqpRKSAFpIAUSFuBWkCvG8Opp55q9tlnn7IhZQ16n3zySTN48OBGyUJW8v33328WXXTRRtWrp8JHHnmknaOLbbfd1lx88cX1NAWNVQpIASkgBaSAFJACUkAKSAEp0CwUEOhtFsugQUgBKSAFpEA1BZKAXtp++OGHzaqrrlrqJkvQ+9FHH5nNN9\/cfPvtt9Wm2eD6+uuvb6677jrTsmXLRtethwqHHXaYeeihhwR662GxNEYpIAWkgBSQAlJACkgBKSAFmrUCAr3Nenk0OCkgBaSAFHAKhIHeTTfd1HTp0qUkEkD1kUceCQWqW221VZlVQxjo3WmnncyCCy4YS3Syc1daaaVYZW+88UZz2mmnlZUF4O6www7mD3\/4g2nXrp15++23zXPPPReazXr33XebNddcM1Zf9VZIoLfeVkzjlQJSQApIASkgBaSAFJACUqC5KiDQ21xXRuOSAlJACkiBMgXCQO\/IkSMtLPXj559\/Nk899VQDP18OTpswYUKpaBjoffHFF02HDh1SV\/6ggw4yjz32WKndlVde2Tz44INmgQUWaNAX3r\/HH3982edA4r333rvquH799Vfz8ccfm5kzZxoOpeNgt8ZkAuOXO336dPPZZ5+Zzp07mxVWWCHyMLuowXzzzTe2Df7fsWNHe2AdvrtRkRT0fvLJJ4aD+ubOnWvWXXfdBt2gCWXee+8988MPP1j\/X8bUtm3bqnqqgBSQAlJACkgBKSAFpIAUkAJSoJ4UEOitp9XSWKWAFJACBVYgLuh1Eh1wwAHmiSeeKFNs8uTJpnXr1vazLEEvmcczZswojWW77bYzF154Yehqfvfdd6Zbt25l14DZQG0XHNQGzHVx7rnnWoB5xhlnmDfeeKOs7oYbbmg\/r3SoG9YJI0aMaHBIHICWjONBgwYZMpCj4pdffjGjR482N9xwQ+hBcxtssIFhPdZbb70SOAbwcijdO++8U5aBTZ+AcOL888+3\/8a64oILLih1j4\/viSeeaIYPH25uu+02+znlfJj+wQcf2Czq4B5wjTAfMriDDwoKfItp6lJACkgBKSAFpIAUkAJSQArUuQICvXW+gBq+FJACUqAoCjQW9J5yyinm73\/\/e5k848aNM8svv7z9LEvQu\/\/++9ssYxfAzDFjxpju3buHLh8Zqj\/99FPp2mKLLWbat29f+hp4CyR18ac\/\/anBXIMNX3rppWbrrbcu+\/jrr782J598ctlhaFH76dBDDzXDhg1rcHn27NnmL3\/5i3n22WerbkUOXuM\/IjiHsMr33Xef1Si4VoDuzz\/\/3EycOLFUzQe9Y8eONcccc0wsT2TW5oQTTmh05nLVyaqAFJACUkAKSAEpIAWkgBSQAlIgYwUEejMWXN1JASkgBaRAbQo0FvRidYDnrR+AQTJfiTDQS0ZqnFf6sTWoZEcQnOGoUaPMRRdd1GDiwM5+\/fqZ3r17W6uE+eabL5Y4cSBpWEPjx4+3dgou\/vrXv9os3LhBhu2OO+5YVnyPPfYoA67V2rrqqqvMZpttlgj0hvXhQC8+zX379q02jLLr11xzjV0HhRSQAlJACkgBKSAFpIAUkAJSoJ4VEOit59XT2KWAFJACBVIgLujFhxUrgmD2KWAWW4MWLVpY1cJAb1w5L7vsMsPhbnEDwAwQrRSMD4sDfGaxS+jatWtk8Uqgd5NNNjGzZs0yU6ZMaVAfqwLmTXD4GxYIfjCGAw880MJw\/Izvv\/\/+suvLLrusefrpp0sakqVMRmwwGN9qq61mnnnmmQbjWGeddQw+xLRNRjGZzW+99VapCfrA03j++ec322+\/vbXaiLNWDvRecsklZTYXNLz55pvbbOZvv\/3WPP\/883Z\/+HH44YeboUOHxl1OlZMCUkAKSAEpIAWkgBSQAlJACjRLBQR6m+WyaFBSQApIASkQVCAM9Pbq1cusvfbapaIffvhhpA1B0Bc3DjyMWoXGgl7aCQOQlVaZuR188MFm4403bpDpGwZ6sTPAx9cd8AbMxAc3GC+88IJZYokl7LUg8OSAOB8wn3POOebKK68sa+LOO+80PXv2tJ\/RZxAo+9mxQHdsJV555ZWyNiZNmlTKiI5zGFvUWgFwgdXYcQCpOXwuePAdwNmfJ4e2oR+Zvy6A49dee61uOikgBaSAFJACUkAKSAEpIAWkQF0rINBb18unwUsBKSAFiqNAGOhtzOzx6\/Vf6c8a9P76668Gn1zAKZmlcQNbB+wVWrVqVaoSBL2LL764efLJJ02bNm3KmuXAMjJm\/XCgFi182Ek\/N998c1lZvIIBzX5gicEhZ2GHxgFdL7744rLyZO46X153wYfFtYLeXXfd1Zx11lkNIDhewe+9915pDBxs58A0kPe1114z++23X9kahM097vqonBSQAlJACkgBKSAFpIAUkAJSoLkoINDbXFZC45ACUkAKSIGKCiQBvf4hYK6TMNC75pprmgUXXLDqShx11FHWXqGWmDNnjmEuHAwHnI0DfQcNGmQPTXMRBL077LBDA7sCypJJO3DgwLJhXnjhhWaLine truncated
|
||||
%---
|
||||
%[output:644d063f]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQm8VtP+\/1cUQkllyvwXSUmJqzJnuIYkQ1zcEOGaS655uohMyTzLcK\/MZMosQ8l8SdQVXbpEkiGuoeT\/ei93Pb\/17LP38+zz7H2ezrP35\/t69arz7DW+19rndD77uz+ryW+\/\/fabUYiACIiACIiACIiACIiACIiACIiACIiACIiACIiACNQsgSYSemt27TRwERABERABERABERABERABERABERABERABERABEbAEJPRqI4iACIiACIiACIiACIiACIiACIiACIiACIiACIhAjROQ0FvjC6jhi4AIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiICEXu0BERABERABERABERABERABERABERABERABERABEahxAhJ6a3wBNXwREAEREAEREAEREAEREAEREAEREAEREAEREAERkNCrPSACIiACIiACIiACIiACIiACIiACIiACIiACIiACNU5AQm+NL6CGLwIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAISerUHREAEREAEREAEREAEREAEREAEREAEREAEREAERKDGCUjorfEF1PBFQAREQAREQAREQAREQAREQAREQAREQAREQAREQEKv9oAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI1DgBCb01voAavgiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAhI6NUeEAEREAEREAEREAEREAEREAEREAEREAEREAEREIEaJyCht8YXUMMXAREQAREQAREQAREQAREQAREQAREQAREQAREQAQm92gMiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiUOMEJPTW+AJq+CIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgoVd7QAREQAREQAREQAREQAREQAREQAREQAREQAREQARqnICE3hpfQA1fBERABERABERABERABERABERABERABERABERABCT0ag+IgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQI0TkNBb4wuo4YuACIiACIiACIiACIiACIiACIiACIiACIiACIiAhF7tAREQAREQAREQAREQAREQAREQAREQAREQAREQARGocQISemt8ATV8ERABERABERABERABERABERABERABERABERABEZDQqz0gAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAjVOQEJvjS+ghi8CIiACIiACIiACIiACIiACIiACIiACIiACIiACEnq1B0RABERABERABERABERABERABERABERABERABESgxglI6K3xBdTwRUAEREAEREAEREAEREAEREAEREAEREAEREAEREBCr\/aACIiACIiACIiACIiACIiACIiACIiACIiACIiACNQ4AQm9Nb6AGr4IiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAISOjVHhABERABERABERABERABERABERABERABERABERCBGicgobfGF1DDFwEREAEREAEREAEREAEREAEREAEREAEREAEREAEJvdoDIiACIiACIiACIiACIiACIiACIiACIiACIiACIlDjBCT01vgCavgiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIKFXe0AEREAEREAEREAEREAEREAEREAEREAEREAEREAEapyAhN4aX0ANXwREQAREQAREQAREQAREQAREQAREQAREQAREQAQk9GoPiIAIiIAIiMBCJvDjjz+a5s2bL+RRqHsREAEREAEREAEREAEREAEREIFaJiCht5ZXT2MXAREQgRwR+OSTT8y4cePKznjppZc2q666qllllVXMiiuuaJo0aRJa54033jCTJ08u215Uge233962X9\/45ZdfzN13320mTpxoPvroIzNlyhTbxFJLLWXWXXdds\/baa5t9993XdO7cub5Nq7wIiIAIiIAIiIAIiIAIiIAIiECOCUjozfHia+oiIAIiUEsEnn76aXPooYfWa8jdu3c3p5xyiunWrVudehdffLG5+uqr69WeX\/iuu+4yG2+8cb3qP\/nkk+bcc881\/\/nPf8rW22mnncyJJ55oRessx9y5c83s2bMLU0TwXn755bM8Zc1NBERABERABERABERABERABBqEgITeBsGqRkVABERABNImUInQ68Zw5plnmgMOOKBoSNUWep999lkzaNCgemEhK\/nhhx82yyyzTL3q1VLhY4891s7Rxc4772yuuOKKWpqCxioCIiACIiACIiACIiACIiACjYKAhN5GsQwahAiIgAiIQDkCSYRe2n788cfNOuusU+immkLv559\/brbbbjvzww8\/lJtmneubbbaZufnmm03Tpk3rXbcWKhx11FHmsccek9BbC4ulMYqACIiACIiACIiACIiACDRqAhJ6G\/XyaHAiIAIiIAKOQJjQu80225gOHToUICGoPvHEE6GC6g477FBk1RAm9O6+++5m8cUXjwWd7Nw111wzVtnbbrvNnHXWWUVlEXD79etn\/vCHP5hWrVqZ999\/37z00kuh2awPPPCA2WCDDWL1VWuFJPTW2oppvCIgAiIgAiIgAiIgAiIgAo2VgITexroyGpcIiIAIiEARgTChd8SIEVYs9ePXX381zz33XB0\/Xw5OmzBhQqFomND76quvmrZt26ZO\/rDDDjNPPfVUod211lrLPProo2axxRar0xfevyeffHLR54jE+++\/f9lx\/fbbb+aLL74wM2bMMBxKx8Fu9ckExi932rRp5quvvjLt27c3q6++euRhdlGD+f77720b\/L3SSivZA+vw3Y2KpELvl19+aTiob\/78+WaTTTap0w1MKPPxxx+bn3\/+2fr\/MqaWLVuW5akCIiACIiACIiACIiACIiACIlBLBCT01tJqaawiIAIikGMCcYVeh+iQQw4xzzzzTBGxyZMnm+bNm9vPqin0knk8ffr0wlh22WUXc9lll4Wu5o8\/\/mg6depUdA0xG1HbBQe1Iea6uPDCC62Aec4555h33nmnqO4WW2xhPy91qBvWCcOHD69zSBwCLRnHAwcONGQgR8WCBQvMqFGjzK233hp60Nzmm29uWI9NN920IBwj8HIo3YcffliUgU2fCOHEJZdcYv+NdcWll15a6B4f31NPPdUMGzbM3H333fZzyvli+qeffmqzqIN7wDXCfMjgDj4oyPEtpqmLgAiIgAiIgAiIgAiIgAjUOAEJvTW+gBq+CIiACOSFQH2F3jPOOMP8\/e9\/L8Izbtw4s9pqq9nPqin0HnzwwTbL2AVi5ujRo03nzp1Dl48M1Xnz5hWuLbvssqZ169aFrxFvEUld\/PnPf64z12DDV111ldlxxx2LPv7uu+\/M6aefXnQYWtR+OvLII83QoUPrXJ41a5b561\/\/al588cWyW5GD1\/hDBOcQVvmhhx6yjIJrhdA9Z84cM3HixEI1X+gdO3asOeGEE2J5IrM2p5xySr0zl8tOVgVEQAREQAREQAREQAREQAREoMoEJPRWGbi6EwEREAERqIxAfYVerA7wvPUDYZDMVyJM6CUjNc4r\/dgalLIjCM5w5MiR5vLLL68zccTO3r17mx49elirhEUWWSQWnDgiaVhD48ePt3YKLv72t7\/ZLNy4QYbtbrvtVlR83333LRJcy7V1\/fXXm2233TaR0BvWhxN68Wnu1atXuWEUXb\/xxhvtOihEQAREQAREQAREQAREQAREoJYJSOit5dXT2EVABEQgRwTiCr34sGJFEMw+RZjF1qBJkyaWWpjQGxfn1VdfbTjcLW4gMCOIlgrGh8UBPrPYJXTs2DGyeCmhd+uttzYzZ840U6ZMqVMfqwLmTXD4GxYIfjCGQw891Irh+Bk\/\/PDDRddXWWUV8\/zzzxcYkqVMRmwwGN+6665rXnjhhTrj2HjjjQ0+xLRNRjGZze+9916hCfrA03jRRRc1u+66q7XaiLNWTui98sori2wuaHi77baz2cw\/\/PCDefnll+3+8OPoo482Q4YMibucKicCIiACIiACIiACIiACIiACjZKAhN5GuSwalAiIgAiIQJBAmNDbvXt3s9FGGxWKfvbZZ5E2BEFf3DjiYdQq1FfopZ0wAbLUKjO3ww8\/3Gy11VZ1Mn3DhF7sDPDxdQe8IWbigxuMV155xSy33HL2WlDw5IA4X2C+4IILzHXXXVfUxH333We6detmP6PPoKDsZ8ciumMr8cYbbxS1MWnSpEJGdJzD2KLWCgEXsRo7DkRqDp8LHnyH4OzPk0Pb4EfmrwvE8Ztuukk3nQiIgAiIgAiIgAiIgAiIgAjUNAEJvTW9fBq8CIiACOSHQJjQW5\/Z49frv9JfbaH3t99+M\/jkIpySWRo3sHXAXqFZs2aFKkGht02bNubZZ581LVq0KGqWA8vImPXDCbWw8MVO+rnjjjuKyuIVjNDsB5YYHHIWdmgcousVV1xRVJ7MXefL6y74YnGlQu9ee+1lzjvvvDoiOF7BH3\/8cWEMHGznhGlE3rfeesscdNBBRWsQNve466NyIiACIiACIiACIiACIiACItBYCEjobSwroXGIgAiIgAiUJJBE6PUPAXOdhAm9G2ywgVl88cXLrsRxxx1n7RUqiblz5xrmwsFwiLNxRN+BAwfaQ9NcBIXefv361bEroCyZtP379y8a5mWXXWa23377OtYQiMXYKgTj8ccfL\/qoS5cu5sEHHzQfffSR9dr147TTTrMian2iUqEXQXfllVcu2RX2FFhNTJs2zYq\/wcxiV1lCb31WTGVFQAREQAREQAREQAREQAQaKwEJvY11ZLine truncated
|
||||
%---
|
||||
%[output:1cf215b8]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>scientaPassEnergy_eV<\/strong>\n <strong>_________________________<\/strong> <strong>________________________<\/strong> <strong>____________________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} {'27-Feb-2022 19:46:48'} 50 \n\n","truncated":false}}
|
||||
%---
|
||||
%[output:22c700e4]
|
||||
% data: {"dataType":"text","outputData":{"text":"Fitting row 1685 of DataTable...\nValidating FitParameter structure...\n Number of peaks detected: 1\n Checking core parameters (required for all modes)...\n Checking mode-specific parameters for mode 'unconstrained'...\n Checking background model parameters for 'linear'...\n✓ FitParameter validation successful for 1 peak(s) in 'unconstrained' mode with 'linear' background.\n\n","truncated":false}}
|
||||
% data: {"dataType":"text","outputData":{"text":"Validating FitParameter structure...\n Number of peaks detected: 1\n Checking core parameters (required for all modes)...\n Checking mode-specific parameters for mode 'unconstrained'...\n Checking background model parameters for 'linear'...\n✓ FitParameter validation successful for 1 peak(s) in 'unconstrained' mode with 'linear' background.\n\n","truncated":false}}
|
||||
%---
|
||||
%[output:3b9a689c]
|
||||
% data: {"dataType":"warning","outputData":{"text":"Warning: Data sizes do not match. Converting all data to column vectors."}}
|
||||
%---
|
||||
%[output:712f3db2]
|
||||
% data: {"dataType":"text","outputData":{"text":"\nGlobalSearch stopped because it analyzed all the trial points.\n\nAll 37 local solver runs converged with a positive local solver exit flag.\n <strong>name<\/strong> <strong>peakPosition<\/strong> <strong>peakArea<\/strong> <strong>peakFWHM<\/strong> \n <strong>_________________________<\/strong> <strong>_________________________________________<\/strong> <strong>__________________________________________________________________<\/strong> <strong>______________________________________________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} 363.6 NaN NaN NaN NaN 5.8028e+05 NaN NaN NaN NaN 1.9598 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakBackground<\/strong> \n <strong>_________________________<\/strong> <strong>__________________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} -34.061 17280\n\n <strong>name<\/strong> <strong>peakEta<\/strong>\n <strong>_________________________<\/strong> <strong>_______<\/strong>\n\n {'0035035_O1s_900eV.ibw'} NaN \n\n <strong>name<\/strong> <strong>peakShirleyK<\/strong>\n <strong>_________________________<\/strong> <strong>____________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} NaN \n\nFound 1 valid peaks (non-NaN)\n","truncated":false}}
|
||||
% data: {"dataType":"text","outputData":{"text":"\nGlobalSearch stopped because it analyzed all the trial points.\n\n29 out of 30 local solver runs converged with a positive local solver exit flag.\n <strong>name<\/strong> <strong>peakPosition<\/strong> \n <strong>_________________________<\/strong> <strong>_________________________________________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} 363.6 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakArea<\/strong> \n <strong>_________________________<\/strong> <strong>__________________________________________________________________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} 5.8028e+05 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakFWHM<\/strong> \n <strong>_________________________<\/strong> <strong>______________________________________________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} 1.9598 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakBackground<\/strong> \n <strong>_________________________<\/strong> <strong>__________________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} -34.088 17290\n\nFound 1 valid peaks (non-NaN)\n","truncated":false}}
|
||||
%---
|
||||
%[output:8f9f23b4]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>scientaPassEnergy_eV<\/strong>\n <strong>_________________________<\/strong> <strong>________________________<\/strong> <strong>____________________<\/strong>\n\n {'0056056_O1s_900eV.ibw'} {'28-Feb-2022 12:15:48'} 50 \n\n","truncated":false}}
|
||||
%[output:7541066b]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABGAAAAKiCAYAAACZ\/qosAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQe4FsX59h8UUT5iQWLUIBawYNcQBQVRo8beGzZs2EEsRFFUsCtiQcVesAQLBg0odo2CRiX8ETWChRIbaiDYiBFBv+vekzmZd86WmW1nd997ritX8LyzM8\/8ZnZ35t5nnmnx888\/\/yxMJEACJEACJEACJEACJEACJEACJEACJEACmRFoQQEmM7YsmARIgARIgARIgARIgARIgARIgARIgAQ8AhRgOBBIgARIgARIgARIgARIgARIgARIgARIIGMCFGAyBsziSYAESIAESIAESIAESIAESIAESIAESIACDMcACZAACZAACZAACZAACZAACZAACZAACWRMgAJMxoBZPAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlQgOEYIAESIAESIAESIAESIAESIAESIAESIIGMCVCAyRgwiycBEiABEiABEiABEiABEiABEiABEiABCjAcAyRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQMQEKMBkDZvEkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAGGY4AESIAESIAESIAESIAESIAESIAESIAEMiZAASZjwCyeBEiABEiABEiABEiABEiABEiABEiABCjAcAyQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQMYEKMBkDJjFkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAFGI4BEiABEiABEiABEiABEiABEiABEiABEsiYAAWYjAGzeBIgARIgARIgARIgARIgARIgARIgARKgAMMxQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIZE6AAkzFgFk8CJEACJEACJEACJEACJEACJEACJEACFGA4BkiABEiABEiABEiABEiABEiABEiABEggYwIUYDIGzOJJgARIgARIgARIgARIgARIgARIgARIgAIMxwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJZEyAAkzGgFk8CZAACZAACZAACZAACZAACZAACZAACVCA4RggARIgARIgARIgARIgARIgARIgARIggYwJUIDJGDCLJwESIAESIAESIAESIAESIAESIAESIAEKMBwDJEACJEACJEACJEACJEACJEACJEACJJAxAQowGQNm8cUhMG3aNHn11VflmGOOkRYtWhTHMFpCAiRAAiRAAiRAAiRAAiRAAiRQeQIUYCrfxWwgCHzzzTeyyy67yOeffy4ffvihLLHEEgRDAiRAAiRAAiRAAiRAAiRAAiRAArkRoACTG2pW1JwE+vfvL+PGjfNMoADTnD3BukmABEiABEiABEiABEiABEigPglQgKnPfq+rVj\/66KNy5plnykEHHSQPP\/wwBZi66n02lgRIgARIgARIgARIgARIgASKQYACTDH6gVZkRGDWrFmyww47yOWXXy4LFiyQSy65hAJMRqxZLAmQAAmQAAmQAAmQAAmQAAmQQDABCjAcHYUi8N1338m+++4r6623ntx4442+ti1atEgee+wxeeSRR+Sjjz6StddeW7bcckvZa6+9ZPXVV2+8ZuHChZ7Xy8orryy33nqr3HXXXRRgCtXbNIYESIAESIAESIAESIAESIAE6ocABZj66etStHTUqFFy3nnnySabbOKJLGb66aef5KyzzpIxY8Y0+a1du3be3zt06OD9NnToUBk9erQ8\/fTTsuKKK1KAKcUIoJEkQAIkQAIkQAIkQAIkQAIkUE0CFGCq2a+latU\/\/\/lPmTlzpkyYMEFuuukmz\/YgAWb8+PHSt29fL8+gQYM8r5e5c+d6W4wmTpwoq622mrzwwgvSsmVL6dixo7Rp00Y6derk5f\/0009l3rx5XtmHHHKIHHzwwaXiRGNJgARIgARIgARIgARIgARIgATKS4ACTHn7rjKWI0YLYrXoKUiAwfakqVOnyhFHHCEXXnhh4yUQcX73u995cV7uvfde6dGjh+fxgu1KKv3tb3+T5557TgYOHChdunTx\/sdEAiRAAiRAAiRAAiRAAiRAAiRAAnkQoACTB+U6qgPeKBA+TjvtNGnVqlWTlr\/zzjvyxhtvyDHHHNP4G2K9wDMFadq0ad7vfgIMth8h3gsSthptttlmNeWfcMIJ8uyzz0rv3r1lyJAhTeqGMIO\/8xjqOhqQbCoJkAAJkAAJkAAJkAAJkAAJFIQABZiCdERVzOjVq5cnoOyyyy5y3XXX1YgwEF+w9QdeKvgN24fMhMC6iPHiJ8BgC9E222zjXfLBBx\/IkksuWXP57bff7m1F6tmzp4wcObJJ2ffff79ccMEFMmPGDGnRokVVkLMdJEACJEACJEACJEACJEACJEACJSBAAaYEnVQmE7E96PDDD\/dEFl2E0cUXCCQ333yztG7d2kmAefXVV72yV1llFcG\/zQSvmAEDBkjnzp0FsWKYSIAESIAESIAESIAESIAESIAESKAoBCjAFKUnKmSHKcIcd9xx3rYgiDJh4gsQhHnAPPjgg3LuuefKBhtsII8\/\/ngTYk8++aSccsopgQJNhRCzKSRAAiRAAiRAAiRAAiRAAiRAAiUjQAGmZB1WFnN1EUbZHCW+RAkwOFL67LPPDhRgHn30UTnzzDPpAVOWQUI7SYAESIAESIAESIAESIAESKCOCFCAqaPOzrupymNF1fvmm2\/KcsstF2pGmAcMjpfu06dPoIcLgv9ecskl3glICLjLRAIkQAIkQAIkQAIkQAIkQAIkQAJFIUABpig9UTE79Jgvqmk4bhonHi299NKBrQ0TYOBVg2OokfzEnIsuusgLvotAv5deemnFiLI5JEACJEACJEACJEACJEACJEACZSZAAabMvVdQ282Au\/BaQQwYpCgRJkyAWbhwoXTp0sWLJXPDDTfI7rvv3khg0aJFstVWW3nHWd9yyy3y+9\/\/vqB0aBYJkEAQgVdmfCXdO61AQCRAAiRAAiRAAiRAAiRQSQIUYCrZrc3XqKDTjiZPniwHHnhgpAgTJsDg4sGDB8t9990n7dq1E2xJWnbZZb0yIboMHTpU2rRpI6+88krkVqfmI8SaSaDaBFxFlCufni1XPj2rBkqPtRtEmLN3XouCTLWHC1tHAiRAAiRAAiRAAnVFgAJMXXV39o09+OCDZdKkSb6nHekizLBhw2S\/\/fZrYlCUADNnzhzZf\/\/95fPPP\/fElp122kk+++wzeeONN7yyEPsFMWCYSIAE8iMQR0TRr4HQokQXWD3xw6\/klRnzvf\/Hb2fvvGZ+jWFNJEACJEACJEACJEACJJARAQowGYGt12K\/\/PJLuemmm7zTilq3bt0Ew5QpUzwPlb59+\/oiUicZbbrppoJ\/+6XZs2fLscceK7Nm\/e+rOTxicAJSr1696hU9200CuROIK6Ko66LEFdt8uTecFZIACZAACZAACZAACZBADAIUYGJA4yXFIPDpp5\/KW2+9JWuuuaZ39HSLFi2KYRitIIE6IGArjpj51H+PO2Vzq+1F2NK054gp9ISpgzHFJpIACZAACZAACZBA1QlQgKl6D7N9JEACJJAygbgiCrYZxdlWpOr71zXbp9wSFkcCJEACJEACJEACJEAC+RGgAJMfa9ZEAiRAAqUnENcjRYkoEGHGnry5M4cVz3iRXjDO1HgBCZAACZAACZAACZBAkQhQgClSb9AWEiABEig4gb1umuJZmLeIQi+Ygg8MmkcCJEACJEACJEACJBBJgAJMJCJmIAESIIH6IxB0nDQEmO6d2sY6mQheLEhxthIpz5s419Zf77HFJEACJEACJEACJEACRSRAAaaIvVIim15\/\/XU55JBDSmQxTSUBEggi8J\/Oe8t\/Ou9V83PLue95\/73M9D8L\/v3VPnfKLyYO9f5tmxb9cj0v63c9zvpvWWNrLsXvKBO\/q3rMspEHv7vWbWsj85EACZAACZAACZBAmQnMnDmzzObXje0UYOqmq7NpqBJgHnjggWwqYKmVJzB8+HCvjf379698W4vawCufniV\/+WplzzwcDY04LSohaO4rM+Z7wXO3W+ELL9+gLj9Ij7XbNmkOykFSZQW1V5UPTxo96fXADj1N\/HC+XDp5aXny4P\/XpNgD+w2RMw\/bRbp161ZUxLSrwARee+01wXOI77ECd1LBTeN7rOAdVALz8DET8yC+x0rQWQU0Ub3HKMAUsHN8TKIAU45+KqyVSoDhDV\/YLiq8YYceeqhn46hRowpva9kMDNpGpLfD9ThpXGseIa3KwG+6cPI\/oaVB0LHZgqS2GuFalNW9U8O1+DsEHhV7Rq9TtUfVp19Xtj6jvfkT4Hssf+ZVq5Hvsar1aP7t6dixoycCd+3aNf\/KWWPpCfA9Vq4upABTrv7Kzdqvv\/5avvjiC+nQoYO0bt06sF7e8Ll1SWUr4sQ13a51ESbiHicNgePsndcUU3jB38KSbSBdJbboR1ar4L\/wmlGeNspbR305XPTLzo3eOsrGdOmytCoS4Husir2ab5v4HsuXdxVrowBTxV7Nr018j+XHOo2aKMCkQbEiZfz0009y\/fXXy7hx42TWrIatBEhrrbWWXHzxxbL11ls3aSlv+Ip0fjM2gxPXdOCbYkjQNiIlTCQ9TlpZ7SJ0QETRRZWolutHV+M6tMnvenPiauvVE1U\/f68PAnyP1Uc\/Z9lKvseypFsfZVOAqY9+zqqVfI9lRTabcinAZMO1dKUuXrxYBg0aJA8\/\/LBne5s2bWTZZZeVzz\/\/vLEtI0aMkF133bWmbbzhS9fVhTOYE9fkXWIrOOj5EG8FyfY4aVyLpLxPIIbYXttw3WzvWiWimNuYgiiYHj1+1\/lNXOMKTMl7gyWUjQDfY2XrseLZm+Q9ZrNVtHgtpkVpLine truncated
|
||||
%---
|
||||
%[output:969d4f09]
|
||||
% data: {"dataType":"text","outputData":{"text":"Fitting row 1750 of DataTable...\nValidating FitParameter structure...\n Number of peaks detected: 1\n Checking core parameters (required for all modes)...\n Checking mode-specific parameters for mode 'unconstrained'...\n Checking background model parameters for 'linear'...\n✓ FitParameter validation successful for 1 peak(s) in 'unconstrained' mode with 'linear' background.\n\n","truncated":false}}
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>scientaPassEnergy_eV<\/strong>\n <strong>_________________________<\/strong> <strong>________________________<\/strong> <strong>____________________<\/strong>\n\n {'0056056_O1s_900eV.ibw'} {'28-Feb-2022 12:15:48'} 50 \n\n","truncated":false}}
|
||||
%---
|
||||
%[output:880f99d8]
|
||||
% data: {"dataType":"text","outputData":{"text":"Validating FitParameter structure...\n Number of peaks detected: 1\n Checking core parameters (required for all modes)...\n Checking mode-specific parameters for mode 'unconstrained'...\n Checking background model parameters for 'linear'...\n✓ FitParameter validation successful for 1 peak(s) in 'unconstrained' mode with 'linear' background.\n\n","truncated":false}}
|
||||
%---
|
||||
%[output:608e038f]
|
||||
% data: {"dataType":"warning","outputData":{"text":"Warning: Data sizes do not match. Converting all data to column vectors."}}
|
||||
%---
|
||||
%[output:598292bc]
|
||||
% data: {"dataType":"text","outputData":{"text":"\nGlobalSearch stopped because it analyzed all the trial points.\n\nAll 21 local solver runs converged with a positive local solver exit flag.\n <strong>name<\/strong> <strong>peakPosition<\/strong> <strong>peakArea<\/strong> <strong>peakFWHM<\/strong> \n <strong>_________________________<\/strong> <strong>_________________________________________<\/strong> <strong>__________________________________________________________________<\/strong> <strong>______________________________________________<\/strong>\n\n {'0056056_O1s_900eV.ibw'} 363.2 NaN NaN NaN NaN 2.6848e+05 NaN NaN NaN NaN 2.1012 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakBackground<\/strong> \n <strong>_________________________<\/strong> <strong>________________<\/strong>\n\n {'0056056_O1s_900eV.ibw'} 54.159 -15426\n\n <strong>name<\/strong> <strong>peakEta<\/strong>\n <strong>_________________________<\/strong> <strong>_______<\/strong>\n\n {'0056056_O1s_900eV.ibw'} NaN \n\n <strong>name<\/strong> <strong>peakShirleyK<\/strong>\n <strong>_________________________<\/strong> <strong>____________<\/strong>\n\n {'0056056_O1s_900eV.ibw'} NaN \n\nFound 1 valid peaks (non-NaN)\n","truncated":false}}
|
||||
% data: {"dataType":"text","outputData":{"text":"\nGlobalSearch stopped because it analyzed all the trial points.\n\nAll 18 local solver runs converged with a positive local solver exit flag.\n <strong>name<\/strong> <strong>peakPosition<\/strong> \n <strong>_________________________<\/strong> <strong>_________________________________________<\/strong>\n\n {'0056056_O1s_900eV.ibw'} 363.2 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakArea<\/strong> \n <strong>_________________________<\/strong> <strong>__________________________________________________________________<\/strong>\n\n {'0056056_O1s_900eV.ibw'} 2.6848e+05 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakFWHM<\/strong> \n <strong>_________________________<\/strong> <strong>______________________________________________<\/strong>\n\n {'0056056_O1s_900eV.ibw'} 2.1012 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakBackground<\/strong> \n <strong>_________________________<\/strong> <strong>________________<\/strong>\n\n {'0056056_O1s_900eV.ibw'} 54.186 -15436\n\nFound 1 valid peaks (non-NaN)\n","truncated":false}}
|
||||
%---
|
||||
%[output:0ab41352]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>scientaPassEnergy_eV<\/strong>\n <strong>_________________________<\/strong> <strong>________________________<\/strong> <strong>____________________<\/strong>\n\n {'0060060_O1s_900eV.ibw'} {'28-Feb-2022 12:47:15'} 50 \n\n","truncated":false}}
|
||||
%[output:342429e8]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABGAAAAKiCAYAAACZ\/qosAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQnYHUPa\/guxTRBBMIIhscY+GWIkYgzGThBr7GJNJHbBDLEMEpEIQmIZsYxYRswIsceQMCFfPowlGSNiZ3wxQcS+\/K+78q+j3nq7u5buPqe7z93X5fLmdHV11e+prq66+6mnFvrxxx9\/FDxIgARIgARIgARIgARIgARIgARIgARIgARyI7AQBZjc2DJjEiABEiABEiABEiABEiABEiABEiABEpAEKMCwIZAACZAACZAACZAACZAACZAACZAACZBAzgQowOQMmNmTAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAUYtgESIAESIAESIAESIAESIAESIAESIAESyJkABZicATN7EiABEiABEiABEiABEiABEiABEiABEqAAwzZAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAjkToACTM2BmTwIkQAIkQAIkQAIkQAIkQAIkQAIkQAIUYNgGSIAESIAESIAESIAESIAESIAESIAESCBnAhRgcgbM7EmABEiABEiABEiABEiABEiABEiABEiAAgzbAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAnkTIACTM6AmT0JkAAJkAAJkAAJkAAJkAAJkAAJkAAJUIBhGyABEiABEiABEiABEiABEiABEiABEiCBnAlQgMkZMLMnARIgARIgARIgARIgARIgARIgARIgAQowbAMkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkDMBCjA5A2b2JEACJEACJEACJEACJEACJEACJEACJEABhm2ABEiABEiABEiABEiABEiABEiABEiABHImQAEmZ8DMngRIgARIgARIgARIgARIgARIgARIgAQowLANkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEDOBCjA5AyY2ZMACZAACZAACZAACZAACZAACZAACZAABRi2ARIgARIgARIgARIgARIgARIgARIgARLImQAFmJwBM3sSIAESIAESIAESIAESIAESIAESIAESoADDNkACJEACJEACJEACJEACJEACJEACJEACOROgAJMzYGZPAiRAAiRAAiRAAiRAAiRAAiRAAiRAAhRg2AZIgARIgARIgARIgARIgARIgARIgARIIGcCFGByBszsSYAESIAESIAESIAESIAESIAESIAESIACDNsACZAACZAACZAACZAACZAACZAACZAACeRMgAJMzoCZPQmQAAmQAAmQAAmQAAmQAAmQAAmQAAlQgGEbIAESIAESIAESIAESIAESIAESIAESIIGcCVCAyRkwsycBEiABEiABEiABEiABEiABEiABEiABCjBsAyRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQMwEKMDkDZvYkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAGGbYAESIAESIAESIAESIAESIAESIAESIAEciZAASZnwMyeBEiABEiABEiABEiABEiABEiABEiABCjAsA2QAAmQAAmQAAmQAAmQAAmQAAmQAAmQQM4EKMDkDJjZkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAFGLYBEiABEiABEiABEiABEiABEiABEiABEsiZAAWYnAEzexIgARIgARIgARIgARIgARIgARIgARKgAMM2QAIkQAIkQAIkQAIkQAIkQAIkQAIkQAI5E6AAkzNgZk8CJEACJEACJEACJEACJEACJEACJEACFGDYBkiABEiABEiABEiABEiABEiABEiABEggZwIUYHIGzOxJgARIgARIgARIoMwEnp71iejeedkyV4FlJwESIAESIIFCEKAAUwgzsBAkQAIkQAIkQAIkUBwCQx5+Uwx5eHaLAvVYa4EIc+aOa1KQKY6pWBISIAESIIESEaAAUyJjsagkQAIkQAIkQAIkkCcBXXiB0KJEF9xzyuufiKdnzZX\/x7kzd1wjz6IwbxIgARIgARKoHAEKMJUzKStEAiRAAiRAAiRAAv4ElPhiE1dc0\/mXgFeQAAmQAAmQQLUJUICptn1ZOxIgARIgARIggZwIVCk2ihJVJvTbzGl5Eeq++6jn6QmTU9titiRAAiRAAtUkQAGmmnZlrUiABEiABEiABHIgUMXYKKFiimLx3+Hb5kCaWZIACZAACZBA9QhQgKmeTVkjEiCBHAlU6Yt3jpiYNQlUjkBRYqPk0Qftcc3z0l73nbCZt92WO+UJesF4U+MFJEACJEACzUqAAkyzWp71JgEScCZQxS\/ezpVnQhIgAeEa88Q1nS\/SvPsgCDDdO7cPCqpLLxhfazI9CZAACZBAMxOgANPM1mfdSSBDAnl8lc2weEFZFeWLd1DheREJkEAmBBoZG6VefRC8WFxjv5hQ1fIlLkPKpLkxExIgARIggYoToABTcQPnXb1nn31WHHjggXnfhvkXlMBX6+0pvlpvjxalazPnX\/LfS8z8m1B\/F7T4icVSdVti5n2yLnGHa7oyMmCZSaDZCXy3wrri8x5nCFs\/YHJS\/cKyfz0qGKFr3+KaLqkgn\/S6USw1ZWhsn43zcQwUo6TrgyHwQhIgARIgAWcCb7zxhnNaJmwcAQowjWOf+s7z5s0TX331lejQoYM1rx9\/\/FHMmTNHLLHEEmLppZfOLL0SYMaNG2fNkwmqQ2DIw7PF3z9ZSVYI25X2WGvZWuWmvP6JeHrWXIH\/\/2bZ\/8jzScfIkSPl6YEDBxYGkKrfOV2\/Fj3Wam8tFyYg2A3Epb7WzJjAmwBEYLSfLbfc0vtaXkACU6dOFeiHot5jf5y+mAR0TtdvvEHtfOcXwX1CvfsglDWuv5vy+lzxx+mLx9ZFnX9w\/595M6rKBUV8j1WFbbPUg++xZrF0PvVU7zEKMPnwzTpXCjBZE\/XMb8qUKeLkk0+OvWq77bYTl156aYvzTz75pLjooovErFmz5O8rr7yy2GqrrcSgQYPECius0CIthJebbrpJjBgxQsyfP1+eW2+99cQOO+wgTjzxRNGmTZtU6ZUAwwfe0\/AlTu4a48A13UEHHSRp3H777YWgwt1ACmEGr0J06tRJTp67devmdR0TkwAIJL3HGhEbpRF9UFIgXTCAoA4x\/cwd12jVaFBeCEYhAXyr0gKL9h6rCtdmqgffY81k7ezryvlY9kzzzJECTJ50HfK+5ZZbxODBg2NTbrvttuLGG2+snZ80aZLo27dv7d+rrrqqePfdd+W\/u3TpIiexyyyzTO38kCFDxJgxY2r\/Xn755cXHH38s\/73ffvuJSy65RCy00ELB6fnAOxi5QknyiIVQtIErdwMpX4PlwLV8NitSiZPeY7bYKOgv4oSH0NgojeiD4gLpqjooL8eouqYpb5HaQZqyFO09lqYuvLYxBPgeawz3qtyV87FyWZICTIPtdcEFF4ixY8eKiy++WHTv3r1VabBkSC0x+vrrr0WPHj2kgAJX+9GjR0ux5b333hO9evWSv++9995i2LBhMp\/XXntN7LTTTvLvfv36iQEDBohFF11UTJ48WRx22GHy96FDh4revXsHpcdFfOAb3IDqePu8vsoWbeDaiC\/edTRjJW\/FgWslzVq3SqURYCDQ4IgKQKv6TN\/gto3qg6K8YPR+H14uZj19Rfm6GbXONyrae6zO1eftMiDA91gGEJs4C87HymV8CjANttfhhx8unnrqKfHQQw+JddZZJ7E0jz32mDjmmGNkmunTp4v27X+KTaGfe+mll0Tbtm2lqHPDDTeIjTfeWIwfP14svPDCtfzVOQg5aumHb3oKMA1uPHW+fZqvnEnu7UUbuDbii3edTVm523HgWjmT1rVCoQKMEidQ2KjlOaEeMLY+KAlO6D2RZ5SYovp91A9xrnQxKVSUr6tx63Szor3H6lRt3iZDAnyPZQizCbOiAFMuo1OAabC9ELvlww8\/FK+88opYcsklE0tz\/fXXyyVD5rIkXIT4LhtttJG8HkuWkEaJO4gNo4QbdQPEnjn00EPlP1944QXpSeObngJM\/o2nSFs75\/VVtmgD16TJj4qFAHf8KFf80C\/e+bekat+BA9dq2zfv2tkEmLjYJ0qc6N65vYyBYnqHhMZGsQkwLsuefL1uFGM9dhf6OV100YV01xhfeduuKPkX7T1WFC4shzsBvsfcWTFlawIUYMrVKijANNBeWFK0\/vrrS28VBMSdNm2aQDBbxHX55S9\/KY488sgWOxZBSLnrrrvE6aefLo4\/\/vhWJd9ll13EzJkzpUiz\/\/77y8C8EHfuvvtu0bVr1xbp586dW\/sN3jPo+H3TU4DJp\/Goga2eu1p\/j4lA984\/7TiUTwmic7VNCpLKkvRVtmgD17h66oEoMdmKEmHSfH3Ow5ZFEvDyqJ\/KkwPXPOlWP++kgWtcbBRQ0UXpKC+\/UK\/BpL7WJnxk0Qfp7yD0c2onO\/R7OBCQF0ecMFX9FtO6hkV7jzWjDcpeZ77Hym7BxpafAkxj+fvenQKMI7Fvv\/1Weqm88847Ys0115Q7CZk7CDlmVUs2e\/ZsgV2O4g4EzEWQXog0OPbdd1+59EgJLOZ18GiBZ8spp5wijjrqKLHBBhvIJEpg0dN\/\/\/33Yu2115Y\/3XnnnWLDDTf0Sr\/55pvLa9UDb9tCGEuduENJcgvRB71JWzs3atCbNCmwuaIneYYUbeAaNZEyXfPVl21YVPeECf3i7dt3JKVvtIDXCNGHA9csW1Dz5WUbuCbFRlGeJmYfkSY2StySTT0gLkSQuLgzWexIpC+vMltEo95BRW6ZRXuPFZkVyxZNgO8xtowkAmqre1sa7kpbjnZEAcawE5by3HPPPeLee+8VhxxyiAxq+\/nnn8slPNhjXR3wKLniiitEx44dgy2tB8M94ogjxB57Line truncated
|
||||
%---
|
||||
%[output:326c5622]
|
||||
% data: {"dataType":"text","outputData":{"text":"Fitting row 1756 of DataTable...\nValidating FitParameter structure...\n Number of peaks detected: 1\n Checking core parameters (required for all modes)...\n Checking mode-specific parameters for mode 'unconstrained'...\n Checking background model parameters for 'linear'...\n✓ FitParameter validation successful for 1 peak(s) in 'unconstrained' mode with 'linear' background.\n\n","truncated":false}}
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>scientaPassEnergy_eV<\/strong>\n <strong>_________________________<\/strong> <strong>________________________<\/strong> <strong>____________________<\/strong>\n\n {'0060060_O1s_900eV.ibw'} {'28-Feb-2022 12:47:15'} 50 \n\n","truncated":false}}
|
||||
%---
|
||||
%[output:7f2dd5ee]
|
||||
% data: {"dataType":"text","outputData":{"text":"Validating FitParameter structure...\n Number of peaks detected: 1\n Checking core parameters (required for all modes)...\n Checking mode-specific parameters for mode 'unconstrained'...\n Checking background model parameters for 'linear'...\n✓ FitParameter validation successful for 1 peak(s) in 'unconstrained' mode with 'linear' background.\n\n","truncated":false}}
|
||||
%---
|
||||
%[output:5bd5684a]
|
||||
% data: {"dataType":"warning","outputData":{"text":"Warning: Data sizes do not match. Converting all data to column vectors."}}
|
||||
%---
|
||||
%[output:42116ac3]
|
||||
% data: {"dataType":"text","outputData":{"text":"\nGlobalSearch stopped because it analyzed all the trial points.\n\n40 out of 41 local solver runs converged with a positive local solver exit flag.\n <strong>name<\/strong> <strong>peakPosition<\/strong> <strong>peakArea<\/strong> <strong>peakFWHM<\/strong> \n <strong>_________________________<\/strong> <strong>______________________________________________<\/strong> <strong>__________________________________________________________________<\/strong> <strong>_________________________________________<\/strong>\n\n {'0060060_O1s_900eV.ibw'} 363.34 NaN NaN NaN NaN 2.6879e+05 NaN NaN NaN NaN 2.119 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakBackground<\/strong> \n <strong>_________________________<\/strong> <strong>________________<\/strong>\n\n {'0060060_O1s_900eV.ibw'} 201.93 -68421\n\n <strong>name<\/strong> <strong>peakEta<\/strong>\n <strong>_________________________<\/strong> <strong>_______<\/strong>\n\n {'0060060_O1s_900eV.ibw'} NaN \n\n <strong>name<\/strong> <strong>peakShirleyK<\/strong>\n <strong>_________________________<\/strong> <strong>____________<\/strong>\n\n {'0060060_O1s_900eV.ibw'} NaN \n\nFound 1 valid peaks (non-NaN)\n","truncated":false}}
|
||||
% data: {"dataType":"text","outputData":{"text":"\nGlobalSearch stopped because it analyzed all the trial points.\n\nAll 28 local solver runs converged with a positive local solver exit flag.\n <strong>name<\/strong> <strong>peakPosition<\/strong> \n <strong>_________________________<\/strong> <strong>______________________________________________<\/strong>\n\n {'0060060_O1s_900eV.ibw'} 363.34 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakArea<\/strong> \n <strong>_________________________<\/strong> <strong>__________________________________________________________________<\/strong>\n\n {'0060060_O1s_900eV.ibw'} 2.6879e+05 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakFWHM<\/strong> \n <strong>_________________________<\/strong> <strong>_________________________________________<\/strong>\n\n {'0060060_O1s_900eV.ibw'} 2.119 NaN NaN NaN NaN\n\n <strong>name<\/strong> <strong>peakBackground<\/strong> \n <strong>_________________________<\/strong> <strong>________________<\/strong>\n\n {'0060060_O1s_900eV.ibw'} 201.94 -68423\n\nFound 1 valid peaks (non-NaN)\n","truncated":false}}
|
||||
%---
|
||||
%[output:0e8d0cec]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>sample<\/strong> \n <strong>_________________________<\/strong> <strong>________________________<\/strong> <strong>_______________<\/strong>\n\n {'0035035_C1s_900eV.ibw'} {'27-Feb-2022 19:46:48'} {'Ice with N2'}\n {'0056056_C1s_900eV.ibw'} {'28-Feb-2022 12:15:48'} {'Ice with N2'}\n {'0060060_C1s_900eV.ibw'} {'28-Feb-2022 12:47:15'} {'Ice with N2'}\n\n","truncated":false}}
|
||||
%[output:31491535]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABGAAAAKiCAYAAACZ\/qosAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQn8V1P+\/09KIkWIRjKSJSFME0bJGIydJNnLkrXNLsyQNNKihCjLiDGSRuYnskcLE379aSw1RrJk+ZkI2UP\/x+s05+N87\/fee8652+fe+3mdx8ND38899yzPc+6557zu+7xPg1WrVq0SDCRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAqkRaEABJjW2TJgESIAESIAESIAESIAESIAESIAESIAEJAEKMOwIJEACJEACJEACJEACJEACJEACJEACJJAyAQowKQNm8iRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAYZ9gARIgARIgARIgARIgARIgARIgARIgARSJkABJmXATJ4ESIAESIAESIAESIAESIAESIAESIAEKMCwD5AACZAACZAACZAACZAACZAACZAACZBAygQowKQMmMmTAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAUY9gESIAESIAESIAESIAESIAESIAESIAESSJkABZiUATN5EiABEiABEiABEiABEiABEiABEiABEqAAwz5AAiRAAiRAAiRAAiRAAiRAAiRAAiRAAikToACTMmAmTwIkQAIkQAIkQAIkQAIkQAIkQAIkQAIUYNgHSIAESIAESIAESIAESIAESIAESIAESCBlAhRgUgbM5EmABEiABEiABEiABEiABEiABEiABEiAAgz7AAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmkTIACTMqAmTwJkAAJkAAJkAAJkAAJkAAJkAAJkAAJUIBhHyABEiABEiABEiABEiABEiABEiABEiCBlAlQgEkZMJMnARIgARIgARIgARIgARIgARIgARIgAQow7AMkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkDIBCjApA2byJEACJEACJEACJEACJEACJEACJEACJEABhn2ABEiABEiABEiABEiABEiABEiABEiABFImQAEmZcBMngRIgARIgARIgARIgARIgARIgARIgAQowLAPkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEDKBCjApAyYyZMACZAACZAACZAACZAACZAACZAACZAABRj2ARIgARIgARIgARIgARIgARIgARIgARJImQAFmJQBM3kSIAESIAESIAESIAESIAESIAESIAESoADDPkACJEACJEACJEACJEACJEACJEACJEACKROgAJMyYCZPAiRAAiRAAiRAAiRAAiRAAiRAAiRAAhRg2AdIgARIgARIgARIgARIgARIgARIgARIIGUCFGBSBszkSYAESIAESIAESIAESIAESIAESIAESIACDPsACZAACZAACZAACZAACZAACZAACZAACaRMgAJMyoCZPAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlQgGEfIAESIAESIAESIAESIAESIAESIAESIIGUCVCASRkwkycBEiABEiABEiABEiABEiABEiABEiABCjDsAyRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQMgEKMCkDZvIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAGGfYAESIAESIAESIAESIAESIAESIAESIAEUiZAASZlwEyeBEiABEiABEiABEiABEiABEiABEiABCjAsA+QAAmQAAmQAAmQAAmQAAmQAAmQAAmQQMoEKMCkDJjJkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAFGPYBEiABEiABEiABEiABEiABEiABEiABEkiZAAWYlAEzeRIgARIgARIgARIggfwTeHbxZ6JLu\/XzX1CWkARIgARIoLAEKMAUtulYcBIgARIgARIgARIggTgERjz2thjx2JI6SXTdarUIc\/H+bSnIxIHLe0mABEiABOoRoADDTkECJEACJEACJEACJFBTBHThBUKLEl0AYe6bn4lnFy+X\/8e1i\/ffoqbYsLIkQAIkQALpEaAAkx5bpkwCJEACJEACJEACuSHALTarm0KJLyZxxTZebhqYBSEBEiABEsg9AQowuW8iFpAESIAESIAESIAEohHgFpu63BSP6f12sdpeBNHq0PEv0RImWvfjXSRAAiRAAh4CFGDYJUiABEiABEiABEigZAS4xaZ+g0YVUxTLT8fsXbJewuqQAAmQAAlkTYACTNbEmR8JkEBNEqDpf002OytNAlUhYLt1xjZeWcavw256SbbHg2fv4twuG5z3NK1gnKnxBhIgARIgAS8BCjDsEyRAAiSQEgGa\/qcElsmSAAkEEkhqi00Zxy8IMF3atYjkVJdWMHzoSIAESIAEkiBAASYJikyDBEiABDQCNP1ndyABEqgGgSS22JR5\/IIVi63vF2\/7KbbchlSNns08SYAESKA8BCjAlKctq1KT559\/Xhx77LFVyZuZkkAeCXzb\/nDxbfvDRJNFD4omi\/4nsIi28fJYR5aJBEggnwS+7HqRLNi6c0c6F\/Cz7reLRsv+JX7YaNvSjl+oI9ignt6AeoPf+n8\/1Zeduh50vzNw3kACJEACCRN46623Ek6RyaVBgAJMGlQzSnPFihXi22+\/FS1btjTmuGrVKrFs2TLRpEkT0axZs8TiKwFm8uTJxjQZgQT8CIwbN07+PGjQoMIDGvHYEvHMZ5uIyzp9J7pu1cJYH0zocbrGb9f\/P+lbIOkw983lVuXwyzfOvUnXw5QeRGD0n913390UlddJoB6BefPmCYxDZXiP\/Wl+YykuRBlPcO\/cNz\/LzfiVRlc9cMrXgfVT9Q8ajzEm\/mn+WuKRo9epV7QyvcfS4M40zQT4HjMzYoxgAuo9RgGmGL2EAkyV22nu3Lni3HPPDSzFPvvsI6655po612fNmiWGDRsmFi9eLH9v1aqV2GOPPcTgwYPFRhttVCcuhJc77rhDjB07Vnz11VfyWvv27cV+++0nBgwYIBo1ahQrvhJg+MBXuSMVOPvjjjtOlv6ee+4pcC2ESML0PwkAcfw2xLk3ibJHTWPLLbeUi+fddtstahK8r4YJlOk9FnWLjRq\/0A1cttgUzS9KkCNdVf+uW60vnwQ\/J72IA5Hd71pZ3mM1PAxUvep8j1W9CQpdgDK9xwrdEJaFpwBjCSqtaHfddZcYMmRIYPJ77723uP322yvXZ86cKfr27Vv5e7PNNhNLly6Vf3fo0EEuYps3b165PmLECDFx4sTK3xtuuKH45JNP5N+9evUSw4cPFw0aNIgcnw98Wj2jdtIty8S12qdrxPHbEOfePPRUTlzz0ArFLUOZ3mNhAox6zpXIAGe06t8QFmD9guDqI6VIpwMFCUZq\/AYTsPATocLG+LK8x4r7FBe\/5HyPFb8Nq1mDMr3Hqskxq7wpwGRFOiCfoUOHikmTJomrr75adOnSpV4sbBlSW4y+++470bVrVymgwNR+woQJUmx5\/\/33Rffu3eXvPXr0EKNHj5bpvPHGG+KAAw6Q\/+7Xr58YOHCgWHPNNcWcOXNEnz595O8jR44UPXv2jBQfNxXtgS\/LUZpV7raJZl+WiWuap2uY+q3tUbJ+8eLcm2hHiJEYJ64x4PHWwr3HwposSIDRLfRw\/7OLl8tklOiCf0OMwd8QYBC6tFttDWIKRbeCUWyU8OQnKJlOlirLe8zU1ryeHgG+x9JjWwspF209VgttElZHCjBV7gEnnXSSmD17tnj00UfFNttsE1qaJ598Upx++ukyzvz580WLFj\/7mNCvvfLKK6Jp06ZS1LnttttEx44dxbRp08Qaa6xRSV9dg5Cjtn64xi+KAFPUbRVV7pqZZV+WiWtU0\/\/Vi6HPpC8Y\/aurbb81LQy8DeldiOFrr+0X76jbrNLuTJy4pk243OmXaeIaZI0SZr2hb7\/RBRnV6hBmwo5uLtrpQN4x08vGK6bbjHtleY+V+0nPd+34Hst3++S9dGV6j+WddRLlowCTBMUYacB3y0cffSRee+01sfbaa4emdOutt8otQ95tSbgJ\/l123HFHeT+2LCGOEnfgG0YJNyoD+J7p3bu3\/PPll1+WljSu8fMuwBR9W0WMblWoW8sycTUJMGqSD+eY3i\/L+hdYLIAgiiAgrtoigL9xDV+u8X91DcIN\/n3x\/ltYt7v32Yhyr4ufCOuCRYzIiWtEcLxNEijTxNXPGsVr4eHX7Bi\/EDDeKB8nuM875viNFTbp562r6duxlNWPGpdxDeMsONhaCJblPZa3dqql8vA9VkutnXxdy\/QeS55O\/lKkAFPFNsGWou22205aq8Ah7osvvijgzBZ+XX71q1+JU045pc6JRRBS7rvvPnHhhReKs846q17JDzroILFo0SIp0hx99NHSMS\/EnalTp4pOnTrVib98+fLKb7CewcDvGj\/PE1fbSZNtvCp2k9JnXZaJq63vBUz2scjRhRj9CyvEF5Ogogso+oLJpbOgvHHuNZXRpSxx43LiGpdgbd9ftomr1wrGxj+VEmCCrOHCthkVzQJG9XZ9HFXbrnBN94ejhHCTSF2W91htjwTVrT3fY9XlX\/Tcy\/YeK3p7mMpfswLMypUrpdXJe++9J9q2bStPBvKeCGSCF\/f6kiVLBE45CgpwmAsnvRBpEI466ii59UgJLN77YNECy5bzzjtPnHrqqWL77beXUZTAosf\/8ccfxdZbby1\/mjJlithhhx2c4nfu3Fneqx540xHC2OqU1QklcbZkmCZZcduc99cnUJaJa5Dpv1fkUydp6EIMqMCSBSGr7UBYlKEMUSxZ8ubzgRNXjixxCJRt4qq\/A9XYEjau6FuQ\/E74UWzDThAKOh0oTrukfa\/XCsabn4tAXZb3WNrMmX4wAb7H2DvCCKij7k1xeCptMfpR6QUYbM25\/\/77xQMPPCBOPPFE6aT2yLine truncated
|
||||
%---
|
||||
%[output:65618880]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>sampleTemp_dC<\/strong> <strong>cellPressure_mbar<\/strong>\n <strong>_________________________<\/strong> <strong>_____________<\/strong> <strong>_________________<\/strong>\n\n {'0035035_C1s_900eV.ibw'} -22.031 1.4358 \n {'0056056_C1s_900eV.ibw'} -39.039 1.4357 \n {'0060060_C1s_900eV.ibw'} -39.003 1.4216 \n\n","truncated":false}}
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>sample<\/strong> \n <strong>_________________________<\/strong> <strong>________________________<\/strong> <strong>_______________<\/strong>\n\n {'0035035_C1s_900eV.ibw'} {'27-Feb-2022 19:46:48'} {'Ice with N2'}\n {'0056056_C1s_900eV.ibw'} {'28-Feb-2022 12:15:48'} {'Ice with N2'}\n {'0060060_C1s_900eV.ibw'} {'28-Feb-2022 12:47:15'} {'Ice with N2'}\n\n","truncated":false}}
|
||||
%---
|
||||
%[output:9c77f960]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>sample<\/strong> \n <strong>_________________________<\/strong> <strong>________________________<\/strong> <strong>_______________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} {'27-Feb-2022 19:46:48'} {'Ice with N2'}\n {'0056056_O1s_900eV.ibw'} {'28-Feb-2022 12:15:48'} {'Ice with N2'}\n {'0060060_O1s_900eV.ibw'} {'28-Feb-2022 12:47:15'} {'Ice with N2'}\n\n","truncated":false}}
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>sampleTemp_dC<\/strong> <strong>cellPressure_mbar<\/strong>\n <strong>_________________________<\/strong> <strong>_____________<\/strong> <strong>_________________<\/strong>\n\n {'0035035_C1s_900eV.ibw'} -22.031 1.4358 \n {'0056056_C1s_900eV.ibw'} -39.039 1.4357 \n {'0060060_C1s_900eV.ibw'} -39.003 1.4216 \n\n","truncated":false}}
|
||||
%---
|
||||
%[output:43e6e41e]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQe0FUXW\/QvFgAoqRswBRQQVRSUYB9QxIJhzwpwFcdAxo6KICph1zGFEncGsKCYMoJ9xFFEcEUYZRcERFR0z\/Nevvq\/6X7df9719w7uvu98+a7Hk3a6uOrXPucy83bt3tZg\/f\/58oxACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIgcwi0EJEb2Zrp8SFgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACFgERvWoEISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEQMYRENGb8QIqfSEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhICIXvWAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCIOMIiOjNeAGVvhAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkBEr3pACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhkHEERPRmvIBKXwgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISCiVz0gBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQyDgCInozXkClLwSEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBDRqx4QAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAIZBwBEb0ZL6DSFwJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACIjoVQ8IASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEMo6AiN6MF1DpCwEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBET0qgeEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACGUdARG\/GC6j0hYAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAiJ61QNCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAiBjCMgojfjBVT6QkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIARG96gEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBIRAxhEQ0ZvxAip9ISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgIhe9YAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkIg4wiI6M14AZW+EBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQESvekAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASGQcQRE9Ga8gEpfCAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIKJXPSAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBDIOAIiejNeQKUvBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQENGrHhACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAhkHAERvRkvoNIXAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAIiOhVDwgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIAQyjoCI3owXUOkLASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAERPSqB4SAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAIZR0BEb8YLqPSFgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACInrVA0JACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICIGMIyCiN+MFVPpCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBEb3qASEgBISAEBACdUDgxx9\/NK1atarDSlpCCAgBISAEhIAQEAJCQAgIASEgBJojAiJ6m2PVtWchIASEQEoR+PTTT8348eNLZrfEEkuYVVdd1ayyyipmxRVXNC1atIi858033zSTJ08uOV\/cgB122MHOX2788ssv5v777zevvvqqmTZtmpkyZYqdYvHFFzfrrbeeWWeddcwBBxxgOnfuXO7UGi8EhIAQEAJCQAgIASEgBISAEBACQiASARG9agwhIASEgBBIDQLPPPOMOfroo8vKp2vXrubMM880G2+8cYP7Lr\/8cnPdddeVNZ8\/+L777jObbbZZWfePGzfOXHTRRebf\/\/53yft23nlnc\/rpp1vSOs8xd+5c89VXXwVbhPBefvnl87xl7U0ICAEhIASEgBAQAkJACAgBIVB3BET01h1yLSgEhIAQEAJxCFRC9Lq5zjvvPHPooYcWTF1vove5554zRx55ZFkFRpX86KOPmiWXXLKs+7I0+JRTTrF7dLHLLruYq6++OktbUK5CQAgIASEgBISAEBACQkAICIHUIyCiN\/UlUoJCQAgIgeaDQDVELyg9+eSTZt111w0AqyfR+8UXX5jtt9\/e\/PDDD2UXbMsttzS33nqradmyZdn3ZuGGE0880TzxxBMierNQLOUoBISAEBACQkAICAEhIASEQGYRENGb2dIpcSEgBIRA\/hCIInp79+5tOnToEGwWQvWpp56KJFR33HHHAquGKKJ3jz32MIssskgi8FDnrrnmmonG3nnnneb8888vGAuBu9tuu5nNN9\/cLLXUUuaDDz4wL7\/8cqSa9cEHHzQbbbRRorWyNkhEb9YqpnyFgBAQAkJACAgBISAEhIAQyCICInqzWDXlLASEgBDIKQJRRO+IESMsWerH77\/\/bp5\/\/vkGfr4cnDZx4sRgaBTR+9prr5lll1225ggec8wx5umnnw7mXXvttc3jjz9uFl544QZr4f375z\/\/ueBzSOJDDjmkZF7z5883X375pZkxY4bhUDoOditHCYxf7tSpU81\/\/vMf0759e7P66qvHHmYXl8z3339v5+C\/7dq1swfW4bsbF9USvbNnzzYc1Pfbb7+Zbt26NVgGTBjzySefmJ9\/\/tn6\/5JTmzZtSuKpAUJACAgBISAEhIAQEAJCQAgIgbwgIKI3L5XUPoSAEBACOUAgKdHrtnrUUUeZZ599tmDnkydPNq1atbKf1ZPoRXk8ffr0IJddd93VXHnllZFV+fHHH02nTp0KrkFmQ2q74KA2yFwXw4cPtwTmhRdeaN59992Ce7feemv7ebFD3bBOGDZsWIND4iBoURz379\/foECOi3nz5pnbbrvN3HHHHZEHzW211VaGemyxxRYBcQzBy6F0H3\/8cYECmzUhwokrrrjC\/h3ripEjRwbL4+N71llnmaFDh5r777\/ffs44n0z\/7LPPrIo63ANuEvaDgjv8oCAHXxVtQQgIASEgBISAEBACQkAICAEh0AABEb1qCiEgBISAEEgNAuUSveeee665++67C\/IfP368WW211exn9SR6jzjiCKsydgGZOXr0aNO5c+dIfFGo\/vrrr8G1pZde2rRt2zb4GfIWktTFQQcd1GCv4YmvvfZas9NOOxV8\/N1335lzzjmn4DC0uIKfcMIJZtCgQQ0uz5o1y\/zpT38yL730Usle4eA1\/hDhPUTd\/Mgjj1iMwrWC6P7666\/Nq6++GtzmE71jx441gwcPTuSJTG3OPPPMspXLJTerAUJACAgBISAEhIAQEAJCQAgIgRQhIKI3RcVQKkJACAiB5o5AuUQvVgd43voBMYjylYgielGkJnmlH1uDYnYE4VqNGjXKXHXVVQ1KCNnZq1cv0717d2uVsMACCyQqcxKSNGqiCRMmWDsFF0OGDLEq3KSBwnb33XcvGH7AAQcUEK6l5vrLX\/5itttuu6qI3qg1HNGLT3PPnj1LpVFw\/eabb7Z1UAgBISAEhIAQEAJCQAgIASEgBPKKgIjevFZW+xICQkAIZBCBpEQvPqxYEYTVpxCz2Bq0aNHC7j6K6E0Ky3XXXWc43C1pQDBDiBYL8sPiAJ9Z7BI6duwYO7wY0fuHP\/zBzJw500yZMqXB\/VgVsG+Cw9+wQPCDHI4++mhLhuNn\/OijjxZcX2WVVcwLL7wQYIhKGUVsOMhvvfXWMy+++GKDPDbbbDODDzFzoyhG2fz+++8HU7AGnsYLLrig6devn7XaSFIrR\/Rec801BTYXTLz99ttbNfMPP\/xgXnnlFdsffpx00klm4MCBScupcUJACAgBISAEhIAQEAJCQAgIgcwhIKI3cyVTwkJACAiB\/CIQRfR27drVbLrppsGmP\/\/881gbgrAvbhLyMA7Ncole5okiIItVi70dd9xxZtttt22g9I0ierEzwMfXHfAGmYkPbjj+53\/+xyy33HL2Wpjw5IA4n2C+9NJLzY033lgwxZgxY8zGG29sP2PNMKHsq2Mh3bGVePPNNwvmmDRpUqCITnIYW1ytIHAhq7HjgKTm8LnwwXcQzv4+ObQN\/FD+uoAcv+WWW\/L75dHOhIAQEAJCQAgIASEgBISAEGj2CIjobfYtIACEgBAQAulBIIroLSc7\/Hr9V\/rrTfTOnz\/f4JMLcYqyNGlg64C9wkILLRTcEiZ6l1lmGfPcc8+Z1q1bF0zLgWUoZv1wRC1Y+GQn69xzzz0FY\/EKhmj2A0sMDjmLOjQO0vXqq68uGI9y1\/nyugs+WVwp0bvPPvuYiy++uAEJjlfwJ598EuTAwXaOmIbkffvtt83hhx9eUIOovSetj8YJASEgBISAEBACQkAICAEhIASygICI3ixUSTkKASEgBJoJAtUQvf4hYA6uKKJ3o402MossskhJRE899VRrr1BJzJ0717AXDoaDnE1C+vbv398emuYiTPTutttuDewKGIuSdu+99y5I88orrzQ77LBDA2sIyGJsLine truncated
|
||||
%---
|
||||
%[output:8d96736e]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQncVmP+\/68oNJQkS9n\/Ik2hxKjs2UnWGIwlwthLxr4NIoxk32WZkX0nuywl+5CoKRoaIrsYW\/i\/3pffdc91n+ec+z7Pfc5zeu5zPt\/Xy0vPfa71c13nWd7nez5Xi19\/\/fVXo5ACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIgbpVoIVAb92unQYuBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUsAoI9GojSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBepcAYHeOl9ADV8KSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkg0Ks9IAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFKhzBQR663wBNXwpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAQK\/2gBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUqDOFRDorfMF1PClgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACAr3aA1JACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSIE6V0Cgt84XUMOXAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKCPRqD0gBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAXqXAGB3jpfQA1fCkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpINCrPSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSocwUEeut8ATV8KSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgECv9oAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlKgzhUQ6K3zBdTwpYAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAgK92gNSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkiBOldAoLfOF1DDlwJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACgj0ag9IASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAF6lwBgd46X0ANXwpIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSDQqz0gBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUqHMFBHrrfAE1fCkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIBAr\/aAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSoM4VEOit8wXU8KWAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAICvdoDUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIgTpXQKC3zhdQw5cCUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQAoI9GoPSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBepcAYHeOl9ADV8KSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkg0Ks9IAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFKhzBQR663wBNXwpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAQK\/2gBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUqDOFRDorfMF1PClgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACAr3aA1JACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSIE6V0Cgt84XUMOXAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKCPRqD0gBKSAFpIAUmMcKfPfdd6Z169bzeBTqXgpIASkgBaSAFJACUkAKSAEpIAXqWQGB3npePY1dCkgBKVAgBd5\/\/30zbty4qjNeZJFFzHLLLWeWXXZZs\/TSS5sWLVqE1nnllVfM5MmTq7YXVWCLLbaw7Tc2fvzxR3PbbbeZiRMnmnfffddMmTLFNrHwwgub1VZbzayyyipmjz32MN27d29s0yovBaSAFJACUkAKSAEpIAWkgBSQAgVWQKC3wIuvqUsBKSAF6kmBxx9\/3Bx44IGNGnKvXr3MCSecYHr27Nmg3t\/+9jdz2WWXNao9v\/Ctt95q1llnnUbVf\/TRR82ZZ55p\/vOf\/1Stt80225hjjz3WQus8x5w5c8ynn35amiLAe8kll8zzlDU3KSAFpIAUkAJSQApIASkgBaRAkygg0NsksqpRKSAFpIAUSFuBWkCvG8Opp55q9tlnn7IhZQ16n3zySTN48OBGyUJW8v33328WXXTRRtWrp8JHHnmknaOLbbfd1lx88cX1NAWNVQpIASkgBaSAFJACUkAKSAEp0CwUEOhtFsugQUgBKSAFpEA1BZKAXtp++OGHzaqrrlrqJkvQ+9FHH5nNN9\/cfPvtt9Wm2eD6+uuvb6677jrTsmXLRtethwqHHXaYeeihhwR662GxNEYpIAWkgBSQAlJACkgBKSAFmrUCAr3Nenk0OCkgBaSAFHAKhIHeTTfd1HTp0qUkEkD1kUceCQWqW221VZlVQxjo3WmnncyCCy4YS3Syc1daaaVYZW+88UZz2mmnlZUF4O6www7mD3\/4g2nXrp15++23zXPPPReazXr33XebNddcM1Zf9VZIoLfeVkzjlQJSQApIASkgBaSAFJACUqC5KiDQ21xXRuOSAlJACkiBMgXCQO\/IkSMtLPXj559\/Nk899VQDP18OTpswYUKpaBjoffHFF02HDh1SV\/6ggw4yjz32WKndlVde2Tz44INmgQUWaNAX3r\/HH3982edA4r333rvquH799Vfz8ccfm5kzZxoOpeNgt8ZkAuOXO336dPPZZ5+Zzp07mxVWWCHyMLuowXzzzTe2Df7fsWNHe2AdvrtRkRT0fvLJJ4aD+ubOnWvWXXfdBt2gCWXee+8988MPP1j\/X8bUtm3bqnqqgBSQAlJACkgBKSAFpIAUkAJSoJ4UEOitp9XSWKWAFJACBVYgLuh1Eh1wwAHmiSeeKFNs8uTJpnXr1vazLEEvmcczZswojWW77bYzF154Yehqfvfdd6Zbt25l14DZQG0XHNQGzHVx7rnnWoB5xhlnmDfeeKOs7oYbbmg\/r3SoG9YJI0aMaHBIHICWjONBgwYZMpCj4pdffjGjR482N9xwQ+hBcxtssIFhPdZbb70SOAbwcijdO++8U5aBTZ+AcOL888+3\/8a64oILLih1j4\/viSeeaIYPH25uu+02+znlfJj+wQcf2Czq4B5wjTAfMriDDwoKfItp6lJACkgBKSAFpIAUkAJSQArUuQICvXW+gBq+FJACUqAoCjQW9J5yyinm73\/\/e5k848aNM8svv7z9LEvQu\/\/++9ssYxfAzDFjxpju3buHLh8Zqj\/99FPp2mKLLWbat29f+hp4CyR18ac\/\/anBXIMNX3rppWbrrbcu+\/jrr782J598ctlhaFH76dBDDzXDhg1rcHn27NnmL3\/5i3n22WerbkUOXuM\/IjiHsMr33Xef1Si4VoDuzz\/\/3EycOLFUzQe9Y8eONcccc0wsT2TW5oQTTmh05nLVyaqAFJACUkAKSAEpIAWkgBSQAlIgYwUEejMWXN1JASkgBaRAbQo0FvRidYDnrR+AQTJfiTDQS0ZqnFf6sTWoZEcQnOGoUaPMRRdd1GDiwM5+\/fqZ3r17W6uE+eabL5Y4cSBpWEPjx4+3dgou\/vrXv9os3LhBhu2OO+5YVnyPPfYoA67V2rrqqqvMZpttlgj0hvXhQC8+zX379q02jLLr11xzjV0HhRSQAlJACkgBKSAFpIAUkAJSoJ4VEOit59XT2KWAFJACBVIgLujFhxUrgmD2KWAWW4MWLVpY1cJAb1w5L7vsMsPhbnEDwAwQrRSMD4sDfGaxS+jatWtk8Uqgd5NNNjGzZs0yU6ZMaVAfqwLmTXD4GxYIfjCGAw880MJw\/Izvv\/\/+suvLLrusefrpp0sakqVMRmwwGN9qq61mnnnmmQbjWGeddQw+xLRNRjGZzW+99VapCfrA03j++ec322+\/vbXaiLNWDvRecsklZTYXNLz55pvbbOZvv\/3WPP\/883Z\/+HH44YeboUOHxl1OlZMCUkAKSAEpIAWkgBSQAlJACjRLBQR6m+WyaFBSQApIASkQVCAM9Pbq1cusvfbapaIffvhhpA1B0Bc3DjyMWoXGgl7aCQOQlVaZuR188MFm4403bpDpGwZ6sTPAx9cd8AbMxAc3GC+88IJZYokl7LUg8OSAOB8wn3POOebKK68sa+LOO+80PXv2tJ\/RZxAo+9mxQHdsJV555ZWyNiZNmlTKiI5zGFvUWgFwgdXYcQCpOXwuePAdwNmfJ4e2oR+Zvy6A49dee61uOikgBaSAFJACUkAKSAEpIAWkQF0rINBb18unwUsBKSAFiqNAGOhtzOzx6\/Vf6c8a9P76668Gn1zAKZmlcQNbB+wVWrVqVaoSBL2LL764efLJJ02bNm3KmuXAMjJm\/XCgFi182Ek\/N998c1lZvIIBzX5gicEhZ2GHxgFdL7744rLyZO46X153wYfFtYLeXXfd1Zx11lkNIDhewe+9915pDBxs58A0kPe1114z++23X9kahM097vqonBSQAlJACkgBKSAFpIAUkAJSoLkoINDbXFZC45ACUkAKSIGKCiQBvf4hYK6TMNC75pprmgUXXLDqShx11FHWXqGWmDNnjmEuHAwHnI0DfQcNGmQPTXMRBL077LBDA7sCypJJO3DgwLJhXnjhhWaLine truncated
|
||||
%---
|
||||
%[output:506ce9c9]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>lastModifiedDatestr<\/strong> <strong>sample<\/strong> \n <strong>_________________________<\/strong> <strong>________________________<\/strong> <strong>_______________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} {'27-Feb-2022 19:46:48'} {'Ice with N2'}\n {'0056056_O1s_900eV.ibw'} {'28-Feb-2022 12:15:48'} {'Ice with N2'}\n {'0060060_O1s_900eV.ibw'} {'28-Feb-2022 12:47:15'} {'Ice with N2'}\n\n","truncated":false}}
|
||||
%---
|
||||
%[output:5432d349]
|
||||
% data: {"dataType":"text","outputData":{"text":" <strong>name<\/strong> <strong>sampleTemp_dC<\/strong> <strong>cellPressure_mbar<\/strong>\n <strong>_________________________<\/strong> <strong>_____________<\/strong> <strong>_________________<\/strong>\n\n {'0035035_O1s_900eV.ibw'} -22.031 1.4358 \n {'0056056_O1s_900eV.ibw'} -39.039 1.4357 \n {'0060060_O1s_900eV.ibw'} -39.003 1.4216 \n\n","truncated":false}}
|
||||
%---
|
||||
%[output:15414432]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQncTVX7\/m+hPAoPiUqKKEQkFUVlqDQhQkWS5gyFhqdJhlSUKEU08Da8Kc0kSUkZXqnQQPoZ4y0l8YTelMr\/fy3v2u86++x9zj7DPufsfa778\/Ep56y9hute+8F33\/taJfbs2bNHGFSAClABKkAFqAAVoAJUgApQASpABagAFaACVIAKUAEqEFgFShD0BjZ3nDgVoAJUgApQASpABagAFaACVIAKUAEqQAWoABWgAlRAKUDQy41ABagAFaACVIAKUAEqQAWoABWgAlSAClABKkAFqAAVCLgCBL0BTyCnTwWoABWgAlSAClABKkAFqAAVoAJUgApQASpABagAFSDo5R6gAlSAClABKkAFqAAVoAJUgApQASpABagAFaACVIAKBFwBgt6AJ5DTpwJUgApQASpABagAFaACVIAKUAEqQAWoABWgAlSAChD0cg9QASpABagAFaACVIAKUAEqQAWoABWgAlSAClABKkAFAq4AQW\/AE8jpUwEqQAWoABWgAlSAClABKkAFqAAVoAJUgApQASpABQh6uQeoABWgAlSAClABKkAFqAAVoAJUgApQASpABagAFaACAVeAoDfgCeT0qQAVoAJUgApQASpABagAFaACVIAKUAEqQAWoABWgAgS93ANUgApQASpABagAFaACVIAKUAEqQAWoABWgAlSAClCBgCtA0BvwBHL6VIAKUAEqQAWoABWgAlSAClABKkAFqAAVoAJUgApQAYJe7gEqQAWoABWgAlSAClABKkAFqAAVoAJUgApQASpABahAwBUg6A14Ajl9KkAFqAAVoAJUgApQASpABagAFaACVIAKUAEqQAWoAEEv9wAVoAJUgApQASpABagAFaACVIAKUAEqQAWoABWgAlQg4AoQ9AY8gZw+FaACVIAKUAEqQAWoABWgAlSAClABKkAFqAAVoAJUgKCXe4AKUAEqQAWoABWgAlSAClABKkAFqAAVoAJUgApQASoQcAUIegOeQE6fClABKkAFqAAVoAJUgApQASpABagAFaACVIAKUAEqQNDLPUAFqAAVoAJUgApQASpABagAFaACVIAKUAEqQAWoABUIuAIEvQFPIKdPBagAFaACVIAKUAEqQAWoABWgAlSAClABKkAFqAAVIOjlHqACVIAKUAEqQAWoABWgAlSAClABKkAFqAAVoAJUgAoEXAGC3oAnkNOnAlSAClABKkAFqAAVoAJUgApQASpABagAFaACVIAKEPRyD1ABKkAFqAAVoAJUgApQASpABagAFaACVIAKUAEqQAUCrgBBb8ATyOlTASpABagAFaACVIAKUAEqQAWoABWgAlSAClABKkAFCHq5B6gAFaACVIAKUAEqQAWoABWgAlSAClABKkAFqAAVoAIBV4CgN+AJ5PSpABWgAlSAClABKkAFqAAVoAJUgApQASpABagAFaACBL3cA1SAClABKkAFqAAVoAJUgApQASpABagAFaACVIAKUIGAK0DQG\/AEcvpUgApQASpABagAFaACVIAKUAEqQAWoABWgAlSAClABgl7uASpABagAFaACVIAKUAEqQAWoABWgAlSAClABKkAFqEDAFSDoDXgCOX0qQAWoABWgAlSAClABKkAFqAAVoAJUgApQASpABagAQS\/3ABWgAlSAClABKkAFqAAVoAJUgApQASpABagAFaACVCDgChD0BjyBnD4VoAJUgApQASpABagAFaACVIAKUAEqQAWoABWgAlSAoJd7gApQASpABagAFaACVIAKUAEqQAWoABWgAlSAClABKhBwBQh6A55ATp8KUAEqQAWoABWgAlSAClABKkAFqAAVoAJUgApQASpA0Ms9QAWoABWgAlQgzQr89ttvUlBQkOZe2R0VoAJUgApQASpABagAFaACVIAKUAF3BQh6uTuoABWgAlQgKwps2LBB5s6dG3fsAw44QKpXry6HHXaYHHzwwVKiRAnHaz777DNZvnx53P7cGpx11lmq\/0Tjjz\/+kKlTp8qiRYtk7dq1snLlStXF\/vvvL3Xr1pWjjjpKunXrJg0aNEi0a7anAlSAClABKkAFqAAVoAJUgApQASrgWQGCXs9SsSEVoAJUgAqkU4H33ntPrrnmmoS6bNKkidxxxx3SuHHjqOtGjRol48ePT6g\/s\/FLL70kJ554YkLXv\/vuuzJ8+HD597\/\/Hfe6c889V4qKihS0DnPs2LFDtmzZYi0RwLtKlSphXjLXRgWoABWgAlSAClABKkAFqAAVyAkFCHpzIg2cBBWgAlQg\/xRIBvRqlQYPHiw9e\/aMEC3ToHfOnDly1VVXJZQ4VCVPnz5dKlSokNB1QWp84403qjXqOO+88+TRRx8N0hI4VypABagAFaACVIAKUAEqQAWoQCAVIOgNZNo4aSpABahA8BVIBfRi9e+8844cffTRlhCZBL0\/\/PCDnHnmmfLrr78mnIgWLVrIpEmTpFSpUglfG4QL+vbtK2+\/\/TZBbxCSxTlSASpABagAFaACVIAKUAEqECoFCHpDlU4uhgpQASoQHAWcQG+bNm2kTp061iIAVGfNmuUIVM8+++wIqwYn0NupUyfZb7\/9PImC6tyaNWt6avvss8\/KkCFDItoC4F5wwQVy0kknSWFhoXz99dcyf\/58x2rW119\/XRo1auRprKA1IugNWsY4XypABagAFaACVIAKUAEqQAXCogBBb1gyyXVQASpABQKmgBPoHT16tIKlZvz111\/ywQcfRPn54uC0hQsXWk2dQO\/ixYulcuXKaVfm2muvldmzZ1v91qpVS2bMmCH77rtv1Fjw\/r399tsjPgckvuyyy+LOa8+ePfLjjz\/Kxo0bBYfS4WC3RCqB4Ze7evVq+fnnn6V27dpyxBFHuB5m5zaZnTt3qj7w30MOOUQdWAffXbdIFfT+9NNPgoP6\/vzzT2natGnUMNAEbb799lv5\/ffflf8v5lS+fPm4erIBFaACVIAKUAEqQAWoABWgAlQgzAoQ9IY5u1wbFaACVCCHFfAKevUSrr76ann\/\/fcjVrR8+XIpKChQn2US9KLyeN26ddZc2rVrJ4888oij2r\/99pvUr18\/4jvAbEBtHTioDTBXxwMPPKAA5j333CNffPFFxLWnnXaa+jzWoW6wThgxYkTUIXEAtKg47tWrl6AC2S3+\/vtvmTx5sjzzzDOOB82deuqpgnw0b97cAscAvDiUbs2aNREV2BgTIBzx0EMPqf+HdcWYMWOs4eHje+edd8q9994rU6dOVZ+jnQnTv\/vuO1VFbd8DuhOsBxXc9gcFOXwLcGpUgApQASpABagAFaACVIAKUIG0KkDQm1Y52RkVoAJUgAp4VSBR0Hv33XfL888\/H9H93Llz5fDDD1efZRL0XnnllarKWAdg5pQpU6RBgwaOy0eF6u7du63vKlasKJUqVbJ+D3gLSKrj0ksvjVqrveNx48bJOeecE\/Hx9u3bZdCgQRGHobnlo0+fPnLTTTdFfb1582a55ZZbZN68eXFTiYPX8AthX4PTxdOmTVMa2XMF0L1161ZZtGiRdZkJemfOnCm33nqrJ09k5OaOO+5IuHI57mLZgApQASpABagAFaACVIAKUAEqkOMKEPTmeII4PSpABahAWBVIFPTC6gCet2YADKLyFeEEelGR6uWVftgaxLIjsOfg4YcflrFjx0alBrCzdevW0qxZM2WVsM8++3hKnxdI6tTRggULlJ2CjqFDh6oqXK+BCtuOHTtGNO\/WrVsEcI3X1xNPPCFnnHFGSqDXaQwNeuHTfMopp8SbRsT3Tz31lMoDgwpQASpABagAFaACVIAKUAEqkE8KEPTmU7a5VipABahADingFfTChxVWBPbqU4BZ2BqUKFFCrcoJ9Hpd7vjx4wWHu3kNAGYA0ViB+cHiAD6zsEuoV6+ea\/NYoLdVq1ayadMmWblyZdT1sCrAuhE4\/A0WCGZgDtdcc42C4fAznj59esT3hx12mHz44YeWhqhSRkWsPTC\/unXrykcffRQ1jxNPPFHgQ4y+UVGMyuYVK1ZYXWAMeBqXLFlSOnTooKw2vORKg97HHnsswuYCHZ955pmqmvnXX3+Vf\/3rX2p\/mNGvXz8ZMGCA13SyHRWgAlSAClABKkAFqAAVoAJUIBQKEPSGIo1cBBWgAlQgeAo4gd4mTZrICSecYC3m+++\/d7UhsPvieoGHbiolCnrRjxOAjJUFrO3666+Xli1bRlX6OoFe2BnAx1cf8AaYCR9ce3z88cdy0EEHqe\/swBMHxJmAeeTIkTJx4sSILl599VVp3Lix+gxj2oGyWR0L6A5bic8++yyijy+\/\/NKqiPZyGJtbrgBwAathxwFIjcPn7AffATib68ShbdAPlb86AMeffvrp4N0UnDEVoAJUgApQASpABagAFaACVCAFBQh6UxCPl1IBKkAFqEDyCjiB3kR6g1+v+Up\/pkHvnj17BD65AKeoLPUasHWAvULp0qWtS+yg98ADD5Q5c+ZIuXLlIrrFgWWomDVDg1poYcJOjPPCCy9EtIVXMECzGbDEwCFnTofGAbo++uijEe1Ruat9efUXJixOFvR27dpV7rvvvigIDq\/gb7\/91poDDrbTYBqQd+nSpXLFFVdE5MBp7V7zw3ZUgApQASpABagAFaACVIAKUIGgKkDQG9TMcd5UgApQgYArkAroNQ8B0zI4gd5GjRrJfvvtF1epgQMHKnuFZGLHjh2CteBgOMBZL9C3V69e6tA0HXbQe8EFF0TZFaAtKmm7dOkSMc1HHnlEzjrrrChrCMBi2CrY45133on4qGHDhvLGG2\/I2rVrldeuGXfddZeCLine truncated
|
||||
%---
|
||||
%[output:93ebe7fc]
|
||||
% data: {"dataType":"image","outputData":{"dataUri":"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAABXoAAANsCAYAAADlaRC9AAAAAXNSR0IArs4c6QAAIABJREFUeF7snQfYFNX5vo8CKhqlqNh7A8GCJaioEEvQqFgi9t6lxBbFhoqigg3FEksUWyzYxQYoooIaa+wYii2WnxJALLH7v+6T\/5mcnW9md7bP7D7vdXEpu3Pa8575gHveec58v\/76669GIQWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACmVVgPoHezOZOE5cCUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApYBQR6tRGkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACGVdAoDfjCdT0pYAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAgK92gNSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkiBjCsg0JvxBGr6UkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIAYFe7QEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaRAxhUQ6M14AjV9KSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgECv9oAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlIg4woI9GY8gZq+FJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQKBXe0AKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASmQcQUEejOeQE1fCkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpINCrPSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBTIuAICvRlPoKYvBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUEOjVHpACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApkXAGB3ownUNOXAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKCPRqD0gBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAUyroBAb8YTqOlLASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFBHq1B6SAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAIZV0CgN+MJ1PSlgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACAr3aA1JACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUkAKSIGMKyDQm\/EEavpSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBgV7tASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKSAFpEDGFRDozXgCNX0pIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAQK\/2gBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACUiDjCgj0ZjyBmr4UkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJAoFd7QApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACkgBKZBxBQR6M55ATV8KSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkg0Ks9IAWkgBSQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFMi4AgK9GU+gpi8FpIAUkAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBQQ6NUekAJSQApIASkgBaSAFJACUkAKSAEpIAWkgBSQAlJACmRcAYHejCdQ05cCUkAKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQAoI9GoPZFKBTz\/91Hz22WeRc+\/UqZNZbrnlMrkuTVoKSAEpIAWkgBSQAlJACkgBKSAFpIAUkAJSQAqUooBAbymqqU3dFRg0aJC54oorIucxePBgM3z48LrPUROQAlJACkgBKSAFpIAUkAJSQApIASkgBaSAFJACtVJAoLdWSmuciirw+9\/\/3kyYMMEMHDiwRb\/bbbed2WGHHSo6njqTAlJAChSjwH\/+8x\/Ttm3bYproWikgBaSAFJACUkAKSAEpIAWkgBSQAmUpINBblnxqXC8FllpqKbPSSiuZF154oV5T0LhSQAqUqcCHH35oJk2aVLCX3\/zmN2aFFVYwyy+\/vFl66aXNfPPNF9nm5ZdfNm+99VbB\/uIu4AES\/RcbP\/zwgxkzZox5\/vnnzcyZM83UqVNtF4sssojp3LmzWWONNcw+++xjunXrVmzXul4KSAEpIAWkgBSQAlJACkgBKSAFpEBiBQR6E0ulC9OiwLfffmsByoEHHmhuvPHGtExL85ACUqBIBR5\/\/HFzxBFHFNVqww03NKeeeqrp3r17i3YXXXSRueqqq4rqz7\/4zjvvNBtvvHFR7cePH2+GDRtm\/vWvfxVs94c\/\/MFgLQO0buT46quvzKxZs4Il8vMa73SFFJACUkAKSAEpIAWkgBSQAlJAClRXAYHe6urbtL1zWBrBP+5btWqVSIfvv\/\/eHrDWvn17065du9g277zzjll77bXN\/vvvb1ZddVXz+uuvW\/C70UYbmcMOO8z+v0IKSIH0K1AK6HWrOvPMM+3DHj9qDXonTpxof+YUE1Qljx07Nu\/PuGL6S+O1xxxzjF2jC6x0Lr\/88jROVXOSAlJACkgBKSAFpIAUkAJSQAo0lAICvQ2VznQs5u233zZdu3a1k3nllVciK+\/8mU6ePNkMGTIk5xXuDTbYwPzud7+zHrwrr7xyzsIefvhhs+OOO0YuFojy5JNPmtVXXz0dYmgWUkAKxCpQDuil08cee8ysueaaQf+1BL08lNp2223NN998U3SGN998c3PDDTeY1q1bF902Cw34uf3II48EUxXozULWNEcpIAWkgBSQAlJACkgBKSAFGkEBgd5GyGLK1nDyySebESNGJAK9d9xxh9l7771jVwC4\/fvf\/26WXXbZ4JorrrjCDBo0yACDr7vuOgt6AEZAnilTpthXr2kT5+OZMrk0HSnQtApEgd6tt97arLXWWoEmANVx48ZFAlUOXvStGqJA72677WYWXHDBRBpTnbvKKqskuvbmm282Z511Vs61ANxddtnF\/Pa3v7VvJvD2AQ+yoqpZ77vvPrPeeuslGitrFwn0Zi1jmq8UkAJSQApIASkgBaSAFJACjaKAQG+jZDIF68B64dZbb815lTlfRa9f+cv0d9ppJ9O3b1\/DwUb333+\/mTBhgl0VIPfZZ581iy++uP393LlzDdYQK664Yo5Nw5w5c+wBbfhDzpgxw9o6KKSAFEivAlGg95JLLrGw1I+ff\/7ZVuqH\/Xw5OI2fDS6iQC8HNi6xxBIVF+HII48MfkbR+WqrrWZ422CBBRZoMRbev6ecckrO50DiAw44oOC8fv31V\/N\/\/\/d\/5qOPPjIcSsfBbsVUAvPzcPr06ebf\/\/63fdOBn5HFPgT7+uuvbR\/8d5lllrEH1uWzyCkX9H7xxReGg\/p++ukn06NHjxYaoQnXfPDBB4Y\/d7AIYk6LLbZYQT11gRSQAlJACkgBKSAFpIAUkAJSoJEVEOht5OzWYG3fffedOe2004LKNaCCH\/lA77777mtuu+02e\/lBBx1kRo8eHTQF7PC6L5V8xIUXXmj+\/Oc\/F1wRdg+TJk2yFb5UBiqkgBRIrwJJQa9bweGHH26eeOKJnAW99dZbpm3btvazWoJefr689957wVx4UHXZZZdFiv2f\/\/wnsLNxFwCzgdouOKgNmOviggsusADznHPOsT7kfmy55Zb283yHumGdMHz48BaHxAFoqTg++OCDDRXIcfHLL7\/Yn8k33XRT5EFzW2yxhSEfPXv2DMAxgJdD6XjQ5ltaMCYgnLj44ovt\/2NdMXLkyGB4ft7zZ8m5555rxowZYz\/nOvfAj99\/\/PHHtoo6vAdcJ6yHCu7wg4L03gGamRSQAlJACkgBKSAFpIAUkAJSoLIKCPRWVs+m643q2g4dOsSuOw70zp49O6jQXXTRRW11Vvj1av5Rj3UDse6665rXXnvN\/j8wgCqu8847L6d6DugMGAE2T506Nef176ZLjBYsBTKgQLGg94wzzrBvDfjBgx2q+4lagt5DDz3UVhm7AGbefvvtplu3bpHKU6H6448\/Bt\/xc7Njx47B74G3QFIX++23X4u1hju+8sorzfbbb5\/z8bx586znuX8YWtxWGDBggDnhhBNafP3555+bE0880TzzzDMFdxEHr\/GLCK8hqvGDDz5oNQrnCtDNnwvPP\/980MwHvY8++qg56aSTEnkik5tTTz216MrlgovVBVJACkgBKSAFpIAUkAJSQApIgZQrINCb8gRVe3q8AkuFFP9Az1cBy3VDhw41m222mfn9738fTAu4etxxx+VMc\/z48WbmzJn2szjQ6x+oduCBB5obb7wxcqkc6obFAzFt2jT76jFzBUAAVfbaa6+g3V133WX22GMPC3uBxMW83lxtndW\/FJACLRUoFvRidYDnrR+AQe55Igr0UpGa5JV+frbksyMIz\/7SSy81o0aNarEofj5ttdVWZpNNNrE\/r+aff\/5EqU8CSaM6wpccOwUX\/JxmzUmDCttdd9015\/J99tknB7gW6uvaa68122yzTVmgN2oMB3rxaebPnmLir3\/9q82DQgpIASkgBaSAFJACUkAKSAEp0EwKCPQ2U7Yj1uofnBZndwDkxTbBvWaMnYIPe8PdHn300ebqq6+2H8eBXqqtzj\/\/fHtNGNj6\/QGRASoEr+vyD3cHdPmM7\/Hwff\/994MD4PL11+Tp1vKlQKoUSAp6qeDHiiBcfQqYxdbAec5Ggd6kC+ZQNw53SxoAZoBovmB+WBzgM4tdQpcuXWIvzwd6saTBl5w3FcKBVQHrLine truncated
|
||||
%---
|
||||
@@ -275,7 +275,7 @@ for ii = 1
|
||||
& contains(FileList.name,"Cl2p") ...
|
||||
& (contains(FileList.name,"146") | contains(FileList.name,"148"));
|
||||
FileList = nappBackground(FileList,647,648,'tableSelection',tmpDataSelection,'energyScale','kinetic',...
|
||||
'mode','mean','showFigures','off');
|
||||
'mode','mean','showFigures','on');
|
||||
|
||||
%% Plot again
|
||||
nappPlot(FileList,tmpDataSelection,'tableVariable','spectrum_countsPerSecond','mode','AllInOne');
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,22 @@
|
||||
%% Start fresh
|
||||
close all
|
||||
clearvars
|
||||
clc
|
||||
|
||||
%% Import Data
|
||||
FileList = nappFileList('2026/testImport','mode','local','importLabView','off');
|
||||
%% Display Data
|
||||
disp(FileList(:,{'name','creationDate','lastModifiedDatestr','image','originalFileName'}))
|
||||
%% Plot images
|
||||
nappPlot(FileList);
|
||||
%% Plot iterations
|
||||
close all
|
||||
nappPlot(FileList,'tableVariable','image','mode','iterations');
|
||||
%% Generate spectra and plot
|
||||
close all
|
||||
FileList = nappGenerateSpectra(FileList);
|
||||
nappPlot(FileList,'tableVariable','spectrum_countsPerSecond','mode','OneEach');
|
||||
%% Generate spectra, remove background and plot
|
||||
close all
|
||||
FileList = nappGenerateSpectra(FileList);
|
||||
nappPlot(FileList,'tableVariable','spectrum_countsPerSecond','mode','OneEach');
|
||||
@@ -183,66 +183,7 @@ if hasShirleyK
|
||||
end
|
||||
|
||||
backgroundType = 'Shirley';
|
||||
% if hasShirleyK
|
||||
% % SHIRLEY BACKGROUND RECONSTRUCTION
|
||||
% peakShirleyK_vals = fitData.peakShirleyK;
|
||||
%
|
||||
% % Reconstruct Shirley background using the same algorithm as in fitting
|
||||
% bkgrd = zeros(size(energyRange));
|
||||
%
|
||||
% for i = 1:nPeaks
|
||||
% iPeak = validIdx(i);
|
||||
%
|
||||
% % Extract parameters
|
||||
% area = peakArea_vals(iPeak);
|
||||
% FWHM = peakFWHM_vals(iPeak);
|
||||
% pos = peakPos_vals(iPeak);
|
||||
% if ismember('peakEta', fitData.Properties.VariableNames) && ~all(isnan(fitData.peakEta))
|
||||
% eta = peakEta_vals(iPeak);
|
||||
% else
|
||||
% eta = 1;
|
||||
% end
|
||||
% K = peakShirleyK_vals(iPeak);
|
||||
%
|
||||
% % Find energy points after the peak
|
||||
% idxafter = energyRange >= pos;
|
||||
%
|
||||
% if any(idxafter)
|
||||
% % Calculate width parameters
|
||||
% w = FWHM / sqrt(log(4)); % Convert FWHM to Gaussian w
|
||||
% sigma = w / 2;
|
||||
% gamma = FWHM / 2;
|
||||
%
|
||||
% % Gaussian tail fraction
|
||||
% Gtail = 0.5 * (1 - erf((energyRange(idxafter) - pos) / (sqrt(2) * sigma)));
|
||||
%
|
||||
% % Lorentzian tail fraction
|
||||
% Ltail = 0.5 - (1/pi) * atan((energyRange(idxafter) - pos) / gamma);
|
||||
%
|
||||
% % Pseudo-Voigt tail fraction
|
||||
% tailfrac = eta * Gtail + (1 - eta) * Ltail;
|
||||
%
|
||||
% % Shirley contribution
|
||||
% shirleycontrib = K * area * (0.5 - tailfrac);
|
||||
% bkgrd(idxafter) = bkgrd(idxafter) + shirleycontrib;
|
||||
%
|
||||
% end
|
||||
%
|
||||
% end
|
||||
%
|
||||
% % Add constant offset C0
|
||||
% if ismember('peakBackground', fitData.Properties.VariableNames)
|
||||
% C0 = fitData.peakBackground(2); % Second element is C0
|
||||
% bkgrd = bkgrd + C0;
|
||||
% end
|
||||
%
|
||||
% if matches(p.Results.energyScale,'kinetic')
|
||||
% % This is a little work around - needs confirmation if it does what
|
||||
% % it should - be careful.
|
||||
% bkgrd = flip(bkgrd);
|
||||
% end
|
||||
%
|
||||
% backgroundType = 'Shirley';
|
||||
|
||||
else
|
||||
% LINEAR BACKGROUND (existing code)
|
||||
if ismember('peakBackground', fitData.Properties.VariableNames)
|
||||
|
||||
+42
-11
@@ -145,17 +145,13 @@ if ~all(cell2mat(cellfun(@size,p.Results.DataTable(p.Results.tableSelection,:).(
|
||||
end
|
||||
|
||||
% add empty table variables (if they don't exist)
|
||||
existColumn = strcmp('logBackgroundRange',DataTable.Properties.VariableNames);
|
||||
existColumn = strcmp('lognappBackgroundRange',DataTable.Properties.VariableNames);
|
||||
if ~any(existColumn)
|
||||
DataTable.logBackgroundRange = NaN(size(DataTable,1),2);
|
||||
DataTable.lognappBackgroundRange = NaN(size(DataTable,1),2);
|
||||
end
|
||||
existColumn = strcmp('logBackgroundMode',DataTable.Properties.VariableNames);
|
||||
existColumn = strcmp('lognappBackgroundMode',DataTable.Properties.VariableNames);
|
||||
if ~any(existColumn)
|
||||
DataTable.logBackgroundMode = cellstr(repmat(' ',size(p.Results.DataTable,1),1));
|
||||
end
|
||||
existColumn = strcmp('logBackgroundDate',DataTable.Properties.VariableNames);
|
||||
if ~any(existColumn)
|
||||
DataTable.logBackgroundDate = cellstr(repmat(' ',size(p.Results.DataTable,1),1));
|
||||
DataTable.lognappBackgroundMode = cellstr(repmat(' ',size(p.Results.DataTable,1),1));
|
||||
end
|
||||
% add empty variable to table
|
||||
existColumn = strcmp('spectrum_countsNorm',DataTable.Properties.VariableNames);
|
||||
@@ -361,8 +357,43 @@ else
|
||||
DataTable(p.Results.tableSelection,:).(p.Results.tableVariable) = tmp;
|
||||
end
|
||||
% write log to table
|
||||
DataTable.logBackgroundMode(p.Results.tableSelection,:) = cellstr(repmat(p.Results.mode,size(p.Results.DataTable(p.Results.tableSelection,:),1),1));
|
||||
DataTable.logBackgroundRange(p.Results.tableSelection,:) = repmat([p.Results.energyStart(1) p.Results.energyEnd(1)],size(p.Results.DataTable(p.Results.tableSelection,:),1),1);
|
||||
DataTable.logBackgroundDate(p.Results.tableSelection,:) = cellstr(repmat(datestr(now),size(p.Results.DataTable(p.Results.tableSelection,:),1),1));
|
||||
DataTable.lognappBackgroundMode(p.Results.tableSelection,:) = cellstr(repmat(p.Results.mode,size(p.Results.DataTable(p.Results.tableSelection,:),1),1));
|
||||
DataTable.lognappBackgroundRange(p.Results.tableSelection,:) = repmat([p.Results.energyStart(1) p.Results.energyEnd(1)],size(p.Results.DataTable(p.Results.tableSelection,:),1),1);
|
||||
|
||||
|
||||
|
||||
%--- Define variables for the Universal Logging Block ---
|
||||
numRowsTable = height(DataTable);
|
||||
processIdx = find(p.Results.tableSelection);
|
||||
% -------------------------------------------------------------------
|
||||
|
||||
% 1. Dynamically get this function's name
|
||||
thisFuncName = mfilename;
|
||||
colDate = sprintf('log%sDate', thisFuncName);
|
||||
colCaller = sprintf('log%sCaller', thisFuncName);
|
||||
|
||||
|
||||
% 2. Probe for column existence, create empty string arrays if missing
|
||||
if ~ismember(colDate, DataTable.Properties.VariableNames)
|
||||
DataTable.(colDate) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
if ~ismember(colCaller, DataTable.Properties.VariableNames)
|
||||
DataTable.(colCaller) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
|
||||
% 3. Get current time as a string
|
||||
currentTimeStr = string(datetime('now', 'Format', 'yyyy-MM-dd HH:mm:ss'));
|
||||
|
||||
% 4. Determine the calling script using the call stack
|
||||
stackInfo = dbstack;
|
||||
if length(stackInfo) > 1
|
||||
callerScript = string(stackInfo(2).file); % The script that called this function
|
||||
else
|
||||
callerScript = " "; % Called directly from the command window
|
||||
end
|
||||
|
||||
% 5. Write the log data only to the rows being processed
|
||||
DataTable.(colDate)(processIdx) = currentTimeStr;
|
||||
DataTable.(colCaller)(processIdx) = callerScript;
|
||||
% -------------------------------------------------------------------------
|
||||
end
|
||||
@@ -12,9 +12,7 @@ function DataTable = nappBindingEnergyXps(DataTable,varargin)
|
||||
% *input*
|
||||
% FileList: data table
|
||||
% tableSelection (optional): logical array to filter data table
|
||||
% tableVariable: choose to process either
|
||||
% 'spectrum_counts','spectrum_countsPerSecond' (default)
|
||||
%
|
||||
%
|
||||
%
|
||||
% *output*
|
||||
% new table variable bindingEnergy_eV holding the binding energy for
|
||||
@@ -23,24 +21,15 @@ function DataTable = nappBindingEnergyXps(DataTable,varargin)
|
||||
%
|
||||
% See also nappnappAlignImages.m nappBindingEnergyXps nappFitGaussXps.m
|
||||
% nappCopyShift.m nappDetermineShiftXps.m
|
||||
|
||||
defaultTableVariable = 'spectrum_countsPerSecond';
|
||||
expectedTableVariable = {'spectrum_counts','spectrum_countsPerSecond'};
|
||||
defaultTableSelection = true(size(DataTable,1),1);
|
||||
|
||||
% Parse input
|
||||
p = inputParser;
|
||||
addRequired(p,'DataTable',@istable);
|
||||
addParameter(p,'tableSelection',defaultTableSelection,@islogical);
|
||||
addParameter(p,'tableVariable',defaultTableVariable,...
|
||||
@(x) any(validatestring(x,expectedTableVariable)));
|
||||
parse(p,DataTable,varargin{:});
|
||||
|
||||
% check input (all elements of input variable need to have non-zero size)
|
||||
if ~all(cell2mat(cellfun(@size,p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable),'UniformOutput',false)),'all')
|
||||
disp('The table variable appears to be empty. I quit now')
|
||||
error('The table variable appears to be empty.')
|
||||
end
|
||||
|
||||
|
||||
% add empty variable to table
|
||||
existColumn = strcmp('bindingEnergy_eV',DataTable.Properties.VariableNames);
|
||||
@@ -65,4 +54,39 @@ end
|
||||
clearvars tmp_2
|
||||
end
|
||||
DataTable.bindingEnergy_eV(p.Results.tableSelection,:) = tmp_3;
|
||||
|
||||
% --- Define variables for the Universal Logging Block ---
|
||||
numRowsTable = height(DataTable);
|
||||
processIdx = find(p.Results.tableSelection);
|
||||
% -------------------------------------------------------------------
|
||||
|
||||
% 1. Dynamically get this function's name
|
||||
thisFuncName = mfilename;
|
||||
colDate = sprintf('log%sDate', thisFuncName);
|
||||
colCaller = sprintf('log%sCaller', thisFuncName);
|
||||
|
||||
|
||||
% 2. Probe for column existence, create empty string arrays if missing
|
||||
if ~ismember(colDate, DataTable.Properties.VariableNames)
|
||||
DataTable.(colDate) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
if ~ismember(colCaller, DataTable.Properties.VariableNames)
|
||||
DataTable.(colCaller) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
|
||||
% 3. Get current time as a string
|
||||
currentTimeStr = string(datetime('now', 'Format', 'yyyy-MM-dd HH:mm:ss'));
|
||||
|
||||
% 4. Determine the calling script using the call stack
|
||||
stackInfo = dbstack;
|
||||
if length(stackInfo) > 1
|
||||
callerScript = string(stackInfo(2).file); % The script that called this function
|
||||
else
|
||||
callerScript = " "; % Called directly from the command window
|
||||
end
|
||||
|
||||
% 5. Write the log data only to the rows being processed
|
||||
DataTable.(colDate)(processIdx) = currentTimeStr;
|
||||
DataTable.(colCaller)(processIdx) = callerScript;
|
||||
% -------------------------------------------------------------------------
|
||||
end
|
||||
@@ -1,13 +1,13 @@
|
||||
function combinedSpectrum = nappCombineSpectra(DataTable,varargin)
|
||||
%NAPPCOMBINESPECTRA Combine multiple PE or NEXAFS spectra through averaging or summation.
|
||||
% This function combines selected photoelectron (PE) or X-ray absorption
|
||||
% spectroscopy (NEXAFS) spectra into a single spectrum by averaging or
|
||||
% summing. Data are automatically interpolated onto a common energy axis
|
||||
% This function combines selected photoelectron (PE) or X-ray absorption
|
||||
% spectroscopy (NEXAFS) spectra into a single spectrum by averaging or
|
||||
% summing. Data are automatically interpolated onto a common energy axis
|
||||
% to handle slight variations in energy sampling between acquisitions.
|
||||
%
|
||||
% The output format is controlled by the 'output' parameter:
|
||||
% - 'simple' (default): Returns a numeric matrix [energy, intensity, (std)]
|
||||
% suitable for quick plotting and analysis. Requires custom code for
|
||||
% suitable for quick plotting and analysis. Requires custom code for
|
||||
% plotting and further processing.
|
||||
% - 'complete': Returns a MATLAB table (same format as input DataTable) with
|
||||
% energy axis and combined spectrum plus metadata. Critically, this allows
|
||||
@@ -15,7 +15,7 @@ function combinedSpectrum = nappCombineSpectra(DataTable,varargin)
|
||||
% without conversion. Output table is named '<originalName>_combined.h5'
|
||||
% where originalName is from the first selected row's name field. The
|
||||
% mean of pass energy, sample temperature, ice temperature, pressure
|
||||
% are added to the output.
|
||||
% are added to the output.
|
||||
%
|
||||
% SYNTAX
|
||||
% ------
|
||||
@@ -72,12 +72,12 @@ function combinedSpectrum = nappCombineSpectra(DataTable,varargin)
|
||||
%
|
||||
% 'tableVariable' char vector (default: 'spectrum_counts')
|
||||
% Select which spectrum type to combine. Must be one of:
|
||||
%
|
||||
%
|
||||
% PE spectra:
|
||||
% - 'spectrum_counts'
|
||||
% - 'spectrum_counts'
|
||||
% - 'spectrum_countsPerSecond'
|
||||
% - 'spectrum_countsNorm'
|
||||
%
|
||||
%
|
||||
% NEXAFS spectra:
|
||||
% - 'nexafsSpectrum'
|
||||
% - 'nexafsSpectrumPreBackground'
|
||||
@@ -88,8 +88,8 @@ function combinedSpectrum = nappCombineSpectra(DataTable,varargin)
|
||||
%
|
||||
% 'tableRow' numeric scalar (default: 1)
|
||||
% Index of the spectrum whose energy axis is used as reference for
|
||||
% interpolation (index within the filtered table defined by
|
||||
% 'tableSelection'). The combined spectrum's common energy grid
|
||||
% interpolation (index within the filtered table defined by
|
||||
% 'tableSelection'). The combined spectrum's common energy grid
|
||||
% is extracted from this row. Range: 1 to number of selected rows.
|
||||
%
|
||||
% 'mode' char vector (default: 'sum')
|
||||
@@ -113,15 +113,15 @@ function combinedSpectrum = nappCombineSpectra(DataTable,varargin)
|
||||
% ----------------
|
||||
% combinedSpectrum numeric matrix or table
|
||||
% Combined spectroscopy data. Format depends on 'output' parameter:
|
||||
%
|
||||
%
|
||||
% For 'simple' output (default):
|
||||
% - Column 1: Energy values (eV) on common interpolated axis
|
||||
% - Column 2: Combined intensity (sum or mean depending on mode)
|
||||
% - Column 3: Standard deviation (only when mode = 'average')
|
||||
%
|
||||
%
|
||||
% For 'complete' output:
|
||||
% - Returns table with energy axis and spectrum(s) plus metadata columns
|
||||
% (name, folder, creationDate, analysisDir, lastModifiedDatestr,
|
||||
% (name, folder, creationDate, analysisDir, lastModifiedDatestr,
|
||||
% lastModifiedDatenum) and is sorted by modification date
|
||||
%
|
||||
% NOTES
|
||||
@@ -213,13 +213,13 @@ end
|
||||
% vq(:,ii) = p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii};
|
||||
% end
|
||||
%else
|
||||
xq = tmpX{p.Results.tableRow}(tmpStartIndex:tmpEndIndex);
|
||||
% repeat this for all columns in input.
|
||||
for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1)
|
||||
x = tmpX{ii};
|
||||
v = p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii};
|
||||
vq(:,ii) = interp1(x,v,xq);
|
||||
end
|
||||
xq = tmpX{p.Results.tableRow}(tmpStartIndex:tmpEndIndex);
|
||||
% repeat this for all columns in input.
|
||||
for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1)
|
||||
x = tmpX{ii};
|
||||
v = p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii};
|
||||
vq(:,ii) = interp1(x,v,xq);
|
||||
end
|
||||
|
||||
% end
|
||||
if contains(p.Results.output,'simple')
|
||||
@@ -245,7 +245,7 @@ else
|
||||
TmpFileList.spectrum_counts = sum(vq,2,'omitnan');
|
||||
elseif contains(p.Results.mode,'average') && ~contains(p.Results.energyScale,'xRay')
|
||||
TmpFileList.spectrum_countsPerSecond = mean(vq,2,'omitnan');
|
||||
elseif contains(p.Results.mode,'average') && contains(p.Results.energyScale,'xRay')
|
||||
elseif contains(p.Results.mode,'average') && contains(p.Results.energyScale,'xRay')
|
||||
TmpFileList.spectrum_counts = mean(vq,2,'omitnan');
|
||||
elseif contains(p.Results.mode,'subtract')
|
||||
disp('Not supported yet') % FIXME: subtraction is not implemented yet.
|
||||
@@ -253,9 +253,9 @@ else
|
||||
|
||||
% copy essential information
|
||||
if contains(p.Results.energyScale,'xRay')
|
||||
TmpFileList.name = [p.Results.DataTable(p.Results.tableSelection,:).name{1} '_combined.h5'];
|
||||
TmpFileList.name = [p.Results.DataTable(p.Results.tableSelection,:).name{p.Results.tableRow} '_combined.h5'];
|
||||
else
|
||||
TmpFileList.name = [p.Results.DataTable(p.Results.tableSelection,:).name{1} '_combined.ibw'];
|
||||
TmpFileList.name = [p.Results.DataTable(p.Results.tableSelection,:).name{p.Results.tableRow} '_combined.ibw'];
|
||||
end
|
||||
TmpFileList.folder = p.Results.DataTable(p.Results.tableSelection,:).folder(1);
|
||||
TmpFileList.creationDate = p.Results.DataTable(p.Results.tableSelection,:).creationDate(1,:);
|
||||
@@ -266,58 +266,91 @@ else
|
||||
% add processed spectra
|
||||
|
||||
% Ensure all columns exist with appropriate sizing
|
||||
if ~ismember('dataOrigin', p.Results.DataTable.Properties.VariableNames)
|
||||
DataTable.dataOrigin = cellstr(repmat(" ",size(p.Results.DataTable,1),1));
|
||||
if ~ismember('logCombineDataOriginStr', p.Results.DataTable.Properties.VariableNames)
|
||||
DataTable.logCombineDataOriginStr = cellstr(repmat(" ",size(p.Results.DataTable,1),1));
|
||||
end
|
||||
if ~ismember('logCombineDataOrigin', p.Results.DataTable.Properties.VariableNames)
|
||||
DataTable.logDataSource = cell(size(p.Results.DataTable, 1), 1);
|
||||
end
|
||||
|
||||
tmpRow = p.Results.DataTable(p.Results.tableSelection,:);
|
||||
|
||||
|
||||
% Store an array of the processed spectrum names wrapped in a cell
|
||||
% so you can easily loop through it (e.g., for name = DataTable.logDataSource{i})
|
||||
TmpFileList.logCombineDataOrigin = {string(tmpRow.name')};
|
||||
|
||||
allNames = "";
|
||||
for ii = 1:size(tmpRow,1)
|
||||
thisDateStr = datestr(tmpRow.lastModifiedDatenum(ii),'yyyymmdd_HHMM');
|
||||
thisName = tmpRow.name{ii};
|
||||
token = thisDateStr + "_" + thisName(1:4);
|
||||
thisDateStr = datestr(tmpRow.lastModifiedDatenum(ii),'yyyymmdd_HHMM');
|
||||
thisName = tmpRow.name{ii};
|
||||
token = thisDateStr + "_" + thisName(1:4);
|
||||
|
||||
if ii == 1
|
||||
allNames = token;
|
||||
else
|
||||
allNames = allNames + " | " + token;
|
||||
if ii == 1
|
||||
allNames = token;
|
||||
else
|
||||
allNames = allNames + " | " + token;
|
||||
end
|
||||
end
|
||||
end
|
||||
TmpFileList.dataOrigin = allNames;
|
||||
TmpFileList.logCombineDataOriginStr = allNames;
|
||||
|
||||
if ismember('scientaPassEnergy_eV', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.scientaPassEnergy_eV = mean(p.Results.DataTable(p.Results.tableSelection,:).scientaPassEnergy_eV,1,'omitnan');
|
||||
end
|
||||
if ismember('sampleTemp_dC', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.sampleTemp_dC = mean(p.Results.DataTable(p.Results.tableSelection,:).sampleTemp_dC,1,'omitnan');
|
||||
end
|
||||
if ismember('iceTemp_dC', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.iceTemp_dC = mean(p.Results.DataTable(p.Results.tableSelection,:).iceTemp_dC,1,'omitnan');
|
||||
end
|
||||
if ismember('cellPressure_mbar', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.cellPressure_mbar = mean(p.Results.DataTable(p.Results.tableSelection,:).cellPressure_mbar,1,'omitnan');
|
||||
end
|
||||
if ismember('smplX_mm', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.smplX_mm = mean(p.Results.DataTable(p.Results.tableSelection,:).smplX_mm,1,'omitnan');
|
||||
end
|
||||
if ismember('smplY_mm', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.smplY_mm = mean(p.Results.DataTable(p.Results.tableSelection,:).smplY_mm,1,'omitnan');
|
||||
end
|
||||
if ismember('smplZ_mm', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.smplZ_mm = mean(p.Results.DataTable(p.Results.tableSelection,:).smplZ_mm,1,'omitnan');
|
||||
end
|
||||
if ismember('sealingTemp', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.sealingTemp = mean(p.Results.DataTable(p.Results.tableSelection,:).sealingTemp,1,'omitnan');
|
||||
end
|
||||
if ismember('sampleTemp_dC', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.sampleTemp_dC = mean(p.Results.DataTable(p.Results.tableSelection,:).sampleTemp_dC,1,'omitnan');
|
||||
end
|
||||
if ismember('iceTemp_dC', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.iceTemp_dC = mean(p.Results.DataTable(p.Results.tableSelection,:).iceTemp_dC,1,'omitnan');
|
||||
end
|
||||
if ismember('cellPressure_mbar', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.cellPressure_mbar = mean(p.Results.DataTable(p.Results.tableSelection,:).cellPressure_mbar,1,'omitnan');
|
||||
end
|
||||
if ismember('smplX_mm', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.smplX_mm = mean(p.Results.DataTable(p.Results.tableSelection,:).smplX_mm,1,'omitnan');
|
||||
end
|
||||
if ismember('smplY_mm', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.smplY_mm = mean(p.Results.DataTable(p.Results.tableSelection,:).smplY_mm,1,'omitnan');
|
||||
end
|
||||
if ismember('smplZ_mm', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.smplZ_mm = mean(p.Results.DataTable(p.Results.tableSelection,:).smplZ_mm,1,'omitnan');
|
||||
end
|
||||
if ismember('sealingTemp', p.Results.DataTable.Properties.VariableNames)
|
||||
TmpFileList.sealingTemp = mean(p.Results.DataTable(p.Results.tableSelection,:).sealingTemp,1,'omitnan');
|
||||
end
|
||||
|
||||
|
||||
|
||||
%% Sort by date
|
||||
% rename date fields and delete those fields not needed
|
||||
[TmpFileList.lastModifiedDatestr] = TmpFileList.date;
|
||||
[TmpFileList.lastModifiedDatenum] = TmpFileList.datenum;
|
||||
|
||||
% -------------------------------------------------------------------------
|
||||
% ADAPTED UNIVERSAL LOGGING BLOCK (For newly created rows)
|
||||
% -------------------------------------------------------------------------
|
||||
thisFuncName = mfilename;
|
||||
colDate = sprintf('log%sDate', thisFuncName);
|
||||
colCaller = sprintf('log%sCaller', thisFuncName);
|
||||
|
||||
% Get current time as a string
|
||||
currentTimeStr = string(datetime('now', 'Format', 'yyyy-MM-dd HH:mm:ss'));
|
||||
|
||||
% Determine the calling script using the call stack
|
||||
stackInfo = dbstack;
|
||||
if length(stackInfo) > 1
|
||||
callerScript = string(stackInfo(2).file); % The script that called this function
|
||||
else
|
||||
callerScript = " "; % Called directly from the command window
|
||||
end
|
||||
|
||||
% Add the log data directly to the new struct
|
||||
TmpFileList.(colDate) = currentTimeStr;
|
||||
TmpFileList.(colCaller) = callerScript;
|
||||
% -------------------------------------------------------------------------
|
||||
|
||||
% First, we need to convert into a table, because structures can not be sorted:
|
||||
TmpFileList = struct2table(TmpFileList,'AsArray',true);
|
||||
|
||||
% Then, we sort the table based on the time (6th column, datenum)
|
||||
TmpFileList = sortrows(TmpFileList,6);
|
||||
% Then, remove un-needed columns
|
||||
@@ -327,9 +360,11 @@ end
|
||||
if exist("DataTable",'var')
|
||||
TmpFileList = outerjoinRowToTable(TmpFileList,DataTable);
|
||||
end
|
||||
|
||||
% Then, we sort the table based on the time (datenum)
|
||||
combinedSpectrum = sortrows(TmpFileList,'lastModifiedDatenum');
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
+131
-217
@@ -1,226 +1,140 @@
|
||||
function DataTable = nappCopyShift(DataTable,varargin)
|
||||
%NAPPCOPYSHIFT Copy energy shift from one XPS region to spectra of the same sequence but other regions.
|
||||
% This function transfers energy shift calibration data (kinetic or binding
|
||||
% energy) from a reference region to spectra of the same sequence iteration in a different
|
||||
% region. It matches spectra based on filename and acquisition timestamp,
|
||||
% enabling consistent energy axis calibration across XPS
|
||||
% measurements of the same sequence (e.g., copying O1s shift to C1s spectra acquired simultaneously).
|
||||
function DataTable = nappCopyShift(DataTable, processSelection, refSelection, options)
|
||||
% NAPPCOPYSHIFT Copy binding energy shift from reference spectra to target spectra.
|
||||
%
|
||||
% This approach ensures that energy calibrations determined from a
|
||||
% reference region (typically C1s or O1s) are consistently applied to
|
||||
% other regions in the same sequence. Works with both spectral data in
|
||||
% binding and in kinetic energy scale and with images - that is can be
|
||||
% used to align all sweeps in one image. Multiple destination rows can
|
||||
% receive the same shift value if acquired simultaneously (one-to-many
|
||||
% copying).
|
||||
% DataTable = NAPPCOPYSHIFT(DataTable, processSelection, refSelection)
|
||||
% copies the calculated binding energy shift from a pool of reference spectra
|
||||
% (where refSelection is true) to the target spectra (where processSelection
|
||||
% is true) using a matching strategy.
|
||||
%
|
||||
% SYNTAX
|
||||
% ------
|
||||
% DataTable = NAPPCOPYSHIFT(DataTable)
|
||||
% NOTE: This function requires that nappDetermineShift has already been
|
||||
% run on the reference spectra to populate the 'bindingEnergyShift' column.
|
||||
%
|
||||
% DataTable = NAPPCOPYSHIFT(DataTable, tableSelection, 'Name', Value)
|
||||
%
|
||||
% EXAMPLES
|
||||
% --------
|
||||
% % Copy O1s kinetic energy shift to C1s spectra
|
||||
% DataTable = nappCopyShift(DataTable, ...
|
||||
% 'regionOld', 'O1s', ...
|
||||
% 'regionNew', 'C1s', ...
|
||||
% 'energyScale', 'kinetic');
|
||||
%
|
||||
% % Copy binding energy shift from N1s to Cl2p on selected rows
|
||||
% selection = contains(DataTable.name, 'polymer_sample');
|
||||
% DataTable = nappCopyShift(DataTable, selection, ...
|
||||
% 'regionOld', 'N1s', ...
|
||||
% 'regionNew', 'Cl2p', ...
|
||||
% 'energyScale', 'binding');
|
||||
%
|
||||
% % Copy C1s calibration (binding energy) to all matching O1s spectra
|
||||
% DataTable = nappCopyShift(DataTable, ...
|
||||
% 'regionOld', 'C1s', ...
|
||||
% 'regionNew', 'O1s');
|
||||
%
|
||||
% INPUT ARGUMENTS
|
||||
% ---------------
|
||||
% DataTable table
|
||||
% Data table containing XPS spectra with energy shift calibration data
|
||||
% and time stamps. Ideally the napp standard format, but must at least contain:
|
||||
% - name field: spectrum identifiers with region designation (e.g.,
|
||||
% 'sample_C1s', 'sample_O1s')
|
||||
% - lastModifiedDatenum field: acquisition timestamps (MATLAB datenum format)
|
||||
% - kineticEnergyShift or bindingEnergyShift field: calibration shift values
|
||||
% (created by nappDetermineShiftXps)
|
||||
%
|
||||
% NAME-VALUE PAIR ARGUMENTS (optional)
|
||||
% ------------------------------------
|
||||
% 'tableSelection' logical array (default: all rows)
|
||||
% Logical index to filter which rows in DataTable contain the source
|
||||
% shift data (regionOld spectra). Only spectra in this selection will
|
||||
% be processed as source regions. Their shifts will be copied to matching
|
||||
% spectra in regionNew (which may or may not be in tableSelection).
|
||||
% Example: contains(DataTable.name, 'C1s') to use only C1s as source
|
||||
%
|
||||
% 'regionOld' char vector (default: 'O1s')
|
||||
% Source region containing the energy shift calibration data.
|
||||
% Must be one of:
|
||||
% - 'O1s'
|
||||
% - 'C1s'
|
||||
% - 'N1s'
|
||||
%
|
||||
% 'regionNew' char vector (default: 'C1s')
|
||||
% Destination region to which shift data will be copied.
|
||||
% Must be one of:
|
||||
% - 'O1s'
|
||||
% - 'C1s'
|
||||
% - 'N1s'
|
||||
% - 'Cl2p'
|
||||
%
|
||||
% 'energyScale' char vector (default: 'kinetic')
|
||||
% Energy scale type for shift calibration:
|
||||
% - 'kinetic': copies kineticEnergyShift column (used for image analysis)
|
||||
% - 'binding': copies bindingEnergyShift column (used for spectral analysis)
|
||||
%
|
||||
% OUTPUT ARGUMENTS
|
||||
% ----------------
|
||||
% DataTable table
|
||||
% Updated data table with energy shift values copied to destination region
|
||||
% spectra. The appropriate column is populated:
|
||||
% - kineticEnergyShift (if energyScale = 'kinetic')
|
||||
% - bindingEnergyShift (if energyScale = 'binding')
|
||||
%
|
||||
% Shift values are matched and copied for all spectra in the destination
|
||||
% region (regionNew) that share the same acquisition timestamp as spectra
|
||||
% in the source region (regionOld, filtered by tableSelection).
|
||||
%
|
||||
% MATCHING ALGORITHM
|
||||
% ------------------
|
||||
% The function matches source spectra (regionOld) to destination spectra
|
||||
% (regionNew) using:
|
||||
% 1. Filename: region name is replaced (O1s → C1s, etc.)
|
||||
% 2. Acquisition timestamp: year, month, day, hour, and minute must all match
|
||||
%
|
||||
% This ensures that shift calibrations from simultaneously acquired reference
|
||||
% regions are correctly applied to their complementary spectra. An error is
|
||||
% displayed if a matching spectrum cannot be found.
|
||||
%
|
||||
% NOTES
|
||||
% -----
|
||||
% - PREREQUISITE: Run nappDetermineShiftXps on the source region (regionOld)
|
||||
% BEFORE running this function. This populates the shift column in DataTable.
|
||||
% - Timestamp matching is strict: year, month, day, hour, and minute must all
|
||||
% match exactly. Second-level precision is not used.
|
||||
% - If regionOld and regionNew are the same, no copy operation is performed.
|
||||
% - Timestamps with mismatches indicate possible data organization issues and
|
||||
% trigger a diagnostic message.
|
||||
% - The function operates on selected rows only when tableSelection is provided.
|
||||
% Rows outside the selection are not processed as source regions.
|
||||
%
|
||||
% WORKFLOW EXAMPLE
|
||||
% ----------------
|
||||
% % Typical usage sequence for multi-region XPS dataset:
|
||||
% % 1. Determine shift for reference region (C1s)
|
||||
% DataTable = nappDetermineShiftXps(DataTable, ...
|
||||
% contains(DataTable.name, 'C1s'), ...
|
||||
% 'energyScale', 'binding');
|
||||
%
|
||||
% % 2. Copy C1s shift to complementary regions
|
||||
% DataTable = nappCopyShift(DataTable, ...
|
||||
% contains(DataTable.name, 'C1s'), ...
|
||||
% 'regionOld', 'C1s', ...
|
||||
% 'regionNew', 'O1s', ...
|
||||
% 'energyScale', 'binding');
|
||||
%
|
||||
% DataTable = nappCopyShift(DataTable, ...
|
||||
% contains(DataTable.name, 'C1s'), ...
|
||||
% 'regionOld', 'C1s', ...
|
||||
% 'regionNew', 'N1s', ...
|
||||
% 'energyScale', 'binding');
|
||||
%
|
||||
% SEE ALSO
|
||||
% --------
|
||||
% nappDetermineShiftXps, nappBindingEnergyXps, nappAlignImages,
|
||||
% nappFitGaussXps, datenum
|
||||
% Name-Value arguments:
|
||||
% matchStrategy - 'earlier' (default), 'after', 'spectrumNumber'
|
||||
% timeVariable - Target time column ('lastModifiedDatenum' by default)
|
||||
|
||||
% Define conditions and defaults of input
|
||||
% Old region must be also selected in tableSelection! it is kind like
|
||||
% double.
|
||||
defaultRegionOld = 'O1s';
|
||||
expectedRegionOld = {'O1s','C1s','N1s'};
|
||||
defaultRegionNew = 'C1s';
|
||||
expectedRegionNew = {'O1s','C1s','N1s','Cl2p'};
|
||||
defaultTableSelection = true(size(DataTable,1));
|
||||
defaultEnergyScale = 'kinetic';
|
||||
expectedEnergyScale = {'kinetic','binding'};
|
||||
|
||||
|
||||
% Parse input
|
||||
p = inputParser;
|
||||
addRequired(p,'DataTable',@istable);
|
||||
addOptional(p,'tableSelection',defaultTableSelection,@islogical);
|
||||
addParameter(p,'regionOld',defaultRegionOld,...
|
||||
@(x) any(validatestring(x,expectedRegionOld)));
|
||||
addParameter(p,'regionNew',defaultRegionNew,...
|
||||
@(x) any(validatestring(x,expectedRegionNew)));
|
||||
addParameter(p,'energyScale',defaultEnergyScale,...
|
||||
@(x) any(validatestring(x,expectedEnergyScale)));
|
||||
parse(p,DataTable,varargin{:});
|
||||
|
||||
|
||||
|
||||
% The function operates as follows:
|
||||
% 1. For each source spectrum/image (regionOld) in tableSelection:
|
||||
% - Extract the energy shift value (kinetic or binding scale)
|
||||
% - Extract the acquisition timestamp
|
||||
% 2. Generate search criteria by replacing the region name in the source
|
||||
% filename (e.g., "sample_O1s" becomes "sample_C1s")
|
||||
% 3. Search entire DataTable for destination spectra/images (regionNew) that:
|
||||
% - Have the transformed filename
|
||||
% - Match the acquisition timestamp exactly (year, month, day, hour, minute)
|
||||
% 4. Copy the source energy shift value to all matching destination rows
|
||||
|
||||
if contains(p.Results.energyScale,'kinetic')
|
||||
% repeat this for all columns in input.
|
||||
for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1)
|
||||
% get name and date
|
||||
tmpName = replace(p.Results.DataTable(p.Results.tableSelection,:).name{ii}, ...
|
||||
p.Results.regionOld,p.Results.regionNew);
|
||||
tmpDate = p.Results.DataTable(p.Results.tableSelection,:).lastModifiedDatenum(ii);
|
||||
% select spectra
|
||||
tmpDataSelection = contains(p.Results.DataTable.name,tmpName)...
|
||||
& ismember(year(p.Results.DataTable.lastModifiedDatenum),year(tmpDate))...
|
||||
& ismember(month(p.Results.DataTable.lastModifiedDatenum),month(tmpDate))...
|
||||
& ismember(day(p.Results.DataTable.lastModifiedDatenum),day(tmpDate))...
|
||||
& ismember(hour(p.Results.DataTable.lastModifiedDatenum),hour(tmpDate))...
|
||||
& ismember(minute(p.Results.DataTable.lastModifiedDatenum),minute(tmpDate));
|
||||
arguments
|
||||
DataTable table
|
||||
processSelection logical {mustBeVector}
|
||||
refSelection logical {mustBeVector}
|
||||
|
||||
if ~any(tmpDataSelection) == 1
|
||||
disp('There is something wrong with the data time info')
|
||||
disp(tmpName)
|
||||
end
|
||||
% replace the region in the name and copy the data
|
||||
DataTable.kineticEnergyShift(tmpDataSelection,:) = p.Results.DataTable(p.Results.tableSelection,:).kineticEnergyShift(ii);
|
||||
% Name-Value arguments
|
||||
options.matchStrategy char {mustBeMember(options.matchStrategy, ...
|
||||
{'earlier', 'after', 'spectrumNumber'})} = 'earlier'
|
||||
options.timeVariable char {mustBeMember(options.timeVariable, ...
|
||||
{'lastModifiedDatenum', 'creationDate'})} = 'lastModifiedDatenum'
|
||||
end
|
||||
elseif contains(p.Results.energyScale,'binding')
|
||||
% repeat this for all columns in input.
|
||||
for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1)
|
||||
% get name and date
|
||||
tmpName = replace(p.Results.DataTable(p.Results.tableSelection,:).name{ii}, ...
|
||||
p.Results.regionOld,p.Results.regionNew);
|
||||
tmpDate = p.Results.DataTable(p.Results.tableSelection,:).lastModifiedDatenum(ii);
|
||||
% select spectra
|
||||
tmpDataSelection = contains(p.Results.DataTable.name,tmpName)...
|
||||
& ismember(year(p.Results.DataTable.lastModifiedDatenum),year(tmpDate))...
|
||||
& ismember(month(p.Results.DataTable.lastModifiedDatenum),month(tmpDate))...
|
||||
& ismember(day(p.Results.DataTable.lastModifiedDatenum),day(tmpDate))...
|
||||
& ismember(hour(p.Results.DataTable.lastModifiedDatenum),hour(tmpDate))...
|
||||
& ismember(minute(p.Results.DataTable.lastModifiedDatenum),minute(tmpDate));
|
||||
if ~any(tmpDataSelection) == 1
|
||||
disp('There is something wrong with the data time info')
|
||||
disp(tmpName)
|
||||
|
||||
numRowsTable = height(DataTable);
|
||||
|
||||
% Validate length of the logical arrays
|
||||
if length(processSelection) ~= numRowsTable || length(refSelection) ~= numRowsTable
|
||||
error('Logical selection arrays must have the exact same length as the DataTable height (%d).', numRowsTable);
|
||||
end
|
||||
|
||||
% Ensure shift data exists
|
||||
if ~ismember('bindingEnergyShift', DataTable.Properties.VariableNames)
|
||||
error('The column "bindingEnergyShift" does not exist. Please run nappDetermineShift on your reference spectra first.');
|
||||
end
|
||||
|
||||
% Initialize source logging column if it doesn't exist
|
||||
if ~ismember('lognappCopyShiftSource', DataTable.Properties.VariableNames)
|
||||
DataTable.lognappCopyShiftSource = cell(numRowsTable, 1);
|
||||
end
|
||||
|
||||
%% Processing Loop
|
||||
processIdx = find(processSelection);
|
||||
refIdx = find(refSelection);
|
||||
|
||||
for i = 1:length(processIdx)
|
||||
currRow = processIdx(i);
|
||||
currName = DataTable.name{currRow};
|
||||
|
||||
% Safely extract time (handles both single numbers and 1x6 datevecs)
|
||||
currTime = datenum(DataTable.(options.timeVariable)(currRow, :));
|
||||
refTimes = datenum(DataTable.(options.timeVariable)(refIdx, :));
|
||||
|
||||
bestRefRow = NaN;
|
||||
|
||||
% Internal Matching Engine
|
||||
switch options.matchStrategy
|
||||
case 'earlier'
|
||||
validRefs = refIdx(refTimes <= currTime);
|
||||
if ~isempty(validRefs)
|
||||
timeDiffs = currTime - refTimes(refTimes <= currTime);
|
||||
[~, minIdx] = min(timeDiffs);
|
||||
bestRefRow = validRefs(minIdx);
|
||||
end
|
||||
|
||||
case 'after'
|
||||
validRefs = refIdx(refTimes >= currTime);
|
||||
if ~isempty(validRefs)
|
||||
timeDiffs = refTimes(refTimes >= currTime) - currTime;
|
||||
[~, minIdx] = min(timeDiffs);
|
||||
bestRefRow = validRefs(minIdx);
|
||||
end
|
||||
|
||||
case 'spectrumNumber'
|
||||
% Extract the 4-digit number at the start of the name (e.g., '0033')
|
||||
specNumStr = regexp(currName, '^\d{4}', 'match', 'once');
|
||||
if ~isempty(specNumStr)
|
||||
searchPattern = [specNumStr, '_'];
|
||||
validRefs = refIdx(startsWith(DataTable.name(refIdx), searchPattern));
|
||||
if ~isempty(validRefs)
|
||||
bestRefRow = validRefs(1);
|
||||
end
|
||||
else
|
||||
warning('Row %d: Could not extract a 4-digit spectrum number from name "%s".', currRow, currName);
|
||||
end
|
||||
end
|
||||
% replace the region in the name and copy the data
|
||||
DataTable.bindingEnergyShift(tmpDataSelection,:) = p.Results.DataTable(p.Results.tableSelection,:).bindingEnergyShift(ii);
|
||||
|
||||
% Validate we found a match
|
||||
if isnan(bestRefRow)
|
||||
warning('Row %d (%s): No matching reference found for strategy "%s". Skipping.', ...
|
||||
currRow, currName, options.matchStrategy);
|
||||
continue;
|
||||
end
|
||||
|
||||
% Extract shift from reference row
|
||||
referenceShift = DataTable.bindingEnergyShift(bestRefRow);
|
||||
|
||||
if isnan(referenceShift)
|
||||
warning('Row %d: Matched reference row %d (%s) does not have a valid calculated shift. Skipping.', ...
|
||||
currRow, bestRefRow, DataTable.name{bestRefRow});
|
||||
continue;
|
||||
end
|
||||
|
||||
% Copy the shift and log the exact name of the reference used
|
||||
DataTable.bindingEnergyShift(currRow) = referenceShift;
|
||||
DataTable.lognappCopyShiftSource{currRow} = DataTable.name{bestRefRow};
|
||||
% 1. Dynamically get this function's name
|
||||
thisFuncName = mfilename;
|
||||
colDate = sprintf('log%sDate', thisFuncName);
|
||||
colCaller = sprintf('log%sCaller', thisFuncName);
|
||||
|
||||
|
||||
% 2. Probe for column existence, create empty string arrays if missing
|
||||
if ~ismember(colDate, DataTable.Properties.VariableNames)
|
||||
DataTable.(colDate) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
if ~ismember(colCaller, DataTable.Properties.VariableNames)
|
||||
DataTable.(colCaller) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
|
||||
% 3. Get current time as a string
|
||||
currentTimeStr = string(datetime('now', 'Format', 'yyyy-MM-dd HH:mm:ss'));
|
||||
|
||||
% 4. Determine the calling script using the call stack
|
||||
stackInfo = dbstack;
|
||||
if length(stackInfo) > 1
|
||||
callerScript = string(stackInfo(2).file); % The script that called this function
|
||||
else
|
||||
callerScript = " "; % Called directly from the command window
|
||||
end
|
||||
|
||||
% 5. Write the log data only to the rows being processed
|
||||
DataTable.(colDate)(processIdx) = currentTimeStr;
|
||||
DataTable.(colCaller)(processIdx) = callerScript;
|
||||
% -------------------------------------------------------------------------
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,609 +1,67 @@
|
||||
function DataTable = nappDetermineShiftXps(DataTable, varargin)
|
||||
%NAPPDETERMINESHIFTXPS Determine energy shift calibration from XPS images or spectra.
|
||||
% This function calculates the energy shift needed to calibrate XPS
|
||||
% spectra to a binding energy reference or align all sequence iterations
|
||||
% of the same file to a common kinetic energy. For spectra data, it
|
||||
% computes absolute binding energy shifts relative to a reference binding
|
||||
% energy value. For images, it computes relative kinetic energy shifts
|
||||
% between sequence iterations. Shifts are determined by fitting Gaussian
|
||||
% peaks or finding maxima in the spectra (simpler option using Matlab's
|
||||
% findpeaks function).
|
||||
function DataTable = nappDetermineShift(DataTable, processSelection, options)
|
||||
% NAPPDETERMINESHIFT Calculate binding energy axis shifts based on a spectrum's own fitted peak.
|
||||
%
|
||||
% Needs X-ray energy in data table. Run addPhotonEnergy.m first.
|
||||
% DataTable = NAPPDETERMINESHIFT(DataTable, processSelection) calculates
|
||||
% the binding energy shift for spectra where processSelection is true, based
|
||||
% on their own fitted peak position (internal reference).
|
||||
%
|
||||
% NOTE: This function requires that peak fitting (e.g., nappFitGaussXps)
|
||||
% has already been performed so that the 'peakPos' column exists.
|
||||
%
|
||||
% SYNTAX
|
||||
% ------
|
||||
% DataTable = NAPPDETERMINESHIFTXPS(DataTable)
|
||||
%
|
||||
% DataTable = NAPPDETERMINESHIFTXPS(DataTable, eKinStart, eKinEnd, 'Name', Value)
|
||||
%
|
||||
% EXAMPLES
|
||||
% --------
|
||||
% % Determine binding energy shift for C1s spectra using peak finding
|
||||
% DataTable = nappDetermineShiftXps(DataTable, ...
|
||||
% 'tableVariable', 'spectrum_countsPerSecond', ...
|
||||
% 'binEnReference', 285.0, ...
|
||||
% 'mode', 'findPeak');
|
||||
%
|
||||
% % Determine kinetic energy shift for imaging data using the first
|
||||
% iteration as reference
|
||||
% DataTable = nappDetermineShiftXps(DataTable, 100, 200, ...
|
||||
% 'tableVariable', 'image', ...
|
||||
% 'kinEnReference', 1, ...
|
||||
% 'showFigures', 'on');
|
||||
%
|
||||
% % Determine binding energy shift using Gaussian fitting with custom
|
||||
% parameters specified in tmpFitParameters
|
||||
% FitPar.fitMode = 'position';
|
||||
% FitPar.refPeak = 1;
|
||||
% DataTable = nappDetermineShiftXps(DataTable, 280, 290, ...
|
||||
% 'tableVariable', 'spectrum_countsPerSecond', ...
|
||||
% 'binEnReference', 284.8, ...
|
||||
% 'mode', 'gaussFit', ...
|
||||
% 'FitParameter', tmpFitParameters);
|
||||
%
|
||||
% tmpFitParameters.peakArea = [1e5 0.5 0.1 0.1 0.1] ;
|
||||
% tmpFitParameters.peakWidth = 1.2;
|
||||
% tmpFitParameters.peakPos = [198 1.6 10 10 10];
|
||||
%
|
||||
% tmpFitParameters.peakAreaUpperBond = [Inf 0.5 0.1 0.1 0.1];
|
||||
% tmpFitParameters.peakWidthUpperBond = [3 NaN NaN NaN NaN];
|
||||
% tmpFitParameters.peakPosUpperBond = [200 1.6 10 10 10];
|
||||
%
|
||||
% tmpFitParameters.peakAreaLowerBond = [100 10 0.5 0.1 0.1 0.1];
|
||||
% tmpFitParameters.peakWidthLowerBond = [1.2 NaN NaN NaN NaN];
|
||||
% tmpFitParameters.peakPosLowerBxxond = [195 1.3 0.1 0.1 0.1];
|
||||
%
|
||||
% tmpFitParameters.backgroundRange = [6 5];
|
||||
% tmpFitParameters.weight = [198 200 0.1];
|
||||
% tmpFitParameters.fitMode = 'widthPosition';
|
||||
%
|
||||
% PROCESSING OVERVIEW
|
||||
% -------------------
|
||||
% The function operates differently depending on data type:
|
||||
%
|
||||
% FOR IMAGES (tableVariable = 'image' or 'imageRoh'):
|
||||
% 1. For each image in tableSelection:
|
||||
% - Extract kinetic energy axis (scientaEkin_eV or scientaEkinRoh_eV)
|
||||
% - Fit 2-peak Gaussian model to each sequence iteration (WIP: change
|
||||
% this to use nappFitGaussXPS.m)
|
||||
% - Extract peak position from fitting results
|
||||
% - Normalize shifts relative to reference iteration (kinEnReference)
|
||||
% 2. Result: kineticEnergyShift column contains shifts relative to reference iteration
|
||||
% (reference iteration has shift = 0)
|
||||
%
|
||||
% FOR SPECTRA (tableVariable = 'spectrum_counts', 'spectrum_countsPerSecond', or 'spectrum_countsNorm'):
|
||||
% 1. For each spectrum in tableSelection:
|
||||
% - Optional: restrict energy range using eKinStart/eKinEnd
|
||||
% - Find peak position using either:
|
||||
% * findPeak method: standard matlab peak detection
|
||||
% * gaussFit method: Gaussian fitting with global optimization
|
||||
% - Compute binding energy shift as: xRayPhotonEnergy - peakPosition - binEnReference
|
||||
% 2. Result: bindingEnergyShift column contains absolute shifts relative to reference BE
|
||||
% (positive shift means peak is at lower kinetic energy than expected)
|
||||
%
|
||||
% PEAK DETECTION METHODS
|
||||
% ----------------------
|
||||
% Two methods are available for finding peak positions in spectral
|
||||
%
|
||||
% 1. 'findPeak' (default): Fast automated detection using MATLAB's findpeaks
|
||||
% function with moving mean smoothing. Uses minPeakWidth, minPeakHeight,
|
||||
% and movMeanWindow parameters to control sensitivity. Best for well-defined
|
||||
% peaks with good signal-to-noise ratio. Accuracy: ±0.1-0.2 eV typical.
|
||||
%
|
||||
% 2. 'gaussFit': Slower but more accurate Gaussian fitting with global
|
||||
% optimization using GlobalSearch. Fits background, Gaussian peaks,
|
||||
% and extracts precise peak positions. Requires FitParameter structure.
|
||||
% Best for noisy data or when high precision is required. Accuracy: ±0.05 eV typical.
|
||||
%
|
||||
% IMPORTANT LIMITATION: This function requires distinct photoelectron peaks
|
||||
% to determine energy shifts. It will NOT work for background-only spectra
|
||||
% or featureless data. The fitting algorithms assume at least one measurable
|
||||
% peak is present in the specified energy range.
|
||||
%
|
||||
% INPUT ARGUMENTS
|
||||
% ---------------
|
||||
% DataTable table
|
||||
% Data table containing XPS image or spectral data. Must contain:
|
||||
% - scientaEkin_eV or scientaEkinRoh_eV: kinetic energy axis
|
||||
% - tableVariable data: images or spectra
|
||||
% - xRayEkin_eV: X-ray photon energy (eV) for each row
|
||||
%
|
||||
% eKinStart numeric scalar (optional)
|
||||
% Lower kinetic energy bound for peak fitting (eV). If omitted, uses
|
||||
% first energy point. Restricts the fitting region to improve accuracy.
|
||||
%
|
||||
% eKinEnd numeric scalar (optional)
|
||||
% Upper kinetic energy bound for peak fitting (eV). If omitted, uses
|
||||
% last energy point. Restricts the fitting region to improve accuracy.
|
||||
%
|
||||
% NAME-VALUE PAIR ARGUMENTS (optional)
|
||||
% ------------------------------------
|
||||
% 'tableSelection' logical array (default: all rows)
|
||||
% Logical index to filter which rows in DataTable to process.
|
||||
% Example: contains(DataTable.name, 'C1s') to process only C1s spectra
|
||||
%
|
||||
% 'tableVariable' char vector (default: 'spectrum_countsPerSecond')
|
||||
% Data type to process. Must be one of:
|
||||
%
|
||||
% Spectral data (compute binding energy shifts):
|
||||
% - 'spectrum_counts'
|
||||
% - 'spectrum_countsPerSecond'
|
||||
% - 'spectrum_countsNorm'
|
||||
%
|
||||
% Imaging data (compute kinetic energy shifts):
|
||||
% - 'image'
|
||||
% - 'imageRoh'
|
||||
%
|
||||
% 'mode' char vector (default: 'findPeak')
|
||||
% Peak detection method (spectral data only):
|
||||
% - 'findPeak': automated peak detection using moving mean smoothing
|
||||
% - 'gaussFit': 2-peak Gaussian fitting with global optimization
|
||||
%
|
||||
% 'binEnReference' numeric scalar (required for spectra)
|
||||
% Reference binding energy value (eV) for spectral calibration.
|
||||
% Typically the known BE of the primary peak (e.g., 285.0 eV for C1s C-H).
|
||||
% Example: 'binEnReference', 285.0
|
||||
%
|
||||
% 'kinEnReference' numeric scalar (default: 1)
|
||||
% Reference iteration index for imaging data. All kinetic energy shifts
|
||||
% are computed relative to this iteration. Reference iteration gets shift = 0.
|
||||
% Range: 1 to number of image columns.
|
||||
%
|
||||
% 'mode' char vector (default: 'findPeak')
|
||||
% Peak finding method for spectra:
|
||||
% - 'findPeak': uses findpeaks with smoothing and height/width constraints
|
||||
% - 'gaussFit': uses nappFitGaussXps with global optimization (slower, more accurate)
|
||||
%
|
||||
% 'minPeakWidth' numeric scalar (default: 0.1)
|
||||
% Minimum peak width (eV) for findPeak method. Peaks narrower than this
|
||||
% are rejected. Typical range: 0.05-0.5 eV depending on spectrometer resolution.
|
||||
%
|
||||
% 'minPeakHeight' numeric scalar (default: 0.1)
|
||||
% Minimum peak height (intensity) for findPeak method. Peaks below this
|
||||
% are rejected. Units match tableVariable data.
|
||||
%
|
||||
% 'movMeanWindow' numeric scalar (default: 1)
|
||||
% Moving mean window width (number of points) for smoothing before peak
|
||||
% detection in findPeak method. Reduces noise; typical range: 1-5 points.
|
||||
%
|
||||
% 'FitParameter' struct
|
||||
% Structure containing Gaussian fitting parameters for gaussFit mode.
|
||||
% Required fields:
|
||||
% - fitMode: 'position', 'width', 'unconstrained', etc.
|
||||
% - refPeak: peak number (1 or 2) whose position is used for shift calculation
|
||||
% Example: FitPar.fitMode = 'position'; FitPar.refPeak = 1;
|
||||
%
|
||||
% 'refPeak' numeric scalar (default: 1)
|
||||
% Peak number (1 or 2) whose position is used for binding energy shift
|
||||
% calculation in gaussFit mode. Peak 1 is typically the main photoelectron peak.
|
||||
%
|
||||
% 'showFigures' char vector (default: 'off')
|
||||
% Display fitting results:
|
||||
% - 'on': show Gaussian fit plot, peak table, and peak finding results
|
||||
% - 'off': suppress all figure output
|
||||
%
|
||||
% OUTPUT ARGUMENTS
|
||||
% ----------------
|
||||
% DataTable table
|
||||
% Updated data table with new columns:
|
||||
%
|
||||
% For imaging data (tableVariable = 'image' or 'imageRoh'):
|
||||
% - kineticEnergyShift: column vector of relative kinetic energy shifts (eV)
|
||||
% relative to kinEnReference iteration. Reference = 0.
|
||||
%
|
||||
% For spectral data (tableVariable = 'spectrum_*'):
|
||||
% - bindingEnergyShift: column vector of absolute binding energy shifts (eV)
|
||||
% relative to binEnReference. Typically small values (±0.5 eV range).
|
||||
%
|
||||
% For gaussFit mode on spectra, additional columns are added:
|
||||
% - peakPosition: [peak1, peak2] positions (eV) for each spectrum
|
||||
% - peakArea: [peak1, peak2] areas (eV·counts) for each spectrum
|
||||
% - peakFWHM: [peak1, peak2] full-width half-maximum (eV) for each spectrum
|
||||
% - peakBackground: linear background parameters [slope, intercept]
|
||||
%
|
||||
% NOTES
|
||||
% -----
|
||||
% - PREREQUISITE: X-ray photon energy (xRayEkin_eV) must be present in DataTable.
|
||||
% If empty, function returns with warning.
|
||||
% - For imaging: Gaussian fitting assumes 2 peaks in each iteration. Adjust
|
||||
% eKinStart/eKinEnd to isolate peak region if data is complex.
|
||||
% - For spectra: findPeak method is fast but less accurate (±0.1-0.2 eV typical).
|
||||
% gaussFit method is slower but more accurate (±0.05 eV typical).
|
||||
% - Peak detection may fail if signal-to-noise is poor. Check showFigures output
|
||||
% to diagnose fitting quality.
|
||||
% - For imageRoh variant: uses scientaEkinRoh_eV if available; falls back to
|
||||
% scientaEkin_eV if not populated.
|
||||
% - Binding energy shifts can be negative (peak at higher BE than reference) or
|
||||
% positive (peak at lower BE than reference).
|
||||
% - Figure windows are automatically closed after processing to prevent clutter.
|
||||
%
|
||||
% SEE ALSO
|
||||
% --------
|
||||
% nappCopyShift, nappBindingEnergyXps, nappFitGaussXps, nappAlignImages,
|
||||
% findpeaks, GaussFitOnePeak
|
||||
defaultKinEnReference = 1;
|
||||
defaultTableVariable = 'spectrum_countsPerSecond';
|
||||
expectedTableVariable = {'spectrum_counts','spectrum_countsPerSecond','spectrum_countsNorm','image','imageRoh'};
|
||||
defaultTableSelection = true(size(DataTable,1));
|
||||
defaultMinPeakWidth = 0.1;
|
||||
defaultMinPeakHeight = 0.1;
|
||||
defaultMovMeanWindow = 1;
|
||||
defaultRefPeak = 1;
|
||||
defaultShowFigures = 'off';
|
||||
expectedShowFigures = {'on','off'};
|
||||
defaultMode = 'findPeak';
|
||||
expectedMode = {'gaussFit','findPeak'};
|
||||
% defaultFitMode = 'widthPosition';
|
||||
% expectedFitMode = {'unconstrained','widthPosition','position','width','unconstrainedAndWidthPosition'};
|
||||
% Name-Value arguments:
|
||||
% referenceBindingEnergy - The theoretical energy to align to (e.g., 285.0 for C1s)
|
||||
% peakNumber - Which peak position to use if multiple exist (1 by default)
|
||||
|
||||
|
||||
%%
|
||||
|
||||
% Parse input
|
||||
p = inputParser;
|
||||
addRequired(p,'DataTable',@istable);
|
||||
addOptional(p,'eKinStart',@isnumeric)
|
||||
addOptional(p,'eKinEnd',@isnumeric)
|
||||
addParameter(p,'FitParameter',@isstruct);
|
||||
addParameter(p,'binEnReference',@isnumeric)
|
||||
addParameter(p,'kinEnReference',defaultKinEnReference,@isnumeric)
|
||||
addParameter(p,'tableSelection',defaultTableSelection,@islogical);
|
||||
addParameter(p,'minPeakWidth',defaultMinPeakWidth,@isnumeric);
|
||||
addParameter(p,'minPeakHeight',defaultMinPeakHeight,@isnumeric);
|
||||
addParameter(p,'movMeanWindow',defaultMovMeanWindow ,@isnumeric);
|
||||
addParameter(p,'tableVariable',defaultTableVariable,...
|
||||
@(x) any(validatestring(x,expectedTableVariable)));
|
||||
addParameter(p,'showFigures',defaultShowFigures,...
|
||||
@(x) any(validatestring(x,expectedShowFigures)));
|
||||
addParameter(p,'mode',defaultMode, @(x) any(validatestring(x,expectedMode)));
|
||||
% addParameter(p,'fitMode',defaultFitMode, @(x) any(validatestring(x,expectedFitMode)));
|
||||
addParameter(p,'refPeak',defaultRefPeak,@isnumeric);
|
||||
parse(p,DataTable,varargin{:});
|
||||
|
||||
|
||||
% check input (all elements of input variable need to have non-zero size)
|
||||
if ~all(cell2mat(cellfun(@size,p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable),'UniformOutput',false)),'all')
|
||||
disp('The table variable appears to be empty. I quit now')
|
||||
error('The table variable appears to be empty.')
|
||||
end
|
||||
|
||||
% add empty variable to table
|
||||
if contains(p.Results.tableVariable,'image')
|
||||
existColumn = strcmp('kineticEnergyShift',DataTable.Properties.VariableNames);
|
||||
if ~any(existColumn)
|
||||
DataTable.kineticEnergyShift = cell(size(DataTable,1),1);
|
||||
arguments
|
||||
DataTable table
|
||||
processSelection logical {mustBeVector}
|
||||
|
||||
% Name-Value arguments
|
||||
options.referenceBindingEnergy (1,1) double = 285.0 % Default to C1s binding energy
|
||||
options.peakNumber (1,1) double {mustBeInteger, mustBePositive} = 1
|
||||
end
|
||||
else
|
||||
existColumn = strcmp('bindingEnergyShift',DataTable.Properties.VariableNames);
|
||||
if ~any(existColumn)
|
||||
DataTable.bindingEnergyShift = NaN(size(DataTable,1),1);
|
||||
|
||||
numRowsTable = height(DataTable);
|
||||
|
||||
% Validate length of the logical array
|
||||
if length(processSelection) ~= numRowsTable
|
||||
error('processSelection must have the exact same length as the DataTable height (%d).', numRowsTable);
|
||||
end
|
||||
end
|
||||
%Colors; define PSI cooperate identity colours
|
||||
PsiFarbe.hellgrau = [226 226 226]/255;
|
||||
PsiFarbe.mittelgrau = [184 184 184]/255;
|
||||
PsiFarbe.dunkelgrau = [78 78 77]/255;
|
||||
PsiFarbe.blaugrau = [236 236 243]/255; % This is actually not a PSI colour
|
||||
PsiFarbe.gelb = [239 200 37]/255;
|
||||
PsiFarbe.hellorange = [227 164 31]/255;
|
||||
PsiFarbe.dunkelorange = [207 92 22]/255;
|
||||
PsiFarbe.hellrot = [164 36 23]/255;
|
||||
PsiFarbe.dunkelbraun = [114 85 65]/255;
|
||||
PsiFarbe.hellbraun = [127 119 47]/255;
|
||||
PsiFarbe.mittelgruen = [135 150 59]/255;
|
||||
PsiFarbe.hellgruen = [195 214 47]/255;
|
||||
PsiFarbe.dunkelgruen = [72 130 33]/255;
|
||||
PsiFarbe.dunkelrot = [104 47 86]/255;
|
||||
PsiFarbe.dunkelblau = [37 65 108]/255;
|
||||
PsiFarbe.mittelgruenblau = [61 164 168]/255;
|
||||
PsiFarbe.hellblau = [58 162 190]/255;
|
||||
PsiFarbe.mittelblau = [50 118 158]/255;
|
||||
|
||||
% confirm that X-ray energy is set
|
||||
if any(isnan(cell2mat(p.Results.DataTable(p.Results.tableSelection,:).xRayEkin_eV)))
|
||||
disp('Opps, X-ray energy is empty. Please add manually. Will stop now');
|
||||
return
|
||||
end
|
||||
if matches(p.Results.tableVariable,'image')
|
||||
% repeat this for all columns in input.
|
||||
for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1)
|
||||
%%
|
||||
try
|
||||
if isnumeric(p.Results.eKinStart)
|
||||
start = find(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}...
|
||||
>= p.Results.eKinStart,1);
|
||||
stop = find(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}...
|
||||
>= p.Results.eKinEnd,1);
|
||||
else
|
||||
start = 1;
|
||||
stop = length(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii});
|
||||
end
|
||||
catch
|
||||
warning('There is something wrong with the eKinStart and/or eKinEnd parameters');
|
||||
disp('There is something wrong with the eKinStart and/or eKinEnd parameters');
|
||||
end
|
||||
|
||||
for ij = 1:size(p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii},2)
|
||||
[B,x1,y1] = GaussFitOnePeak([p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}(start:stop)',...
|
||||
p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}(start:stop,ij)]);
|
||||
tmp_1(ij) = p.Results.DataTable(p.Results.tableSelection,:).xRayEkin_eV{ii}-B(3);
|
||||
% plot result
|
||||
if matches(p.Results.showFigures,'on')
|
||||
% define equations to be plotted
|
||||
Gauss = @(x,Hgt, Pos, Wdt) Hgt./(Wdt.*sqrt(pi/2))*exp(-2.*((x - Pos).^2/Wdt.^2));
|
||||
linear = @(x,slp,intrcpt) slp*x+intrcpt;
|
||||
figure( 'Name', 'Gauss Multi Fit ')
|
||||
tiledlayout(1,1)
|
||||
nexttile;
|
||||
%Define gauss peaks with hight, position, width from fitting results
|
||||
yData_pk1= Gauss(x1 ,B(1), B(3), B(2));
|
||||
yData_pk2= Gauss(x1 ,B(4), B(6), B(5));
|
||||
bkgrd = linear(x1,B(7),B(8));
|
||||
% plot data
|
||||
plot(x1,y1,'.')
|
||||
hold on
|
||||
% plot fit
|
||||
h = plot(x1,yData_pk1+yData_pk2+bkgrd);
|
||||
h.LineWidth=2;
|
||||
h.Color = PsiFarbe.dunkelblau;
|
||||
% plot each gauss peak
|
||||
h = plot(x1,yData_pk1+bkgrd);
|
||||
h.LineWidth=1.5;
|
||||
h.Color = PsiFarbe.gelb;
|
||||
h = plot(x1,yData_pk2+bkgrd);
|
||||
h.LineWidth=1.5;
|
||||
h.Color = PsiFarbe.gelb;
|
||||
|
||||
legend OFF
|
||||
xlabel('Kinetic Energy [eV]');
|
||||
ylabel('PE intensity [-]');
|
||||
grid on
|
||||
|
||||
% List results in table
|
||||
|
||||
disp('Results');
|
||||
disp(' ' );
|
||||
disp(cell2table({sprintf('%.1f',B(3)),...
|
||||
sprintf('%.1f',B(2)*sqrt(log(4))),...
|
||||
sprintf('%.1f',B(2)),...
|
||||
sprintf('%7.0f',B(1))},...
|
||||
'VariableNames',{'position';'FWHW';'width';'area'},...
|
||||
'RowNames',{'pk 1'}));
|
||||
end
|
||||
end
|
||||
%%
|
||||
|
||||
|
||||
DataTable(p.Results.tableSelection,:).kineticEnergyShift{ii} = tmp_1-tmp_1(p.Results.kinEnReference);
|
||||
clearvars tmp_1
|
||||
fh = findobj( 'Type', 'Figure', 'Name', 'Gauss Multi Fit ');
|
||||
close(fh)
|
||||
fh = findobj( 'Type', 'Figure', 'Name', 'GlobalSearch');
|
||||
close(fh)
|
||||
|
||||
% Ensure peak positions exist (Fit must be run first!)
|
||||
if ~ismember('peakPos', DataTable.Properties.VariableNames)
|
||||
error('The column "peakPos" does not exist. Please run nappFitGaussXps before calculating shifts.');
|
||||
end
|
||||
elseif matches(p.Results.tableVariable,'imageRoh')
|
||||
% repeat this for all columns in input.
|
||||
for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1)
|
||||
|
||||
%%
|
||||
try
|
||||
if isnumeric(p.Results.eKinStart) && isempty(DataTable(p.Results.tableSelection,:).scientaEkinRoh_eV{ii})
|
||||
start = find(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}...
|
||||
>= p.Results.eKinStart,1);
|
||||
stop = find(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}...
|
||||
>= p.Results.eKinEnd,1);
|
||||
elseif isnumeric(p.Results.eKinStart) && ~isempty(DataTable(p.Results.tableSelection,:).scientaEkinRoh_eV{ii})
|
||||
start = find(p.Results.DataTable(p.Results.tableSelection,:).scientaEkinRoh_eV{ii}...
|
||||
>= p.Results.eKinStart,1);
|
||||
stop = find(p.Results.DataTable(p.Results.tableSelection,:).scientaEkinRoh_eV{ii}...
|
||||
>= p.Results.eKinEnd,1);
|
||||
elseif isempty(DataTable(p.Results.tableSelection,:).scientaEkinRoh_eV{ii})
|
||||
start = 1;
|
||||
stop = length(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii});
|
||||
else
|
||||
start = 1;
|
||||
stop = length(DataTable(p.Results.tableSelection,:).scientaEkinRoh_eV{ii});
|
||||
end
|
||||
catch
|
||||
warning('There is something wrong with the eKinStart and/or eKinEnd parameters');
|
||||
disp('There is something wrong with the eKinStart and/or eKinEnd parameters');
|
||||
end
|
||||
for ij = 1:size(p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii},2)
|
||||
if isempty(DataTable(p.Results.tableSelection,:).scientaEkinRoh_eV{ii})
|
||||
[B,x1,y1] = GaussFitOnePeak([p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}(start:stop)',...
|
||||
p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}(start:stop,ij)]);
|
||||
else
|
||||
[B,x1,y1] = GaussFitOnePeak([DataTable(p.Results.tableSelection,:).scientaEkinRoh_eV{ii}(start:stop)',...
|
||||
p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}(start:stop,ij)]);
|
||||
end
|
||||
|
||||
tmp_1(ij) = p.Results.DataTable(p.Results.tableSelection,:).xRayEkin_eV{ii}-B(3);
|
||||
% plot result
|
||||
if matches(p.Results.showFigures,'on')
|
||||
% define equations to be plotted
|
||||
Gauss = @(x,Hgt, Pos, Wdt) Hgt./(Wdt.*sqrt(pi/2))*exp(-2.*((x - Pos).^2/Wdt.^2));
|
||||
linear = @(x,slp,intrcpt) slp*x+intrcpt;
|
||||
figure( 'Name', 'Gauss Multi Fit ')
|
||||
tiledlayout(1,1)
|
||||
nexttile;
|
||||
%Define gauss peaks with hight, position, width from fitting results
|
||||
yData_pk1= Gauss(x1 ,B(1), B(3), B(2));
|
||||
yData_pk2= Gauss(x1 ,B(4), B(6), B(5));
|
||||
bkgrd = linear(x1,B(7),B(8));
|
||||
% plot data
|
||||
plot(x1,y1,'.')
|
||||
hold on
|
||||
% plot fit
|
||||
h = plot(x1,yData_pk1+yData_pk2+bkgrd);
|
||||
h.LineWidth=2;
|
||||
h.Color = PsiFarbe.dunkelblau;
|
||||
% plot each gauss peak
|
||||
h = plot(x1,yData_pk1+bkgrd);
|
||||
h.LineWidth=1.5;
|
||||
h.Color = PsiFarbe.gelb;
|
||||
h = plot(x1,yData_pk2+bkgrd);
|
||||
h.LineWidth=1.5;
|
||||
h.Color = PsiFarbe.gelb;
|
||||
|
||||
legend OFF
|
||||
xlabel('Kinetic Energy [eV]');
|
||||
ylabel('PE intensity [-]');
|
||||
grid on
|
||||
|
||||
% List results in table
|
||||
|
||||
disp('Results');
|
||||
disp(' ' );
|
||||
disp(cell2table({sprintf('%.1f',B(3)),...
|
||||
sprintf('%.1f',B(2)*sqrt(log(4))),...
|
||||
sprintf('%.1f',B(2)),...
|
||||
sprintf('%7.0f',B(1))},...
|
||||
'VariableNames',{'position';'FWHW';'width';'area'},...
|
||||
'RowNames',{'pk 1'}));
|
||||
end
|
||||
end
|
||||
%%
|
||||
|
||||
DataTable(p.Results.tableSelection,:).kineticEnergyShift{ii} = tmp_1-tmp_1(p.Results.kinEnReference);
|
||||
clearvars tmp_1
|
||||
fh = findobj( 'Type', 'Figure', 'Name', 'Gauss Multi Fit ');
|
||||
close(fh)
|
||||
fh = findobj( 'Type', 'Figure', 'Name', 'GlobalSearch');
|
||||
close(fh)
|
||||
|
||||
% Initialize new columns to store the shift data if they don't exist
|
||||
if ~ismember('bindingEnergyShift', DataTable.Properties.VariableNames)
|
||||
DataTable.bindingEnergyShift = zeros(numRowsTable, 1);
|
||||
end
|
||||
else
|
||||
% repeat this for all columns in input.
|
||||
if matches(p.Results.mode,'findPeak')
|
||||
for ii = 1:size(p.Results.DataTable(p.Results.tableSelection,:),1)
|
||||
|
||||
%%
|
||||
try
|
||||
if isnumeric(p.Results.eKinStart)
|
||||
start = find(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}...
|
||||
>= p.Results.eKinStart,1);
|
||||
stop = find(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}...
|
||||
>= p.Results.eKinEnd,1);
|
||||
else
|
||||
start = 1;
|
||||
stop = length(p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii});
|
||||
end
|
||||
catch
|
||||
warning('There is something wrong with the eKinStart and/or eKinEnd parameters');
|
||||
disp('There is something wrong with the eKinStart and/or eKinEnd parameters');
|
||||
end
|
||||
|
||||
if contains(p.Results.showFigures,'on')
|
||||
figure
|
||||
|
||||
findpeaks(movmean(p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}(start:stop),...
|
||||
p.Results.movMeanWindow),...
|
||||
p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}(start:stop),...
|
||||
'MinPeakWidth',p.Results.minPeakWidth,'MinPeakHeight',p.Results.minPeakHeight)
|
||||
end
|
||||
[pks,locs]=findpeaks(movmean(p.Results.DataTable(p.Results.tableSelection,:).(p.Results.tableVariable){ii}(start:stop),...
|
||||
p.Results.movMeanWindow),...
|
||||
p.Results.DataTable(p.Results.tableSelection,:).scientaEkin_eV{ii}(start:stop),...
|
||||
'MinPeakWidth',p.Results.minPeakWidth,'MinPeakHeight',p.Results.minPeakHeight);
|
||||
|
||||
%%
|
||||
|
||||
[~,I] = max(pks);
|
||||
tmp_1(ii,1) = p.Results.DataTable(p.Results.tableSelection,:).xRayEkin_eV{ii}-locs(I)-p.Results.binEnReference;
|
||||
clearvars tmp_2
|
||||
if ~ismember('energyShiftSource', DataTable.Properties.VariableNames)
|
||||
DataTable.energyShiftSource = cell(numRowsTable, 1);
|
||||
end
|
||||
|
||||
%% Processing Loop
|
||||
processIdx = find(processSelection);
|
||||
|
||||
for i = 1:length(processIdx)
|
||||
currRow = processIdx(i);
|
||||
currName = DataTable.name{currRow};
|
||||
|
||||
% Extract the peak position
|
||||
refPositions = DataTable.peakPos(currRow, :);
|
||||
if size(refPositions, 2) < options.peakNumber || isnan(refPositions(options.peakNumber))
|
||||
warning('Row %d (%s): peakNumber %d does not contain a valid fitted position. Skipping.', ...
|
||||
currRow, currName, options.peakNumber);
|
||||
continue;
|
||||
end
|
||||
DataTable.bindingEnergyShift(p.Results.tableSelection) = tmp_1;
|
||||
|
||||
elseif matches(p.Results.mode,'gaussFit')
|
||||
tmpFitResults = nappFitGaussXps(DataTable,p.Results.FitParameter,p.Results.tableSelection,...
|
||||
'energyScale','kinetic','mode',p.Results.FitParameter.fitMode,'showFigures','on','tableVariable',p.Results.tableVariable);
|
||||
|
||||
DataTable.bindingEnergyShift(p.Results.tableSelection) = tmpFitResults(p.Results.tableSelection,:).xRayEkinRange_eV(:,1) - tmpFitResults(p.Results.tableSelection,:).peakPosition(:,p.Results.FitParameter.refPeak) - repmat(p.Results.binEnReference,size(DataTable.bindingEnergyShift(p.Results.tableSelection)));
|
||||
DataTable.peakPosition(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakPosition;
|
||||
DataTable.peakArea(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakArea;
|
||||
DataTable.peakFWHM(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakFWHM;
|
||||
% added 6.2025 tbr
|
||||
DataTable.peakBackground(p.Results.tableSelection,:) = tmpFitResults(p.Results.tableSelection,:).peakBackground;
|
||||
%%
|
||||
|
||||
|
||||
|
||||
|
||||
% Calculate the shift: Shift = Reference Binding Energy - Measured Energy
|
||||
measuredEnergy = refPositions(options.peakNumber);
|
||||
calculatedShift = options.referenceBindingEnergy - measuredEnergy;
|
||||
|
||||
% Log the shift and its source
|
||||
DataTable.bindingEnergyShift(currRow) = calculatedShift;
|
||||
DataTable.energyShiftSource{currRow} = 'self';
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
try
|
||||
fh = findobj( 'Type', 'Figure', 'Name', 'Gauss Multi Fit ');
|
||||
close(fh)
|
||||
catch
|
||||
end
|
||||
try
|
||||
fh = findobj( 'Type', 'Figure', 'Name', 'GlobalSearch');
|
||||
close(fh)
|
||||
catch
|
||||
end
|
||||
|
||||
end
|
||||
function [B,x1,y1] = GaussFitOnePeak(data1)
|
||||
|
||||
|
||||
[x1, y1] = prepareCurveData(data1(:,1),data1(:,2));
|
||||
|
||||
% make data slimmer so that background makes sense
|
||||
[~,I] = max(y1);
|
||||
tmp1 = find(x1>=x1(I)-8,1);
|
||||
tmp2 = find(x1>=x1(I)+5,1);
|
||||
if isempty(tmp2)
|
||||
y1 = y1(tmp1:end);
|
||||
x1 = x1(tmp1:end);
|
||||
else
|
||||
y1 = y1(tmp1:tmp2);
|
||||
x1 = x1(tmp1:tmp2);
|
||||
end
|
||||
[~,I] = max(y1);
|
||||
|
||||
% Define equation to fit data
|
||||
% I use the area Gauss equations here, which I took from the OriginPro
|
||||
% documentation. https://www.originlab.com/doc/Origin-Help/Gauss-FitFunc
|
||||
%
|
||||
% Gauss = area/(width*sqrt(pi/2)) * exp(-2*(x-position)^2/width^2)
|
||||
%
|
||||
% where FWHM = width * sqrt(ln(4))
|
||||
|
||||
% Data set 1:
|
||||
yfcn1 = @(b,x)...
|
||||
b(1)/(b(2)*sqrt(pi/2))*exp(-2.*((x(:,1) - b(3)).^2/b(2).^2)) ... % Gauss peak 1: C-H, Ac-
|
||||
+ b(4)/(b(5)*sqrt(pi/2))*exp(-2.*((x(:,1)- b(6)).^2/b(5).^2))... % Gauss peak 2: C-OOH, Ac-
|
||||
+b(7).*x(:,1)+b(8); % linear background
|
||||
|
||||
B0 = [1e5 1.5 x1(I) ...
|
||||
1e5 1.0 x1(I)-4 ...
|
||||
1 0];
|
||||
|
||||
|
||||
% lower bonds
|
||||
lb = [100 0.5 x1(I)-1. ...
|
||||
100 1.0 x1(I)-5 ...
|
||||
-Inf -Inf];
|
||||
|
||||
|
||||
% upper bond
|
||||
ub = [Inf 3 x1(I)+1 ...
|
||||
Inf 5 x1(I)-1 ...
|
||||
Inf Inf];
|
||||
|
||||
|
||||
% Fit equations: Gauss eq. 1 with data
|
||||
yfcn = @(b,x) yfcn1(b,x);
|
||||
% We find an optimal fit by minimising the residuals:
|
||||
fitfcnw = @(b) sum((y1 - yfcn(b,x1)).^2);
|
||||
|
||||
problem = createOptimProblem('fmincon', 'x0',B0, 'lb',lb,'ub',ub, 'objective',fitfcnw);
|
||||
gs = GlobalSearch('PlotFcns',@gsplotbestf);
|
||||
B = run(gs,problem);
|
||||
|
||||
|
||||
|
||||
|
||||
end
|
||||
@@ -306,7 +306,7 @@ elseif contains(p.Results.mode,'data')
|
||||
end
|
||||
end
|
||||
if contains(p.Results.mode,'data')
|
||||
dataPath = fullfile(server,'5505','Data',dataPath);
|
||||
dataPath = fullfile(server,'5505','Data','beamtimes',dataPath);
|
||||
else
|
||||
dataPath = fullfile(server,'NAPP','SC Data',dataPath);
|
||||
end
|
||||
@@ -639,6 +639,7 @@ if ~isempty(TmpFileList{1})
|
||||
globalAnalyzerSlit = '';
|
||||
globalWorkFunction = NaN;
|
||||
globalExEnergy = NaN;
|
||||
globalSample = '';
|
||||
|
||||
if ~isempty(regionStarts)
|
||||
globalHeader = fileLines(1:regionStarts(1)-1);
|
||||
@@ -660,6 +661,8 @@ if ~isempty(TmpFileList{1})
|
||||
globalWorkFunction = sscanf(strtrim(extractAfter(lineStr, '# Eff. Workfunction:')), '%f');
|
||||
elseif startsWith(lineStr, '# Excitation Energy:')
|
||||
globalExEnergy = sscanf(strtrim(extractAfter(lineStr, '# Excitation Energy:')), '%f');
|
||||
elseif startsWith(lineStr, '# Comment:')
|
||||
globalSample = strtrim(extractAfter(lineStr, '# Comment:'));
|
||||
% =========================================================================
|
||||
% OFFLINE XPS BUG FIX (Mg vs Al Source)
|
||||
% If the file lacks "Monochromator" in the header and the energy is
|
||||
@@ -700,6 +703,9 @@ if ~isempty(TmpFileList{1})
|
||||
regionEntry.scientaAnalyzerSlit = globalAnalyzerSlit;
|
||||
regionEntry.scientaWorkfunction_eV = globalWorkFunction;
|
||||
regionEntry.creationDate = osDateVec;
|
||||
if ~isempty(globalSample)
|
||||
regionEntry.sample = globalSample;
|
||||
end
|
||||
|
||||
% Scan the header lines directly
|
||||
for L = 1:min(150, length(regionBlock)) % Metadata is always at the top
|
||||
@@ -751,6 +757,8 @@ if ~isempty(TmpFileList{1})
|
||||
regionEntry.scientaWorkfunction_eV = sscanf(strtrim(extractAfter(lineStr, '# Work Function:')), '%f');
|
||||
elseif startsWith(lineStr, '# Eff. Workfunction:')
|
||||
regionEntry.scientaWorkfunction_eV = sscanf(strtrim(extractAfter(lineStr, '# Eff. Workfunction:')), '%f');
|
||||
elseif startsWith(lineStr, '# Comment:')
|
||||
regionEntry.sample = strtrim(extractAfter(lineStr, '# Comment:'));
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
+73
-50
@@ -2056,7 +2056,7 @@ for ii = 1:size(DataTable(p.Results.tableSelection,:),1)
|
||||
end
|
||||
|
||||
%--------------------------------------------------------------------------
|
||||
%% Core fitting part,
|
||||
%% Core fitting part,
|
||||
% the fitting is done here (kinetic energy scale)
|
||||
%--------------------------------------------------------------------------
|
||||
clearvars currentParameterVector
|
||||
@@ -2066,6 +2066,21 @@ for ii = 1:size(DataTable(p.Results.tableSelection,:),1)
|
||||
objectiveFunction = @(currentParameterVector) sum((fitIntensityValues - modelEvaluationFunction(currentParameterVector,fitEnergyValues)).^2);
|
||||
optimizationProblem = createOptimProblem('fmincon', 'x0',initialParameterVector, 'lb',lowerBoundsParameterVector,'ub',upperBoundsParameterVector, 'objective',objectiveFunction);
|
||||
globalSearchOptimizer = GlobalSearch('PlotFcns',@gsplotbestf);
|
||||
|
||||
% -------------------------------------------------------------------------
|
||||
% PUBLISH MODE DETECTION
|
||||
% If MATLAB is publishing a document, completely silence the optimization
|
||||
% output and live plots so they don't flood the final PDF/HTML.
|
||||
stackInfo = dbstack;
|
||||
if any(contains({stackInfo.name}, 'publish')) || any(contains({stackInfo.name}, 'evalmxdom'))
|
||||
globalSearchOptimizer.Display = 'off'; % Turns off the scrolling text
|
||||
% globalSearchOptimizer.PlotFcns = []; % (Commented out: leaves the live fitting plot active)
|
||||
|
||||
% Silence the local fmincon solver by attaching options directly to the optimizationProblem
|
||||
optimizationProblem.options = optimoptions('fmincon', 'Display', 'off');
|
||||
end
|
||||
% -------------------------------------------------------------------------
|
||||
|
||||
currentParameterVector = run(globalSearchOptimizer,optimizationProblem);
|
||||
elseif contains(p.Results.energyScale,'binding')
|
||||
%--------------------------------------------------------------------------
|
||||
@@ -2090,7 +2105,7 @@ for ii = 1:size(DataTable(p.Results.tableSelection,:),1)
|
||||
fitIntensityValues = fitIntensityValues(tmp1:tmp2);
|
||||
fitEnergyValues = fitEnergyValues(tmp1:tmp2);
|
||||
end
|
||||
%--------------------------------------------------------------------------
|
||||
%--------------------------------------------------------------------------
|
||||
%% Core fitting part
|
||||
% the fitting is done here (binding energy scale)
|
||||
%--------------------------------------------------------------------------
|
||||
@@ -2961,26 +2976,7 @@ elseif matches(p.Results.mode, 'TwoUnconstrainedAndWidthPositionPseudoVoigtPeak'
|
||||
DataTable(p.Results.tableSelection,:).peakShirleyK(ii, :) = NaN;
|
||||
end
|
||||
|
||||
%% Print Results
|
||||
if matches(p.Results.showFigures,'on')
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakPosition"]))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakArea"]))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakFWHM"]))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakBackground"]))
|
||||
try
|
||||
if ~isnan(DataTable(p.Results.tableSelection,:).peakEta(1))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakEta",]))
|
||||
end
|
||||
catch
|
||||
end
|
||||
try
|
||||
if ~isnan(DataTable(p.Results.tableSelection,:).peakShirleyK(1))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakShirleyK"]))
|
||||
end
|
||||
catch
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
%% Plot Results
|
||||
%
|
||||
% This uses nappPlot and then moves the figure in a tiledlayout to also
|
||||
@@ -3020,8 +3016,62 @@ elseif matches(p.Results.mode, 'TwoUnconstrainedAndWidthPositionPseudoVoigtPeak'
|
||||
close(ancestor(axOld,'figure'));
|
||||
end
|
||||
|
||||
% --- Define variables for the Universal Logging Block ---
|
||||
numRowsTable = height(DataTable);
|
||||
processIdx = find(p.Results.tableSelection);
|
||||
% -------------------------------------------------------------------
|
||||
|
||||
|
||||
% 1. Dynamically get this function's name
|
||||
thisFuncName = mfilename;
|
||||
colDate = sprintf('log%sDate', thisFuncName);
|
||||
colCaller = sprintf('log%sCaller', thisFuncName);
|
||||
|
||||
|
||||
% 2. Probe for column existence, create empty string arrays if missing
|
||||
if ~ismember(colDate, DataTable.Properties.VariableNames)
|
||||
DataTable.(colDate) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
if ~ismember(colCaller, DataTable.Properties.VariableNames)
|
||||
DataTable.(colCaller) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
|
||||
% 3. Get current time as a string
|
||||
currentTimeStr = string(datetime('now', 'Format', 'yyyy-MM-dd HH:mm:ss'));
|
||||
|
||||
% 4. Determine the calling script using the call stack
|
||||
stackInfo = dbstack;
|
||||
if length(stackInfo) > 1
|
||||
callerScript = string(stackInfo(2).file); % The script that called this function
|
||||
else
|
||||
callerScript = " "; % Called directly from the command window
|
||||
end
|
||||
|
||||
% 5. Write the log data only to the rows being processed
|
||||
DataTable.(colDate)(processIdx) = currentTimeStr;
|
||||
DataTable.(colCaller)(processIdx) = callerScript;
|
||||
end
|
||||
%% Print Results
|
||||
if matches(p.Results.showFigures,'on')
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakPosition"]))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakArea"]))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakFWHM"]))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakBackground"]))
|
||||
try
|
||||
if ~isnan(DataTable(p.Results.tableSelection,:).peakEta(1))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakEta",]))
|
||||
end
|
||||
catch
|
||||
end
|
||||
try
|
||||
if ~isnan(DataTable(p.Results.tableSelection,:).peakShirleyK(1))
|
||||
disp(DataTable(p.Results.tableSelection,["name","peakShirleyK"]))
|
||||
end
|
||||
catch
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
@@ -3331,34 +3381,7 @@ for iPeak = 1:nPeaks
|
||||
B = B + shirleycontrib;
|
||||
end
|
||||
|
||||
% % Calculate sigma and gamma from FWHM
|
||||
% % These match the definitions used in your helper functions
|
||||
% w = fwhm2w(FWHM); % Convert FWHM to width parameter
|
||||
% sigma = w / 2; % Gaussian sigma
|
||||
% gamma = FWHM / 2; % Lorentzian gamma
|
||||
%
|
||||
% if matches(p.Results.energyScale, 'binding')
|
||||
% % Background on HIGH binding energy side (E >= E0, right)
|
||||
% idxregion = (E >= pos);
|
||||
% else % kinetic
|
||||
% % error('ERROR: Shirley works only in binding energy mode')
|
||||
% E = max(E)+100-E;
|
||||
% pos = max(E)+100-pos;
|
||||
% idxregion = (E >= pos);
|
||||
% end
|
||||
%
|
||||
% % Use complementary CDF
|
||||
% Gtail = 0.5 * (1 - erf((E(idxregion) - pos) / (sqrt(2) * sigma)));
|
||||
% Ltail = 0.5 - (1/pi) * atan((E(idxregion) - pos) / gamma);
|
||||
% tailfrac = eta * Gtail + (1 - eta) * Ltail;
|
||||
% shirleycontrib = K * area * (0.5 - tailfrac);
|
||||
% Btemp = zeros(size(E));
|
||||
% Btemp(idxregion) = shirleycontrib;
|
||||
% B = B + Btemp;
|
||||
% end
|
||||
% if matches(p.Results.energyScale, 'kinetic')
|
||||
% %B = flip(B);
|
||||
% end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -208,6 +208,38 @@ end
|
||||
% write log to table
|
||||
DataTable.logGenerateMode(p.Results.tableSelection,:) = cellstr(repmat(p.Results.mode,size(p.Results.DataTable(p.Results.tableSelection,:),1),1));
|
||||
DataTable.logGenerateRange(p.Results.tableSelection,:) = [tmp_4 tmp_5];
|
||||
DataTable.logGenerateDate(p.Results.tableSelection,:) = cellstr(repmat(datestr(now),size(p.Results.DataTable(p.Results.tableSelection,:),1),1));
|
||||
% --- Define variables for the Universal Logging Block ---
|
||||
numRowsTable = height(DataTable);
|
||||
processIdx = find(p.Results.tableSelection);
|
||||
% -------------------------------------------------------------------
|
||||
|
||||
|
||||
% 1. Dynamically get this function's name
|
||||
thisFuncName = mfilename;
|
||||
colDate = sprintf('log%sDate', thisFuncName);
|
||||
colCaller = sprintf('log%sCaller', thisFuncName);
|
||||
|
||||
|
||||
% 2. Probe for column existence, create empty string arrays if missing
|
||||
if ~ismember(colDate, DataTable.Properties.VariableNames)
|
||||
DataTable.(colDate) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
if ~ismember(colCaller, DataTable.Properties.VariableNames)
|
||||
DataTable.(colCaller) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
|
||||
% 3. Get current time as a string
|
||||
currentTimeStr = string(datetime('now', 'Format', 'yyyy-MM-dd HH:mm:ss'));
|
||||
|
||||
% 4. Determine the calling script using the call stack
|
||||
stackInfo = dbstack;
|
||||
if length(stackInfo) > 1
|
||||
callerScript = string(stackInfo(2).file); % The script that called this function
|
||||
else
|
||||
callerScript = " "; % Called directly from the command window
|
||||
end
|
||||
|
||||
% 5. Write the log data only to the rows being processed
|
||||
DataTable.(colDate)(processIdx) = currentTimeStr;
|
||||
DataTable.(colCaller)(processIdx) = callerScript;
|
||||
end
|
||||
@@ -0,0 +1,185 @@
|
||||
function DataTable = nappNorm(DataTable, processSelection, refSelection, options)
|
||||
% NAPPNORM Normalize XPS spectra based on provided reference selection or self-maximum.
|
||||
%
|
||||
% DataTable = NAPPNORM(DataTable, processSelection, refSelection) normalizes
|
||||
% the spectra where processSelection is true, dividing them by the peak area
|
||||
% of matched spectra from the pool where refSelection is true. Both must
|
||||
% be logical arrays matching the height of the DataTable.
|
||||
%
|
||||
% DataTable = NAPPNORM(DataTable, processSelection) scales each spectrum
|
||||
% selected by the logical array by its own maximum value.
|
||||
%
|
||||
% Name-Value arguments:
|
||||
% matchStrategy - 'earlier', 'after', 'spectrumNumber', 'internalMax'
|
||||
% tableVariable - Target column ('spectrum_countsPerSecond' by default)
|
||||
% timeVariable - Target time column ('lastModifiedDatenum' by default)
|
||||
% peakNumber - Which peak area to use if multiple exist (1 by default)
|
||||
|
||||
arguments
|
||||
DataTable table
|
||||
processSelection logical {mustBeVector}
|
||||
|
||||
% refSelection is optional. If omitted, it defaults to empty.
|
||||
refSelection logical {mustBeVector} = false(0,1);
|
||||
|
||||
% Name-Value arguments
|
||||
options.matchStrategy char {mustBeMember(options.matchStrategy, ...
|
||||
{'earlier', 'after', 'spectrumNumber', 'internalMax'})} = 'earlier'
|
||||
options.tableVariable char {mustBeMember(options.tableVariable, ...
|
||||
{'spectrum_counts', 'spectrum_countsPerSecond', 'spectrum_countsNorm'})} = 'spectrum_countsPerSecond'
|
||||
options.timeVariable char {mustBeMember(options.timeVariable, ...
|
||||
{'lastModifiedDatenum', 'creationDate'})} = 'lastModifiedDatenum'
|
||||
options.peakNumber (1,1) double {mustBeInteger, mustBePositive} = 1
|
||||
end
|
||||
|
||||
numRowsTable = height(DataTable);
|
||||
|
||||
% Validate length of the logical arrays
|
||||
if length(processSelection) ~= numRowsTable
|
||||
error('processSelection must have the exact same length as the DataTable height (%d).', numRowsTable);
|
||||
end
|
||||
if ~isempty(refSelection) && any(refSelection) && length(refSelection) ~= numRowsTable
|
||||
error('refSelection must have the exact same length as the DataTable height (%d).', numRowsTable);
|
||||
end
|
||||
|
||||
% Auto-detect mode: If no valid reference array is passed OR 'internalMax' is chosen
|
||||
if strcmpi(options.matchStrategy, 'internalMax') || isempty(refSelection) || ~any(refSelection)
|
||||
mode = 'maximum';
|
||||
else
|
||||
mode = 'referenceArea';
|
||||
end
|
||||
|
||||
% Initialize new columns if they don't exist
|
||||
if ~ismember('spectrum_countsNorm', DataTable.Properties.VariableNames)
|
||||
DataTable.spectrum_countsNorm = cell(numRowsTable, 1);
|
||||
end
|
||||
if ~ismember('lognappNormMode', DataTable.Properties.VariableNames)
|
||||
DataTable.lognappNormMode = cell(numRowsTable, 1);
|
||||
end
|
||||
if ~ismember('lognappNormWith', DataTable.Properties.VariableNames)
|
||||
DataTable.lognappNormWith = cell(numRowsTable, 1); % New column for spectrum name
|
||||
end
|
||||
|
||||
%% Processing Loop
|
||||
processIdx = find(processSelection);
|
||||
refIdx = find(refSelection);
|
||||
|
||||
for i = 1:length(processIdx)
|
||||
currRow = processIdx(i);
|
||||
yData = DataTable.(options.tableVariable){currRow};
|
||||
currTime = datenum(DataTable.(options.timeVariable)(currRow, :));
|
||||
refTimes = datenum(DataTable.(options.timeVariable)(refIdx, :));
|
||||
currName = DataTable.name{currRow};
|
||||
bestRefRow = NaN;
|
||||
|
||||
if isempty(yData)
|
||||
continue;
|
||||
end
|
||||
|
||||
switch mode
|
||||
case 'maximum'
|
||||
normFactor = max(yData);
|
||||
if normFactor == 0, normFactor = 1; end % Protect against /0
|
||||
|
||||
DataTable.spectrum_countsNorm{currRow} = yData ./ normFactor;
|
||||
DataTable.logNormMode{currRow} = 'maximum';
|
||||
DataTable.logNormWith{currRow} = num2str(normFactor); % Log internal maximum
|
||||
|
||||
case 'referenceArea'
|
||||
|
||||
|
||||
|
||||
% Internal Matching Engine using Code Words
|
||||
switch options.matchStrategy
|
||||
case 'earlier'
|
||||
validRefs = refIdx(refTimes <= currTime);
|
||||
if ~isempty(validRefs)
|
||||
timeDiffs = currTime - refTimes(refTimes <= currTime);
|
||||
[~, minIdx] = min(timeDiffs);
|
||||
bestRefRow = validRefs(minIdx);
|
||||
end
|
||||
|
||||
case 'after'
|
||||
validRefs = refIdx(refTimes >= currTime);
|
||||
if ~isempty(validRefs)
|
||||
timeDiffs = refTimes(refTimes >= currTime) - currTime;
|
||||
[~, minIdx] = min(timeDiffs);
|
||||
bestRefRow = validRefs(minIdx);
|
||||
end
|
||||
|
||||
case 'spectrumNumber'
|
||||
% Extract the 4-digit number at the start of the name (e.g., '0033')
|
||||
specNumStr = regexp(currName, '^\d{4}', 'match', 'once');
|
||||
|
||||
if ~isempty(specNumStr)
|
||||
% Find references that start with 'XXXX_'
|
||||
searchPattern = [specNumStr, '_'];
|
||||
validRefs = refIdx(startsWith(DataTable.name(refIdx), searchPattern));
|
||||
if ~isempty(validRefs)
|
||||
bestRefRow = validRefs(1); % Take the first exact match
|
||||
end
|
||||
else
|
||||
warning('Row %d: Could not extract a 4-digit spectrum number from name "%s".', currRow, currName);
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
% Validate we found a match
|
||||
if isnan(bestRefRow)
|
||||
warning('Row %d (%s): No matching reference found for strategy "%s". Skipping.', ...
|
||||
currRow, currName, options.matchStrategy);
|
||||
continue;
|
||||
end
|
||||
|
||||
% Extract area and validate
|
||||
refAreas = DataTable.peakArea(bestRefRow,:);
|
||||
if size(refAreas,2) < options.peakNumber
|
||||
warning('Row %d: peakNumber %d exceeds available peaks in reference row %d. Skipping.', ...
|
||||
currRow, options.peakNumber, bestRefRow);
|
||||
continue;
|
||||
end
|
||||
|
||||
normFactor = refAreas(options.peakNumber);
|
||||
if normFactor == 0
|
||||
warning('Row %d: Reference area in row %d is zero. Skipping.', currRow, bestRefRow);
|
||||
continue;
|
||||
end
|
||||
|
||||
% Apply normalization and log the exact name of the reference
|
||||
DataTable.spectrum_countsNorm{currRow} = yData ./ normFactor;
|
||||
DataTable.lognappNormMode{currRow} = sprintf('referenceArea (Row %d)', bestRefRow);
|
||||
DataTable.lognappNormWith{currRow} = DataTable.name{bestRefRow};
|
||||
% -------------------------------------------------------------------------
|
||||
% 1. Dynamically get this function's name
|
||||
thisFuncName = mfilename;
|
||||
colDate = sprintf('log%sDate', thisFuncName);
|
||||
colCaller = sprintf('log%sCaller', thisFuncName);
|
||||
|
||||
|
||||
% 2. Probe for column existence, create empty string arrays if missing
|
||||
if ~ismember(colDate, DataTable.Properties.VariableNames)
|
||||
DataTable.(colDate) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
if ~ismember(colCaller, DataTable.Properties.VariableNames)
|
||||
DataTable.(colCaller) = repmat("", numRowsTable, 1);
|
||||
end
|
||||
|
||||
% 3. Get current time as a string
|
||||
currentTimeStr = string(datetime('now', 'Format', 'yyyy-MM-dd HH:mm:ss'));
|
||||
|
||||
% 4. Determine the calling script using the call stack
|
||||
stackInfo = dbstack;
|
||||
if length(stackInfo) > 1
|
||||
callerScript = string(stackInfo(2).file); % The script that called this function
|
||||
else
|
||||
callerScript = " "; % Called directly from the command window
|
||||
end
|
||||
|
||||
% 5. Write the log data only to the rows being processed
|
||||
DataTable.(colDate)(processIdx) = currentTimeStr;
|
||||
DataTable.(colCaller)(processIdx) = callerScript;
|
||||
% -------------------------------------------------------------------------
|
||||
end
|
||||
end
|
||||
end
|
||||
+35
-2
@@ -82,6 +82,16 @@ store image data, spectra, meta‑data, fit results, etc.
|
||||
Everyone in the group is more than welcome to contribute new functions and
|
||||
examples so that the next beamtime is easier for everyone. 🤝
|
||||
|
||||
- **Modern MATLAB Arguments & Auto-Completion**
|
||||
The toolbox is transitioning from the older `inputParser` to MATLAB's modern `arguments` block (introduced in R2019b). Functions like `nappNorm`, `nappDetermineShift`, and `nappCopyShift` now use this modern structure.
|
||||
|
||||
- **Benefit:** Y
|
||||
You no longer need to manually update `functionSignatures.json` for these functions. MATLAB automatically reads the `arguments` block to generate real-time code suggestions, tab-completion, and tooltips in the Editor.
|
||||
|
||||
**Universal Execution Logging**
|
||||
Data provenance is critical. All `napp...` processing functions now feature a **Universal Logging Block**. When a function modifies a spectrum, it automatically records *when* it was processed and *what script* called the function.
|
||||
* You will see new columns like `logNappNormDate` and `logNappNormCaller` magically appear in your table. If you run a function from the command window, the caller will simply log as `" "`.
|
||||
|
||||
|
||||
## 🧭 Keep an Overview — FAIR and open research
|
||||
|
||||
@@ -177,8 +187,21 @@ SpectrumList.mat
|
||||
↓FigureHexylamineN1sLjIce.m → FigureHexylamineN1sLjIce.mat
|
||||
``````
|
||||
|
||||
Reuse `.mat` outputs to skip re-running previous steps 🧠💤
|
||||
Reuse `.mat` outputs to skip re-running previous steps 🧠💤. We have cleanly decoupled the energy calibration pipeline into a highly modular, three-step process.
|
||||
|
||||
1. **Fit the Reference Standards (`nappFitGaussXps`)**
|
||||
First, fit your reference spectra (e.g., C1s or Au4f) to find their exact measured positions. This generates the `peakPos` column.
|
||||
2. **Calculate the Internal Shift (`nappDetermineShift`)**
|
||||
Compare the measured `peakPos` of your standard to your theoretical target energy (e.g., 285.0 eV for C1s). This function acts as a pure calculator and outputs the required `bindingEnergyShift` using the `'internalSelf'` method.
|
||||
3. **Distribute the Shift (`nappCopyShift`)**
|
||||
Use the matching engine to copy the calculated `bindingEnergyShift` from your calibration standards to your target spectra (e.g., O1s).
|
||||
|
||||
**The Matching Engine (`matchStrategy`)**
|
||||
Functions that combine or compare spectra (like `nappNorm` and `nappCopyShift`) now use a unified matching engine to pair target spectra with reference spectra. You can choose from:
|
||||
* `'earlier'`: Finds the closest reference spectrum taken *before* the target.
|
||||
* `'after'`: Finds the closest reference spectrum taken *after* the target.
|
||||
* `'spectrumNumber'`: Matches the 4-digit sequence number at the start of the filename (e.g., `0045_O1s` finds `0045_C1s`).
|
||||
* `'internalSelf'` / `'internalMax'`: The spectrum references itself (e.g., normalizing to its own maximum, or calculating its own energy drift).
|
||||
***
|
||||
|
||||
## Prerequisites
|
||||
@@ -454,6 +477,16 @@ These variables are typically created or updated by fitting/analysis functions.
|
||||
|
||||
- `peakPosition`
|
||||
Fitted peak position(s).
|
||||
- `bindingEnergyShift`
|
||||
The absolute shift required to align a spectrum to a theoretical reference energy (calculated by `nappDetermineShift`).
|
||||
- `energyShiftSource`
|
||||
Logs exactly where the shift value came from (e.g., `'self'` if calculated internally, or the exact filename of the C1s spectrum it was copied from).
|
||||
- `log[FunctionName]Date` (e.g., `logNappNormDate`)
|
||||
String representation of the exact date and time the row was processed by that specific function.
|
||||
- `log[FunctionName]Caller` (e.g., `logNappNormCaller`)
|
||||
The exact file path of the script that executed the function, ensuring you always know which script modified your data.
|
||||
- `logDataSource`
|
||||
(Specifically for `nappCombineSpectra`). A cell containing an array of strings with the exact filenames of all raw spectra that were averaged/summed together to create the combined row.
|
||||
|
||||
***
|
||||
|
||||
@@ -567,7 +600,7 @@ Contents of beamtime:
|
||||
nappFitGaussXpsDevelopment - Playground to add Shirley background :-).
|
||||
nappGenerateSpectra - Generate 1D spectra from image spectra.
|
||||
nappPlot - NAPPLOT Plot photoelectron spectra and NEXAFS images from a data table.
|
||||
nappScale - Normalize XPS and NEXAFS spectra.
|
||||
nappNorm - Normalize XPS spectra.
|
||||
``````
|
||||
Additionally, little helper functions can be found in the utils folder:
|
||||
|
||||
|
||||
@@ -1,19 +1,6 @@
|
||||
{
|
||||
"_schemaVersion": "1.0.0",
|
||||
|
||||
"nappScale": {
|
||||
"inputs": [
|
||||
{"name": "DataTable", "kind": "required", "type": ["table"]},
|
||||
{"name": "tableSelection", "kind": "optional", "type": ["logical"]},
|
||||
{"name": "energyStart", "kind": "optional", "type": ["numeric"]},
|
||||
{"name": "energyEnd", "kind": "optional", "type": ["numeric"]},
|
||||
{"name": "tableVariable", "kind": "namevalue", "type": ["choices={'spectrum_counts','spectrum_countsPerSecond','spectrum_countsNorm'}"]},
|
||||
{"name": "regionOld", "kind": "namevalue", "type": ["choices={'O1s','C1s','N1s','Cl2p'}"]},
|
||||
{"name": "regionNew", "kind": "namevalue", "type": ["choices={'O1s','C1s','N1s'}"]},
|
||||
{"name": "peakNumber", "kind": "namevalue", "type": ["numeric"]},
|
||||
{"name": "mode", "kind": "namevalue", "type": ["choices={'intensity','area'}"]}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
"nappPlot": {
|
||||
"inputs": [
|
||||
@@ -63,35 +50,6 @@
|
||||
]
|
||||
},
|
||||
|
||||
"nappDetermineShiftXps": {
|
||||
"inputs": [
|
||||
{"name": "DataTable", "kind": "required", "type": ["table"]},
|
||||
{"name": "eKinStart", "kind": "optional", "type": ["numeric"]},
|
||||
{"name": "eKinEnd", "kind": "optional", "type": ["numeric"]},
|
||||
{"name": "FitParameter", "kind": "namevalue", "type": ["struct"]},
|
||||
{"name": "binEnReference", "kind": "namevalue", "type": ["numeric"]},
|
||||
{"name": "kinEnReference", "kind": "namevalue", "type": ["numeric"]},
|
||||
{"name": "tableSelection", "kind": "namevalue", "type": ["logical"]},
|
||||
{"name": "minPeakWidth", "kind": "namevalue", "type": ["numeric"]},
|
||||
{"name": "minPeakHeight", "kind": "namevalue", "type": ["numeric"]},
|
||||
{"name": "movMeanWindow", "kind": "namevalue", "type": ["numeric"]},
|
||||
{"name": "tableVariable", "kind": "namevalue", "type": ["choices={'spectrum_counts','spectrum_countsPerSecond','spectrum_countsNorm','image','imageRoh'}"]},
|
||||
{"name": "showFigures", "kind": "namevalue", "type": ["choices={'on','off'}"]},
|
||||
{"name": "mode", "kind": "namevalue", "type": ["choices={'gaussFit','findPeak'}"]},
|
||||
{"name": "refPeak", "kind": "namevalue", "type": ["numeric"]}
|
||||
]
|
||||
},
|
||||
|
||||
"nappCopyShift": {
|
||||
"inputs": [
|
||||
{"name": "DataTable", "kind": "required", "type": ["table"]},
|
||||
{"name": "tableSelection", "kind": "optional", "type": ["logical"]},
|
||||
{"name": "regionOld", "kind": "namevalue", "type": ["choices={'O1s','C1s','N1s'}"]},
|
||||
{"name": "regionNew", "kind": "namevalue", "type": ["choices={'O1s','C1s','N1s','Cl2p'}"]},
|
||||
{"name": "energyScale", "kind": "namevalue", "type": ["choices={'kinetic','binding'}"]}
|
||||
]
|
||||
},
|
||||
|
||||
"nappCombineSpectra": {
|
||||
"inputs": [
|
||||
{"name": "DataTable", "kind": "required", "type": ["table"]},
|
||||
|
||||
Reference in new issue
Block a user