Exemple #1
0
    def test_iterable(self):
        """ Make sure the chain is iterable.
        """
        l1 = ElementaryLine([0.0, 1.2, 0.7])
        l2 = ElementaryLine([0.0, 1.0, 0.5])
        chain = EPChain([l1, l2])

        for l in chain:
            self.assertTrue(isinstance(l, ElementaryLine))
Exemple #2
0
    def test_membership(self):
        """ Test the `in` operator.
        """
        l1 = ElementaryLine([0.0, 1.2, 0.7])
        l2 = ElementaryLine([0.0, 1.0, 0.5])
        chain = EPChain([l1])

        self.assertTrue(l1 in chain)
        self.assertFalse(l2 in chain)
Exemple #3
0
    def test_construction_and_query(self):
        """ Test we can construct EPChain object correctly.
        """
        l1 = ElementaryLine([0.0, 1.2, 0.7])
        l2 = ElementaryLine([0.0, 1.0, 0.5])
        l = EPChain([l1, l2])

        # Now the l2 should be translated.
        self.assertTupleEqual(l2.eigen_points.A, (3.0, 0.69999999999999996))
Exemple #4
0
    def test_translate(self):
        """ Make sure all lines in chain can be translated correctly.
        """
        l1 = ElementaryLine([0.0, 1.2, 0.6])
        l2 = ElementaryLine([0.0, 1.0, 0.8])
        chain = EPChain([l1, l2])

        chain.translate(1.0, "x").translate(1.0, "y")

        self.assertTupleEqual(l1.eigen_points.A, (1.0, 1.0))
        self.assertTupleEqual(l2.eigen_points.A, (4.0, 1.6000000000000001))
    def test_add_lines(self):
        canvas = EPCanvas()

        l1 = ElementaryLine([0.0, 1.2, 0.6])
        l2 = ElementaryLine([0.0, 1.0, 0.8])
        canvas.add_lines([l1, l2])

        canvas.lines = []
        self.assertRaises(ValueError, canvas.add_lines, [l1, l1])

        plt.close(canvas.figure)
    def test_add_all_horizontal_auxiliary_lines(self):
        """ Make sure we can add all horizontal auxiliary lines to canvas.
        """
        canvas = EPCanvas()

        l1 = ElementaryLine([0.0, 1.2, 0.6])
        l2 = ElementaryLine([0.0, 1.0, 0.8])
        canvas.add_lines([l1, l2])

        canvas.add_all_horizontal_auxiliary_lines()

        plt.close(canvas.figure)
    def test_contains(self):
        canvas = EPCanvas()

        l1 = ElementaryLine([0.0, 1.2, 0.6])
        l2 = ElementaryLine([0.0, 1.0, 0.8])
        chain = EPChain([l1])

        canvas.add_chain(chain)

        self.assertTrue(l1 in canvas)
        self.assertTrue(chain in canvas)
        self.assertFalse(l2 in canvas)
        plt.close(canvas.figure)
Exemple #8
0
    def test_append(self):
        """ Make sure the elementary line can be appended properly.
        """
        l1 = ElementaryLine([0.0, 1.2, 0.7])
        l2 = ElementaryLine([0.0, 1.0, 0.5])
        l = EPChain([l1])

        l.append(l2)

        # Check the l2 should be translated.
        self.assertTupleEqual(l2.eigen_points.A, (3.0, 0.69999999999999996))

        # Appending a repeated line will raise an exception.
        self.assertRaises(ValueError, l.append, l2)
Exemple #9
0
    def test_construction_and_query(self):
        """ Test we can construct ElementaryLine object correctly.
        """
        line = ElementaryLine([0.0, 1.2, 0.7], n=2)

        ret_x = line.x.tolist()
        ref_x = [0.0, 1.0, 1.0, 2.0, 2.0, 3.0]
        self.assertListEqual(ret_x, ref_x)

        ret_y = line.y.tolist()
        ref_y = [0.0, 0.0, -3.4426554548552387e-18, 0.7, 0.7, 0.7]
        self.assertListEqual(ret_y, ref_y)

        self.assertIsNone(line.rxn_equation)
        self.assertEqual(line.color, "#000000")
        self.assertEqual(line.shadow_color, "#595959")
        self.assertEqual(line.shadow_depth, 0)
        self.assertEqual(line.hline_length, 1.0)
        self.assertEqual(line.interp_method, "spline")
        self.assertEqual(line.n, 2)
        self.assertEqual(line.peak_width, 1.0)

        # Check invalid reaction equation.
        self.assertRaises(ValueError,
                          ElementaryLine, [0.0, 1.2, 0.7],
                          rxn_equation="A + B -> C")

        # Check invalid interpolation algorithm.
        self.assertRaises(ValueError,
                          ElementaryLine, [0.0, 1.2, 0.7],
                          interp_method="abc")

        # Check invalid energy tuple.
        self.assertRaises(ValueError, ElementaryLine, [0.0, 1.2, 1.5])
Exemple #10
0
 def test_add_energy_annotations(self):
     """ Make sure the energy annotations can be added correctly.
     """
     canvas = EPCanvas()
     line = ElementaryLine([0.0, 1.3, 0.8])
     canvas.add_lines([line])
     canvas.add_energy_annotations(line)
     plt.close(canvas.figure)
Exemple #11
0
 def test_add_vertical_auxiliary_line(self):
     """ Make sure the vertical line can be added without exceptions.
     """
     canvas = EPCanvas()
     line = ElementaryLine([0.0, 1.3, 0.8])
     canvas.add_lines([line])
     canvas.add_vertical_auxiliary_lines(line)
     plt.close(canvas.figure)
Exemple #12
0
 def test_draw(self):
     """ Make sure the lines can be added without exceptions.
     """
     canvas = EPCanvas()
     line = ElementaryLine([0.0, 1.3, 0.8])
     canvas.add_lines([line])
     canvas.draw()
     plt.close(canvas.figure)
Exemple #13
0
    def test_x_y_data(self):
        """ Test we can get correct data points.
        """
        l1 = ElementaryLine([0.0, 1.2, 0.5], n=2)
        l2 = ElementaryLine([0.0, 0.8], n=2)
        chain = EPChain([l1, l2])

        ref_x = [0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0]
        ret_x = chain.x.tolist()
        self.assertListEqual(ref_x, ret_x)

        ref_y = [
            0.0, 0.0, 1.7213277274276194e-18, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
            1.3, 1.3, 1.3
        ]
        ret_y = chain.y.tolist()
        self.assertListEqual(ref_y, ret_y)
Exemple #14
0
 def test_add_species_annotations(self):
     """ Make sure the species annotations can be added without exceptions.
     """
     canvas = EPCanvas()
     line = ElementaryLine(
         [0.0, 1.3, 0.8],
         rxn_equation="CO_b + O_b <-> CO-O_2b -> CO2_g + 2*_b")
     canvas.add_lines([line])
     canvas.add_species_annotations(line)
     plt.close(canvas.figure)
Exemple #15
0
    def test_add_line(self):
        """ Test the line can be add to canvas correctly.
        """
        canvas = EPCanvas()
        l1 = ElementaryLine([0.0, 1.2, 0.6])
        canvas.add_line(l1)

        # Add repeat line, exception raises.
        self.assertRaises(ValueError, canvas.add_line, l1)
        plt.close(canvas.figure)
Exemple #16
0
    def test_add_chain(self):
        """ Test energy profile chain can be added correctly to canvas.
        """
        canvas = EPCanvas()

        self.assertFalse(canvas.lines)
        self.assertFalse(canvas.chains)

        l1 = ElementaryLine([0.0, 1.2, 0.6])
        l2 = ElementaryLine([0.0, 1.0, 0.8])
        chain = EPChain([l1, l2])
        canvas.add_chain(chain)

        self.assertEqual(len(canvas.lines), 2)
        for l in canvas.lines:
            self.assertTrue(isinstance(l, ElementaryLine))

        self.assertEqual(len(canvas.chains), 1)
        self.assertTrue(isinstance(canvas.chains[0], EPChain))

        # Exception is expected if add the chain again.
        self.assertRaises(ValueError, canvas.add_chain, chain)
        plt.close(canvas.figure)
Exemple #17
0
    def test_eigen_pts(self):
        """ Test we can get correct eigen points for an elemnetary line.
        """
        line = ElementaryLine([0.0, 1.2, 0.8])
        eigen_pts = line.eigen_points

        self.assertTrue(eigen_pts.has_barrier)
        self.assertTupleEqual(eigen_pts.A, (0.0, 0.0))
        self.assertTupleEqual(eigen_pts.B, (1.0, 0.0))
        self.assertTupleEqual(eigen_pts.C,
                              (1.5151515151515151, 1.2008062953822003))
        self.assertTupleEqual(eigen_pts.D, (2.0, 0.80000000000000004))
        self.assertTupleEqual(eigen_pts.E, (3.0, 0.80000000000000004))

        line = ElementaryLine([0.0, 0.8])
        eigen_pts = line.eigen_points

        self.assertFalse(eigen_pts.has_barrier)
        self.assertTupleEqual(eigen_pts.A, (0.0, 0.0))
        self.assertTupleEqual(eigen_pts.B, (1.0, 0.0))
        self.assertTupleEqual(eigen_pts.C, (2.0, 0.80000000000000004))
        self.assertTupleEqual(eigen_pts.D, (2.0, 0.80000000000000004))
        self.assertTupleEqual(eigen_pts.E, (3.0, 0.80000000000000004))
Exemple #18
0
    def test_translate_state(self):
        """ Test we can translate specific state correctly.
        """
        line = ElementaryLine([0.0, 1.3, 0.8])

        # Translate IS.
        line.translate_state("IS", -0.2)
        self.assertEqual(line.y[0], -0.2)

        # Translate TS.
        ref_y = line.eigen_points.C[1] + 0.1
        line.translate_state("TS", 0.1)
        self.assertAlmostEqual(ref_y, line.eigen_points.C[1], places=2)

        # Translate FS.
        ref_y = line.eigen_points.E[1] - 0.2
        line.translate_state("FS", -0.2)
        self.assertAlmostEqual(ref_y, line.eigen_points.E[1], places=2)

        # Check invalid state name.
        self.assertRaises(ValueError, line.translate_state, "asd", 0.3)
Exemple #19
0
    def test_translate(self):
        """ Make sure all points in line can be translated correctly.
        """
        line = ElementaryLine([0.0, 1.2, 0.7], n=2)

        line.translate(0.5, "x")
        ref_x = [0.5, 1.5, 1.5, 2.5, 2.5, 3.5]
        self.assertListEqual(line.x.tolist(), ref_x)

        line.translate(-0.5, "y")
        ref_y = [
            -0.5, -0.5, -0.5, 0.19999999999999996, 0.19999999999999996,
            0.19999999999999996
        ]
        self.assertListEqual(line.y.tolist(), ref_y)
Exemple #20
0
# Create chains.
chains = []
for idx, (energy_tuples, hline_lengths, peak_widths, color, initial_x,
          initial_y) in enumerate(
              zip(locs["multi_energy_tuples"], locs["hline_lengths"],
                  locs["peak_widths"], locs["colors"], locs["initial_xs"],
                  locs["initial_ys"])):
    lines = []
    for hline_length, peak_width, energies in zip(hline_lengths, peak_widths,
                                                  energy_tuples):
        # Create an elementary line.
        line = ElementaryLine(energies,
                              hline_length=hline_length,
                              peak_width=peak_width,
                              line_width=line_width,
                              color=color,
                              shadow_depth=locs["shadow_depth"],
                              shadow_color=locs["shadow_color"])
        lines.append(line)

    chain = EPChain(lines)
    chain.translate(initial_x, "x")
    chain.translate(initial_y, "y")
    chains.append(chain)

    # Export data.
    filename = "data_{}.csv".format(idx)
    chain.export(filename)

    print("INFO: write data for chain_{} to {}".format(idx, filename))
Exemple #21
0
 def test_scales(self):
     """ Test scales for x and y values.
     """
     line = ElementaryLine([0.0, 1.2, 0.6])
     self.assertEqual(line.scale_x, 3.0)
     self.assertEqual(line.scale_y, 1.2003292394429861)