Esempio n. 1
0
 def testIntegration3(self):
     """
         Simulations are actually run
     """
     controlFile = "tests/data/3ptb_data/integrationTest3.conf"
     goldenPath = "tests/data/3ptb_data/originTest3"
     outputPath = "tests/data/3ptb_data/Test3"
     elements = [22, 14, 16, 19, 1]
     goldenClusters = []
     metrics = [[1.00000e+00, 0.00000e+00, 0.00000e+00, -5.28675e+02, 6.41969e-03],
                [1.00000e+00, 0.00000e+00, 0.00000e+00, -5.28657e+02, 1.88599e-02],
                [1.00000e+00, 0.00000e+00, 0.00000e+00, -5.28675e+02, 6.41969e-03],
                [1.00000e+00, 0.00000e+00, 0.00000e+00, -5.28665e+02, 1.24213e-02],
                [1.00000e+00, 5.00000e+00, 5.00000e+00, -5.28660e+02, 1.75149e-02]]
     for i in range(5):
         pdb = atomset.PDB()
         pdb.initialise(goldenPath+"/2/clustering/cluster_%d.pdb" % i, resname="AEN")
         cluster = clustering.Cluster(pdb, 4, metrics=metrics[i])
         cluster.elements = elements[i]
         cluster.contacts = 0
         goldenClusters.append(cluster)
     # name = socket.gethostname()
     # if "bsccv" not in name and "login" not in name:
     #     print("Some integration can't be run due to not having PELE  installed")
     #     return True
     # self.integrationTest(controlFile, goldenPath, outputPath, goldenClusters)
     tmpFolder = "tmp_" + outputPath.replace("/", "_")
     adaptiveSampling.main(controlFile)
     self.check_succesful_simulation(outputPath, 3)
     # cleanup
     shutil.rmtree(outputPath)
     shutil.rmtree(tmpFolder)
Esempio n. 2
0
    def test_symmetryContactMapDifference(self):
        pdb_1 = atomset.PDB()
        pdb_1.initialise("tests/data/symmetries/cluster_1.pdb", resname='AEN')
        pdb_1_sym = atomset.PDB()
        pdb_1_sym.initialise("tests/data/symmetries/cluster_1_sym.pdb",
                             resname='AEN')
        symmetries3PTB = [{"3230:N1:AEN": "3231:N2:AEN"}]
        symmetryEvaluator = sym.SymmetryContactMapEvaluator(symmetries3PTB)
        symmetryEvaluatorEmpty = sym.SymmetryContactMapEvaluator()

        contactMap1, contacts1 = symmetryEvaluator.buildContactMap(
            pdb_1, 'AEN', 16)
        cluster = clustering.Cluster(pdb_1, contactMap=contactMap1)
        contactMap1Sym, contactsSym = symmetryEvaluator.createContactMap(
            pdb_1_sym, 'AEN', 16)
        contactMapNoSym, _ = symmetryEvaluator.createContactMap(
            pdb_1_sym, 'AEN', 16)

        goldenDifference = 0.0
        DifferenceSym = symmetryEvaluator.evaluateDifferenceDistance(
            contactMap1Sym, cluster.contactMap)
        DifferenceNosym = symmetryEvaluatorEmpty.evaluateDifferenceDistance(
            contactMapNoSym, cluster.contactMap)

        self.assertEqual(contacts1, contactsSym)
        self.assertAlmostEqual(goldenDifference, DifferenceSym)
        self.assertNotAlmostEqual(DifferenceSym, DifferenceNosym)
Esempio n. 3
0
    def test_symmetryContactMapJaccard_XTC(self):
        xtc_obj = mdtraj.load("tests/data/symmetries/cluster_1.xtc",
                              top="tests/data/symmetries/cluster_1.pdb")
        topology = utilities.getTopologyFile(
            "tests/data/symmetries/cluster_1.pdb")
        pdb_1 = atomset.PDB()
        pdb_1.initialise(10 * xtc_obj.xyz[0], resname='AEN', topology=topology)
        topology = utilities.getTopologyFile(
            "tests/data/symmetries/cluster_1_sym.pdb")
        xtc_obj = mdtraj.load("tests/data/symmetries/cluster_1_sym.xtc",
                              top="tests/data/symmetries/cluster_1_sym.pdb")
        pdb_1_sym = atomset.PDB()
        pdb_1_sym.initialise(10 * xtc_obj.xyz[0],
                             resname='AEN',
                             topology=topology)
        symmetries3PTB = [{"3230:N1:AEN": "3231:N2:AEN"}]
        symmetryEvaluator = sym.SymmetryContactMapEvaluator(symmetries3PTB)
        symmetryEvaluatorEmpty = sym.SymmetryContactMapEvaluator()

        contactMap1, contacts1 = symmetryEvaluator.buildContactMap(
            pdb_1, 'AEN', 16)
        cluster = clustering.Cluster(pdb_1, contactMap=contactMap1)
        contactMap1Sym, contactsSym = symmetryEvaluator.createContactMap(
            pdb_1_sym, 'AEN', 16)
        contactMapNoSym, _ = symmetryEvaluator.createContactMap(
            pdb_1_sym, 'AEN', 16)

        goldenJaccard = 0.0
        Jaccard = symmetryEvaluator.evaluateJaccard(contactMap1Sym,
                                                    cluster.contactMap)
        JaccardNosym = symmetryEvaluatorEmpty.evaluateJaccard(
            contactMapNoSym, cluster.contactMap)
        self.assertEqual(contacts1, contactsSym)
        self.assertAlmostEqual(goldenJaccard, Jaccard)
        self.assertNotAlmostEqual(Jaccard, JaccardNosym)
Esempio n. 4
0
    def testPeriodicVariableEpsilonCalculator(self):
        params = spawning.SpawningParams()
        params.epsilon = 0.5
        params.varEpsilonType = "linearVariation"
        params.maxEpsilon = 0.75
        params.minEpsilon = 0.5
        params.variationWindow = 20
        params.maxEpsilonWindow = 1
        params.metricWeights = "linear"
        params.nclusters = 100
        params_test = {"period": 8}
        params.period = params_test.get("period", params.variationWindow)
        params.period += np.sign(np.abs(params.variationWindow -
                                        params.period))
        variable_epsilon = spawning.VariableEpsilonDegeneracyCalculator(params)
        # rateVariation = (params.maxEpsilon-params.minEpsilon)/3
        clusters = clustering.Clusters()
        sizes = [6, 2, 3, 1]
        energies = [-4, -2, -2, -1]
        for size, energy in zip(sizes, energies):
            cluster = clustering.Cluster(None, None, None, None, metricCol=0)
            cluster.elements = size
            cluster.metrics = [energy]
            clusters.addCluster(cluster)

        trajs = 20

        degeneracy6 = variable_epsilon.calculate(clusters.clusters, trajs, 0)
        golden6 = np.array([7, 4, 4, 5])
        np.testing.assert_array_equal(degeneracy6, golden6)
        self.assertAlmostEqual(params.epsilon, params.minEpsilon)
        for i in range(1, params.variationWindow):
            degeneracy7 = variable_epsilon.calculate(clusters.clusters, trajs,
                                                     i)
Esempio n. 5
0
    def testEpsilonCalculatorWithDensity(self):
        params = spawning.SpawningParams()
        params.epsilon = 0.5
        params.metricWeights = "linear"
        params.nclusters = 100

        clusters = clustering.Clusters()
        sizes = [6, 2, 3, 1]
        energies = [-4, -2, -2, 0]
        contacts = [4, 3, 2, 1]
        for size, energy, ncontacts in zip(sizes, energies, contacts):
            cluster = clustering.Cluster(None, None, None, None, metricCol=0)
            cluster.elements = size
            cluster.metrics = [energy]
            cluster.contacts = ncontacts
            clusters.addCluster(cluster)

        clusteringBlock = {
            "density": {
                "type": "heaviside",
                "params": {
                    "values": [6, 2, 3, 1],
                    "conditions": [3, 2, 1]
                }
            }
        }
        densityCalculatorBuilder = densitycalculator.DensityCalculatorBuilder()
        densityCalculator = densityCalculatorBuilder.build(clusteringBlock)

        epsilon = spawning.EpsilonDegeneracyCalculator(params,
                                                       densityCalculator)
        trajs = 16
        degeneracy = epsilon.calculate(clusters.clusters, trajs)
        golden = np.array([6, 4, 4, 2])
        np.testing.assert_array_equal(degeneracy, golden)
Esempio n. 6
0
    def testInverselyProportionalToPopulationCalculatorWithDensity(self):
        # test 3
        clusters = clustering.Clusters()
        sizes = [6, 2, 3, 1]
        contacts = [4, 3, 2, 1]
        for size, ncontacts in zip(sizes, contacts):
            cluster = clustering.Cluster(None, None, None, None)
            cluster.elements = size
            cluster.contacts = ncontacts
            clusters.addCluster(cluster)

        clusteringBlock = {
            "density": {
                "type": "heaviside",
                "params": {
                    "values": [6, 2, 3, 1],
                    "conditions": [3, 2, 1]
                }
            }
        }
        densityCalculatorBuilder = densitycalculator.DensityCalculatorBuilder()
        densityCalculator = densityCalculatorBuilder.build(clusteringBlock)
        params = spawning.SpawningParams()

        inverselyProp = spawning.InverselyProportionalToPopulationCalculator(
            params, densityCalculator)
        trajs = 8
        degeneracy = inverselyProp.calculate(clusters.clusters, trajs)
        golden = [2, 2, 2, 2]

        self.assertEqual(degeneracy, golden)
Esempio n. 7
0
    def testInverselyProportionalToPopulationCalculator(self):
        clusters = clustering.Clusters()
        sizes = [6, 2, 3, 1]
        for size in sizes:
            cluster = clustering.Cluster(None, None, None, None)
            cluster.elements = size
            clusters.addCluster(cluster)

        params = spawning.SpawningParams()
        inverselyProp = spawning.InverselyProportionalToPopulationCalculator(
            params)
        trajs = 10
        degeneracy = inverselyProp.calculate(clusters.clusters, trajs)
        golden = [1, 2, 2, 5]

        self.assertEqual(degeneracy, golden)
Esempio n. 8
0
    def testUCBCalculator(self):
        params = spawning.SpawningParams()
        params.alpha = 8.0
        UCB = spawning.UCBCalculator(params)

        clusters = clustering.Clusters()
        sizes = [6, 2, 3, 1]
        energies = [-4, -2, -2, -1]
        for size, energy in zip(sizes, energies):
            cluster = clustering.Cluster(None, None, None, None, metricCol=0)
            cluster.elements = size
            cluster.metrics = [energy]
            clusters.addCluster(cluster)

        trajs = 20
        degeneracy = UCB.calculate(clusters.clusters, trajs)
        golden = np.array([3, 5, 3, 9])
        np.testing.assert_array_equal(degeneracy, golden)
Esempio n. 9
0
    def testSameWeightDegeneracyCalculator(self):
        params = spawning.SpawningParams()
        sameWeightDegCalculator = spawning.SameWeightDegeneracyCalculator(
            params)

        clusters = clustering.Clusters()
        sizes = [6, 2, 3, 1]
        for size in sizes:
            cluster = clustering.Cluster(None, None, None, None)
            cluster.elements = size
            clusters.addCluster(cluster)

        trajs = 10
        degeneracy = sameWeightDegCalculator.calculate(clusters.clusters,
                                                       trajs)
        golden = [1, 1, 1, 1]

        self.assertEqual(degeneracy, golden)
Esempio n. 10
0
    def addSnapshotToCluster(self, snapshot, metrics=[], col=None):
        pdb = atomset.PDB()
        pdb.initialise(snapshot, resname=self.resname)
        if not self.initialPDB:
            self.initialPDB = pdb

        contacts = pdb.countContacts(self.resname,
                                     self.contactThresholdDistance)
        numberOfLigandAtoms = pdb.getNumberOfAtoms()
        contactsPerAtom = float(contacts) / numberOfLigandAtoms

        threshold = self.thresholdCalculator.calculate(contactsPerAtom)
        threshold2 = threshold**2
        threshold2 = 10

        initial_scd = atomset.computeSquaredCentroidDifference(
            self.initialPDB, pdb)
        snapshotPosition, closerClusterInd, closerClusterRMSD = self.getCloserCluster(
            initial_scd, threshold2, pdb)
        try:
            clusterToAssign = self.clusters.clusters[closerClusterInd]
            if closerClusterRMSD < clusterToAssign.threshold:
                clusterToAssign.addElement(metrics)
                return
        except TypeError:
            # When the first snapshot is read the index of the closest cluster
            # center is set to None
            pass

        # if made it here, the snapshot was not added into any cluster

        cluster = clustering.Cluster(pdb,
                                     thresholdRadius=threshold,
                                     contacts=contactsPerAtom,
                                     metrics=metrics,
                                     metricCol=col,
                                     density=1)
        if snapshotPosition is not None:
            self.clusters.insertCluster(snapshotPosition, cluster)
            self.distancesList.insert(snapshotPosition, initial_scd)
        else:
            self.clusters.addCluster(cluster)
            self.distancesList.append(initial_scd)
Esempio n. 11
0
    def testEpsilonCalculator(self):
        params = spawning.SpawningParams()
        params.epsilon = 0.5
        params.metricWeights = "linear"
        params.nclusters = 100
        epsilon = spawning.EpsilonDegeneracyCalculator(params)

        clusters = clustering.Clusters()
        sizes = [6, 2, 3, 1]
        energies = [-4, -2, -2, -1]
        for size, energy in zip(sizes, energies):
            cluster = clustering.Cluster(None, None, None, None, metricCol=0)
            cluster.elements = size
            cluster.metrics = [energy]
            clusters.addCluster(cluster)

        trajs = 20
        degeneracy = epsilon.calculate(clusters.clusters, trajs)
        golden = np.array([7, 4, 4, 5])
        np.testing.assert_array_equal(degeneracy, golden)
Esempio n. 12
0
 def test_CMInnerLimit(self):
     CMEvaluator = clustering.CMClusteringEvaluator(None, None)
     cluster1_8 = clustering.Cluster(None, contacts=1, contactThreshold=8)
     cluster2_8 = clustering.Cluster(None, contacts=2.2, contactThreshold=8)
     cluster2_6 = clustering.Cluster(None, contacts=2.2, contactThreshold=6)
     cluster1_6 = clustering.Cluster(None, contacts=1.0, contactThreshold=6)
     cluster1_4 = clustering.Cluster(None, contacts=1.0, contactThreshold=4)
     cluster2_4 = clustering.Cluster(None, contacts=2.2, contactThreshold=4)
     # Reduced slope to 8
     self.assertAlmostEqual(CMEvaluator.getInnerLimit(cluster1_8), 12)
     self.assertAlmostEqual(CMEvaluator.getInnerLimit(cluster2_8), 4)
     self.assertAlmostEqual(CMEvaluator.getInnerLimit(cluster1_6), 12)
     self.assertAlmostEqual(CMEvaluator.getInnerLimit(cluster2_6), 4)
     self.assertAlmostEqual(CMEvaluator.getInnerLimit(cluster1_4), 12)
     self.assertAlmostEqual(CMEvaluator.getInnerLimit(cluster2_4), 4)
Esempio n. 13
0
 def testIntegration1(self):
     """
         Simulations are not run, trajectories and reports are copied
     """
     controlFile = "tests/data/3ptb_data/integrationTest1.conf"
     goldenPath = "tests/data/3ptb_data/originTest1"
     outputPath = "tests/data/3ptb_data/Test1"
     elements = [28, 17, 5, 18, 1, 3]
     goldenClusters = []
     metrics = [[1.00000e+00, 0.00000e+00, 0.00000e+00, -7.49807e+03, 2.01909e+01, 2.16436e-01],
                [1.00000e+00, 0.00000e+00, 0.00000e+00, -7.49806e+03, 1.85232e+01, 2.29384e-01],
                [1.00000e+00, 0.00000e+00, 0.00000e+00, -7.49801e+03, 1.82444e+01, 2.53929e-01],
                [1.00000e+00, 0.00000e+00, 0.00000e+00, -7.49800e+03, 2.24539e+01, 2.66941e-01],
                [1.00000e+00, 5.00000e+00, 5.00000e+00, -7.49797e+03, 2.23322e+01, 3.08604e-01],
                [1.00000e+00, 3.00000e+00, 3.00000e+00, -7.49829e+03, 1.48606e+01, 7.32479e-03]]
     for i in range(6):
         pdb = atomset.PDB()
         pdb.initialise(goldenPath+"/2/clustering/cluster_%d.pdb" % i, resname="AEN")
         cluster = clustering.Cluster(pdb, thresholdRadius=4, metrics=metrics[i])
         cluster.elements = elements[i]
         cluster.contacts = 0
         goldenClusters.append(cluster)
     self.integrationTest(controlFile, goldenPath, outputPath, goldenClusters)
Esempio n. 14
0
    def testIntegration2(self):
        """
            Simulations are not run, trajectories and reports are copied
        """
        controlFile = "tests/data/3ptb_data/integrationTest2.conf"
        goldenPath = "tests/data/3ptb_data/srcTest2Epsilon"
        outputPath = "tests/data/3ptb_data/Test2"
        elements = [35, 14, 8, 14, 1]
        metrics = [[1.0, 0.0, 0.0, -7498.07, 20.1909, 0.216436],
                   [1.0, 0.0, 0.0, -7498.06, 18.5232, 0.229384],
                   [1.0, 0.0, 0.0, -7498.01, 18.6059, 0.253929],
                   [1.0, 0.0, 0.0, -7498.05, 22.4539, 0.238184],
                   [1.0, 4.0, 4.0, -7498.05, 22.7766, 0.242335]]

        goldenClusters = []
        for i in range(5):
            pdb = atomset.PDB()
            pdb.initialise(goldenPath+"/2/clustering/cluster_%d.pdb" % i, resname="AEN")
            cluster = clustering.Cluster(pdb, 4, metrics=metrics[i])
            cluster.elements = elements[i]
            cluster.contacts = 0
            goldenClusters.append(cluster)

        self.integrationTest(controlFile, goldenPath, outputPath, goldenClusters)