def add_process(self, **kwargs): """ Adds a new process to the solver. Adds a new process to the solver. The process data is passed with keyword arguments. Parameters ---------- type : string one of "EFFECTIVE", "MOMENTUM", "EXCITATION", "IONIZATION" or "ATTACHMENT". target : string the target species of the process (e.g. "O", "O2"...). ratio : float the ratio of the electron mass to the mass of the target (for elastic/momentum reactions only). threshold : float the energy threshold of the process in eV (only for inelastic reactions). data : array or array-like cross-section of the process array with two columns: column 0 must contain energies in eV, column 1 contains the cross-section in square meters for each of these energies. Returns ------- process : :class:`process.Process` The process that has been added. Examples -------- >>> import numpy as np >>> from bolos import solver, grid >>> grid.LinearGrid(0, 60., 400) >>> solver = BoltzmannSolver(grid) >>> # This is an example cross-section that decays exponentially >>> energy = np.linspace(0, 10) >>> cross_section = 1e-20 * np.exp(-energy) >>> solver.add_process(type="EXCITATION", target="Kriptonite", >>> ratio=1e-5, threshold=10, >>> data=np.c_[energy, cross_section]) See Also -------- load_collisions : Add a set of collisions. """ proc = Process(**kwargs) try: target = self.target[proc.target_name] except KeyError: target = Target(proc.target_name) self.target[proc.target_name] = target target.add_process(proc) return proc