Source code for aguaclara.research.stock_qc

from aguaclara.core.units import u
import aguaclara.core.utility as ut


class Stock(object):
    """A stock of material in solution, with functions for calculations
    involving flow rate and concentration. A parent class to be used in
    Variable_C_Stock and Variable_Q_Stock.
    """

    def rpm(self, vol_per_rev, Q):
        return (Q / vol_per_rev)

    def T_stock(self, V_stock, Q_stock):
        return (V_stock / Q_stock)

    def M_stock(self, V_stock, C_stock):
        return C_stock * V_stock

    def V_super_stock(self, V_stock, C_stock, C_super_stock):
        return V_stock * (C_stock / C_super_stock).to(u.dimensionless)

    def dilution_factor(self, C_stock, C_super_stock):
        return (C_stock / C_super_stock).to(u.dimensionless)


[docs]class Variable_C_Stock(Stock): """A flow reactor with input from a stock of material of unknown concentration. :Examples: >>> from aguaclara.research.stock_qc import Variable_C_Stock >>> from aguaclara.core.units import u >>> reactor = Variable_C_Stock(Q_sys = 1*u.mL/u.s, C_sys = 1.4*u.mg/u.L, Q_stock = .01*u.mL/u.s) >>> reactor.C_stock() <Quantity(140.0, 'milligram / liter')> """
[docs] def __init__(self, Q_sys, C_sys, Q_stock): """Initialize a reactor of unknown material stock concentration. :param Q_sys: Flow rate of the system :type Q_sys: float :param C_sys: Concentration of the material in the system :type C_sys: float :param Q_stock: Flow rate from the stock of material :type Q_stock: float """ self._Q_sys = Q_sys self._C_sys = C_sys self._Q_stock = Q_stock
[docs] def Q_sys(self): """Return the flow rate of the system. :return: Flow rate of the system :rtype: float """ return self._Q_sys
[docs] def C_sys(self): """Return the concentration of the material in the system. :return: Concentration of the material in the system :rtype: float """ return self._C_sys
[docs] def Q_stock(self): """Return the flow rate from the stock of material. :return: Flow rate from the stock of material :rtype: float """ return self._Q_stock
[docs] def C_stock(self): """Return the required concentration of material in the stock given a reactor's desired system flow rate, system concentration, and stock flow rate. :return: Concentration of material in the stock :rtype: float """ return self._C_sys * (self._Q_sys / self._Q_stock).to(u.dimensionless)
[docs] @ut.list_handler() def rpm(self, vol_per_rev): """Return the pump speed required for the reactor's stock of material given the volume of fluid output per revolution by the stock's pump. :param vol_per_rev: Volume of fluid pumped per revolution (dependent on pump and tubing) :type vol_per_rev: float :return: Pump speed for the material stock, in revolutions per minute :rtype: float """ return Stock.rpm(self, vol_per_rev, self._Q_stock).to(u.rev/u.min)
[docs] @ut.list_handler() def T_stock(self, V_stock): """Return the amount of time at which the stock of materal will be depleted. :param V_stock: Volume of the stock of material :type V_stock: float :return: Time at which the stock will be depleted :rtype: float """ return Stock.T_stock(self, V_stock, self._Q_stock).to(u.hr)
[docs] @ut.list_handler() def M_stock(self, V_stock): """Return the mass of undiluted material required for the stock concentration. :param V_stock: Volume of the stock of material :type V_stock: float :return: Mass of undiluted stock material :rtype: float """ return Stock.M_stock(self, V_stock, self.C_stock())
[docs] @ut.list_handler() def V_super_stock(self, V_stock, C_super_stock): """Return the volume of super (more concentrated) stock that must be diluted for the desired stock volume and required stock concentration. :param V_stock: Volume of the stock of material :type V_stock: float :param C_super_stock: Concentration of the super stock :type C_super_stock: float :return: Volume of super stock to dilute :rtype: float """ return Stock.V_super_stock(self, V_stock, self.C_stock(), C_super_stock)
[docs] @ut.list_handler() def dilution_factor(self, C_super_stock): """Return the dilution factor of the concentration of material in the stock relative to the super stock. :param C_super_stock: Concentration of the super stock :type C_super_stock: float :return: dilution factor of stock concentration over super stock concentration (< 1) :rtype: float """ return Stock.dilution_factor(self, self.C_stock(), C_super_stock)
[docs]class Variable_Q_Stock(Stock): """A flow reactor with input from a stock of material at an unknown flow rate. :Examples: >>> from aguaclara.research.stock_qc import Variable_Q_Stock >>> from aguaclara.core.units import u >>> reactor = Variable_Q_Stock(Q_sys = 1*u.mL/u.s, C_sys = 1.4*u.mg/u.L, C_stock = 7.6*u.mg/u.L) >>> round(reactor.Q_stock(), 6) <Quantity(0.184211, 'milliliter / second')> >>> pump_speed = reactor.rpm(vol_per_rev = .5*u.mL/u.rev).to(u.rev/u.min) >>> round(pump_speed, 6) <Quantity(22.105263, 'rev / minute')> """
[docs] def __init__(self, Q_sys, C_sys, C_stock): """Initialize a reactor of unknown material stock flow rate. :param Q_sys: Flow rate of the system :type Q_sys: float :param C_sys: Concentration of the material in the system :type C_sys: float :param C_stock: Concentration of the material in the stock :type C_stock: float """ self._Q_sys = Q_sys self._C_sys = C_sys self._C_stock = C_stock
[docs] def Q_sys(self): """Return the flow rate of the system. :return: Flow rate of the system :rtype: float """ return self._Q_sys
[docs] def C_sys(self): """Return the concentration of the material in the system. :return: Concentration of the material in the system :rtype: float """ return self._C_sys
[docs] def C_stock(self): """Return the concentration of the material in the stock. :return: Concentration of the material in the stock :rtype: float """ return self._C_stock
[docs] def Q_stock(self): """Return the required flow rate from the stock of material given a reactor's desired system flow rate, system concentration, and stock concentration. :return: Flow rate from the stock of material :rtype: float """ return self._Q_sys * (self._C_sys / self._C_stock).to(u.dimensionless)
[docs] @ut.list_handler() def rpm(self, vol_per_rev): """Return the pump speed required for the reactor's stock of material given the volume of fluid output per revolution by the stock's pump. :param vol_per_rev: Volume of fluid pumped per revolution (dependent on pump and tubing) :type vol_per_rev: float :return: Pump speed for the material stock, in revolutions per minute :rtype: float """ return Stock.rpm(self, vol_per_rev, self.Q_stock()).to(u.rev/u.min)
[docs] @ut.list_handler() def T_stock(self, V_stock): """Return the amount of time at which the stock of materal will be depleted. :param V_stock: Volume of the stock of material :type V_stock: float :return: Time at which the stock will be depleted :rtype: float """ return Stock.T_stock(self, V_stock, self.Q_stock()).to(u.hr)
[docs] @ut.list_handler() def M_stock(self, V_stock): """Return the mass of undiluted material required for the stock concentration. :param V_stock: Volume of the stock of material :type V_stock: float :return: Mass of undiluted stock material :rtype: float """ return Stock.M_stock(self, V_stock, self._C_stock)
[docs] @ut.list_handler() def V_super_stock(self, V_stock, C_super_stock): """Return the volume of super (more concentrated) stock that must be diluted for the desired stock volume and stock concentration. :param V_stock: Volume of the stock of material :type V_stock: float :param C_super_stock: Concentration of the super stock :type C_super_stock: float :return: Volume of super stock to dilute :rtype: float """ return Stock.V_super_stock(self, V_stock, self._C_stock, C_super_stock)
[docs] @ut.list_handler() def dilution_factor(self, C_super_stock): """Return the dilution factor of the concentration of material in the stock relative to the super stock. :param C_super_stock: Concentration of the super stock :type C_super_stock: float :return: dilution factor of stock concentration over super stock concentration (< 1) :rtype: float """ return Stock.dilution_factor(self, self._C_stock, C_super_stock)