use of ffx.potential.utils.PotentialsUtils in project ffx by mjschnie.
the class TitrationUtils method openFullyProtonated.
public static MolecularAssembly openFullyProtonated(File structure) {
String name = format("%s-prot", FilenameUtils.removeExtension(structure.getName()));
MolecularAssembly mola = new MolecularAssembly(name);
mola.setFile(structure);
List<Mutation> mutations = new ArrayList<>();
List<Residue> residues = mola.getResidueList();
for (Residue res : residues) {
char chain = res.getChainID();
int resID = res.getResidueNumber();
Titration titration = Titration.lookup(res);
if (res.getAminoAcid3() != titration.protForm) {
String protName = titration.protForm.name();
mutations.add(new PDBFilter.Mutation(chain, resID, protName));
}
}
PotentialsUtils utils = new PotentialsUtils();
return utils.openWithMutations(structure, mutations);
}
use of ffx.potential.utils.PotentialsUtils in project ffx by mjschnie.
the class RotamerOptimizationTest method load.
public void load() {
/**
* Load the test system.
*/
ClassLoader cl = this.getClass().getClassLoader();
structure = new File(cl.getResource(filename).getPath());
restartFile = new File(cl.getResource(restartName).getPath());
PotentialsUtils potentialUtils = new PotentialsUtils();
molecularAssembly = potentialUtils.openQuietly(structure.getAbsolutePath());
forceFieldEnergy = molecularAssembly.getPotentialEnergy();
}
use of ffx.potential.utils.PotentialsUtils in project ffx by mjschnie.
the class RefinementEnergy method energyAndGradient.
/**
* {@inheritDoc}
*
* Implementation of the {@link Potential} interface for the
* RefinementEnergy.
*/
@Override
public double energyAndGradient(double[] x, double[] g) {
double weight = data.getWeight();
double e = 0.0;
fill(g, 0.0);
if (thermostat != null) {
kTScale = Thermostat.convert / (thermostat.getTargetTemperature() * Thermostat.kB);
}
if (optimizationScaling != null) {
int len = x.length;
for (int i = 0; i < len; i++) {
x[i] /= optimizationScaling[i];
}
}
int assemblysize = molecularAssemblies.length;
switch(refinementMode) {
case COORDINATES:
// Compute the chemical energy and gradient.
for (int i = 0; i < assemblysize; i++) {
try {
ForceFieldEnergy fe = molecularAssemblies[i].getPotentialEnergy();
getAssemblyi(i, x, xChemical[i]);
double curE = fe.energyAndGradient(xChemical[i], gChemical[i]);
e += (curE - e) / (i + 1);
setAssemblyi(i, g, gChemical[i]);
} catch (EnergyException ex) {
ex.printStackTrace();
if (printOnFailure) {
String timeString = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd-HH_mm_ss"));
String filename = String.format("%s-ERROR-%s.pdb", FilenameUtils.removeExtension(molecularAssemblies[i].getFile().getName()), timeString);
PotentialsFunctions ef = new PotentialsUtils();
filename = ef.versionFile(filename);
logger.info(String.format(" Writing on-error snapshot to file %s", filename));
ef.saveAsPDB(molecularAssemblies[i], new File(filename));
}
if (ex.doCauseSevere()) {
ex.printStackTrace();
logger.log(Level.SEVERE, " Error in calculating energies or gradients", ex);
} else {
ex.printStackTrace();
// Rethrow exception
throw ex;
}
// Should ordinarily be unreachable.
return 0;
}
}
double chemE = e;
e = chemE * kTScale;
// normalize gradients for multiple-counted atoms
if (assemblysize > 1) {
for (int i = 0; i < nXYZ; i++) {
g[i] /= assemblysize;
}
}
for (int i = 0; i < nXYZ; i++) {
g[i] *= kTScale;
}
// Compute the X-ray target energy and gradient.
if (gXray == null || gXray.length != nXYZ) {
gXray = new double[nXYZ];
}
double xE = dataEnergy.energyAndGradient(x, gXray);
// System.out.println("Xray E: " + xE + " scaled Xray E: " + weight * xE);
e += weight * xE;
// Add the chemical and X-ray gradients.
for (int i = 0; i < nXYZ; i++) {
g[i] += weight * gXray[i];
}
break;
case BFACTORS:
case OCCUPANCIES:
case BFACTORS_AND_OCCUPANCIES:
// Compute the X-ray target energy and gradient.
e = dataEnergy.energyAndGradient(x, g);
break;
case COORDINATES_AND_BFACTORS:
case COORDINATES_AND_OCCUPANCIES:
case COORDINATES_AND_BFACTORS_AND_OCCUPANCIES:
// Compute the chemical energy and gradient.
for (int i = 0; i < assemblysize; i++) {
try {
ForceFieldEnergy fe = molecularAssemblies[i].getPotentialEnergy();
getAssemblyi(i, x, xChemical[i]);
double curE = fe.energyAndGradient(xChemical[i], gChemical[i]);
e += (curE - e) / (i + 1);
setAssemblyi(i, g, gChemical[i]);
} catch (EnergyException ex) {
ex.printStackTrace();
if (printOnFailure) {
String timeString = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd-HH_mm_ss"));
String filename = String.format("%s-ERROR-%s.pdb", FilenameUtils.removeExtension(molecularAssemblies[i].getFile().getName()), timeString);
PotentialsFunctions ef = new PotentialsUtils();
filename = ef.versionFile(filename);
logger.info(String.format(" Writing on-error snapshot to file %s", filename));
ef.saveAsPDB(molecularAssemblies[i], new File(filename));
}
if (ex.doCauseSevere()) {
ex.printStackTrace();
logger.log(Level.SEVERE, " Error in calculating energies or gradients", ex);
} else {
ex.printStackTrace();
// Rethrow exception
throw ex;
}
// Should ordinarily be unreachable.
return 0;
}
}
// normalize gradients for multiple-counted atoms
if (assemblysize > 1) {
for (int i = 0; i < nXYZ; i++) {
g[i] /= assemblysize;
}
}
// Compute the X-ray target energy and gradient.
if (gXray == null || gXray.length != n) {
gXray = new double[n];
}
e += weight * dataEnergy.energyAndGradient(x, gXray);
// Add the chemical and X-ray gradients.
for (int i = 0; i < nXYZ; i++) {
g[i] += weight * gXray[i];
}
// bfactors, occ
if (n > nXYZ) {
for (int i = nXYZ; i < n; i++) {
g[i] = weight * gXray[i];
}
}
break;
default:
String message = "Unknown refinement mode.";
logger.log(Level.SEVERE, message);
}
if (optimizationScaling != null) {
int len = x.length;
for (int i = 0; i < len; i++) {
x[i] *= optimizationScaling[i];
g[i] /= optimizationScaling[i];
}
}
totalEnergy = e;
return e;
}
use of ffx.potential.utils.PotentialsUtils in project ffx by mjschnie.
the class RefinementEnergy method energy.
@Override
public double energy(double[] x) {
double weight = data.getWeight();
double e = 0.0;
if (thermostat != null) {
kTScale = Thermostat.convert / (thermostat.getTargetTemperature() * Thermostat.kB);
}
if (optimizationScaling != null) {
int len = x.length;
for (int i = 0; i < len; i++) {
x[i] /= optimizationScaling[i];
}
}
int assemblysize = molecularAssemblies.length;
switch(refinementMode) {
case COORDINATES:
// Compute the chemical energy.
for (int i = 0; i < assemblysize; i++) {
try {
ForceFieldEnergy fe = molecularAssemblies[i].getPotentialEnergy();
getAssemblyi(i, x, xChemical[i]);
double curE = fe.energy(xChemical[i]);
e += (curE - e) / (i + 1);
} catch (EnergyException ex) {
ex.printStackTrace();
if (printOnFailure) {
String timeString = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd-HH_mm_ss"));
String filename = String.format("%s-ERROR-%s.pdb", FilenameUtils.removeExtension(molecularAssemblies[i].getFile().getName()), timeString);
PotentialsFunctions ef = new PotentialsUtils();
filename = ef.versionFile(filename);
logger.info(String.format(" Writing on-error snapshot to file %s", filename));
ef.saveAsPDB(molecularAssemblies[i], new File(filename));
}
if (ex.doCauseSevere()) {
ex.printStackTrace();
logger.log(Level.SEVERE, " Error in calculating energies or gradients", ex);
} else {
ex.printStackTrace();
// Rethrow exception
throw ex;
}
// Should ordinarily be unreachable.
return 0;
}
}
double chemE = e;
e = chemE * kTScale;
// Compute the X-ray target energy.
double xE = dataEnergy.energy(x);
e += weight * xE;
break;
case BFACTORS:
case OCCUPANCIES:
case BFACTORS_AND_OCCUPANCIES:
// Compute the X-ray target energy and gradient.
e = dataEnergy.energy(x);
break;
case COORDINATES_AND_BFACTORS:
case COORDINATES_AND_OCCUPANCIES:
case COORDINATES_AND_BFACTORS_AND_OCCUPANCIES:
// Compute the chemical energy and gradient.
for (int i = 0; i < assemblysize; i++) {
try {
ForceFieldEnergy fe = molecularAssemblies[i].getPotentialEnergy();
getAssemblyi(i, x, xChemical[i]);
double curE = fe.energy(xChemical[i]);
e += (curE - e) / (i + 1);
} catch (EnergyException ex) {
ex.printStackTrace();
if (printOnFailure) {
String timeString = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd-HH_mm_ss"));
String filename = String.format("%s-ERROR-%s.pdb", FilenameUtils.removeExtension(molecularAssemblies[i].getFile().getName()), timeString);
PotentialsFunctions ef = new PotentialsUtils();
filename = ef.versionFile(filename);
logger.info(String.format(" Writing on-error snapshot to file %s", filename));
ef.saveAsPDB(molecularAssemblies[i], new File(filename));
}
if (ex.doCauseSevere()) {
ex.printStackTrace();
logger.log(Level.SEVERE, " Error in calculating energies or gradients", ex);
} else {
ex.printStackTrace();
// Rethrow exception
throw ex;
}
// Should ordinarily be unreachable.
return 0;
}
}
e += weight * dataEnergy.energy(x);
break;
default:
String message = "Unknown refinement mode.";
logger.log(Level.SEVERE, message);
}
if (optimizationScaling != null) {
int len = x.length;
for (int i = 0; i < len; i++) {
x[i] *= optimizationScaling[i];
}
}
totalEnergy = e;
return e;
}
Aggregations