use of ffx.potential.parsers.ForceFieldFilter in project ffx by mjschnie.
the class PotentialsDataConverter method run.
/**
* Converts the data structure to MolecularAssembly(s).
*/
@Override
public void run() {
if (dataStructure == null || dataType.equals(Utilities.DataType.UNK)) {
throw new IllegalArgumentException("Object passed was not recognized.");
}
assemblies = new ArrayList<>();
propertyList = new ArrayList<>();
switch(dataType) {
case BIOJAVA:
Structure struct = (Structure) dataStructure;
String name = struct.getPDBCode();
CompositeConfiguration properties = Keyword.loadProperties(file);
MolecularAssembly assembly = new MolecularAssembly(name);
assembly.setFile(file);
ForceFieldFilter forceFieldFilter = new ForceFieldFilter(properties);
ForceField forceField = forceFieldFilter.parse();
assembly.setForceField(forceField);
BiojavaFilter filter = new BiojavaFilter(struct, assembly, forceField, properties);
if (filter.convert()) {
filter.applyAtomProperties();
assembly.finalize(true, forceField);
ForceFieldEnergy energy = ForceFieldEnergy.energyFactory(assembly, filter.getCoordRestraints());
assembly.setPotential(energy);
assemblies.add(assembly);
propertyList.add(properties);
List<Character> altLocs = filter.getAltLocs();
if (altLocs.size() > 1 || altLocs.get(0) != ' ') {
StringBuilder altLocString = new StringBuilder("\n Alternate locations found [ ");
for (Character c : altLocs) {
// Do not report the root conformer.
if (c == ' ') {
continue;
}
altLocString.append(format("(%s) ", c));
}
altLocString.append("]\n");
logger.info(altLocString.toString());
}
/**
* Alternate conformers may have different chemistry, so
* they each need to be their own MolecularAssembly.
*/
for (Character c : altLocs) {
if (c.equals(' ') || c.equals('A')) {
continue;
}
MolecularAssembly newAssembly = new MolecularAssembly(name);
newAssembly.setForceField(assembly.getForceField());
filter.setAltID(newAssembly, c);
filter.clearSegIDs();
if (filter.convert()) {
String fileName = assembly.getFile().getAbsolutePath();
newAssembly.setName(FilenameUtils.getBaseName(fileName) + " " + c);
filter.applyAtomProperties();
newAssembly.finalize(true, assembly.getForceField());
energy = ForceFieldEnergy.energyFactory(newAssembly, filter.getCoordRestraints());
newAssembly.setPotential(energy);
assemblies.add(newAssembly);
properties.addConfiguration(properties);
}
}
} else {
logger.warning(String.format(" Failed to convert structure %s", dataStructure.toString()));
}
activeAssembly = assembly;
activeProperties = properties;
break;
case UNK:
default:
throw new IllegalArgumentException("Object passed was not recognized.");
}
}
use of ffx.potential.parsers.ForceFieldFilter in project ffx by mjschnie.
the class CrystalReciprocalSpaceTest method test1NSFPermanent.
@Test
public void test1NSFPermanent() {
String filename = "ffx/xray/structures/1NSF.pdb";
int index = filename.lastIndexOf(".");
String name = filename.substring(0, index);
// load the structure
ClassLoader cl = this.getClass().getClassLoader();
File structure = new File(cl.getResource(filename).getPath());
// load any properties associated with it
CompositeConfiguration properties = Keyword.loadProperties(structure);
Crystal crystal = new Crystal(115.996, 115.996, 44.13, 90.0, 90.0, 120.0, "P6");
Resolution resolution = new Resolution(1.89631);
ReflectionList reflectionList = new ReflectionList(crystal, resolution);
DiffractionRefinementData refinementData = new DiffractionRefinementData(properties, reflectionList);
ForceFieldFilter forceFieldFilter = new ForceFieldFilter(properties);
ForceField forceField = forceFieldFilter.parse();
// associate molecular assembly with the structure, set up forcefield
MolecularAssembly molecularAssembly = new MolecularAssembly(name);
molecularAssembly.setFile(structure);
molecularAssembly.setForceField(forceField);
PDBFilter pdbFile = new PDBFilter(structure, molecularAssembly, forceField, properties);
pdbFile.readFile();
pdbFile.applyAtomProperties();
molecularAssembly.finalize(true, forceField);
ForceFieldEnergy energy = ForceFieldEnergy.energyFactory(molecularAssembly, pdbFile.getCoordRestraints());
List<Atom> atomList = molecularAssembly.getAtomList();
Atom[] atomArray = atomList.toArray(new Atom[atomList.size()]);
// set up FFT and run it
ParallelTeam parallelTeam = new ParallelTeam();
CrystalReciprocalSpace crs = new CrystalReciprocalSpace(reflectionList, atomArray, parallelTeam, parallelTeam);
crs.computeAtomicDensity(refinementData.fc);
// tests
ComplexNumber b = new ComplexNumber(-496.999, 431.817);
HKL hkl = reflectionList.getHKL(1, 9, 4);
ComplexNumber a = refinementData.getFc(hkl.index());
System.out.println("1 9 4: " + a.toString() + " | " + b.toString() + " | " + a.divides(b).toString());
assertEquals("1 9 4 reflection should be correct", -493.7799429881329, a.re(), 0.0001);
assertEquals("1 9 4 reflection should be correct", 460.7022632345927, a.im(), 0.0001);
b.re(-129.767);
b.im(-76.9812);
hkl = reflectionList.getHKL(5, 26, 8);
a = refinementData.getFc(hkl.index());
System.out.println("5 26 8: " + a.toString() + " | " + b.toString() + " | " + a.divides(b).toString());
assertEquals("5 26 8 reflection should be correct", -123.05535567943377, a.re(), 0.0001);
assertEquals("5 26 8 reflection should be correct", -74.59007322382718, a.im(), 0.0001);
}
use of ffx.potential.parsers.ForceFieldFilter in project ffx by mjschnie.
the class TimerTest method main.
public static void main(String[] args) {
// Parameters collection from original Timer script
String pdbname = System.getProperty("pdbFile", "1N7S.pdb");
String mtzname = System.getProperty("mtzFile", null);
String cifname = System.getProperty("cifFile", null);
final boolean ciOnly = false;
final String info = "SNARE complex";
final double r = 19.412671496011;
final double rfree = 21.555930987573;
final double sigmaA = 0.9336853524690557;
final double sigmaW = 0.13192537249786418;
boolean ci = System.getProperty("ffx.ci", "false").equalsIgnoreCase("true");
if (!ci && ciOnly) {
crystalStats = null;
return;
}
int index = pdbname.lastIndexOf(".");
String name = pdbname.substring(0, index);
// load the structure
MolecularAssembly molecularAssembly;
File structure, mtzFile, cifFile;
structure = new File(pdbname);
PotentialsFileOpener opener = new PotentialsFileOpener(structure);
opener.run();
molecularAssembly = opener.getAssembly();
mtzFile = new File(mtzname);
cifFile = new File(cifname);
// load any properties associated with it
CompositeConfiguration properties = Keyword.loadProperties(structure);
// read in Fo/sigFo/FreeR
MTZFilter mtzFilter = new MTZFilter();
CIFFilter cifFilter = new CIFFilter();
Crystal crystal = Crystal.checkProperties(properties);
Resolution resolution = Resolution.checkProperties(properties);
if (crystal == null || resolution == null) {
if (mtzname != null) {
reflectionList = mtzFilter.getReflectionList(mtzFile);
} else {
reflectionList = cifFilter.getReflectionList(cifFile);
}
} else {
reflectionList = new ReflectionList(crystal, resolution);
}
refinementData = new DiffractionRefinementData(properties, reflectionList);
if (mtzname != null) {
// assertTrue(info + " mtz file should be read in without errors",
// mtzFilter.readFile(mtzFile, reflectionList, refinementData,
// properties));
} else {
// assertTrue(info + " cif file should be read in without errors",
// cifFilter.readFile(cifFile, reflectionList, refinementData,
// properties));
}
ForceFieldFilter forceFieldFilter = new ForceFieldFilter(properties);
ForceField forceField = forceFieldFilter.parse();
// associate molecular assembly with the structure, set up forcefield
molecularAssembly.setForceField(forceField);
PDBFilter pdbFile = new PDBFilter(structure, molecularAssembly, forceField, properties);
pdbFile.readFile();
pdbFile.applyAtomProperties();
molecularAssembly.finalize(true, forceField);
ForceFieldEnergy energy = ForceFieldEnergy.energyFactory(molecularAssembly, pdbFile.getCoordRestraints());
List<Atom> atomList = molecularAssembly.getAtomList();
Atom[] atomArray = atomList.toArray(new Atom[atomList.size()]);
// set up FFT and run it
parallelTeam = new ParallelTeam();
CrystalReciprocalSpace crs = new CrystalReciprocalSpace(reflectionList, atomArray, parallelTeam, parallelTeam, false);
crs.computeDensity(refinementData.fc);
refinementData.setCrystalReciprocalSpace_fc(crs);
crs = new CrystalReciprocalSpace(reflectionList, atomArray, parallelTeam, parallelTeam, true);
crs.computeDensity(refinementData.fs);
refinementData.setCrystalReciprocalSpace_fs(crs);
ScaleBulkMinimize scaleBulkMinimize = new ScaleBulkMinimize(reflectionList, refinementData, crs, parallelTeam);
scaleBulkMinimize.minimize(6, 1.0e-4);
SigmaAMinimize sigmaAMinimize = new SigmaAMinimize(reflectionList, refinementData, parallelTeam);
sigmaAMinimize.minimize(7, 2.0e-2);
SplineMinimize splineMinimize = new SplineMinimize(reflectionList, refinementData, refinementData.spline, SplineEnergy.Type.FOFC);
splineMinimize.minimize(7, 1e-5);
crystalStats = new CrystalStats(reflectionList, refinementData);
scaleBulkMinimize = new ScaleBulkMinimize(reflectionList, refinementData, refinementData.crs_fs, parallelTeam);
ScaleBulkEnergy scaleBulkEnergy = scaleBulkMinimize.getScaleBulkEnergy();
int n = scaleBulkMinimize.getNumberOfVariables();
double[] x = new double[n];
double[] g = new double[n];
scaleBulkMinimize.getCoordinates(x);
scaleBulkEnergy.energyAndGradient(x, g);
double delta = 1.0e-4;
double tolerance = 1.0e-4;
logger.info(String.format("SCATTER TEST"));
for (int i = 0; i < 30; i++) {
long time = -System.nanoTime();
scaleBulkEnergy.energyAndGradient(x, g);
time += System.nanoTime();
logger.info(String.format(" Time %12.8f", time * 1.0e-9));
}
}
Aggregations