Pocket-Gen / pdbfixer /html /addHydrogens.html
Zaixi's picture
1
f572e51
<script>
function validateForm() {
if (document.getElementById("addHydrogensCheckbox").checked) {
var ph = document.getElementById("phfield").value
if (!(ph > 0 && ph < 14)) {
alert("pH must be a number between 0 and 14.")
return false
}
}
if (document.getElementById("addWaterCheckbox").checked) {
var custombox = document.getElementById("customBoxRadio").checked
var xsize = document.getElementById("boxxfield").value
var ysize = document.getElementById("boxyfield").value
var zsize = document.getElementById("boxzfield").value
if (custombox && !(xsize > 0 && ysize > 0 && zsize > 0)) {
alert("Box dimensions must be positive numbers.")
return false
}
var geombox = document.getElementById("geometricBoxRadio").checked
var padsize = document.getElementById("geomPadding").value
if (geombox && padsize < 0) {
alert("Box padding cannot be negative.")
return false
}
var strength = document.getElementById("ionicstrengthfield").value
if (!(strength >= 0)) {
alert("Ionic strength must be a nonnegative number.")
return false
}
}
if (document.getElementById("addMembraneCheckbox").checked) {
var padsize = document.getElementById("membranePadding").value
if (padsize < 0) {
alert("Box padding cannot be negative.")
return false
}
var strength = document.getElementById("ionicstrengthfield").value
if (!(strength >= 0)) {
alert("Ionic strength must be a nonnegative number.")
return false
}
}
return true
}
function applyPaddingToWaterBox(padding) {
padding = parseFloat(padding);
if(!padding || padding<0) padding = 0;
if (document.getElementById('cubicPaddingCheckBox').checked){
var maxAxis = Math.max.apply(Math, molxyz);
for (var i = pbcxyz.length; i--;) {
pbcxyz[i].value = Math.ceil((padding+maxAxis)*1000) / 1000;
}
}
else {
for (var i = pbcxyz.length; i--;) {
pbcxyz[i].value = Math.ceil((padding+molxyz[i])*1000) / 1000;
}
}
}
function waterBoxChanged() {
checked = document.getElementById('addWaterCheckbox').checked;
document.getElementById('addMembraneCheckbox').checked = false;
enableControls(document.getElementById('waterInputs'), checked);
enableControls(document.getElementById('ionInputs'), checked);
enableControls(document.getElementById('membraneInputs'), false);
}
function membraneBoxChanged() {
checked = document.getElementById('addMembraneCheckbox').checked;
document.getElementById('addWaterCheckbox').checked = false;
enableControls(document.getElementById('membraneInputs'), checked);
enableControls(document.getElementById('ionInputs'), checked);
enableControls(document.getElementById('waterInputs'), false);
}
</script>
<style>
a.tooltip {
display: inline;
position: relative;
color: #000;
border-bottom: 1px dotted #000;
text-decoration: none;
}
a.tooltip:hover:after {
content: attr(rel);
text-align: center;
font-size: 80%%;
background: #000;
color: #fff;
width: 250px;
bottom: 30px;
left: -125px;
padding: 10px 15px;
position: absolute;
z-index: 100;
/* Effects */
background: rgba(0,0,0,0.75);
border-radius: 5px;
box-shadow: 0 0 25px #333;
}
/* Down arrow */
a.tooltip:hover:before {
border: solid;
border-color: #333 transparent;
border-width: 10px 10px 0 10px;
bottom: 20px;
left: -6px;
content: "";
position: absolute;
z-index: 99;
/* Effects */
border-color: rgba(0,0,0,0.75) transparent;
}
</style>
<form id="mainform" method="post" action="/">
<h1>Add Missing Hydrogens</h1>
Add missing hydrogen atoms?
<p>
<input type="checkbox" id="addHydrogensCheckbox" name="addhydrogens" onchange="document.getElementById('phfield').disabled=!document.getElementById('addHydrogensCheckbox').checked" checked> Add hydrogens appropriate for pH <input type="text" id="phfield" name="ph" value="7.0" size="5">
<h1>Add Water/Membrane</h1>
Add a water box or membrane surrounding the model?
<p>
<input type="checkbox" id="addWaterCheckbox" name="addwater" onchange="waterBoxChanged()"> Add water box
<div id="waterInputs" style="margin-left:50px">
<table style="text-align:right">
<tr>
<td style="text-align:left"><input id="customBoxRadio" type="radio" name="boxType" value="custom" checked>Custom box dimensions (in nm):</td>
<div id="customBoxDimensions">
<td><input type="text" id="boxxfield" name="boxx" size="8"></td>
<td><input type="text" id="boxyfield" name="boxy" size="8"></td>
<td><input type="text" id="boxzfield" name="boxz" size="8"></td>
</div>
</tr>
<tr>
<td style="text-align:left"><input id="geometricBoxRadio" type="radio" name="boxType" value="geometry">Geometry with padding (in nm):</td>
<div id="geometricBoxDimensions">
<td><input type="text" id="geomPadding" name="geomPadding" size="8">
</td>
<td colspan="2">
<select id="geometryDropdown" name="geometryDropdown">
<option value="cube" selected="selected">Cube</option>
<option value="truncatedOctahedron">Truncated octahedron</option>
<option value="rhombicDodecahedron">Rhombic dodecahedron</option>
</select>
<a href="#" rel="The specified padding will be applied on the largest molecular axis, while maintaining selected geometry." class="tooltip">?</a>
</div>
</td>
</tr>
%s
</table>
</div>
<p>
<input type="checkbox" id="addMembraneCheckbox" name="addmembrane" onchange="membraneBoxChanged()"> Add membrane and water
<div id="membraneInputs" style="margin-left:50px">
The membrane will lie in the XY plane and be centered at Z=0. Make sure the protein is properly oriented and positioned.
When possible, it is easiest to use a PDB file from <a href="http://opm.phar.umich.edu/">OPM</a> since they are already properly positioned.
<p>
Lipid type:
<select id="lipidType" name="lipidType">
<option value="POPC" selected="selected">POPC</option>
<option value="POPE">POPE</option>
<option value="DLPC">DLPC</option>
<option value="DLPE">DLPE</option>
<option value="DMPC">DMPC</option>
<option value="DOPC">DOPC</option>
<option value="DPPC">DPPC</option>
</select>
<p>
Minimum padding around protein: <input type="text" id="membranePadding" name="membranePadding" value="1.0" size="5"> (nm)
</div>
<div id="ionInputs">
<p>
Ions will be added to neutralize the model. You can optionally add more ions based on a desired bulk ionic strength.
<p>
<table>
<tr><td style="text-align:right">Ionic strength (molar):</td><td><input type="text" id="ionicstrengthfield" name="ionicstrength" size="8" value="0.0"></td></tr>
<tr><td style="text-align:right">Positive ion:</td><td><select name="positiveion"><option value="Cs">Cs+</option><option value="K">K+</option><option value="Li">Li+</option><option value="Na" selected>Na+</option><option value="Rb">Rb+</option></select></td></tr>
<tr><td style="text-align:right">Negative ion:</td><td><select name="negativeion"><option value="Cl" selected>Cl-</option><option value="Br">Br-</option><option value="F">F-</option><option value="I">I-</option></select></td></tr>
</table>
</div>
<p>
<input type="button" value="Continue" onclick="if (validateForm()) submitWithSpinner()"/>
</form>
<script>
setCurrentStep(6);
enableControls(document.getElementById('waterInputs'), false);
enableControls(document.getElementById('membraneInputs'), false);
enableControls(document.getElementById('ionInputs'), false);
var molxyz = [].slice.call(document.getElementById('boxContainingAllAtoms').getElementsByTagName('td')).splice(1,3).map(function(td){ return parseFloat(td.textContent)});
var hiddenInput = document.createElement("input");
hiddenInput.setAttribute("type", "hidden");
hiddenInput.setAttribute("name", "maxMolecularAxis");
hiddenInput.setAttribute("value", Math.max.apply(Math, molxyz));
document.getElementById("mainform").appendChild(hiddenInput);
</script>
</body>
<html>