Search in sources :

Example 6 with PotentialsUtils

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);
}
Also used : ArrayList(java.util.ArrayList) Mutation(ffx.potential.parsers.PDBFilter.Mutation) MolecularAssembly(ffx.potential.MolecularAssembly) MultiResidue(ffx.potential.bonded.MultiResidue) Residue(ffx.potential.bonded.Residue) Mutation(ffx.potential.parsers.PDBFilter.Mutation) PDBFilter(ffx.potential.parsers.PDBFilter) PotentialsUtils(ffx.potential.utils.PotentialsUtils)

Example 7 with PotentialsUtils

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();
}
Also used : File(java.io.File) PotentialsUtils(ffx.potential.utils.PotentialsUtils)

Example 8 with PotentialsUtils

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;
}
Also used : PotentialsFunctions(ffx.potential.utils.PotentialsFunctions) ForceFieldEnergy(ffx.potential.ForceFieldEnergy) File(java.io.File) EnergyException(ffx.potential.utils.EnergyException) PotentialsUtils(ffx.potential.utils.PotentialsUtils)

Example 9 with PotentialsUtils

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;
}
Also used : PotentialsFunctions(ffx.potential.utils.PotentialsFunctions) ForceFieldEnergy(ffx.potential.ForceFieldEnergy) File(java.io.File) EnergyException(ffx.potential.utils.EnergyException) PotentialsUtils(ffx.potential.utils.PotentialsUtils)

Aggregations

PotentialsUtils (ffx.potential.utils.PotentialsUtils)9 File (java.io.File)8 PotentialsFunctions (ffx.potential.utils.PotentialsFunctions)6 EnergyException (ffx.potential.utils.EnergyException)4 ForceFieldEnergy (ffx.potential.ForceFieldEnergy)3 CoordRestraint (ffx.potential.nonbonded.CoordRestraint)3 MolecularAssembly (ffx.potential.MolecularAssembly)2 Atom (ffx.potential.bonded.Atom)2 MultiResidue (ffx.potential.bonded.MultiResidue)2 Residue (ffx.potential.bonded.Residue)2 COMRestraint (ffx.potential.nonbonded.COMRestraint)2 NCSRestraint (ffx.potential.nonbonded.NCSRestraint)2 ForceFieldString (ffx.potential.parameters.ForceField.ForceFieldString)2 PointerByReference (com.sun.jna.ptr.PointerByReference)1 ParallelTeam (edu.rit.pj.ParallelTeam)1 Crystal (ffx.crystal.Crystal)1 HKL (ffx.crystal.HKL)1 ReflectionList (ffx.crystal.ReflectionList)1 Resolution (ffx.crystal.Resolution)1 ComplexNumber (ffx.numerics.ComplexNumber)1