Files
gitea-pages/software/CSDataQuick/docs/qml-csdataquick-components-utils.html
T
2025-07-08 08:18:09 +02:00

375 lines
22 KiB
HTML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- utils.cpp -->
<title>Utils QML Type | CSDataQuick Documentation 1.2</title>
<link rel="stylesheet" type="text/css" href="style/online.css" />
<script type="text/javascript">
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date(); a = s.createElement(o),
m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-24645639-4', 'qt.io');
ga('set', 'forceSSL', true);
ga('send', 'pageview');
</script>
</head>
<body>
<div class="header" id="header">
<header id="navbar" class="">
</header>
</div>
<div class="main">
<div class="main-rounded">
<div class="navigationbar">
<ul class="sub-navigation">
<li><a href="../../CSDataQuick.html">Home</a></li>
<li><a href="../docs.html" class="active">Documentation</a></li>
<li><a href="http://github.com/xiaoqiangwang/CSDataQuick/">Code</a></li>
<li><a href="https://github.com/xiaoqiangwang/CSDataQuick/issues/">Bug Reports</a></li>
</ul>
<div id="main_title_bar">
<h1>CSDataQuick Documentation</h1>
<div class="search_bar">
<script>
(function() {
var cx = '001693341472456439948:u9v0snkru3q';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//www.google.com/cse/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:searchbox-only resultsUrl="search-results.html"></gcse:searchbox-only>
</div></div>
<ul>
<li><a href="index.html">CSDataQuick Documentation</a></li>
<li><a href="csdataquick-qmlmodules.html">QML Types</a></li>
<li>Utils QML Type</li>
</ul>
</div>
<div class="content">
<div class="line">
<div class="content mainContent">
<div class="sidebar">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="qml-csdataquick-components-utils.html#methods">Methods</a></li>
<li class="level1"><a href="qml-csdataquick-components-utils.html#details">Detailed Description</a></li>
</ul>
</div>
<div class="sidebar-content" id="sidebar-content"></div></div>
<div class="context">
<h1 class="title">Utils QML Type</h1>
<span class="subtitle"></span>
<!-- $$$Utils-brief -->
<p>Helper functions. <a href="qml-csdataquick-components-utils.html#details">More...</a></p>
<!-- @@@Utils -->
<div class="table"><table class="alignedsummary">
<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import CSDataQuick.Components 1.0</td></tr></table></div><ul>
<li><a href="qml-csdataquick-components-utils-members.html">List of all members, including inherited members</a></li>
</ul>
<a name="methods"></a>
<h2 id="methods">Methods</h2>
<ul>
<li class="fn">double <b><b><a href="qml-csdataquick-components-utils.html#calculate-method">calculate</a></b></b>(<i>expression</i>, <i>input</i>)</li>
<li class="fn">string <b><b><a href="qml-csdataquick-components-utils.html#convert-method">convert</a></b></b>(TextFormat <i>format</i>, real <i>value</i>, int <i>precision</i>)</li>
<li class="fn"><b><b><a href="qml-csdataquick-components-utils.html#copyToClipboard-method">copyToClipboard</a></b></b>(<i>text</i>)</li>
<li class="fn">Window <b><b><a href="qml-csdataquick-components-utils.html#createComponentByFile-method">createComponentByFile</a></b></b>(<i>display</i>, <i>filePath</i>, <i>macro</i>)</li>
<li class="fn">Window <b><b><a href="qml-csdataquick-components-utils.html#createDisplay-method">createDisplay</a></b></b>(<i>qml</i>, <i>display</i>, <i>filePath</i>)</li>
<li class="fn">Window <b><b><a href="qml-csdataquick-components-utils.html#createDisplayByFile-method">createDisplayByFile</a></b></b>(<i>display</i>, <i>filePath</i>, <i>macro</i>)</li>
<li class="fn">string <b><b><a href="qml-csdataquick-components-utils.html#currentDateTime-method">currentDateTime</a></b></b>()</li>
<li class="fn">bool <b><b><a href="qml-csdataquick-components-utils.html#execute-method">execute</a></b></b>(<i>program</i>)</li>
<li class="fn">string <b><b><a href="qml-csdataquick-components-utils.html#format-method">format</a></b></b>(<i>format</i>, <i>number</i>)</li>
<li class="fn">string <b><b><a href="qml-csdataquick-components-utils.html#formatString-method">formatString</a></b></b>(<i>data</i>, <i>format</i>, <i>precision</i>)</li>
<li class="fn">var <b><b><a href="qml-csdataquick-components-utils.html#getProperty-method">getProperty</a></b></b>(<i>object</i>, <i>name</i>)</li>
<li class="fn">url <b><b><a href="qml-csdataquick-components-utils.html#isDisplayFile-method">isDisplayFile</a></b></b>(<i>fileName</i>)</li>
<li class="fn">point <b><b><a href="qml-csdataquick-components-utils.html#mapToGlobal-method">mapToGlobal</a></b></b>(<i>item</i>, <i>point</i>)</li>
<li class="fn">string <b><b><a href="qml-csdataquick-components-utils.html#openUrl-method">openUrl</a></b></b>(<i>url</i>)</li>
<li class="fn">Window <b><b><a href="qml-csdataquick-components-utils.html#parentWindow-method">parentWindow</a></b></b>(<i>item</i>)</li>
<li class="fn">double <b><b><a href="qml-csdataquick-components-utils.html#parse-method">parse</a></b></b>(int <i>format</i>, QString <i>textValue</i>)</li>
<li class="fn">list&lt;object&gt; <b><b><a href="qml-csdataquick-components-utils.html#parseExecList-method">parseExecList</a></b></b>()</li>
<li class="fn">object <b><b><a href="qml-csdataquick-components-utils.html#parseX11Geometry-method">parseX11Geometry</a></b></b>(<i>geometry</i>)</li>
<li class="fn">int <b><b><a href="qml-csdataquick-components-utils.html#qtVersion-method">qtVersion</a></b></b>()</li>
<li class="fn"><b><b><a href="qml-csdataquick-components-utils.html#resizeChildItems-method">resizeChildItems</a></b></b>(<i>parent</i>, <i>rw</i>, <i>rh</i>)</li>
<li class="fn">url <b><b><a href="qml-csdataquick-components-utils.html#searchDisplayFile-method">searchDisplayFile</a></b></b>(<i>fileName</i>, <i>filePath</i>)</li>
<li class="fn"><b><b><a href="qml-csdataquick-components-utils.html#vectorGet-method">vectorGet</a></b></b>(<i>vector</i>, <i>array</i>, <i>index</i>, <i>count</i>)</li>
<li class="fn"><b><b><a href="qml-csdataquick-components-utils.html#vectorSet-method">vectorSet</a></b></b>(<i>vector</i>, <i>value</i>, <i>index</i>)</li>
</ul>
<!-- $$$Utils-description -->
<a name="details"></a>
<h2 id="details">Detailed Description</h2>
<p>This is a group of helper functions, which are called by QML components.</p>
<!-- @@@Utils -->
<h2>Method Documentation</h2>
<!-- $$$calculate -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="calculate-method">
<td class="tblQmlFuncNode"><p>
<a name="calculate-method"></a><span class="type">double</span> <span class="name">calculate</span>(<i>expression</i>, <i>input</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Evalute an <i>expression</i> based on given <i>input</i> variables. This calls <code>postfix</code> and <code>calcPerform</code> functions from EPICS base.</p>
</div></div><!-- @@@calculate -->
<br/>
<!-- $$$convert -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="convert-method">
<td class="tblQmlFuncNode"><p>
<a name="convert-method"></a><span class="type">string</span> <span class="name">convert</span>(<span class="type"><a href="qml-csdataquick-components-textformat.html">TextFormat</a></span> <i>format</i>, <span class="type">real</span> <i>value</i>, <span class="type">int</span> <i>precision</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Convert a number <i>value</i> with given <i>format</i>. This routine calls cvsFast functions from EPICS base and also functions from MEDM for certain special formats.</p>
</div></div><!-- @@@convert -->
<br/>
<!-- $$$copyToClipboard -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="copyToClipboard-method">
<td class="tblQmlFuncNode"><p>
<a name="copyToClipboard-method"></a><span class="name">copyToClipboard</span>(<i>text</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Copy the <i>text</i> to the global clipboard.</p>
</div></div><!-- @@@copyToClipboard -->
<br/>
<!-- $$$createComponentByFile -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="createComponentByFile-method">
<td class="tblQmlFuncNode"><p>
<a name="createComponentByFile-method"></a><span class="type"><a href="http://doc.qt.io/qt-5/qml-qtquick-window-window.html">Window</a></span> <span class="name">createComponentByFile</span>(<i>display</i>, <i>filePath</i>, <i>macro</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Create a qml component from a file with given <i>filePath</i> with <i>macro</i> expansion.</p>
<p>It calls parser library to create the qml source, and then call <a href="http://doc.qt.io/qt-5/qqmlcomponent.html">QQmlComponent</a> to create an instance. The <a href="http://doc.qt.io/qt-5/qqmlengine.html">QQmlEngine</a> used is which <i>display</i> was created in.</p>
</div></div><!-- @@@createComponentByFile -->
<br/>
<!-- $$$createDisplay -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="createDisplay-method">
<td class="tblQmlFuncNode"><p>
<a name="createDisplay-method"></a><span class="type"><a href="http://doc.qt.io/qt-5/qml-qtquick-window-window.html">Window</a></span> <span class="name">createDisplay</span>(<i>qml</i>, <i>display</i>, <i>filePath</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Create a top level window based on <i>qml</i> source, represented by <i>filePath</i>. The <a href="http://doc.qt.io/qt-5/qqmlengine.html">QQmlEngine</a> used is which <i>display</i> was created in.</p>
</div></div><!-- @@@createDisplay -->
<br/>
<!-- $$$createDisplayByFile -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="createDisplayByFile-method">
<td class="tblQmlFuncNode"><p>
<a name="createDisplayByFile-method"></a><span class="type"><a href="http://doc.qt.io/qt-5/qml-qtquick-window-window.html">Window</a></span> <span class="name">createDisplayByFile</span>(<i>display</i>, <i>filePath</i>, <i>macro</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Create a top level window from a file with given <i>filePath</i> with <i>macro</i> expansion. The file can be either ADL or QML.</p>
<p>It calls parser library to create the qml source, and then calls <a href="qml-csdataquick-components-utils.html#createDisplay-method">Utils::createDisplay</a> to actually create the display window. The <a href="http://doc.qt.io/qt-5/qqmlengine.html">QQmlEngine</a> used is which <i>display</i> was created in.</p>
</div></div><!-- @@@createDisplayByFile -->
<br/>
<!-- $$$currentDateTime -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="currentDateTime-method">
<td class="tblQmlFuncNode"><p>
<a name="currentDateTime-method"></a><span class="type">string</span> <span class="name">currentDateTime</span>()</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Return the current time in the form of &quot;yyyy-MM-dd HH:mm:ss&quot;.</p>
</div></div><!-- @@@currentDateTime -->
<br/>
<!-- $$$execute -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="execute-method">
<td class="tblQmlFuncNode"><p>
<a name="execute-method"></a><span class="type">bool</span> <span class="name">execute</span>(<i>program</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Execute a program. If <i>program</i> ends with &quot;&amp;&quot;, the new process will be detached. Otherwise it will wait for the new process to finish and return the exit code.</p>
<p><b>See also </b><a href="http://doc.qt.io/qt-5/qprocess.html#startDetached-1">QProcess::startDetached()</a> and <a href="http://doc.qt.io/qt-5/qprocess.html#execute-1">QProcess::execute()</a>.</p>
</div></div><!-- @@@execute -->
<br/>
<!-- $$$format -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="format-method">
<td class="tblQmlFuncNode"><p>
<a name="format-method"></a><span class="type">string</span> <span class="name">format</span>(<i>format</i>, <i>number</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Format a number with given format,</p>
<p><b>See also </b><a href="http://doc.qt.io/qt-5/qstring.html#asprintf">QString::asprintf()</a>.</p>
</div></div><!-- @@@format -->
<br/>
<!-- $$$formatString -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="formatString-method">
<td class="tblQmlFuncNode"><p>
<a name="formatString-method"></a><span class="type">string</span> <span class="name">formatString</span>(<i>data</i>, <i>format</i>, <i>precision</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Convert control system <i>data</i> according to <i>format</i> and <i>precision</i>.</p>
</div></div><!-- @@@formatString -->
<br/>
<!-- $$$getProperty -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="getProperty-method">
<td class="tblQmlFuncNode"><p>
<a name="getProperty-method"></a><span class="type"><a href="http://doc.qt.io/qt-5/qml-var.html">var</a></span> <span class="name">getProperty</span>(<i>object</i>, <i>name</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Returns the value of the <i>object</i>'s <i>name</i> property.</p>
</div></div><!-- @@@getProperty -->
<br/>
<!-- $$$isDisplayFile -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="isDisplayFile-method">
<td class="tblQmlFuncNode"><p>
<a name="isDisplayFile-method"></a><span class="type"><a href="http://doc.qt.io/qt-5/qml-url.html">url</a></span> <span class="name">isDisplayFile</span>(<i>fileName</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Check wether <i>fileName</i> is a supported display file.</p>
</div></div><!-- @@@isDisplayFile -->
<br/>
<!-- $$$mapToGlobal -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="mapToGlobal-method">
<td class="tblQmlFuncNode"><p>
<a name="mapToGlobal-method"></a><span class="type">point</span> <span class="name">mapToGlobal</span>(<i>item</i>, <i>point</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Maps the given <i>point</i> in this item's coordinate system to the equivalent point within global screen coordinate system, and returns the mapped coordinate.</p>
<p>This is an equivalent implementation of <a href="http://doc.qt.io/qt-5/qquickitem.html#mapToGlobal">QQuickItem::mapToGlobal</a> that first appeared in Qt 5.7&#x2e;</p>
</div></div><!-- @@@mapToGlobal -->
<br/>
<!-- $$$openUrl -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="openUrl-method">
<td class="tblQmlFuncNode"><p>
<a name="openUrl-method"></a><span class="type">string</span> <span class="name">openUrl</span>(<i>url</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Open the given <i>url</i>,</p>
<p><b>See also </b><a href="http://doc.qt.io/qt-5/qdesktopservices.html#openUrl">QDesktopServices::openUrl()</a>.</p>
</div></div><!-- @@@openUrl -->
<br/>
<!-- $$$parentWindow -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="parentWindow-method">
<td class="tblQmlFuncNode"><p>
<a name="parentWindow-method"></a><span class="type"><a href="http://doc.qt.io/qt-5/qml-qtquick-window-window.html">Window</a></span> <span class="name">parentWindow</span>(<i>item</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Return the parent window for <i>item</i>.</p>
</div></div><!-- @@@parentWindow -->
<br/>
<!-- $$$parse -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="parse-method">
<td class="tblQmlFuncNode"><p>
<a name="parse-method"></a><span class="type">double</span> <span class="name">parse</span>(<span class="type">int</span> <i>format</i>, <span class="type">QString</span> <i>textValue</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Parse a numeric value in <i>format</i> from <i>textValue</i>. This is the opposite of <a href="qml-csdataquick-components-utils.html#convert-method">Utils::convert</a>.</p>
</div></div><!-- @@@parse -->
<br/>
<!-- $$$parseExecList -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="parseExecList-method">
<td class="tblQmlFuncNode"><p>
<a name="parseExecList-method"></a><span class="type">list</span>&lt;<span class="type">object</span>&gt; <span class="name">parseExecList</span>()</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Return the command list defined by <i>MEDM_EXEC_LIST</i> environment variable. Each command object contains the following property,</p>
<ul>
<li>label - menu text</li>
<li>command - system command</li>
</ul>
</div></div><!-- @@@parseExecList -->
<br/>
<!-- $$$parseX11Geometry -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="parseX11Geometry-method">
<td class="tblQmlFuncNode"><p>
<a name="parseX11Geometry-method"></a><span class="type">object</span> <span class="name">parseX11Geometry</span>(<i>geometry</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Parse a token of a X11 geometry specification, e.g&#x2e; &quot;200x100+10-20&quot;. The returned map contains the following fields,</p>
<ul>
<li>xOffset - x offset</li>
<li>yOffset - y offset</li>
<li>corner - the corner from where the offset counts, see <a href="http://doc.qt.io/qt-5/qt.html#Corner-enum">Qt::Corner</a>.</li>
<li>width - window width</li>
<li>height - window height</li>
</ul>
</div></div><!-- @@@parseX11Geometry -->
<br/>
<!-- $$$qtVersion -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="qtVersion-method">
<td class="tblQmlFuncNode"><p>
<a name="qtVersion-method"></a><span class="type">int</span> <span class="name">qtVersion</span>()</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Return the <a href="http://doc.qt.io/qt-5/qtglobal.html#QT_VERSION">QT_VERSION</a> macro.</p>
</div></div><!-- @@@qtVersion -->
<br/>
<!-- $$$resizeChildItems -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="resizeChildItems-method">
<td class="tblQmlFuncNode"><p>
<a name="resizeChildItems-method"></a><span class="name">resizeChildItems</span>(<i>parent</i>, <i>rw</i>, <i>rh</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Resize all child items from <i>parent</i> by <i>rw</i> horizontally and <i>rh</i> vertically, and move their top left position as well.</p>
</div></div><!-- @@@resizeChildItems -->
<br/>
<!-- $$$searchDisplayFile -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="searchDisplayFile-method">
<td class="tblQmlFuncNode"><p>
<a name="searchDisplayFile-method"></a><span class="type"><a href="http://doc.qt.io/qt-5/qml-url.html">url</a></span> <span class="name">searchDisplayFile</span>(<i>fileName</i>, <i>filePath</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Search a display file with given <i>fileName</i> from the current directory, the <i>filePath</i> and environment variables specific to the display file type</p>
<ul>
<li>EPICS_DISPLAY_PATH (.adl)</li>
<li>EDMDATAFILES (.edl)</li>
<li>CAQTDM_DISPLAY_PATH (.ui)</li>
<li>QML_DISPLAY_PATH (.qml)</li>
</ul>
</div></div><!-- @@@searchDisplayFile -->
<br/>
<!-- $$$vectorGet -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="vectorGet-method">
<td class="tblQmlFuncNode"><p>
<a name="vectorGet-method"></a><span class="name">vectorGet</span>(<i>vector</i>, <i>array</i>, <i>index</i>, <i>count</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Get the subarray from a <i>vector</i> variant into <i>array</i>, starting at position <i>index</i> (default 0). If <i>count</i> is -1 (the default), all elements after <i>index</i> are included.</p>
<p><b>See also </b><a href="http://doc.qt.io/qt-5/qvector.html#mid">QVector::mid</a>.</p>
</div></div><!-- @@@vectorGet -->
<br/>
<!-- $$$vectorSet -->
<div class="qmlitem"><div class="qmlproto">
<div class="table"><table class="qmlname">
<tr valign="top" class="odd" id="vectorSet-method">
<td class="tblQmlFuncNode"><p>
<a name="vectorSet-method"></a><span class="name">vectorSet</span>(<i>vector</i>, <i>value</i>, <i>index</i>)</p></td></tr>
</table></div>
</div><div class="qmldoc"><p>Set the <i>index</i> element from <i>vector</i> variant to <i>value</i> and return the modified copy.</p>
</div></div><!-- @@@vectorSet -->
<br/>
</div>
</div>
</div>
</div>
</div>
<div class="footer">Copyright (C) 2012-2021 Xiaoqiang Wang, Paul Scherrer Institute.</div>
</body>
</html>