use of ffx.potential.bonded.ROLS in project ffx by mjschnie.
the class RosenbluthOBMC method setState.
/**
* Calls through to residue.revertState() but also updates the Torsion
* objects associated with that residue (so they contain appropriate chi
* values).
*/
private void setState(Residue target, ResidueState state) {
target.revertState(state);
ArrayList<ROLS> torsions = target.getTorsionList();
for (ROLS rols : torsions) {
((Torsion) rols).update();
}
}
use of ffx.potential.bonded.ROLS in project ffx by mjschnie.
the class RosenbluthOBMC method getChiZeroTorsion.
private Torsion getChiZeroTorsion(Residue residue) {
AminoAcid3 name = AminoAcid3.valueOf(residue.getName());
ArrayList<ROLS> torsions = residue.getTorsionList();
switch(name) {
case VAL:
{
Atom N = (Atom) residue.getAtomNode("N");
Atom CA = (Atom) residue.getAtomNode("CA");
Atom CB = (Atom) residue.getAtomNode("CB");
Atom CG1 = (Atom) residue.getAtomNode("CG1");
for (ROLS rols : torsions) {
Torsion torsion = (Torsion) rols;
if (torsion.compare(N, CA, CB, CG1)) {
return torsion;
}
}
break;
}
case ILE:
{
Atom N = (Atom) residue.getAtomNode("N");
Atom CA = (Atom) residue.getAtomNode("CA");
Atom CB = (Atom) residue.getAtomNode("CB");
Atom CD1 = (Atom) residue.getAtomNode("CD1");
Atom CG1 = (Atom) residue.getAtomNode("CG1");
for (ROLS rols : torsions) {
Torsion torsion = (Torsion) rols;
if (torsion.compare(N, CA, CB, CG1)) {
return torsion;
}
}
break;
}
case SER:
{
Atom N = (Atom) residue.getAtomNode("N");
Atom CA = (Atom) residue.getAtomNode("CA");
Atom CB = (Atom) residue.getAtomNode("CB");
Atom OG = (Atom) residue.getAtomNode("OG");
Atom HG = (Atom) residue.getAtomNode("HG");
for (ROLS rols : torsions) {
Torsion torsion = (Torsion) rols;
if (torsion.compare(N, CA, CB, OG)) {
return torsion;
}
}
break;
}
case THR:
{
Atom N = (Atom) residue.getAtomNode("N");
Atom CA = (Atom) residue.getAtomNode("CA");
Atom CB = (Atom) residue.getAtomNode("CB");
Atom OG1 = (Atom) residue.getAtomNode("OG1");
Atom HG1 = (Atom) residue.getAtomNode("HG1");
for (ROLS rols : torsions) {
Torsion torsion = (Torsion) rols;
if (torsion.compare(N, CA, CB, OG1)) {
return torsion;
}
}
break;
}
case CYX:
{
Atom N = (Atom) residue.getAtomNode("N");
Atom CA = (Atom) residue.getAtomNode("CA");
Atom CB = (Atom) residue.getAtomNode("CB");
Atom SG = (Atom) residue.getAtomNode("SG");
for (ROLS rols : torsions) {
Torsion torsion = (Torsion) rols;
if (torsion.compare(N, CA, CB, SG)) {
return torsion;
}
}
break;
}
case CYD:
{
Atom N = (Atom) residue.getAtomNode("N");
Atom CA = (Atom) residue.getAtomNode("CA");
Atom CB = (Atom) residue.getAtomNode("CB");
Atom SG = (Atom) residue.getAtomNode("SG");
for (ROLS rols : torsions) {
Torsion torsion = (Torsion) rols;
if (torsion.compare(N, CA, CB, SG)) {
return torsion;
}
}
break;
}
default:
{
// All other residues' chi[0] are defined by N,CA,CB,CG.
Atom N = (Atom) residue.getAtomNode("N");
Atom CA = (Atom) residue.getAtomNode("CA");
Atom CB = (Atom) residue.getAtomNode("CB");
Atom CG = (Atom) residue.getAtomNode("CG");
for (ROLS rols : torsions) {
Torsion torsion = (Torsion) rols;
if (torsion.compare(N, CA, CB, CG)) {
return torsion;
}
}
logger.info("Couldn't find chi[0] for residue " + residue.toString());
return null;
}
}
logger.info("Couldn't find chi[0] for residue " + residue.toString());
return null;
}
use of ffx.potential.bonded.ROLS in project ffx by mjschnie.
the class MainPanel method merge.
/**
* Merge two or more selected FSystem Nodes into one FSystem node. There are
* a few gotchas that need to be fixed
*
* @param nodesToMerge a {@link java.util.ArrayList} object.
*/
public void merge(ArrayList<MSNode> nodesToMerge) {
ArrayList<MSNode> activeNodes = new ArrayList<MSNode>();
for (MSNode node : nodesToMerge) {
if (node != null && !(node instanceof MSRoot)) {
activeNodes.add(node);
}
}
if (activeNodes.size() <= 1) {
return;
}
// Set up a structure to hold the new system
FFXSystem active = hierarchy.getActive();
File file = SystemFilter.version(hierarchy.getActive().getFile());
FFXSystem system = new FFXSystem(file, "Merge Result", active.getProperties());
system.setKeyFile(active.getKeyFile());
system.setKeywords(KeyFilter.open(active.getKeyFile()));
// Fill arrays with the atoms and bonds from the systems to be combined
ArrayList<Atom> mergedAtoms = new ArrayList<Atom>();
ArrayList<Bond> mergedBonds = new ArrayList<Bond>();
ArrayList<FFXSystem> systems = new ArrayList<FFXSystem>();
TransformGroup parentTransformGroup = null;
FFXSystem parentSystem;
Transform3D parentTransform3D = new Transform3D();
Vector3d parentPosition = new Vector3d();
Vector3d atomPosition = new Vector3d();
// TINKER Atom Numbers start at 1
int atomNum = 1;
Vector3d zero = new Vector3d(0.0, 0.0, 0.0);
for (MSNode m : activeNodes) {
parentSystem = (FFXSystem) m.getMSNode(FFXSystem.class);
if (parentSystem == null) {
return;
}
if (!systems.contains(parentSystem)) {
graphicsCanvas.updateSceneWait(parentSystem, false, true, RendererCache.ViewModel.WIREFRAME, false, null);
systems.add(parentSystem);
}
// Move each atom into the global frame by applying the System
// Transform to
// relative atomic position
parentTransformGroup = parentSystem.getOriginToRot();
parentTransformGroup.getTransform(parentTransform3D);
parentTransform3D.get(parentPosition);
parentTransform3D.setTranslation(zero);
// parentTransform3D.setScale(1.0d);
ArrayList<Atom> atoms = m.getAtomList();
ArrayList<ROLS> bonds = m.getBondList();
for (Atom atom : atoms) {
atom.removeFromParent();
atom.setXyzIndex(atomNum++);
mergedAtoms.add(atom);
atom.getV3D(atomPosition);
parentTransform3D.transform(atomPosition);
atomPosition.add(parentPosition);
atom.moveTo(atomPosition);
}
for (ROLS msm : bonds) {
Bond bond = (Bond) msm;
bond.removeFromParent();
mergedBonds.add((Bond) msm);
}
}
for (FFXSystem sys : systems) {
close(sys);
}
MergeFilter mergeFilter = new MergeFilter(system, mergedAtoms, mergedBonds);
UIFileOpener fileOpener = new UIFileOpener(mergeFilter, this);
if (fileOpenerThreads > 0) {
fileOpener.setNThreads(fileOpenerThreads);
}
Thread thread = new Thread(fileOpener);
thread.start();
}
use of ffx.potential.bonded.ROLS in project ffx by mjschnie.
the class ForceFieldEnergy method reInit.
/**
* Need to remove degree of freedom that are lost to prevent heating.
*/
public void reInit() {
int[] molecule;
if (esvTerm) {
atoms = esvSystem.getExtendedAndBackgroundAtoms();
molecule = esvSystem.getExtendedAndBackgroundMolecule();
} else {
atoms = molecularAssembly.getAtomArray();
molecule = molecularAssembly.getMoleculeNumbers();
}
nAtoms = atoms.length;
/* TODO Decide on only growing vs. always modifying xyz.
if (xyz.length < 3 * nAtoms) {
xyz = new double[nAtoms * 3];
} */
xyz = new double[nAtoms * 3];
getCoordinates(xyz);
// Check that atom ordering is correct and count number of Active atoms.
for (int i = 0; i < nAtoms; i++) {
Atom atom = atoms[i];
int index = atom.getXyzIndex() - 1;
if (index != i) {
atom.setXyzIndex(i + 1);
}
}
// Collect, count, pack and sort bonds.
if (bondTerm) {
ArrayList<ROLS> bond = molecularAssembly.getBondList();
nBonds = 0;
for (ROLS r : bond) {
if (keep((Bond) r)) {
nBonds++;
}
}
if (nBonds > bonds.length) {
bonds = new Bond[nBonds];
}
Arrays.fill(bonds, null);
nBonds = 0;
for (ROLS r : bond) {
if (keep((Bond) r)) {
bonds[nBonds++] = (Bond) r;
}
}
Arrays.sort(bonds, 0, nBonds);
if (nBonds > 0 && logger.isLoggable(Level.FINEST)) {
logger.finest(format(" Bonds: %10d", nBonds));
}
} else {
nBonds = 0;
bonds = null;
}
// Collect, count, pack and sort angles.
if (angleTerm) {
ArrayList<ROLS> angle = molecularAssembly.getAngleList();
nAngles = 0;
for (ROLS r : angle) {
if (keep((Angle) r)) {
nAngles++;
}
}
if (nAngles > angles.length) {
angles = new Angle[nAngles];
}
Arrays.fill(angles, null);
nAngles = 0;
for (ROLS r : angle) {
if (keep((Angle) r)) {
angles[nAngles++] = (Angle) r;
}
}
Arrays.sort(angles, 0, nAngles);
if (nAngles > 0 && logger.isLoggable(Level.FINEST)) {
logger.finest(format(" Angles: %10d", nAngles));
}
} else {
nAngles = 0;
angles = null;
}
// Collect, count, pack and sort stretch-bends.
if (stretchBendTerm) {
ArrayList<ROLS> stretchBend = molecularAssembly.getStretchBendList();
nStretchBends = 0;
for (ROLS r : stretchBend) {
if (keep((StretchBend) r)) {
nStretchBends++;
}
}
if (nStretchBends > stretchBends.length) {
stretchBends = new StretchBend[nStretchBends];
}
Arrays.fill(stretchBends, null);
nStretchBends = 0;
for (ROLS r : stretchBend) {
if (keep((StretchBend) r)) {
stretchBends[nStretchBends++] = (StretchBend) r;
}
}
Arrays.sort(stretchBends, 0, nStretchBends);
if (nStretchBends > 0 && logger.isLoggable(Level.FINEST)) {
logger.finest(format(" Stretch-Bends: %10d", nStretchBends));
}
} else {
nStretchBends = 0;
stretchBends = null;
}
// Collect, count, pack and sort Urey-Bradleys.
if (ureyBradleyTerm) {
ArrayList<ROLS> ureyBradley = molecularAssembly.getUreyBradleyList();
nUreyBradleys = 0;
for (ROLS r : ureyBradley) {
if (keep((UreyBradley) r)) {
nUreyBradleys++;
}
}
if (nUreyBradleys > ureyBradleys.length) {
ureyBradleys = new UreyBradley[nUreyBradleys];
}
fill(ureyBradleys, null);
nUreyBradleys = 0;
for (ROLS r : ureyBradley) {
if (keep((UreyBradley) r)) {
ureyBradleys[nUreyBradleys++] = (UreyBradley) r;
}
}
Arrays.sort(ureyBradleys, 0, nUreyBradleys);
if (nUreyBradleys > 0 && logger.isLoggable(Level.FINEST)) {
logger.finest(format(" Urey-Bradleys: %10d", nUreyBradleys));
}
} else {
nUreyBradleys = 0;
ureyBradleys = null;
}
/**
* Set a multiplier on the force constants of bonded terms containing
* hydrogens.
*/
if (rigidHydrogens) {
if (bonds != null) {
for (Bond bond : bonds) {
if (bond.containsHydrogen()) {
bond.setRigidScale(rigidScale);
}
}
}
if (angles != null) {
for (Angle angle : angles) {
if (angle.containsHydrogen()) {
angle.setRigidScale(rigidScale);
}
}
}
if (stretchBends != null) {
for (StretchBend stretchBend : stretchBends) {
if (stretchBend.containsHydrogen()) {
stretchBend.setRigidScale(rigidScale);
}
}
}
if (ureyBradleys != null) {
for (UreyBradley ureyBradley : ureyBradleys) {
if (ureyBradley.containsHydrogen()) {
ureyBradley.setRigidScale(rigidScale);
}
}
}
}
// Collect, count, pack and sort out-of-plane bends.
if (outOfPlaneBendTerm) {
ArrayList<ROLS> outOfPlaneBend = molecularAssembly.getOutOfPlaneBendList();
nOutOfPlaneBends = 0;
for (ROLS r : outOfPlaneBend) {
if (keep((OutOfPlaneBend) r)) {
nOutOfPlaneBends++;
}
}
if (nOutOfPlaneBends > outOfPlaneBends.length) {
outOfPlaneBends = new OutOfPlaneBend[nOutOfPlaneBends];
}
fill(outOfPlaneBends, null);
nOutOfPlaneBends = 0;
for (ROLS r : outOfPlaneBend) {
if (keep((OutOfPlaneBend) r)) {
outOfPlaneBends[nOutOfPlaneBends++] = (OutOfPlaneBend) r;
}
}
Arrays.sort(outOfPlaneBends, 0, nOutOfPlaneBends);
if (nOutOfPlaneBends > 0 && logger.isLoggable(Level.FINEST)) {
logger.finest(format(" Out-of-Plane Bends: %10d", nOutOfPlaneBends));
}
} else {
nOutOfPlaneBends = 0;
outOfPlaneBends = null;
}
// Collect, count, pack and sort torsions.
if (torsionTerm) {
ArrayList<ROLS> torsion = molecularAssembly.getTorsionList();
nTorsions = 0;
for (ROLS r : torsion) {
if (keep((Torsion) r)) {
nTorsions++;
}
}
if (nTorsions >= torsions.length) {
torsions = new Torsion[nTorsions];
}
fill(torsions, null);
nTorsions = 0;
for (ROLS r : torsion) {
if (keep((Torsion) r)) {
torsions[nTorsions++] = (Torsion) r;
}
}
// Arrays.sort(torsions);
if (nTorsions > 0 && logger.isLoggable(Level.FINEST)) {
logger.finest(format(" Torsions: %10d", nTorsions));
}
} else {
nTorsions = 0;
torsions = null;
}
// Collect, count, pack and sort pi-orbital torsions.
if (piOrbitalTorsionTerm) {
ArrayList<ROLS> piOrbitalTorsion = molecularAssembly.getPiOrbitalTorsionList();
nPiOrbitalTorsions = 0;
for (ROLS r : piOrbitalTorsion) {
if (keep((PiOrbitalTorsion) r)) {
nPiOrbitalTorsions++;
}
}
if (nPiOrbitalTorsions >= piOrbitalTorsions.length) {
piOrbitalTorsions = new PiOrbitalTorsion[nPiOrbitalTorsions];
}
fill(piOrbitalTorsions, null);
nPiOrbitalTorsions = 0;
for (ROLS r : piOrbitalTorsion) {
if (keep((PiOrbitalTorsion) r)) {
piOrbitalTorsions[nPiOrbitalTorsions++] = (PiOrbitalTorsion) r;
}
}
if (nPiOrbitalTorsions > 0 && logger.isLoggable(Level.FINEST)) {
logger.finest(format(" Pi-Orbital Torsions: %10d", nPiOrbitalTorsions));
}
} else {
nPiOrbitalTorsions = 0;
piOrbitalTorsions = null;
}
// Collect, count, pack and sort torsion-torsions.
if (torsionTorsionTerm) {
ArrayList<ROLS> torsionTorsion = molecularAssembly.getTorsionTorsionList();
nTorsionTorsions = 0;
for (ROLS r : torsionTorsion) {
if (keep((TorsionTorsion) r)) {
nTorsionTorsions++;
}
}
if (nTorsionTorsions >= torsionTorsions.length) {
torsionTorsions = new TorsionTorsion[nTorsionTorsions];
}
fill(torsionTorsions, null);
nTorsionTorsions = 0;
for (ROLS r : torsionTorsion) {
if (keep((TorsionTorsion) r)) {
torsionTorsions[nTorsionTorsions++] = (TorsionTorsion) r;
}
}
if (nTorsionTorsions > 0 && logger.isLoggable(Level.FINEST)) {
logger.finest(format(" Torsion-Torsions: %10d", nTorsionTorsions));
}
} else {
nTorsionTorsions = 0;
torsionTorsions = null;
}
// Collect, count, pack and sort improper torsions.
if (improperTorsionTerm) {
ArrayList<ROLS> improperTorsion = molecularAssembly.getImproperTorsionList();
nImproperTorsions = 0;
for (ROLS r : improperTorsion) {
if (keep((ImproperTorsion) r)) {
nImproperTorsions++;
}
}
if (nImproperTorsions >= improperTorsions.length) {
improperTorsions = new ImproperTorsion[nImproperTorsions];
}
fill(improperTorsions, null);
nImproperTorsions = 0;
for (ROLS r : improperTorsion) {
if (keep((ImproperTorsion) r)) {
improperTorsions[nImproperTorsions++] = (ImproperTorsion) r;
}
}
if (nImproperTorsions > 0 && logger.isLoggable(Level.FINEST)) {
logger.finest(format(" Improper Torsions: %10d", nImproperTorsions));
}
} else {
nImproperTorsions = 0;
improperTorsions = null;
}
if (vanderWaalsTerm) {
if (esvTerm) {
vanderWaals.setAtoms(esvSystem.getExtendedAtoms(), esvSystem.getExtendedMolecule());
} else {
vanderWaals.setAtoms(atoms, molecule);
}
}
if (multipoleTerm) {
if (esvTerm) {
particleMeshEwald.setAtoms(esvSystem.getExtendedAtoms(), esvSystem.getExtendedMolecule());
} else {
particleMeshEwald.setAtoms(atoms, molecule);
}
}
if (ncsTerm) {
logger.severe(" NCS energy term cannot be used with variable systems sizes.");
}
if (restrainTerm) {
logger.severe(" Restrain energy term cannot be used with variable systems sizes.");
}
if (comTerm) {
logger.severe(" COM restrain energy term cannot be used with variable systems sizes.");
}
bondedRegion = new BondedRegion();
}
use of ffx.potential.bonded.ROLS in project ffx by mjschnie.
the class MolecularAssembly method setView.
/**
* {@inheritDoc}
*/
@Override
public void setView(RendererCache.ViewModel newViewModel, List<BranchGroup> newShapes) {
// Just Detach the whole system branch group
if (newViewModel == RendererCache.ViewModel.DESTROY) {
if (switchGroup != null) {
switchGroup.setWhichChild(Switch.CHILD_NONE);
}
visible = false;
} else if (newViewModel == RendererCache.ViewModel.SHOWVRML) {
switchGroup.setWhichChild(Switch.CHILD_ALL);
} else if (newViewModel == RendererCache.ViewModel.HIDEVRML) {
switchGroup.setWhichChild(0);
} else {
setWireWidth(RendererCache.bondwidth);
if (newViewModel == RendererCache.ViewModel.DETAIL && childNodes.isLive()) {
childNodes.detach();
}
/**
* We'll collect new Scenegraph Shapes in our newShapeNode This is
* to avoid the case where setView is called from the root node and
* all new shapes for every MolecularAssembly would then be put into
* the same ArrayList.
*/
super.setView(newViewModel, myNewShapes);
ArrayList<ROLS> moleculeList = getList(Molecule.class, new ArrayList<>());
for (ROLS m : moleculeList) {
m.setView(newViewModel, myNewShapes);
}
for (MSNode m : molecules.getChildList()) {
m.setView(newViewModel, myNewShapes);
}
for (MSNode m : water.getChildList()) {
m.setView(newViewModel, myNewShapes);
}
for (MSNode m : ions.getChildList()) {
m.setView(newViewModel, myNewShapes);
}
if (newViewModel == RendererCache.ViewModel.INVISIBLE) {
switchGroup.setWhichChild(0);
}
if (newViewModel == RendererCache.ViewModel.DETAIL) {
childNodes.compile();
base.addChild(childNodes);
}
}
}
Aggregations