Files
TRIMSP/TrimSP.html

267 lines
9.5 KiB
HTML

<!DOCTYPE html>
<html class="mcss">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<link rel="stylesheet" href="ZGUI.css">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<script src="TrimSPlib.js"></script>
<script src="TrimSPelec.js"></script>
<script src="myplots.js"></script>
<script type="text/javascript">
const ipcRenderer = require('electron').ipcRenderer;
const fs = require('fs');
const exec = require('child_process').execSync;
</script>
<title>Trim.SP</title>
</head>
<body onresize="resizePl()" onload="adjust_table();adjust_scans();">
<table style="width: 100%;">
<tr><td>
<div class="col-full">
<div class="tab">
<button class="tablinks" onclick="openTab(event,'Layers')" id="btnLayers">Layers</button>
<button class="tablinks" onclick="openTab(event,'Scans')" id="btnScans">Scans</button>
<button class="tablinks" onclick="openTab(event,'Plots')" id="btnPlots">Plots</button>
<button class="tablinks" onclick="openTab(event,'Other')" id="btnOther">Other Params</button>
</div>
<div id="Layers" class="tabcontent">
<table style="width: 100%;">
<tr>
<td style="vertical-align: top;">
<table cellpadding="5">
<tr>
<td><label>File name prefix:</label></td>
<td><input name="fileNamePrefix" id="fileNamePrefix" type="text" style="width:70%" value="SrTiO3"/></td>
</tr>
<tr>
<td><label>Save folder:</label></td>
<td>
<input type="text" style="width:70%" id="workPath" name="workPath" value="/tmp/test" readonly/>
<input type="button" value="Browse"
id="browseFolde" onclick="ipcRenderer.send('browseFolder');">
</td>
</tr>
<td><label>Number of Layers:</label></td>
<td><input name="numLayer" id="numLayer" type="number" size="3" step="1" min="1" max="100" value="1" onchange="adjust_table()"></td>
</tr>
<tr><td colspan="2">
<table id="LTable" border="2" cellpadding="10">
<tr><td><b>Layer #</b></td><td><b>Composition</b></td><td><b>Density [g/cm<sup>3</sup>]</b></td><td><b>Thickness [A]</b></td></tr>
</table>
</td></tr>
</table>
</td>
<td style="vertical-align: top;">
<table cellpadding="5">
<tr><td collspan="2"><b>Projectile parameters</b></td></tr>
<tr><td>Projectile</td>
<td><select name="ProjType" id="ProjType" onchange="ProjSmartDefaults()" onload="ProjSmartDefaults()">
<option selected="selected" value="Muon">Muon</option>
<option value="Li8">Li8</option>
<option value="B12">B12</option>
<option value="H">H</option>
</select>
</td>
</tr>
<tr><td>Number of projectiles</td>
<td><input name="numberProj" id="numberProj" type="text" size="7" value="1000" onchange="//ProjNumberLimit()"></td>
</tr>
<tr><td>Starting depth [A]</td><td><input name="z0" id="z0" type="text" size="7" value="0"></td></tr>
<tr><td>Depth increment [A]</td><td><input name="dz" id="dz" type="text" size="7" value="20"></td></tr>
<tr><td>Energy [eV]</td><td><input name="valEnergy" id="valEnergy" type="text" size="7" value="2000"></td></tr>
<tr><td>Energy sigma [eV]</td><td><input name="sigEnergy" id="sigEnergy" type="text" size="7" value="450"></td></tr>
<tr><td>Angel [deg]</td><td><input name="valAngle" id="valAngle" type="text" size="7" value="0"></td></tr>
<tr><td>Angle sigma [deg]</td><td><input name="sigAngle" id="sigAngle" type="text" size="7" value="15"></td></tr>
<tr><td>Random seed</td><td><input name="ranSeed" id="ranSeed" type="text" size="7" value="78741"></td></tr>
<tr><td><button onclick="document.getElementById('btnPlots').click();tester();">Start</button></td><td></td></tr>
</table>
</td>
</tr>
</table>
</div>
<div id="Scans" class="tabcontent">
<input type="checkbox" name="scanSeq" id="scanSeq" onChange="adjust_scans();"> Enable scan on
<select name="scanType" id="scanType" onchange="adjust_scans();">
<option value="scanLoop">Loop</option>
<option value="scanVals">Set of Values</option>
</select>
<div id="ScansLine" style="visibility: hidden;">
<br>Set of Values: <input name="scanList" id="scanList" type="text" value="1000">
corresponding depth increment <input name="scanListdz" id="scanListdz" type="text" value="">
</div>
<table id="ScansTable" style="width: 100%;visibility: hidden;">
<tr>
<td colspan="3">Scan parameter
<select name="comboScan" id="comboScan" onchange="">
<option value="EScan">Energy</option>
<option value="SigEScan">Energy Sigma</option>
<option value="AngleScan">Angle</option>
<option value="SigAngleScan">Angle Sigma</option>
<option value="NProjScan">Number of Projectiles</option>
<option value="dScan">Thickness of layer1</option>
</select>
</td>
</tr>
<tr>
<td>
<!input type="radio" name="ScanType" value="Loop" checked onChange="">
<!input type="radio" name="ScanType" value="ScanList" onChange="">
From: <input name="scanFrom" id="scanFrom" type="text" value="1000">
</td>
<td>
Step: <input name="scanStep" id="scanStep" type="text" value="2000">
</td>
<td>
To: <input name="scanTo" id="scanTo" type="text" value="14000">
</td>
</tr>
</table>
</div>
<div id="Plots" class="tabcontent">
<table style="width: 100%;">
<tr>
<td align="center"><div id="plotRge"><!-- Plotly chart will be drawn inside this DIV --></div></td>
<td align="center"><div id="plotFrac"><!-- Plotly chart will be drawn inside this DIV --></div></td>
</tr>
</table>
</div>
<div id="Other" class="tabcontent">
<table cellpadding="5">
<tr>
<td>EF</td>
<td>
<input name="parEF" id="parEF" type="number" size="7" step="0.1" value="0.5">
</td>
<td>KK0</td>
<td>
<input name="parKK0" id="parKK0" type="number" step="1" min="0" max="4" value="2">
</td>
</tr>
<tr>
<td>ESB</td>
<td>
<input name="parESB" id="parESB" type="number" size="7" step="0.1" value="0.0">
</td>
<td>KK0R</td>
<td>
<input name="parKK0R" id="parKK0R" type="number" step="1" min="0" max="4" value="2">
</td>
</tr>
<tr>
<td>SHEATH</td>
<td>
<input name="parSHEATH" id="parSHEATH" type="number" size="7" step="0.1" value="0.0">
</td>
<td>KDEE1</td>
<td>
<input name="parKDEE1" id="parKDEE1" type="number" step="1" min="1" max="5" value="4">
</td>
</tr>
<tr>
<td>ERC</td>
<td>
<input name="parERC" id="parERC" type="number" size="7" step="0.1" value="0.0">
</td>
<td>KDEE2</td>
<td>
<input name="parKDEE2" id="parKDEE2" type="number" step="1" min="1" max="3" value="3">
</td>
</tr>
<tr>
<td>RD</td>
<td>
<input name="parRD" id="parRD" type="number" size="7" step="0.1" value="50.0">
</td>
<td>IPOT</td>
<td>
<input name="parIPOT" id="parIPOT" type="number" step="1" min="1" max="3" value="2">
</td>
</tr>
<tr>
<td>CA</td>
<td>
<input name="parCA" id="parCA" type="number" size="7" step="0.1" value="1.0">
</td>
<td>IPOTR</td>
<td>
<input name="parIPOTR" id="parIPOTR" type="number" step="1" min="0" max="3" value="1">
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>IRL</td>
<td>
<input name="parIRL" id="parIRL" type="number" step="1" min="0" max="2" value="0">
</td>
</tr>
</table>
</div>
</div>
</td></tr>
<!tr>
<!td>
<!progress id="myBar" max=100 min=0><!/progress>
<!/td>
<!/tr>
</table>
</body>
<script>
// Catch calls for open file
ipcRenderer.on('openFile', function(event, filename) {
console.log('Open file '+filename);
fs.readFile(filename.toString(), function read(err, data) {
if (err) {
throw err;
}
setValues(data);
});
});
let foldername = document.getElementById("workPath").value;
// If empty or undefined fill with default
if (foldername == '' || foldername == undefined ) {foldername ="/tmp/test";}
// Catch calls for selectfolder
ipcRenderer.on('selectFolder', function(event, foldername) {
document.getElementById("workPath").value = foldername;
});
// Catch calls for save as
ipcRenderer.on('saveFile', function(event, filename) {
// If filename is empty use default value
if (filename == '') {filename='TrimSP.cfg';}
// Get values from all fields and prepare config file
let trimSPcfg=prep_cfg(0);
// Save file to filename
console.log('Save file to '+filename);
try { fs.writeFileSync(filename, trimSPcfg, 'utf-8'); }
catch(e) { alert('Failed to save the file !'); }
});
// Catch calls for plotProf
ipcRenderer.on('plotProf', function(event, filename) {
console.log("filename="+filename);
plotProfiles(filename);
});
// Catch calls for plotFrac
ipcRenderer.on('plotFrac', function(event, filename) {
console.log("filename="+filename);
plotFractions(filename);
});
// Catch calls for plotMean
ipcRenderer.on('plotMean', function(event, filename) {
console.log("filename="+filename);
plotMean(filename);
});
// Catch clicks for Browse button
let browseBtn = document.getElementById('browseFolde');
ipcRenderer.on('browseFolder', function(event, foldername) {
document.getElementById("workPath").value = foldername;
console.log("foldername="+foldername);
});
// Get the element with id="defaultOpen" and click on it
document.getElementById("btnLayers").click();
</script>
</html>