Пример #1
0
 def setUp(self):
     """
     A function run before each unit test in this class.  This tests the creation of several both ScalarQuantity
     and ArrayQuantity objects
     """
     self.Cp = quantity.Quantity(
         [-6.51, -5.19333, -4.47333, -3.76, -3.44333, -2.94667, -2.47],
         'cal/(mol*K)', '+|-',
         [2.72057, 3.42407, 4.84068, 5.11681, 5.13207, 5.8757, 8.29108])
     self.v = quantity.Quantity([5, 10, 12], 'cm/s', '*|/', [1.2, 0.4, 1])
     self.H = quantity.Quantity(33.1097, 'kcal/mol', '+|-', 24.8344)
     self.A = quantity.Quantity(7.25e+13, 'cm^3/(mol*s)', '*|/', 5)
     self.Cp_array = quantity.ArrayQuantity(
         [-6.51, -5.19333, -4.47333, -3.76, -3.44333, -2.94667, -2.47],
         'cal/(mol*K)',
         [2.72057, 3.42407, 4.84068, 5.11681, 5.13207, 5.8757, 8.29108],
         '+|-')
     self.v_array = quantity.ArrayQuantity([5, 10, 12], 'cm/s',
                                           [1.2, 0.4, 1], '*|/')
     self.H_scalar = quantity.ScalarQuantity(
         33.1097,
         'kcal/mol',
         24.8344,
         '+|-',
     )
     self.A_scalar = quantity.ScalarQuantity(7.25e+13, 'cm^3/(mol*s)', 5,
                                             '*|/')
Пример #2
0
    def __init__(self, network,
                 Tmin=None, Tmax=None, Tcount=0, Tlist=None,
                 Pmin=None, Pmax=None, Pcount=0, Plist=None,
                 maximumGrainSize=None, minimumGrainCount=0,
                 method=None, interpolationModel=None, maximumAtoms=None,
                 activeKRotor=True, activeJRotor=True, rmgmode=False, sensitivity_conditions=None):
        self.network = network

        self.Tmin = Tmin
        self.Tmax = Tmax
        self.Tcount = Tcount
        if Tlist is not None:
            self.Tlist = Tlist
            self.Tmin = (np.min(self.Tlist.value_si), "K")
            self.Tmax = (np.max(self.Tlist.value_si), "K")
            self.Tcount = len(self.Tlist.value_si)
        else:
            self.Tlist = None

        self.Pmin = Pmin
        self.Pmax = Pmax
        self.Pcount = Pcount
        if Plist is not None:
            self.Plist = Plist
            self.Pmin = (np.min(self.Plist.value_si) * 1e-5, "bar")
            self.Pmax = (np.max(self.Plist.value_si) * 1e-5, "bar")
            self.Pcount = len(self.Plist.value_si)
        else:
            self.Plist = None

        self.maximum_grain_size = maximumGrainSize
        self.minimum_grain_count = minimumGrainCount
        self.Emin = None
        self.Emax = None
        self.Elist = None

        self.method = method
        self.interpolation_model = interpolationModel
        self.maximum_atoms = maximumAtoms

        self.active_k_rotor = activeKRotor
        self.active_j_rotor = activeJRotor
        self.rmgmode = rmgmode

        if sensitivity_conditions is not None:
            if not isinstance(sensitivity_conditions[0], list):
                sensitivity_conditions = [sensitivity_conditions]  # allow `[T, P]` as conditions input
            self.sensitivity_conditions = [[quantity.Quantity(condition[0]), quantity.Quantity(condition[1])]
                                           for condition in sensitivity_conditions]
        else:
            self.sensitivity_conditions = None

        if self.Tlist is None and self.Tmin is not None and self.Tmax is not None and self.Tcount is not None:
            self.generate_T_list()
        if self.Plist is None and self.Pmin is not None and self.Pmax is not None and self.Pcount is not None:
            self.generate_P_list()
Пример #3
0
    def __init__(self,
                 reaction,
                 Tmin=None,
                 Tmax=None,
                 Tlist=None,
                 Tcount=0,
                 sensitivity_conditions=None):
        self.usedTST = False
        self.Tmin = Tmin if Tmin is not None else (298, 'K')
        self.Tmax = Tmax if Tmax is not None else (2500, 'K')
        self.Tcount = Tcount if Tcount > 3 else 50

        if Tlist is not None:
            self.Tlist = Tlist
            self.Tmin = (min(self.Tlist.value_si), 'K')
            self.Tmax = (max(self.Tlist.value_si), 'K')
            self.Tcount = len(self.Tlist.value_si)
        else:
            self.Tlist = (1 / np.linspace(1 / self.Tmax.value_si,
                                          1 / self.Tmin.value_si, self.Tcount),
                          'K')

        self.reaction = reaction
        self.k_units = None

        if sensitivity_conditions is not None:
            self.sensitivity_conditions = [
                quantity.Quantity(condition)
                for condition in sensitivity_conditions
            ]
        else:
            self.sensitivity_conditions = None

        self.arkane_species = ArkaneSpecies(
            species=self.reaction.transition_state)
Пример #4
0
    def test_scalar_repr(self):
        """
        Test that the ScalarQuantity objects can be recreated using their __repr__ function
        """
        # Test that the values can be reconstituted
        H = quantity.Quantity(eval(repr(self.H)))
        self.assertEqual(H.value_si, self.H.value_si)
        self.assertEqual(H.uncertainty_si, self.H.uncertainty_si)
        self.assertEqual(H.uncertaintyType, self.H.uncertaintyType)
        self.assertEqual(H.units, self.H.units)

        A = quantity.Quantity(eval(repr(self.A)))
        self.assertEqual(A.value_si, self.A.value_si)
        self.assertEqual(A.uncertainty_si, self.A.uncertainty_si)
        self.assertEqual(A.uncertaintyType, self.A.uncertaintyType)
        self.assertEqual(A.units, self.A.units)

        # Test that the __repr__ strings are the same
        self.assertEqual(repr(H), repr(self.H))
        self.assertEqual(repr(self.H), repr(self.H_scalar))
        self.assertEqual(repr(A), repr(self.A))
        self.assertEqual(repr(self.A), repr(self.A_scalar))
Пример #5
0
 def test_array_repr(self):
     """
     Test that the ArrayQuantity objects can be recreated using their __repr__ function
     """
     # Test that the values can be reconstituted
     Cp = quantity.Quantity(eval(repr(self.Cp)))
     numpy.testing.assert_array_almost_equal(Cp.value_si, self.Cp.value_si)
     numpy.testing.assert_array_almost_equal(Cp.uncertainty_si, self.Cp.uncertainty_si)
     self.assertEqual(Cp.uncertaintyType, self.Cp.uncertaintyType)
     self.assertEqual(Cp.units, self.Cp.units)
     
     v = quantity.Quantity(eval(repr(self.v)))
     numpy.testing.assert_array_almost_equal(v.value_si, self.v.value_si)
     numpy.testing.assert_array_almost_equal(v.uncertainty_si, self.v.uncertainty_si)
     self.assertEqual(v.uncertaintyType, self.v.uncertaintyType)
     self.assertEqual(v.units, self.v.units)
     
     # Test that the __repr__ strings are the same
     self.assertEqual(repr(Cp),repr(self.Cp))
     self.assertEqual(repr(self.Cp),repr(self.Cp_array))
     self.assertEqual(repr(v),repr(self.v))
     self.assertEqual(repr(self.v),repr(self.v_array))
Пример #6
0
 def __init__(self, job, output_directory):
     self.job = job
     self.output_directory = output_directory
     self.sensitivity_path = os.path.join(output_directory, 'sensitivity')
     self.conditions = self.job.sensitivity_conditions
     self.f_rates = [self.job.reaction.kinetics.get_rate_coefficient(condition.value_si)
                     for condition in self.conditions]
     kr = self.job.reaction.generate_reverse_rate_coefficient()
     self.r_rates = [kr.get_rate_coefficient(condition.value_si) for condition in self.conditions]
     self.f_sa_rates = {}
     self.r_sa_rates = {}
     self.f_sa_coefficients = {}
     self.r_sa_coefficients = {}
     self.perturbation = quantity.Quantity(1, 'kcal/mol')
     self.execute()
Пример #7
0
    def __init__(self,
                 reaction,
                 Tmin=None,
                 Tmax=None,
                 Tlist=None,
                 Tcount=0,
                 sensitivity_conditions=None):
        self.usedTST = False
        if Tmin is not None:
            self.Tmin = quantity.Quantity(Tmin)
        else:
            self.Tmin = None

        if Tmax is not None:
            self.Tmax = quantity.Quantity(Tmax)
        else:
            self.Tmax = None

        self.Tcount = Tcount

        if Tlist is not None:
            self.Tlist = quantity.Quantity(Tlist)
            self.Tmin = quantity.Quantity(numpy.min(self.Tlist.value_si), "K")
            self.Tmax = quantity.Quantity(numpy.max(self.Tlist.value_si), "K")
            self.Tcount = len(self.Tlist.value_si)
        else:
            if Tmin and Tmax is not None:

                if self.Tcount <= 3.:
                    self.Tcount = 50

                stepsize = (self.Tmax.value_si -
                            self.Tmin.value_si) / self.Tcount

                self.Tlist = quantity.Quantity(
                    numpy.arange(self.Tmin.value_si,
                                 self.Tmax.value_si + stepsize, stepsize), "K")
            else:
                self.Tlist = None

        self.reaction = reaction
        self.kunits = None

        if sensitivity_conditions is not None:
            self.sensitivity_conditions = [
                quantity.Quantity(condition)
                for condition in sensitivity_conditions
            ]
        else:
            self.sensitivity_conditions = None
Пример #8
0
 def __init__(self, job, output_directory, perturbation):
     self.job = job
     self.output_directory = output_directory
     self.sensitivity_path = os.path.join(output_directory, 'sensitivity')
     self.conditions = self.job.sensitivity_conditions
     self.rates = {}
     for rxn in self.job.network.net_reactions:
         self.rates[str(rxn)] = []
         for condition in self.conditions:
             self.rates[str(rxn)].append(rxn.kinetics.get_rate_coefficient(condition[0].value_si,
                                                                           condition[1].value_si))
     self.sa_rates = {}
     self.sa_coefficients = {}
     for rxn in self.job.network.net_reactions:
         self.sa_rates[str(rxn)] = {}
         self.sa_coefficients[str(rxn)] = {}
     self.perturbation = quantity.Quantity(perturbation, 'kcal/mol')
     self.execute()
Пример #9
0
 def __init__(self, reaction,  
              Tmin=None, 
              Tmax=None,
              Tlist=None,
              Tcount=0):
     
     if Tmin is not None:
         self.Tmin = quantity.Quantity(Tmin)
     else:
         self.Tmin = None
         
     if Tmax is not None:
         self.Tmax = quantity.Quantity(Tmax)
     else:
         self.Tmax = None
     
     self.Tcount = Tcount
     
     if Tlist is not None:
         self.Tlist = quantity.Quantity(Tlist)
         self.Tmin = quantity.Quantity(numpy.min(self.Tlist.value_si),"K")
         self.Tmax = quantity.Quantity(numpy.max(self.Tlist.value_si),"K")
         self.Tcount = len(self.Tlist.value_si)
     else:
         if Tmin and Tmax is not None:
             
             if self.Tcount <= 3.:
                 self.Tcount = 50
             
             stepsize = (self.Tmax.value_si-self.Tmin.value_si)/self.Tcount
             
             self.Tlist = quantity.Quantity(numpy.arange(self.Tmin.value_si, self.Tmax.value_si+stepsize, stepsize),"K")
         else:
             self.Tlist = None
     
     self.reaction = reaction
     self.kunits = None