System configuration
At first create a ReactionDiffusionSystem
, which determines what to simulate.
This includes setting a unit system, the size and periodicity of
the simulation-box, particle species, reactions,
potentials and topologies.
These are set via properties and methods of the system
object.
Physical units
The for ReaDDy relevant units are units of length, time, and energy. An instance of a ReactionDiffusionSystem
is equipped with a particular set of these units, internally expressing everything in terms of that set. Per default it is given by
- length in nanometers,
- time in nanoseconds,
- energy in kilojoule per mol.
Should a different set of units be desired, it can be provided as constructor argument, e.g.,
custom_units = {'length_unit':'kilometer',
'time_unit': 'hour',
'energy_unit': 'kilocal/mol'}
system = readdy.ReactionDiffusionSystem([10, 10, 10] * readdy.units.meters,
unit_system=custom_units)
print(system.box_size)
>>> [ 0.01 0.01 0.01] kilometer
print(system.kbt)
>>> 0.5824569789674953 kilocalorie / mole
When setting the unit_system
constructor argument to None
, one sets up a unitless system. In such a case the thermal energy will be defaulted to kbt=1
and one cannot set a temperature anymore but has to set kbt
directly.
system = readdy.ReactionDiffusionSystem(box_size=(10, 10, 10), unit_system=None)
print(system.kbt)
>>> 1.0
system.kbt = 42.
print(system.kbt)
>>> 42.0
print(system.temperature)
>>> ValueError: No temperature unit was set. In a unitless system, refer to kbt instead.
Internally, ReaDDy uses pint for handling units, so in principle all unit arithmetics that are supported by pint can also be applied when setting up a ReaDDy simulation.
The box size
The system’s only required argument is the simulation box size. The box itself is centered around the origin, so
given a ReactionDiffusionSystem(box_size=(lx,ly,lz))
, it can be described
by $ [-\frac{L_x}{2}, \frac{L_x}{2} )\times [-\frac{L_y}{2}, \frac{L_y}{2} ) \times [-\frac{L_z}{2}, \frac{L_z}{2} ) \subset \mathbb{R}^3$.
Periodic boundary conditions
The boundaries of the box can be either (partially) non-periodic or fully periodic. The degree of periodicity is set by either the periodic_boundary_conditions
named constructor argument or property. A box that is periodic in y and z directions but not in x direction amounts to setting
readdy.ReactionDiffusionSystem([1,1,1], periodic_boundary_conditions=[False, True, True])
# or
system = readdy.ReactionDiffusionSystem([1,1,1])
system.periodic_boundary_conditions = [False, True, True]
If the box is not periodic in one or more directions, the particles have to be provided with a potential that keeps them inside the simulation box, see the section about potentials for details.
Temperature
If not specified otherwise, the temperature will default to $293\,\text{K}$. A different temperature can be either provided by the temperature
named argument in the constructor or the temperature
property. This behavior changes if one works in a unitless setup, see below.
Particle species
In order to add particle instances to the simulation, one first has to define the available species. This can be done by the add_species
method of the system object.
The method takes as argument the species’ name and a diffusion constant $D$ in units of $\text{length}^2\text{time}^{-1}$. The diffusion constant effects the magnitude of the random displacement in the governing dynamics, which are described by an overdamped Langevin equation
where $k_B$ is the Boltzmann constant, $T$ the temperature, $V$ the potential, $\mathbf{x}(t)\in\mathbb{R}^3$ a vector corresponding to the instantaneous position of a particle at time $t$, and $\xi(t)$ is a random velocity with
This means that $\xi$ is a time-uncorrelated random variable that contains values according to a normal distribution in each of its components.
If one would want to register two species “A” and “B” with respective diffusion constants $1\,\text{nm}^2\,\text{s}^{-1}$ and $2\,\text{km}^2\,\text{hour}^{-1}$, the configuration, given the default unit set, would read
system.add_species("A", diffusion_constant=1.)
system.add_species("B", diffusion_constant=2. * readdy.units.km**2 / readdy.units.hour)
where the latter diffusion constant is internally expressed in terms of the default units.
In case of particle types that take part in complexes (topologies), the add_topology_species
method needs to be invoked, see the section about topologies for details.
Reactions
Reactions remove particles from, and add particles to the system. They typically have a microscopic/intrinsic rate $\lambda$. This rate has units of inverse time and can be understood as the probability per unit time of the reaction occurring. Given an integration step $\tau$ the probability of a reaction event is evaluated as $p = 1 - e^{-\lambda \tau}$.
Additionally Fusion
and Enzymatic
reactions can only occur when particles are closer than a certain distance $R$.
All reactions are added to the reaction registry, which is part of the ReactionDiffusionSystem
system = readdy.ReactionDiffusionSystem()
system.reactions.add(...)
Each of the below listed reaction types can be registered in two ways:
- Either with the generic
reactions.add(...)
method which accepts a descriptor string, - or by calling
reactions.add_xxx(...)
, wherexxx
is to be replaced with one ofconversion
,decay
,fusion
,fission
, orenzymatic
.
Conversion
In a conversion reaction, a particle of type $A$ will convert into type $B$ with the rate constant $\lambda$
Adding a conversion reaction to the system
amounts to
system.reactions.add_conversion(name="conv", type_from="A", type_to="B", rate=0.1)
which is equivalent to
system.reactions.add("conv: A -> B", rate=0.1)
Decay
In a decay reaction, a particle of type $A$ will disappear with the rate constant $\lambda$
Example of adding a decay reaction to the system
:
system.reactions.add_decay(name="decay of A", particle_type="A", rate=0.1)
which is equivalent to
system.reactions.add("decay of A: A ->", rate=0.1)
Fusion
In a fusion reaction, a particle of type $A$ will associate with type $B$ to form a particle of type $C$.
This will occur with the rate constant $\lambda$, if the particles $A$ and $B$ are closer than the reaction radius
$R$ (educt_distance
).
Example of adding a fusion reaction to the system
:
system.reactions.add("fus: A +(2) B-> C", rate=0.1)
which is equivalent to
system.reactions.add_fusion(
name="fus", type_from1="A", type_from2="B", type_to="C", rate=0.1, educt_distance=2.
)
Fission
In a fission reaction, a particle of type $C$ will dissociate into two particles of type $B$ and $A$.
This will occur with the rate constant $\lambda$. The two products will be placed at a distance smaller than
the reaction radius $R$ (product_distance
).
Add a fission reaction to the system
system.reactions.add("fis: C -> A +(2) B", rate=0.1)
which is equivalent to
system.reactions.add_fission(
name="fis", type_from="C", type_to1="A", type_to2="B", rate=0.1, product_distance=2.
)
Enzymatic
In an enzymatic reaction, a particle of type $A$ convert into type $B$ in the presence of a particle of type $C$.
This will occur with the rate constant $\lambda$, if the particles $A$ and $C$ are closer than the reaction radius
$R$ (educt_distance
).
Add an enzymatic reaction to the system
system.reactions.add("enz: A +(2) C -> B + C", rate=0.1)
which is equivalent to
system.reactions.add_enzymatic(
name="enz", type_catalyst="C", type_from="A", type_to="B", rate=0.1, educt_distance=2.
)
Potentials
Potentials create an energy landscape in which particles diffuse in, subject to the corresponding forces. They can be used to build traps, obstacles or compartments for particles. One could also utilize them for clustering and crowding effects that are typically observed in biological fluid-like media.
Potentials in ReaDDy are divided into first-order potentials/external potentials, i.e., those that depend only on the position of one particle, and second-order potentials/pair potentials, i.e., those that depend on the relative position of two particles. The topology functionality also provides higher order potentials like angles and dihedrals.
All potentials are part of the ReactionDiffusionSystem
and can be registered for certain particle types like
system = readdy.ReactionDiffusionSystem()
system.potentials.add(...)
External potentials
External potentials or first-order potentials are potentials that solely depend on the absolute position of each particle, i.e., the relative positioning of particles towards one another has no influence. They are registered with respect to a certain particle type. The potential will then exert a force on each particle of that type individually.
Currently available external potentials are:
Box potential
A box potential is a potential acting with a harmonic force on particles of the given type once they leave the area spanned by the cuboid that has origin
as its front lower left and origin+extent
as its back upper right vertex, respectively. Therefore, the cuboid is spanned by three intervals $C=\prod_{i=1}^dC_i$ with $C_i := [\text{origin}_i, \text{origin}_i+\text{extent}_i]$. Its energy term is given by
where $d(x_i, C_i)$ denotes the shortest distance between the set $C_i$ and the point $x_i$.
Adding a box potential to the system
amounts to:
system.box_size=[3, 3, 3]
system.potentials.add_box(
particle_type="A", force_constant=10., origin=[-1, -1, -1], extent=[2, 2, 2]
)
Note that the simulation box and the box potential are completely independent. In the above example the simulation box is chosen larger than the full extent of the box potential. This is because particles should never leave the simulation box if it is non-periodic. The box potential however is a soft potential, i.e., particles may penetrate the boundaries of it for a short time and then be pushed back inside. To make sure that particles do not penetrate the simulation box, it has a slightly larger extent.
In particular there is a check upon simulation start that if the simulation box is not completely periodic, there must be a box potential for each particle type to keep it contained in the non-periodic directions, i.e., if there is no box potential such that
box_lower_left[dim] < potential_lower_left[dim]
and box_upper_right[dim] > potential_upper_right[dim]
where dim
is a non-periodic direction, an error is raised.
Spherical potential
In ReaDDy one can find three different types of spherical potentials:
- exclusion potentials to keep particles out of a spherical region,
- inclusion potentials to keep particles inside a spherical region,
- barriers that can function as a spatial separator or, if initialized with negative height, as a sticky spherical surface.
All these potentials are harmonic, i.e., particles can potentially penetrate.
Spherical exclusion
Adds a spherical potential that keeps particles of a certain type excluded from the inside of the specified sphere. Its energy term is given by
where $\mathbf{c}\in\mathbb{R}^3$ denotes the center of the sphere and $r\in\mathbb{R}_{>0}$ the radius of the sphere.
Adding such a potential to a reaction diffusion system amounts to
system.box_size = [3, 3, 3]
system.potentials.add_sphere_out(
particle_type="A", force_constant=10., origin=[0, 0, 0], radius=1.
)
yielding a spherical region of radius 1
in the center of the simulation box which keeps particles of type A
from entering that region with a harmonic repulsion potential. Due to the harmonic nature of the potential and dependent on the force constant, particles are allowed to penetrate the sphere for a short period of time.
Spherical inclusion
Adds a spherical potential that keeps particles of a certain type restrained to the inside of the specified sphere. Its energy term is given by
where $\mathbf{c}\in\mathbb{R}^3$ denotes the center of the sphere and $r\in\mathbb{R}_{>0}$ the radius of the sphere.
Adding such a potential to a system amounts to
system.box_size = [3, 3, 3]
system.potentials.add_sphere_in(
particle_type="A", force_constant=10., origin=[0, 0, 0], radius=1.
)
which will cause all particles of type A
to be contained in a sphere of radius 1
centered in the origin with a harmonic repulsion potential. Due to the harmonic nature of the potential and dependent on the force constant, particles are allowed to penetrate the sphere for a short period of time.
Spherical barrier
A potential that forms a concentric barrier at a certain radius around a given origin. It is given a height (in terms of energy) and a width. Note that the height can also be negative, then this potential acts as a ‘sticky’ sphere. The potential consists of harmonic snippets, such that the energy landscape is continuous and differentiable, the force is only continuous and not differentiable. Its energy term is given by
where $\mathbf{c}\in\mathbb{R}^3$ is the center of the sphere, $r\in\mathbb{R}$ the sphere’s radius, $w\in\mathbb{R}$ the width of the barrier, and $h\in\mathbb{R}$ the height of the barrier.
Adding such a potential to a system amounts to
system.box_size = [3, 3, 3]
# as a barrier
system.potentials.add_spherical_barrier(
particle_type="A", height=1.0, width=0.1, origin=[0, 0, 0], radius=1.
)
# sticky
system.potentials.add_spherical_barrier(
particle_type="A", height=-1.0, width=0.1, origin=[0, 0, 0], radius=1.
)
which will cause particles to be trapped inside or outside of the spherical barrier in the first case or will make them stick onto the surface of the sphere in the second case.
Pair potentials
Pair potentials or second-order potentials are potentials that depend on the relative positioning of a pair of particles to one another. They are registered with respect to two not necessarily distinct particle types and then exert a force on each particle of these types individually.
Currently available pair potentials are:
Harmonic repulsion
A harmonic repulsion potential causes each two particles of a certain type to repulse each other once they enter a certain radius. It can be used to emulate a radius of a particle type while still allowing for a relatively large time step. The potential term is given by
where $r$ is the distance at which particles begin to interact with respect to this potential.
Adding such a potential to a system amounts to, e.g.,
system.potentials.add_harmonic_repulsion(
"A", "A", force_constant=10., interaction_distance=5.
)
system.potentials.add_harmonic_repulsion(
"B", "B", force_constant=10., interaction_distance=6.
)
system.potentials.add_harmonic_repulsion(
"A", "B", force_constant=10., interaction_distance=2.5+3.
)
which would cause all particles of type A
or B
to repulse from all other particles of type A
or B
. This set of potentials can be understood as inducing a “soft” radius of $r_A = 2.5$ and $r_B=3$ for particle types A
and B
, respectively. Soft meaning that the particles’ spheres can be penetrated for a short period of time by another particle before it is pushed out again.
Weak interaction piecewise harmonic
A weak interaction piecewise harmonic potential causes particles to crowd together once they are within a certain distance of one another. It is defined by three harmonic terms and described by a force constant $k$ which is responsible for the strength of the repulsive part of the potential, a ‘desired distance’ $d$, i.e., a distance at which the potential energy is lowest inside the interaction radius, a ‘depth’ $h$, denoting the depth of the potential well and therefore the stickiness of the potential, and a ‘cutoff’ $r_c$, denoting the distance at which particles begin to interact. The potential term reads
It typically has the following shape:
Adding such a potential to a system can be achieved by calling
system.potentials.add_weak_interaction_piecewise_harmonic(
"A", "B", force_constant=10., desired_distance=5., depth=2., cutoff=7.
)
yielding in this example a potential that lets all particle type pairings interact with one another given they are of type A
and B
and closer than the cutoff $r_c=7$. Once they are within range they would either by drawn into the potential well from the outside (third case in the potential term), kept in the potential well (second case in the potential term), or pushed back into the potential well if they come too close to one another (first case in the potential term).
Lennard-Jones
Similarly to a weak interaction potential, the Lennard-Jones potential models the interaction between a pair of particles. However it is not a soft potential and therefore requires a relatively small time step in order to function correctly. The potential term reads
where $k(\varepsilon, n, m)\in\mathbb{R}$ is the force constant, $\sigma\in\mathbb{R}$ the distance at which the inter-particle potential is zero, $\varepsilon\in\mathbb{R}$ the depth of the potential well, i.e., $V_\text{LJ}(r_\text{min})=-\varepsilon$, and $m,n\in\mathbb{N}, m>n$ exponents which determine the stiffness and range of the potential. For the classical Lennard-Jones potential the exponents are given by $m=12$ and $n=6$. The potential itself approaches but never reaches zero beyond the interaction well. Therefore, a cutoff is introduced, usually at $r_c=2.5\sigma$ (for the 12-6 LJ potential), which is the point at which the potential as roughly $1/60$th of its minimal value $-\varepsilon$. This however leads to a jump discontinuity at $r_c$ in the energy landscape, which can be avoided by shifting the potential by the value at the discontinuity:
The force constant $k$ is chosen such that the depth at the well is is $V(r_\mathrm{min}) = -\varepsilon$, i.e.,
Different choices of exponents that can be found in the literature are, e.g., $9-3$, $9-6$, or $8-6$.
Adding such a potential to a system can be achieved by calling
system.potentials.add_lennard_jones(
"A", "B", m=12, n=6, cutoff=2.5, shift=True, epsilon=1.0, sigma=1.0)
)
yielding a truncated 12-6 Lennard-Jones potential between particles of type A and B with a zero inter-particle potential at $\sigma=2.5$, a well depth of $\varepsilon=1.0$, and a cutoff radius of $r_c=2.5 = 2.5\cdot\sigma$. If the shift in the energy landscape to avoid the jump discontinuity is not desired, it can be switched off by setting shift=False
.
Screened electrostatics
The “screened electrostatics” (also: Yukawa or Debye-Hückel) potential is a potential that represents electrostatic interaction (both repulsive or attractive), which is screened with a certain screening depth. This kind of potential becomes important when dealing with particles representing proteins that have a net-charge. However, it is usually more expensive to evaluate than, e.g., harmonic repulsion, as it requires a larger cutoff and smaller time step. If the electrostatic term is attractive, a core repulsion term is added. The potential term reads
where $C\in\mathbb{R}$ is the electrostatic repulsion strength in units of energy times distance, $\kappa\in\mathbb{R}$ is the inverse screening depth in units of 1/length, $D\in\mathbb{R}$ is the repulsion strength in units of energy, $\sigma\in\mathbb{R}$ is the core repulsion radius or zero-interaction radius in units of length, $n\in\mathbb{N}$ is the core repulsion exponent (dimensionless), and $r_c\in\mathbb{R}$ the cutoff radius in units of length. It typically has the following shape:
One can observe that the first term in the potential’s definition diverges towards $-\infty$ for $r\searrow 0$ which is an effect that gets countered by the second term, diverging towards $+\infty$ for $r\searrow 0$. The depth of the potential well increases with an increasing exponent $n$.
Adding such a potential to a system amounts to
system.potentials.add_screened_electrostatics(
"A", "B", electrostatic_strength=-1., inverse_screening_depth=1.,
repulsion_strength=1., repulsion_distance=1., exponent=6, cutoff=6.
)
which would introduce an electrostatic interaction between particles of type A and B that resembles the above plot.
Topologies
Topologies are a way to include molecular structure in a reaction-diffusion simulation. More specifically, a topology is a group of particles with fixed potential terms like bonds and angles between certain particles. Topologies in ReaDDy consist of two ingredients:
- A connectivity graph, where the vertices of the graph correspond to the particles in the topology,
- a lookup table for potential terms between certain combinations of particle types.
How to set up the actual connectivity graph can be found in the section about setting up and running the simulation, as it requires particles being added to the simulation.
Since particles that are part of a topology are internally treated differently than “normal” particles, their species have to be configured by a call to
system.add_topology_species("T", diffusion_constant=2.0)
Furthermore, for operations that function on the topology level, topologies have a “topology type” which can be seen as the generalization of a “particle type”. To add such a type, one can invoke
system.topologies.add_type("My topology type")
For a topology to be recognized as “valid”, both of the following conditions need to be fulfilled:
- The connectivity graph needs to be connected, i.e., there must not be independent components.
- Each edge in the connectivity graph needs to have a corresponding bond configured based on the respective particle types. If one of these conditions is not fulfilled, an exception is raised and the simulation will not start.
Potentials
Topologies are defined by a set of particles that are connected with a graph and a lookup table that defines what connectivities between what particle types yield which potentials. This section deals with the latter, i.e., with the lookup table. The lookup table is independent of the topology type, so all potentials that are defined here will be applied to pairs/triples/quadruples of particles which are connected in the respective topologies connectivity graph.
In this picture the dashed lines denote the connectivity graph between the particles, the blue lines bond potentials, the green lines angle potentials, and the orange lines dihedral potentials. One can see that bonds are defined on pairs of particles, angles on triples, dihedrals on quadruples. In this particular case one has
| Bonds | Angles | Dihedrals |
|---|---|---|
| $A\leftrightarrow A$ | $C\leftrightarrow B\leftrightarrow A$ | $A\leftrightarrow A\leftrightarrow B \leftrightarrow A$ |
| $A\leftrightarrow B$ | ||
| $A\leftrightarrow C$ |
In an actual instance of a topology one would also have to define a bond between particles of type $C\leftrightarrow C$ or remove that edge from the graph, otherwise it would not be considered valid.
ReaDDy supports three types of potentials within topologies:
Harmonic bonds
Harmonic bonds model, e.g., covalent bonds in a molecular structure. The potential term yields forces that push pairs of particles away from one another if they become closer than a certain distance and attracts them if they are further apart than that distance. It reads
where $r_0$ is the preferred distance and $k$ the force constant.
Adding such a potential term to a system amounts to, e.g.,
system.add_topology_species("T1", diffusion_constant=2.)
system.add_topology_species("T2", diffusion_constant=4.)
system.topologies.configure_harmonic_bond(
"T1", "T2", force_constant=10., length=2.
)
which would have the effect of introducing for each topology a harmonic bond with force constant 10 and preferred distance 2 between each adjacent pair of particles with types “T1” and “T2”, respectively.
Harmonic angles
Harmonic angles are potential terms that yield a preferred configuration for a triple of particles in terms of the spanned angle $\theta$.
Should the spanned angle be different from the preferred angle $\theta_0$, a harmonic force acts on each of the particles toward the preferred angle. The potential energy term reads
where $\theta_{i,j,k}$ corresponds to the angle spanned by three particle’s positions $\mathbf{x}_i, \mathbf{x}_j, \mathbf{x}_k$ and $k$ is the force constant.
Configuring such a potential for a system amounts to, e.g.,
system.add_topology_species("T1", diffusion_constant=2.)
system.add_topology_species("T2", diffusion_constant=4.)
system.add_topology_species("T3", diffusion_constant=4.)
system.topologies.configure_harmonic_angle(
"T1", "T2", "T3", force_constant=1., equilibrium_angle=3.141
)
yielding harmonic angle potential terms for each triple of particles with types (T1, T2, T3)
(or equivalently types (T3, T2, T1)
) that are contained in a topology and have edges between the particles corresponding to types (T1, T2)
and (T2, T3)
, respectively.
Cosine dihedrals
The sketch above depicts the definition of the proper dihedral angle $\phi$ spanned by four particles with corrdinates $\mathbf{x}_i$, $\mathbf{x}_j$, $\mathbf{x}_k$, and $\mathbf{x}_l$, respectively. The potential energy is given by
where $\phi_0\in [ -\pi,\pi ]$ represents the offset angle, $k$ the force constant in units of energy/angle**2
, and $n\in\mathbb{N}_{>0}$ the multiplicity, indicating the number of minima encountered when rotating the bond through $360^\circ$.
The $i$-th preferred particle configuration, i.e. the $i$-th minimum of $V$ are $\phi_i = \frac{1}{n}\left( \frac{\pi}{2} - \phi_0 + i\pi \right)$
Configuring such a potential for a system amounts to, e.g.,
system.add_topology_species("T1", diffusion_constant=2.)
system.add_topology_species("T2", diffusion_constant=4.)
system.add_topology_species("T3", diffusion_constant=4.)
system.add_topology_species("T4", diffusion_constant=4.)
system.topologies.configure_cosine_dihedral(
"T1", "T2", "T3", "T4", force_constant=10, multiplicity=1., phi0=0.
)
yielding cosine dihedral potentials for each path of length 4 with vertices corresponding to particles of types (T1, T2, T3, T4)
in the connectivity graph of a topology instance. The sequence in which the types are given can be reversed, i.e.,
system.topologies.configure_cosine_dihedral(
"T4", "T3", "T2", "T1", force_constant=10, multiplicity=1., phi0=0.
)
results in the same potential terms.
Angles are internally always expressed in radians.
Topology reactions
Topology reactions provide means to change the structure of a topology during the course of a simulation. Changing the structure can involve:
- Changing particle types of particles inside topologies and therefore changing the force field,
- breaking and forming bonds inside a topology resulting in different connectivity or the separation of a topology in separated instances,
- attaching particles to topologies,
- connecting two topologies by introducing an edge between their graphs.
These changes are divided into two types: Structural reactions and spatial reactions, where, as the name suggests, structural reactions change the internal structure of a topology and are independent of the actual spatial configuration of the system and spatial reactions represent local changes of the graph triggered by spatial events, i.e., attaching particles or forming bonds between two topology instances. The following sections are ordered accordingly:
Structural reactions
Structural topology reactions are defined on the topology type. They basically consist out of two functions:
- the reaction function, taking a topology object as input and returning a
reaction recipe
describing what the structural changes are to be applied to the topology - the rate function, which takes a topology object as input and returns a corresponding fixed rate.
The rate function is evaluated initially and then only when the topology has changed due to other reactions. The reaction function is only evaluated when a topology reaction is performed. It should be noted that these function evaluations can have negative performance impacts when occurring frequently.
The above figure shows an example of a structural topology reaction. In the upper row there are particles $i,j,k,l$ from left to right with a graph that connects the pairs $(i,j)$, $(j,k)$, and $(k,l)$. Due to this adjacency, there are bonds $b_{01}$, $b_{12}$, and $b_{23}$ as well as angles $a_{012}$ and $a_{123}$. The lower row represents the configuration after a topology reaction that removed the edge $(k,l)$. In its absence the bond $b_{12}$ and the angle $a_{123}$ are removed and the topology originally consisting out of four particles decays into two topologies - one with three particles and one trivial topology containing just one particle.
The reaction function
In order to configure such a reaction for a reaction diffusion system, one first needs to set up a function that given a topology returns an instance of StructuralReactionRecipe
, essentially describing the desired changes in structure:
def no_op_reaction_function(topology):
recipe = readdy.StructuralReactionRecipe(topology)
return recipe
One can base the behavior of the reaction on the current state of the topology instance. It offers information about the contained particles configuration:
topology.get_graph()
ortopology.graph
yields the connectivity graph of the topology:graph.get_vertices()
orgraph.vertices
yields a list of vertices that has a 1-1 correspondence to what is yielded bytopology.particles
. Each vertex itself can be iterated, yielding its adjacent vertices:# for every vertex for v in graph.vertices: print("vertex {}".format(v.particle_index)) # obtain number of its neighbors' neighbors n_neighbors_neighbors = 0 for neighbor in v: for neighbor_neighbor in neighbor.get(): n_neighbors_neighbors += 1
graph.get_edges()
orgraph.edges
yields a list of edges contained in the graph, where each edge is represented by a tuple of vertices:for e in graph.get_edges(): v1, v2 = e[0], e[1] print("edge {} -- {}".format(v1.particle_index, v2.particle_index))
topology.position_of_vertex(v)
yields the position of the particle corresponding to the provided vertex,topology.particle_type_of_vertex(v)
yields the type of the particle corresponding to the provided vertex,topology.particle_id_of_vertex(v)
yields the unique id of the particle corresponding to the provided vertex.
With these information, there are several operations that can be added to a recipe:
recipe.change_particle_type(vertex_index, type)
: Changes the particle type of the tovertex_index
associated particle to the given type, where the vertex index corresponds to the particle’s index. Can also be called with vertex instance directly.recipe.add_edge(v_index1, v_index2)
: Introduces an edge in the graph between vertices corresponding to indicesv_index1
andv_index2
. Can also be called with vertex instances directly.recipe.remove_edge(v_index1, v_index2)
: Attempts to remove an edge between vertices corresponding to the indices. Depending on the configuration of the topology reaction, this can lead to a failed state or multiple sub-topologies. Can also be called with vertex instance directly.recipe.remove_edge(edge)
: Same as with indices just that it takes an edge instance as contained ingraph.get_edges()
.recipe.separate_vertex(index)
: Removes all edges from the topology’s graph that contain the vertex corresponding to the provided index (or vertex instance). If no new edge is formed between the given vertex this call, depending on the configuration of the reaction, can lead to a failed state or to formation of a topology consisting out of only one particle. In the latter case, this call can be followed by a call torecipe.change_particle_type
, where the target type is no topology type. Then, no one-particle topology will be formed but the particle will simply be emitted and treated as normal particle.recipe.change_topology_type(type)
: Changes the type of the topology to the given type, potentially changing its structural and spatial topology reactions.recipe.append_particle(list_of_neighbor_vertices, particle_type, position)
: Adds a new particle to the topology. It will have the specifiedparticle_type
andposition
and will be connected to the vertices specified inlist_of_neighbor_vertices
.
The rate function
Same as ordinary reactions, also structural topology reactions have a rate with which they occur. This rate is microscopic, has units of inverse time and can be understood as the probability per unit time of the reaction taking place. Same as for normal reactions, the probability is evaluated as $p=1-e^{-\lambda\tau}$, where $\lambda\geq0$ is the rate and $\tau$ the integration time step.
In order to define a rate for a certain structural reaction, one needs to provide a rate function:
def my_rate_function(topology):
n = len(topology.get_graph().get_vertices())
if n > 3:
return .5 * n
else:
return 20.
The function takes a topology instance as argument and returns a floating point value representing the rate in terms of the magnitude w.r.t. the default units. In this example it returns half the number of vertices if the number of vertices is larger than three, otherwise a constant value of 20.
For performance reasons it is only evaluated if the topology changes structurally, therefore the rate should optimally not depend on anything that can change a lot in the simulation time between evaluating the rate function and performing the reaction, e.g., the particles’ spatial configuration.
Adding a structural reaction
Given these two functions, the reaction and the rate function, all that is left to do is to add them to a certain topology type in the system:
system.topologies.add_structural_reaction(
name="my_structural_reaction",
topology_type="TType",
reaction_function=no_op_reaction_function,
rate_function=my_rate_function,
raise_if_invalid=True, expect_connected=False
)
where name
is a user-provided unique identifier for this reaction, which is used in observing reaction counts.
The above snippet adds the structural reaction my_structural_reaction
to all topologies of type TType
with the provided reaction function and rate function.
The option raise_if_invalid
raises, if set to True
, an error if the outcome of the reaction function is invalid, otherwise it will just roll back to the state of before the reaction and print a warning into the log.
The other option expect_connected
can trigger depending on the value of raise_if_invalid
a raise if set to True
and the topology’s connectivity graph decayed into two or more independent components.
Spatial reactions
Spatial reactions are locally triggered by proximity of particles, therefore they are not only defined on topology types but also on particle types. In principle there are two kinds of spatial reactions: The kind that causes forming a bond between two particles and the kind that just changes a particle/topology type, corresponding to particle fusion and enzymatic reactions, respectively. Analogously spatial topology reactions also possess
- a rate determining how likely the reaction occurs per time step as well as
- a radius determining the volume which is scanned for potential reaction partners.
To simplify the definition of these reactions a descriptor language is used, deciding about the nature of the reaction. It consists out of a label and a topology-particle-type reaction equation:
where $T_i$ denote topology types, $P_i$ denote particle types.
- The first reaction is of “enzymatic” type, changing the types of particles corresponding to $P_1$ to $P_3$ and $P_2$ to $P_4$ if they are contained in topologies of type $T_1$ and $T_2$ which are also changed to $T_3$ and $T_4$, respectively.
- The second reaction is of “fusion” type, merging two topologies of types $T_1$ and $T_2$ by forming a bond between a particle pair with types $P_1$ and $P_2$ in their respective topologies. The result is a topology of type $T_3$ and the particles between which the bond was formed are of types $P_3$ and $P_4$.
Some of these reactions can also be performed with a topology and a free particle. In particular, the following types of reactions are possible:
TT-Fusion: T1(p1)+T2(p2) -> T3(p3--p4)
: a fusion of a topology of typeT1
with a topology of typeT2
by forming a bond between a pair of particles with typesp1
andp2
, where the product is a topology of typeT3
and the newly connected particles changed their types top3
andp4
, respectively.TT-Fusion-self: T1(p1)+T1(p2) -> T3(p3--p4) [self=true]
: a fusion of two topologies of typeT1
similarly to the first type with the difference that now also particles within the same topology can be reaction partners.TP-Fusion: T1(p1)+(p2) -> T2(p3--p4)
: attaching a free particle of typep2
to a topology of typeT1
if it is close to a particle of typep1
in that topology, yielding a topology of typeT2
in which the newly connected particles are now of typep3
andp4
, respectively.TT-Enzymatic: T1(p1)+T2(p2) -> T3(p3)+T4(p4)
: not changing the structure of the graph of the reaction partners but changing particle types possibly locally influencing the force field and changing topology types possibly leading to different topology reactions.TP-Enzymatic: T1(p1)+(p2) -> T2(p3)+(p4)
: same as theTT-Enzymatic
reaction just that here it is performed with one topology and one free particle.
Adding such a reaction to a system amounts to, e.g.,
system.topologies.add_spatial_reaction(
'TT-Fusion: T1(p1)+T2(p2) -> T3(p3--p4)', rate=1., radius=1.
)
where the rate is in units of 1/time
and the radius is a length. The descriptor is always the first argument and can be of any of the above discussed types.
It should be noted that while usually “normal” particle-particle reactions are not possible with topology-typed particles, one can define enzymatic reactions where the catalyst is a topology type as this leaves the topology untouched and therefore can be evaluated in the normal reaction procedure.
system.add_species("A", diffusion_constant=1.)
system.add_species("B", diffusion_constant=1.)
system.add_topology_species("P", diffusion_constant=.5)
system.topologies.add_type("T")
# OK, this attaches the particle A to the topology
system.topologies.add_spatial_reaction('label1: T1(P)+(A)->T1(P--P)')
# Fails, A is not a topology species type
system.topologies.add_spatial_reaction('label1: T1(P)+(A)->T1(P--A)')
# Fails, P is not a normal particle type
system.topologies.add_spatial_reaction('label1: T1(P)+(P)->T1(P--P)')
# OK, this is a normal fusion reaction
system.reactions.add('A +(2.) A -> A', rate=.1)
# Fails, P is not a normal particle type but a topology particle type
system.reactions.add('A +(2.) P -> A', rate=.2)
# OK, this is the special case where P is the catalyst
system.reactions.add('A +(2.) P -> B + P', rate=.3)
Predefined reactions
For convenience there are predefined topology reactions that can be added to a certain topology type.
Topology dissociation
This reaction causes a topology to break bonds with a rate of n_edges*bond_breaking_rate
, causing it to dissociate. In this process it may decompose into multiple independent components of the same topology type. Consequently, each of these independent components again has a topology dissociation reaction.
Adding such a reaction to a system amounts to
system.topologies.add_type("T")
system.topologies.add_topology_dissociation("T", bond_breaking_rate=10.)


Great deal: Get a pair of Microsoft Surface USB-C-to-USB adapters for just $9.98
by PradeepUnlike most of the Surface devices, the new Surface Pro X and Surface Go only come with an USB-C port, so your existing USB-A based accessories cannot be connected directly. To solve this problem, Microsoft last year released Surface USB-C-to-USB Adapter which adds standard USB functionality to your USB-C port to connect flash drives, keyboards, and other accessories. This adapter regularly costs $20, but it is now on sale. For $10, you can get two of these from BestBuy.
Find the deal here on BestBuy. When you open the listing, it will show $24.99. Click on “Hot offer Save $40 Total on 2 Accessories” link below the price to take advantage of this offer.


Technical Blog 2 Part 1 (Udacity Reflection)
8 December 2015
Some designs and structural features I liked from CSS Zen Garden and others, and would like to implement in future.
Transparency / overlays.. Vertigo
Reflowable / Flexbox content
Transition / Gradations in color
Animations
I like how the header image fades out at the bottom. And the fuzzy borders/repeating parts of an image of the main content text box Shaolin Yokobue
A non-technical analogy of HTML, CSS & The Document Object Model (DOM)
I would say HTML is like the walls or structure of the house, the CSS is what determines the color, wallpaper, curtains etc. And the DOM is what it all looks like when complete, including dynamically generated elements like lighting, smoke effects etc.
Boxifying Design
Boxifying Design is where you look at a design mockup (pdf/jpg etc.) and then draw boxes around the different elements as a precursor and as an aid to creating it in html as an actual page.
The Box Model
The box model is a term used in the context of HTML/CSS in terms of layout. It is the idea that every element in a page is a box and each box has several items. These items are, from the outside in, the margin, the border, the padding and the content. The content is in the very middle surrounded by the other elements in concentric boxes.


@article{HILL99, title = {A pseudorandom generator from any one-way function}, author = {H{\aa}stad, Johan and Impagliazzo, Russell and Levin, Leonid A and Luby, Michael}, journal = {SIAM Journal on Computing}, volume = {28}, number = {4}, pages = {1364--1396}, year = {1999}, publisher = {SIAM} }
@book{Katzbook10, author = {Jonathan Katz}, title = {Digital Signatures}, publisher = {Springer}, year = {2010}, url = {http://dx.doi.org/10.1007/978-0-387-27712-7}, doi = {10.1007/978-0-387-27712-7}, isbn = {978-0-387-27711-0} }
@comment{{MQ}}
@misc{WP05, author = {Christopher Wolf and Bart Preneel}, title = {Taxonomy of Public Key Schemes based on the problem of Multivariate Quadratic equations}, howpublished = {Cryptology ePrint Archive, Report 2005/077}, year = {2005}, url = {http://eprint.iacr.org/2005/077} }
@article{Buch65, title = {Bruno Buchberger's PhD thesis 1965: An algorithm for finding the basis elements of the residue class ring of a zero dimensional polynomial ideal}, author = {Buchberger, Bruno}, journal = {Journal of symbolic computation}, volume = {41}, number = {3}, pages = {475--511}, year = {2006}, publisher = {Elsevier} }
@book{Stu02, title = {Solving systems of polynomial equations}, author = {Sturmfels, Bernd}, number = {97}, year = {2002}, publisher = {American Mathematical Soc.} }
@article{EF14, title = {A survey on signature-based {Gr{\"o}bner} basis computations}, author = {Eder, Christian and Faugere, Jean-Charles}, journal = {arXiv preprint arXiv:1404.1774}, year = {2014} }
@inproceedings{MI88, title = {Public quadratic polynomial-tuples for efficient signature-verification and message-encryption}, author = {Matsumoto, Tsutomu and Imai, Hideki}, booktitle = {Advances in Cryptology--EUROCRYPT 1988}, pages = {419--453}, year = {1988}, organization = {Springer} }
@inproceedings{Patarin96, title = {Hidden fields equations ({HFE}) and isomorphisms of polynomials (IP): Two new families of asymmetric algorithms}, author = {Patarin, Jacques}, booktitle = {Advances in Cryptology--EUROCRYPT 1996}, pages = {33--48}, year = {1996}, organization = {Springer} }
@misc{BFS03, title = {Complexity of {Gr{\"o}bner} basis computation for Semi-regular Overdetermined sequences over $\mathbb{F}_2$ with solutions in $\mathbb{F}_2$}, author = {Bardet, Magali and Faugere, Jean-Charles and Salvy, Bruno}, year = {2003}, note = {Tech Report available at \url{https://hal.inria.fr/inria-00071534}} }
@incollection{BFV13, title = {Graph-theoretic algorithms for the ``isomorphism of polynomials'' problem}, author = {Bouillaguet, Charles and Fouque, Pierre-Alain and V{\'e}ber, Amandine}, booktitle = {Advances in Cryptology--EUROCRYPT 2013}, pages = {211--227}, year = {2013}, publisher = {Springer} }
@comment{{HASH}}
@article{Lamport79, title = {Constructing digital signatures from a one-way function}, author = {Lamport, Leslie}, journal = {Tech. Report: SRI International Computer Science Laboratory}, year = {1979} }
@inproceedings{Mer90, title = {A Certified Digital Signature}, author = {Merkle, Ralph C}, booktitle = {Advances in Cryptology--CRYPTO 1989}, pages = {218--238}, year = {1990}, organization = {Springer} }
@incollection{BDH11, title = {XMSS-a practical forward secure signature scheme based on minimal security assumptions}, author = {Buchmann, Johannes and Dahmen, Erik and H{\"u}lsing, Andreas}, booktitle = {Post-Quantum Cryptography}, pages = {117--129}, year = {2011}, publisher = {Springer} }
@incollection{BHH+15, title = {{SPHINCS}: practical stateless hash-based signatures}, author = {Bernstein, Daniel J and Hopwood, Daira and H{\"u}lsing, Andreas and Lange, Tanja and Niederhagen, Ruben and Papachristodoulou, Louiza and Schneider, Michael and Schwabe, Peter and Wilcox-O'Hearn, Zooko}, booktitle = {Advances in Cryptology--EUROCRYPT 2015}, pages = {368--397}, year = {2015}, publisher = {Springer} }
@comment{{lattice crypto}}
@misc{Pei15_survey, author = {Chris Peikert}, title = {A Decade of Lattice Cryptography}, howpublished = {Cryptology ePrint Archive, Report 2015/939}, year = {2015} }
@article{Reg09, title = {On lattices, learning with errors, random linear codes, and cryptography}, author = {Regev, Oded}, journal = {Journal of the ACM (JACM)}, volume = {56}, number = {6}, pages = {34}, year = {2009}, publisher = {ACM} }
@incollection{Lyu09, title = {Fiat-Shamir with aborts: Applications to lattice and factoring-based signatures}, author = {Lyubashevsky, Vadim}, booktitle = {Advances in Cryptology--ASIACRYPT 2009}, pages = {598--616}, year = {2009}, publisher = {Springer} }
@incollection{Lyu08, title = {Lattice-based identification schemes secure under active attacks}, author = {Lyubashevsky, Vadim}, booktitle = {Public Key Cryptography--PKC 2008}, pages = {162--179}, year = {2008}, publisher = {Springer} }
@incollection{KTX08, title = {Concurrently secure identification schemes based on the worst-case hardness of lattice problems}, author = {Kawachi, Akinori and Tanaka, Keisuke and Xagawa, Keita}, booktitle = {Advances in Cryptology-ASIACRYPT 2008}, pages = {372--389}, year = {2008}, publisher = {Springer} }
@incollection{Lyu12_fs, title = {Lattice signatures without trapdoors}, author = {Lyubashevsky, Vadim}, booktitle = {Advances in Cryptology--EUROCRYPT 2012}, pages = {738--755}, year = {2012}, publisher = {Springer} }
@incollection{DDLL13, title = {Lattice signatures and bimodal Gaussians}, author = {Ducas, L{\'e}o and Durmus, Alain and Lepoint, Tancr{\`e}de and Lyubashevsky, Vadim}, booktitle = {Advances in Cryptology--CRYPTO 2013}, pages = {40--56}, year = {2013}, publisher = {Springer} }
@inproceedings{GPV08, title = {Trapdoors for hard lattices and new cryptographic constructions}, author = {Gentry, Craig and Peikert, Chris and Vaikuntanathan, Vinod}, booktitle = {Proceedings of the {Fourteenth} annual ACM symposium on Theory of computing}, pages = {197--206}, year = {2008}, organization = {ACM} }
@inproceedings{Peikert09, title = {Public-key cryptosystems from the worst-case shortest vector problem}, author = {Peikert, Chris}, booktitle = {Proceedings of the {Forty-First} annual ACM symposium on Theory of computing}, pages = {333--342}, year = {2009}, organization = {ACM} }
@misc{MicPKC10, title = { Duality in lattice cryptography}, author = {Daniele Micciancio}, howpublished = {Invited talk at Public Key Cryptography}, year = {2010}, note = {Slides available at \url{https://cseweb.ucsd.edu/~daniele/papers/DualitySlides.pdf}} }
@incollection{MP12, title = {Trapdoors for lattices: Simpler, tighter, faster, smaller}, author = {Micciancio, Daniele and Peikert, Chris}, booktitle = {Advances in Cryptology--EUROCRYPT 2012}, pages = {700--718}, year = {2012}, publisher = {Springer} }
@incollection{Boy10, title = {Lattice mixing and vanishing trapdoors: A framework for fully secure short signatures and more}, author = {Boyen, Xavier}, booktitle = {Public Key Cryptography--PKC 2010}, pages = {499--517}, year = {2010}, publisher = {Springer} }
@article{CHKP12, title = {Bonsai trees, or how to delegate a lattice basis}, author = {Cash, David and Hofheinz, Dennis and Kiltz, Eike and Peikert, Chris}, journal = {Journal of Cryptology}, volume = {25}, number = {4}, pages = {601--639}, year = {2012}, publisher = {Springer}, note = {Preliminary version in Eurocrypt 2010} }
@incollection{DM14, title = {Improved short lattice signatures in the standard model}, author = {Ducas, L{\'e}o and Micciancio, Daniele}, booktitle = {Advances in Cryptology--CRYPTO 2014}, pages = {335--352}, year = {2014}, publisher = {Springer} }
@incollection{Alperin15, title = {Short signatures with short public keys from homomorphic trapdoor functions}, author = {Alperin-Sheriff, Jacob}, booktitle = {Public-Key Cryptography--PKC 2015}, pages = {236--255}, year = {2015}, publisher = {Springer} }
@incollection{PR06, title = {Efficient collision-resistant hashing from worst-case assumptions on cyclic lattices}, author = {Peikert, Chris and Rosen, Alon}, booktitle = {Theory of Cryptography}, pages = {145--166}, year = {2006}, publisher = {Springer} }
@incollection{LM06, title = {Generalized compact knapsacks are collision resistant}, author = {Lyubashevsky, Vadim and Micciancio, Daniele}, booktitle = {Automata, Languages and Programming}, pages = {144--155}, year = {2006}, publisher = {Springer} }
@incollection{SSTX09, title = {Efficient public key encryption based on ideal lattices}, author = {Stehl{\'e}, Damien and Steinfeld, Ron and Tanaka, Keisuke and Xagawa, Keita}, booktitle = {Advances in Cryptology--ASIACRYPT 2009}, pages = {617--635}, year = {2009}, publisher = {Springer} }
@article{PW11, title = {Lossy trapdoor functions and their applications}, author = {Peikert, Chris and Waters, Brent}, journal = {SIAM Journal on Computing}, volume = {40}, number = {6}, pages = {1803--1844}, year = {2011}, publisher = {SIAM}, note = {Preliminary version in STOC 2008} }
@article{LPR13, title = {On ideal lattices and learning with errors over rings}, author = {Lyubashevsky, Vadim and Peikert, Chris and Regev, Oded}, journal = {Journal of the ACM (JACM)}, volume = {60}, number = {6}, pages = {43}, year = {2013}, publisher = {ACM}, note = {Preliminary version in Eurocrypt 2010} }
@misc{SS13, title = {Making NTRUEncrypt and NTRUSign as Secure as Standard Worst-Case Problems over Ideal Lattices.}, author = {Stehl{\'e}, Damien and Steinfeld, Ron}, howpublished = {Cryptology ePrint Archive, Report 2013/004}, year = {2013}, note = {Preliminary version in Eurocrypt 2011} }
@incollection{HPS98, title = {NTRU: A ring-based public key cryptosystem}, author = {Hoffstein, Jeffrey and Pipher, Jill and Silverman, Joseph H}, booktitle = {Algorithmic number theory}, pages = {267--288}, year = {1998}, publisher = {Springer} }
@incollection{GGH97, title = {Public-key cryptosystems from lattice reduction problems}, author = {Goldreich, Oded and Goldwasser, Shafi and Halevi, Shai}, booktitle = {Advances in Cryptology--CRYPTO 1997}, pages = {112--131}, year = {1997}, publisher = {Springer} }
@incollection{HPS01, title = {NSS: An NTRU lattice-based signature scheme}, author = {Hoffstein, Jeffrey and Pipher, Jill and Silverman, Joseph H}, booktitle = {Advances in Cryptology--Eurocrypt 2001}, pages = {211--228}, year = {2001}, publisher = {Springer} }
@incollection{HHGP+03, title = {NTRUSIGN: Digital signatures using the NTRU lattice}, author = {Hoffstein, Jeffrey and Howgrave-Graham, Nick and Pipher, Jill and Silverman, Joseph H and Whyte, William}, booktitle = {Topics in Cryptology--CT-RSA 2003}, pages = {122--140}, year = {2003}, publisher = {Springer} }
@inproceedings{GS02, title = {Cryptanalysis of the revised {NTRU} signature scheme}, author = {Gentry, Craig and Szydlo, Mike}, booktitle = {Advances in Cryptology--EUROCRYPT 2002}, pages = {299--320}, year = {2002}, organization = {Springer} }
@article{NR09, title = {Learning a parallelepiped: Cryptanalysis of GGH and NTRU signatures}, author = {Nguyen, Phong Q and Regev, Oded}, journal = {Journal of Cryptology}, volume = {22}, number = {2}, pages = {139--160}, year = {2009}, publisher = {Springer}, note = {Preliminary version in Eurocrypt 2006} }
@incollection{DN12, title = {Learning a zonotope and more: Cryptanalysis of NTRUSign countermeasures}, author = {Ducas, L{\'e}o and Nguyen, Phong Q}, booktitle = {Advances in Cryptology--ASIACRYPT 2012}, pages = {433--450}, year = {2012}, publisher = {Springer} }
@inproceedings{Ajt96, title = {Generating hard instances of lattice problems}, author = {Ajtai, Mikl{\'o}s}, booktitle = {Proceedings of the twenty-eighth annual ACM symposium on Theory of computing}, pages = {99--108}, year = {1996}, organization = {ACM} }
@article{MR04, title = {Worst-case to average-case reductions based on Gaussian measures}, author = {Micciancio, Daniele and Regev, Oded}, journal = {SIAM Journal on Computing}, volume = {37}, number = {1}, pages = {267--302}, year = {2007}, publisher = {SIAM}, note = {Preliminary version in FOCS 2004} }
@article{Mic07, title = {Generalized compact knapsacks, cyclic lattices, and efficient one-way functions}, author = {Micciancio, Daniele}, journal = {Computational Complexity}, volume = {16}, number = {4}, pages = {365--411}, year = {2007}, publisher = {Springer}, note = {Preliminary version in FOCS 2002} }
@inproceedings{BLP+13, title = {Classical hardness of learning with errors}, author = {Brakerski, Zvika and Langlois, Adeline and Peikert, Chris and Regev, Oded and Stehl{\'e}, Damien}, booktitle = {Proceedings of the Forty-Fifth annual ACM symposium on Theory of computing}, pages = {575--584}, year = {2013}, organization = {ACM} }
@incollection{Ajtai99, title = {Generating hard instances of the short basis problem}, author = {Ajtai, Mikl{\'o}s}, booktitle = {Automata, Languages and Programming}, pages = {1--9}, year = {1999}, publisher = {Springer} }
@article{AP11, title = {Generating shorter bases for hard random lattices}, author = {Alwen, Jo{\"e}l and Peikert, Chris}, journal = {Theory of Computing Systems}, volume = {48}, number = {3}, pages = {535--553}, year = {2011}, publisher = {Springer}, note = {Preliminary version in STACS 2009} }
@incollection{Peikert14, title = {Lattice cryptography for the internet}, author = {Peikert, Chris}, booktitle = {Post-Quantum Cryptography}, pages = {197--219}, year = {2014}, publisher = {Springer} }
@article{Peikert08_lp, title = {Limits on the hardness of lattice problems in $\ell_p$ norms}, author = {Peikert, Chris}, journal = {Computational Complexity}, volume = {17}, number = {2}, pages = {300--351}, year = {2008}, publisher = {Springer} }
@article{LLL82, title = {Factoring polynomials with rational coefficients}, author = {Lenstra, Arjen Klaas and Lenstra, Hendrik Willem and Lov{\'a}sz, L{\'a}szl{\'o}}, journal = {Mathematische Annalen}, volume = {261}, number = {4}, pages = {515--534}, year = {1982}, publisher = {Springer} }
@article{Schnorr87, title = {A hierarchy of polynomial time lattice basis reduction algorithms}, author = {Schnorr, Claus-Peter}, journal = {Theoretical computer science}, volume = {53}, number = {2}, pages = {201--224}, year = {1987}, publisher = {Elsevier} }
@incollection{CNBKZ11, title = {BKZ 2.0: Better lattice security estimates}, author = {Chen, Yuanmi and Nguyen, Phong Q}, booktitle = {Advances in Cryptology--ASIACRYPT 2011}, pages = {1--20}, year = {2011}, publisher = {Springer} }
@inproceedings{Kannan83, title = {Improved algorithms for integer programming and related lattice problems}, author = {Kannan, Ravi}, booktitle = {Proceedings of the Fifteenth annual ACM symposium on Theory of computing}, pages = {193--206}, year = {1983}, organization = {ACM} }
@incollection{GNR10, title = {Lattice enumeration using extreme pruning}, author = {Gama, Nicolas and Nguyen, Phong Q and Regev, Oded}, booktitle = {Advances in Cryptology--EUROCRYPT 2010}, pages = {257--278}, year = {2010}, publisher = {Springer} }
@inproceedings{AKS01, title = {A sieve algorithm for the shortest lattice vector problem}, author = {Ajtai, Mikl{\'o}s and Kumar, Ravi and Sivakumar, Dandapani}, booktitle = {Proceedings of the Thirty-third annual ACM symposium on Theory of computing}, pages = {601--610}, year = {2001}, organization = {ACM} }
@inproceedings{MVSODA10, title = {Faster exponential time algorithms for the shortest vector problem}, author = {Micciancio, Daniele and Voulgaris, Panagiotis}, booktitle = {Proceedings of the Twenty-first annual ACM-SIAM symposium on Discrete Algorithms}, pages = {1468--1480}, year = {2010}, organization = {Society for Industrial and Applied Mathematics} }
@article{MV13, title = {A deterministic single exponential time algorithm for most lattice problems based on Voronoi cell computations}, author = {Micciancio, Daniele and Voulgaris, Panagiotis}, journal = {SIAM Journal on Computing}, volume = {42}, number = {3}, pages = {1364--1391}, year = {2013}, publisher = {SIAM}, note = {Preliminary version in STOC 2010} }
@inproceedings{ADRSD15, title = {Solving the Shortest Vector Problem in $2^n$ Time Using Discrete Gaussian Sampling}, author = {Aggarwal, Divesh and Dadush, Daniel and Regev, Oded and Stephens-Davidowitz, Noah}, booktitle = {Proceedings of the Forty-Seventh Annual ACM on Symposium on Theory of Computing}, pages = {733--742}, year = {2015}, organization = {ACM} }
@inproceedings{Ajt98, title = {The shortest vector problem in L 2 is NP-hard for randomized reductions}, author = {Ajtai, Mikl{\'o}s}, booktitle = {Proceedings of the thirtieth annual ACM symposium on Theory of computing}, pages = {10--19}, year = {1998}, organization = {ACM} }
@article{Mic01, title = {The shortest vector in a lattice is hard to approximate to within some constant}, author = {Micciancio, Daniele}, journal = {SIAM journal on Computing}, volume = {30}, number = {6}, pages = {2008--2035}, year = {2001}, publisher = {SIAM}, note = {Preliminary version in FOCS 1998} }
@article{Khot05, title = {Hardness of approximating the shortest vector problem in lattices}, author = {Khot, Subhash}, journal = {Journal of the ACM (JACM)}, volume = {52}, number = {5}, pages = {789--808}, year = {2005}, publisher = {ACM}, note = {Preliminary version in FOCS 2003} }
@comment{{Code-based}}
@article{McE78, title = {A public-key cryptosystem based on algebraic coding theory}, author = {McEliece, RJ}, year = {1978}, journal = {The Deep Space Network Progress Report}, volume = {42}, number = {44}, pages = {114--116} }
@article{Nie86, title = {Knapsack-type cryptosystems and algebraic coding theory}, author = {Harald Niederreiter}, journal = {Problems of Control and Information Theory}, volume = {15}, pages = {19--34}, year = {1986}, note = {Problemy Upravlenija i Teorii Informacii 15, 159--166} }
@inproceedings{Ale03, title = {More on average case vs approximation complexity}, author = {Alekhnovich, Michael}, booktitle = {Foundations of Computer Science, 2003. Proceedings. 44th Annual IEEE Symposium on}, pages = {298--307}, year = {2003}, organization = {IEEE} }
@misc{EOS06_survey, author = {D. Engelbert, R. Overbeck and A. Schmidt}, title = {A Summary of {McEliece}-Type Cryptosystems and their Security}, howpublished = {Cryptology ePrint Archive, Report 2006/162}, year = {2006}, note = {\url{https://eprint.iacr.org/2006/162}} }
@article{Stern96, title = {A new paradigm for public key identification}, author = {Stern, Jacques}, journal = {Information Theory, IEEE Transactions on}, volume = {42}, number = {6}, pages = {1757--1768}, year = {1996}, publisher = {IEEE} }
@incollection{CFS01, title = {How to achieve a {McEliece}-based digital signature scheme}, author = {Courtois, Nicolas T and Finiasz, Matthieu and Sendrier, Nicolas}, booktitle = {Advances in Cryptology--ASIACRYPT 2001}, pages = {157--174}, year = {2001}, publisher = {Springer} }
@incollection{Dallot07, title = {Towards a concrete security proof of Courtois, Finiasz and Sendrier signature scheme}, author = {Dallot, L{\'e}onard}, booktitle = {Research in Cryptology}, pages = {65--77}, year = {2007}, publisher = {Springer} }
@article{FGOPT13, title = {A distinguisher for high-rate {McEliece} cryptosystems}, author = {Faugere, Jean-Charles and Gauthier-Umana, Val{\'e}rie and Otmani, Ayoub and Perret, Ludovic and Tillich, Jean-Pierre}, journal = {Information Theory, IEEE Transactions on}, volume = {59}, number = {10}, pages = {6830--6844}, year = {2013}, publisher = {IEEE} }
@inproceedings{KIPKC01, title = {Semantically secure {McEliece} public-key cryptosystems-conversions for McEliece PKC}, author = {Kobara, Kazukuni and Imai, Hideki}, booktitle = {Public Key Cryptography}, pages = {19--35}, year = {2001}, organization = {Springer} }
@article{NIKM08, title = {Semantic security for the McEliece cryptosystem without random oracles}, author = {Nojima, Ryo and Imai, Hideki and Kobara, Kazukuni and Morozov, Kirill}, journal = {Designs, Codes and Cryptography}, volume = {49}, number = {1-3}, pages = {289--305}, year = {2008}, publisher = {Springer} }
@article{RS10, title = {Chosen-ciphertext security via correlated products}, author = {Rosen, Alon and Segev, Gil}, journal = {SIAM Journal on Computing}, volume = {39}, number = {7}, pages = {3058--3088}, year = {2010}, publisher = {SIAM}, note = {Preliminary version in STOC 2009} }
@article{DDMQN12, title = {A CCA2 secure variant of the {McEliece} cryptosystem}, author = {D{\"o}ttling, Nico and Dowsley, Rafael and M{\"u}ller-Quade, J{\"o}rn and Nascimento, Anderson CA}, journal = {Information Theory, IEEE Transactions on}, volume = {58}, number = {10}, pages = {6672--6680}, year = {2012}, publisher = {IEEE}, note = {Preliminary version in CT-RSA 2009} }
@article{BMT78, title = {On the inherent intractability of certain coding problems}, author = {Berlekamp, Elwyn R and McEliece, Robert J and Van Tilborg, Henk CA}, journal = {IEEE Transactions on Information Theory}, volume = {24}, number = {3}, pages = {384--386}, year = {1978} }
@article{Vardy97, title = {The intractability of computing the minimum distance of a code}, author = {Vardy, Alexander}, journal = {IEEE Transactions on Information Theory}, volume = {43}, number = {6}, pages = {1757--1766}, year = {1997} }
@article{DMS03, title = {Hardness of approximating the minimum distance of a linear code}, author = {Dumer, Ilya and Micciancio, Daniele and Sudan, Madhu}, journal = {Information Theory, IEEE Transactions on}, volume = {49}, number = {1}, pages = {22--37}, year = {2003}, publisher = {IEEE}, note = {Preliminary version in FOCS 1999} }
@article{FM04, title = {The inapproximability of lattice and coding problems with preprocessing}, author = {Feige, Uriel and Micciancio, Daniele}, journal = {Journal of Computer and System Sciences}, volume = {69}, number = {1}, pages = {45--67}, year = {2004}, publisher = {Academic Press, Inc.}, note = {Preliminary version in CCC 2002} }
@article{Reg04_code, title = {Improved inapproximability of lattice and coding problems with preprocessing}, author = {REGEV, Oded}, journal = {IEEE transactions on information theory}, volume = {50}, number = {9}, pages = {2031--2037}, year = {2004}, publisher = {Institute of Electrical and Electronics Engineers}, note = {Preliminary version in CCC 2003} }
@article{GV05, title = {Maximum-likelihood decoding of Reed-Solomon codes is {NP}-hard}, author = {Guruswami, Venkatesan and Vardy, Alexander}, journal = {Information Theory, IEEE Transactions on}, volume = {51}, number = {7}, pages = {2249--2256}, year = {2005}, publisher = {IEEE}, note = {Preliminary version in SODA 2005} }
@incollection{DMR11, title = {{Mceliece} and {Niederreiter} cryptosystems that resist quantum fourier sampling attacks}, author = {Dinh, Hang and Moore, Cristopher and Russell, Alexander}, booktitle = {Advances in Cryptology--Crypto 2011}, pages = {761--779}, year = {2011}, publisher = {Springer} }
@inproceedings{LB88, title = {An observation on the security of McEliece's public-key cryptosystem}, author = {Lee, Pil Joong and Brickell, Ernest F}, booktitle = {Advances in Cryptology--EUROCRYPT 1988}, pages = {275--280}, year = {1988}, organization = {Springer} }
@article{Leon88, title = {A probabilistic algorithm for computing minimum weights of large error-correcting codes}, author = {Leon, Jeffrey S}, journal = {IEEE Transactions on Information Theory}, volume = {34}, number = {5}, pages = {1354--1359}, year = {1988}, publisher = {IEEE} }
@incollection{Stern88, title = {A method for finding codewords of small weight}, author = {Stern, Jacques}, booktitle = {Coding theory and applications}, pages = {106--113}, year = {1988}, publisher = {Springer} }
@incollection{BJMM12, title = {Decoding random binary linear codes in {$2^{n/20}$}: How 1+ 1= 0 improves information set decoding}, author = {Becker, Anja and Joux, Antoine and May, Alexander and Meurer, Alexander}, booktitle = {Advances in Cryptology--EUROCRYPT 2012}, pages = {520--536}, year = {2012}, publisher = {Springer} }
@article{Sen00, title = {Finding the permutation between equivalent linear codes: The support splitting algorithm}, author = {Sendrier, Nicolas}, journal = {Information Theory, IEEE Transactions on}, volume = {46}, number = {4}, pages = {1193--1203}, year = {2000}, publisher = {IEEE} }
@comment{{RO-Amplification}}
@article{CGH04, title = {The random oracle methodology, revisited}, author = {Canetti, Ran and Goldreich, Oded and Halevi, Shai}, journal = {Journal of the ACM (JACM)}, volume = {51}, number = {4}, pages = {557--594}, year = {2004}, publisher = {ACM} }
@inproceedings{BR93, title = {Random oracles are practical: A paradigm for designing efficient protocols}, author = {Bellare, Mihir and Rogaway, Phillip}, booktitle = {Proceedings of the First ACM conference on Computer and Communications Security}, pages = {62--73}, year = {1993}, organization = {ACM} }
@inproceedings{BR94, title = {Optimal asymmetric encryption}, author = {Bellare, Mihir and Rogaway, Phillip}, booktitle = {Advances in Cryptology--EUROCRYPT 1994}, pages = {92--111}, year = {1994}, organization = {Springer} }
@inproceedings{BR96, title = {The exact security of digital signatures-How to sign with RSA and Rabin}, author = {Bellare, Mihir and Rogaway, Phillip}, booktitle = {Advances in Cryptology--Eurocrypt 1996}, pages = {399--416}, year = {1996}, organization = {Springer} }
@inproceedings{Shoup01, title = {{OAEP} reconsidered}, author = {Shoup, Victor}, booktitle = {Advances in Cryptology—-CRYPTO 2001}, pages = {239--259}, year = {2001}, organization = {Springer} }
@inproceedings{PonPKC00, title = {Chosen-ciphertext security for any one-way cryptosystem}, author = {Pointcheval, David}, booktitle = {Public Key Cryptography}, pages = {129--146}, year = {2000}, organization = {Springer} }
@inproceedings{FO-C99, author = {Eiichiro Fujisaki and Tatsuaki Okamoto}, title = {Secure Integration of Asymmetric and Symmetric Encryption Schemes}, booktitle = {Advances in Cryptology--{CRYPTO} 1999}, pages = {537--554}, year = {1999}, doi = {10.1007/3-540-48405-1_34}, note = {Full version in Journal of Cryptology 2013} }
@article{FO-JoC13, title = {Secure integration of asymmetric and symmetric encryption schemes}, author = {Fujisaki, Eiichiro and Okamoto, Tatsuaki}, journal = {Journal of Cryptology}, volume = 26, number = 1, pages = {80--101}, year = 2013, publisher = {Springer}, note = {Preliminary version in CRYPTO 1999} }
@article{FOPS04, title = {{RSA-OAEP} is secure under the RSA assumption}, author = {Fujisaki, Eiichiro and Okamoto, Tatsuaki and Pointcheval, David and Stern, Jacques}, journal = {Journal of Cryptology}, volume = {17}, number = {2}, pages = {81--104}, year = {2004}, publisher = {Springer}, note = {Prelim in CRYPTO 2001} }
@incollection{OPCTRSA01, title = {{REACT}: Rapid enhanced-security asymmetric cryptosystem transform}, author = {Okamoto, Tatsuaki and Pointcheval, David}, booktitle = {Topics in Cryptology—CT-RSA 2001}, pages = {159--174}, year = {2001}, publisher = {Springer} }
@comment{{Quantum algorithms & Quantum Security}}
@article{Reg04_dcp, author = {Oded Regev}, title = {Quantum Computation and Lattice Problems}, journal = {SIAM J. Comput.}, volume = {33}, number = {3}, year = {2004}, pages = {738-760}, ee = {http://dx.doi.org/10.1137/S0097539703440678} }
@inproceedings{EHKS14, title = {A quantum algorithm for computing the unit group of an arbitrary degree number field}, author = {Eisentr{\"a}ger, Kirsten and Hallgren, Sean and Kitaev, Alexei and Song, Fang}, booktitle = {Proceedings of the 46th STOC}, pages = {293--302}, year = 2014, organization = {ACM} }
@inproceedings{BS16, title = {Efficient quantum algorithms for computing class groups and solving the principal ideal problem in arbitrary degree number fields}, author = {Biasse, Jean-Fran{\c{c}}ois and Song, Fang}, booktitle = {Proceedings of the Twenty-Seventh Annual ACM-SIAM Symposium on Discrete Algorithms}, pages = {893--902}, year = {2016}, organization = {SIAM} }
@misc{CDPR15, author = {Ronald Cramer and L{\'e}o Ducas and Chris Peikert and Oded Regev}, title = {Recovering Short Generators of Principal Ideals in Cyclotomic Rings}, howpublished = {Cryptology ePrint Archive, Report 2015/313}, month = {October}, year = {2015} }
@misc{CGS14, author = {Peter Campbell and Michael Groves and Dan Shepherd}, title = {Soliloquy: A cautionary tale}, howpublished = {ETSI/IQC 2nd Quantum-Safe Crypto Workshop}, year = {2014} }
@article{LMV15, title = {Finding shortest lattice vectors faster using quantum search}, author = {Laarhoven, Thijs and Mosca, Michele and Van De Pol, Joop}, journal = {Designs, Codes and Cryptography}, volume = {77}, number = {2-3}, pages = {375--400}, year = {2015}, publisher = {Springer} }
@inproceedings{DinMooRus11, author = {Hang Dinh and Cristopher Moore and Alexander Russell}, title = {McEliece and {Niederreiter} Cryptosystems That Resist Quantum Fourier Sampling Attacks}, booktitle = {CRYPTO}, year = {2011}, pages = {761-779}, ee = {http://dx.doi.org/10.1007/978-3-642-22792-9_43}, bibsource = {DBLP, http://dblp.uni-trier.de} }
@misc{BS15, title = {On the quantum attacks against schemes relying on the hardness of finding a short generator of an ideal in {$\mathbb{Q}(\zeta_{p^n})$}}, author = {Jean-Fran{\c{c}}ois Biasse and Fang Song}, howpublished = {Tech Report {CACR 2015-12}}, month = {September}, year = 2015 }
@article{Wat09, author = {John Watrous}, journal = {SIAM J. Comput.}, note = {Preliminary version in STOC 2006}, number = {1}, pages = {25-58}, title = {Zero-Knowledge against Quantum Attacks}, volume = {39}, year = {2009} }
@inproceedings{HSS11, author = {Sean Hallgren and Adam Smith and Fang Song}, title = {Classical Cryptographic Protocols in a Quantum World}, booktitle = {Advances in Cryptology--Crypto 2011}, year = {2011}, pages = {411-428}, ee = {http://dx.doi.org/10.1007/978-3-642-22792-9_23}, bibsource = {DBLP, http://dblp.uni-trier.de} }
@inproceedings{LunNie11, author = {Carolin Lunemann and Jesper Buus Nielsen}, title = {Fully Simulatable Quantum-Secure Coin-Flipping and Applications}, booktitle = {AFRICACRYPT}, year = {2011}, pages = {21-40}, ee = {http://dx.doi.org/10.1007/978-3-642-21969-6_2}, bibsource = {DBLP, http://dblp.uni-trier.de} }
@incollection{FKSZZ13, title = {Feasibility and completeness of cryptographic tasks in the quantum world}, author = {Fehr, Serge and Katz, Jonathan and Song, Fang and Zhou, Hong-Sheng and Zikas, Vassilis}, booktitle = {Theory of Cryptography}, pages = {281--296}, year = {2013}, publisher = {Springer} }
@article{HSS15, title = {Classical cryptographic protocols in a quantum world}, author = {Hallgren, Sean and Smith, Adam and Song, Fang}, journal = {International Journal of Quantum Information}, volume = {13}, number = {04}, pages = {1550028}, year = {2015}, note = {Preliminary version appeared in Crypto'11}, publisher = {World Scientific} }
@incollection{Unruh10, title = {Universally composable quantum multi-party computation}, author = {Unruh, Dominique}, booktitle = {Advances in Cryptology--EUROCRYPT 2010}, pages = {486--505}, year = {2010}, publisher = {Springer} }
@incollection{Son14, title = {A note on quantum security for post-quantum cryptography}, author = {Song, Fang}, booktitle = {Proceedings of the 6th International Workshop on Post-Quantum Cryptography}, series = {Lecture Notes in Computer Science}, volume = 8772, pages = {246--265}, year = 2014, publisher = {Springer} }
@inproceedings{ES15, author = {Edward Eaton and Fang Song}, title = {Making Existential-unforgeable Signatures Strongly Unforgeable in the Quantum Random-oracle Model}, booktitle = {10th Conference on the Theory of Quantum Computation, Communication and Cryptography {(TQC)}}, pages = {147--162}, year = {2015}, doi = {10.4230/LIPIcs.TQC.2015.147} }
@incollection{BDFLSZ11, title = {Random oracles in a quantum world}, author = {Boneh, Dan and Dagdelen, {\"O}zg{\"u}r and Fischlin, Marc and Lehmann, Anja and Schaffner, Christian and Zhandry, Mark}, booktitle = {Advances in Cryptology--ASIACRYPT 2011}, pages = {41--69}, year = {2011}, publisher = {Springer} }
@inproceedings{Zha12a, author = {Mark Zhandry}, title = {Secure Identity-Based Encryption in the Quantum Random Oracle Model}, booktitle = {Proceedings of CRYPTO 2012}, misc = {Full version available at \url{http://eprint.iacr.org/2012/076}}, year = {2012} }
@incollection{Unr15, title = {Non-interactive zero-knowledge proofs in the quantum random oracle model}, author = {Unruh, Dominique}, booktitle = {Advances in Cryptology-EUROCRYPT 2015}, pages = {755--784}, year = {2015}, publisher = {Springer} }
@inproceedings{HRS16, author = {Andreas H{\"{u}}lsing and Joost Rijneveld and Fang Song}, title = {Mitigating Multi-target Attacks in Hash-Based Signatures}, booktitle = {Public-Key Cryptography - {PKC} 2016 - 19th {IACR} International Conference on Practice and Theory in Public-Key Cryptography, Taipei, Taiwan, March 6-9, 2016, Proceedings, Part {I}}, pages = {387--416}, year = {2016}, doi = {10.1007/978-3-662-49384-7_15} }
This file was generated by bibtex2html 1.98.


WNV virus Nile West cases human []. {border-style European px;} #ffffff;} regarding using lineage samples strains phylogenetic sequences Hungary Virus mosquitoes number PCR analysis data horse performed (), Hungary, PCR-positive genetic infections mosquito transmission Figure RT-PCR case infection level multiple px; region reported {font-family National bird cells font-size gene increase order subclades supported surveillance CA, Health However, Infect. [], acid birds compared double; factors likely nested partial previous previously rates species total tree (Figure Culex Hungary. Kit Life Usutu animal background border-color border-width countries described dynamics goshawk identified imported neuroinvasive overwintering pool presence real-time serologic solid; viral {font-style {font-weight (Applied Dis../eid. Disease G.K., K.E., LAU Mannheim, NS. NUTS November Public Samples Science, Sequence TaqMan USA) University amino assay autochthonous bold brain carcasses cases. clinical conditions confirmed containing courier; data, detailed detected diagnostic distribution diversification dots em; epidemic epidemics examined highlighted hooded indicate indicated maintained major maximum mortality northern novel online patients pipiens position positive provided pt;} reaction related resulted results sequencing specimens studies subjected targeting time tissue used veterinary wild work


This is a converter for the SOCKO! api converting file hierarchies to SOCKO! nodes and vice versa.
It's used by the SOCKO! cli and grunt plugins as the main link to the SOCKO! api.
Check out the API-documentation for more details.
Currently the following features exist:
All options for the conversion are encapsulated in an options object, that can be modified as fitting when running the conversion process. Its defaults match the older versions of SOCKO!.
Socket nodes are identified by a custom file prefix (defaulting to .socket). The prefix is removed and the rest is used as the name of the socket node.
To identify cartridge and cartridge collector slots, we support a variety of flavours in the content of the socket file. All supported flavours are checked in turn and all matching flavours are extracted and removed from the content in the SocketNodeInterface.
The following flavours are supported currently:
## SOCKO: CARTRIDGE-NAME ##
## SOCKO:COLLECT:MAXIMUMDEPTH:PATTERNTYPE:PATTERN ##
"_SOCKO": "CARTRIDGE-NAME",
"_SOCKO:COLLECT": "MAXIMUMDEPTH:PATTERNTYPE:PATTERN",
/* SOCKO: CARTRIDGE-NAME */
/* SOCKO:COLLECT:MAXIMUMDEPTH:PATTERNTYPE:PATTERN */
{{<< SOCKO: CARTRIDGE-NAME >>}}
{{<< SOCKO:COLLECT:MAXIMUMDEPTH:PATTERNTYPE:PATTERN >>}}
// SOCKO: CARTRIDGE-NAME //
// SOCKO:COLLECT:MAXIMUMDEPTH:PATTERNTYPE:PATTERN //
<!-- SOCKO: CARTRIDGE-NAME -->
<!-- SOCKO:COLLECT:MAXIMUMDEPTH:PATTERNTYPE:PATTERN -->
MAXIMUMDEPTH
matches the maxDepth property of SocketNodeInterface, the PATTERNTYPE
can either be G
for a glob pattern or R
for a regexp pattern.
Cartridge nodes are identified by a custom file prefix (defaulting to .cartridge). The prefix is removed and the rest is used as the name of the cartridge node.
A bucket node is identified by a directory, that holds a single file called '.socko.include'. The file content is then scanned for the bucket declaration in this pattern:
MAXIMUMDEPTH:PATTERNTYPE:PATTERN
MAXIMUMDEPTH
and PATTERNTYPE
have the same meaning as in Cartridge flavours.
To test and build this package, simply use grunt:
grunt test
Generated using TypeDoc


Reddit Inbox Revamp was created by /u/Goctionni. The goal of this extension is to improve on the default inbox. Many of the improvements are inspired by the design and workflow in GMail, though especially with changes implemented at a later time; inspiration also often comes from suggestions.
I am always open to feedback and suggestions, and will try to help you if you're having problems. The best place for this is to post on the /r/inboxrevamp subreddit.
Reddit Inbox Revamp is an open source project and the full source-code can be found on Github. You can view the source or post bugs/requests on Github, pull requests and the like are also welcome.
If you are a moderator of one or multiple subreddits, you may or may not want to see your modmail mixed in with your regular messages. The the long term the plan for Reddit Inbox Revamp is to have a separate page dedicated to viewing modmail; however for now you can choose whether or not you want to see the modmail in your regular inbox.
Some icons and buttons may not stand out as much as you would like them to, in the default setup. To help those who find the default theme not clear enough, enabling this option will enhance the visibility of some of the design elements that would otherwise blend in with their background.
Enabling this option will show a (Draft) indicator on message-threads for which a draft has been saved.
If something has gone wrong, if somehow the data in your inbox has been corrupted or messages have gone missing somehow... You can use this option to clear out your inbox and restart from scratch. Do note however: Reddit normally will not store more than 1000 private messages. Reddit Inbox Revamp stores your messages locally and will store more than 1000 messages. If you have more than a thousand messages, using this option means that you will lose your oldest messages.
If for some reason you wish to export your entire inbox, you can do this. There currently is no way to import your data back into Reddit inbox Revamp, however this may allow you to import your data into a different application. Several export formats are available.
By default, messages in a message-thread are sorted from old to new. Showing the first message at the top and the last message at the bottom. If you have many long and active message threads, it might be more practical to see the latest message at the top instead. This option allows you to reverse the sorting so that messages are sorted from new to old inside a message thread.
By default, every time you open a message thread; the field where you can enter a response will be the same size. With this option enabled the last used height is instead remembered and re-used. When your resize the input area Reddit Inbox Revamp will remember the new height of the field and re-use that in the future.


rmdir - delete a directory
#include <unistd.h>
int rmdir(const char *pathname);
rmdir() deletes a directory, which must be empty.
On success, zero is returned. On error, -1 is returned, and errno is set
appropriately.
- EACCES
- Write access to the directory containing pathname was not allowed,
or one of the directories in the path prefix of pathname did not
allow search permission. (See also path_resolution(7).
- EBUSY
- pathname is currently in use by the system or some process that
prevents its removal. On Linux, this means pathname is currently
used as a mount point or is the root directory of the calling
process.
- EFAULT
- pathname points outside your accessible address space.
- EINVAL
- pathname has . as last component.
- ELOOP
- Too many symbolic links were encountered in resolving
pathname.
- ENAMETOOLONG
- pathname was too long.
- ENOENT
- A directory component in pathname does not exist or is a dangling
symbolic link.
- ENOMEM
- Insufficient kernel memory was available.
- ENOTDIR
- pathname, or a component used as a directory in pathname, is
not, in fact, a directory.
- ENOTEMPTY
- pathname contains entries other than . and .. ; or,
pathname has .. as its final component. POSIX.1 also allows
EEXIST for this condition.
- EPERM
- The directory containing pathname has the sticky bit
(S_ISVTX) set and the process's effective user ID is neither the
user ID of the file to be deleted nor that of the directory containing it,
and the process is not privileged (Linux: does not have the
CAP_FOWNER capability).
- EPERM
- The filesystem containing pathname does not support the removal of
directories.
- EROFS
- pathname refers to a directory on a read-only filesystem.
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.
Infelicities in the protocol underlying NFS can cause the unexpected
disappearance of directories which are still being used.
rm(1), rmdir(1), chdir(2), chmod(2),
mkdir(2), rename(2), unlink(2), unlinkat(2)
This page is part of release 5.05 of the Linux man-pages project. A
description of the project, information about reporting bugs, and the latest
version of this page, can be found at https://www.kernel.org/doc/man-pages/.


Support for new conditions
The target's current and starting layers, stripping status (decent, topless, etc.), as well as the number of players having a specific combination of gender, status, and tag, can now be used as conditions.
Support for marker equations
Markers can now optionally be given a value instead of being a simple true/false flag. The value can be either:
- Blank. Default behavior. The marker will be set to "true" when the associated line of dialogue is displayed.
- A number. Use 0 to effectively turn off a marker, stopping subsequent "said marker" checks from triggering on it until it gets set again.
- +. This will increment the marker's value by one, like a counter.
- -. This will decrement the marker's value by one, like a countdown.
- Free text. Use ~marker.foo~ in dialogue to display whatever text is currently stored in the marker called foo.
- Variables. For example, ~clothing~ will store the name of the current article being stripped into the marker. Like with text, you can display the marker's value within a line of dialogue.
The various "said marker" targets can now be given conditions (ex. foo=5) to further control when they come into effect. For instance, you could react to a major clothing reveal by setting the marker "majors" to "+". Targeting "said marker majors>=2" will cause the line to display only when two or more major pieces of clothing (across the whole table) have been removed.
You're still free to leave the condition blank and it will continue to operate as before.
Kisekae Integration
Scenes containing multiple characters can now be (officially) imported.
Dialogue Editor
Condition Editor
In order to reduce clutter, the condition editor has received a complete overhaul. Only conditions currently applicable to the case display. To add conditions, you can either search for a relevant condition from the "Add a Condition" box, or use the quick menus next to it.
To remove a condition, click the X beside it.
If you wish to return to the old style editor with multiple tabs full of fields, you can click the ↺ beside the Conditions header. Please note that the old editor will not be maintained going forward and will eventually be removed.
Cross-character Responses
Multiple character workspaces make it easy to reference other characters while working on your own. Now you can respond to interesting lines directly from another character's workspace. Use the new "Respond to This" button on a line you wish to respond to, and it will open the selected character's workspace with a new case pre-generated to directly target the case you want to respond to.
Call Out Cases
A "Call Out..." button has been added to the Case screen. This will let you mark the current case as "noteworthy", making it easy to discover for other authors wishing to create interactions. See the next section for more information.
Noteworthy Situations and Writing Aid
Cross-character interactions make a game more lively, but how do you know what other characters are doing that's worth reacting to without playing dozens of games or browsing through 100+ characters' dialogue?
You can now call out cases as being "noteworthy", describe the situation the case applies to, and other authors will be able to see the situation appear in their characters' Writing Aid screen, where they can immediately write an reaction.
Writing Aid
This new screen lets you discover situations that other author's characters have deemed noteworthy for targeted responses. The editor will randomly provide cases from which you can choose one to generate a targeted response immediately.
This is only useful if people mark their lines as noteworthy, so make sure you call out your own character's noteworthy situations using the Call Out button in the dialogue editor!
Banter Wizard
The banter wizard has had some behind the scenes tweaks to make it a little more accurate.
Goodbye, Simulator
The Dialogue Tester has been retired. Due to the rapid evolution of the game, maintaining a simulator is unrealistic. Instead, you should use the debug options within the game itself for your testing.
Marker Screen
Markers can now be deleted by clicking the row header and pressing Delete. Note that if a marker is still being used in the dialogue, it will be added back next time you start up.
Performance Improvements
- Poses screen now only loads images for rows displayed on screen, speeding up the initial visit when poses.txt is large.
Bug Fixes
- "Applies to Stages" region is now scrollable when content doesn't fit.


Pythagorean Formula Solver
Input any two values and this calculator will solve for the missing field.
Weatherman API
Press the button to make a call to the Weatherman API.
Weather Condition:
Current Temperature:
Today's High:
Today's Low:
Input any two values and this calculator will solve for the missing field.
Press the button to make a call to the Weatherman API.
Weather Condition:
Current Temperature:
Today's High:
Today's Low:


The StreamHub APIs use enumerations to define
the type of message sent down the wire. All types
should be in this enumeration.
TODO: These should be in the SDK
That will be released in Jan/Feb 2013
- Source:
- types.js, line 2
Properties:
| Name | Type | Description |
|---|---|---|
types.CONTENT |
string | The good stuff. Juicy Content like comments |
types.OPINE |
string | A user's opinion or something |
types.SHARE |
string | TODO: I don't know yet. |
types.OEMBED |
string | A new attachment |


{% extends "base.html" %} {% block content %}
This program can be used to better understand the data present in one or multiple fiscal years under any CASC on ScienceBase.
Choose the fiscal year(s) under your desired Climate Adaptation Science Center from which you want a report generated:


TOMORROW NEVER DIES (1997)
A film review by Steve Kong Copyright 1997 Steve Kong
GoldenEye was just a Bond rehearsal for Pierce Brosnan. Tomorrow Never Dies is the Bond performance. Brosnan was a tiny bit wooden in GoldenEye, understandably so, because the whole James Bond franchise was resting on his shoulders alone. He proved to us that he could be Bond in GoldenEye and in Tomorrow Never Dies, he proves to us that he is Bond.
I haven't been a long time Bond fan and have definitely not seen all 18 of the Bond films, but I've seen my share of them. One or two Sean Connery and Roger Moore Bonds, all of the Timothy Dalton Bonds, and, now, both Pierce Brosnan Bonds. If you're wondering, I think that Connery is the best Bond with Brosnan coming in a very close second (and Dalton being one of the worst Bonds). What I like about the Bond movies is that they never change. This I find as a good thing in the Bond franchise because it lets me walk into a Bond movie not expecting too much from the plot and just relaxing and enjoying the action, cool gadgets and Bond girls. This is the driving force behind the Bond franchise, the ability to let people just come and have fun at a movie without the need or worry of following a twisting and turning plot line. (In some cases this is the weakness of Bond films, for some of them don't have enough fun, action, and gadgets to fill in for the plot.)
Tomorrow Never Dies has a fascinating amount of action, a large dose of cool gadgets, and not one, but two Bond girls. Not to mention a pretty cool maniacal evil man and a cool just-as-maniacal evil henchman to go with the evil man.
The plot is pretty simple. A crazed power hungry media mogul, Elliot Carver -- played brilliantly by Infiniti's spokesperson Jonathan Pryce -- wants to launch a new satellite broadcast network. He wants the launch of this network to start with a bang and what better way to start out a news network than a world war? Carver devises a way to get the British and Chinese fighting and with this he creates tomorrow's news today. Who do we have to stop this crazed media mogul? Bond, James Bond, of course!
What is fascinating about this 18th installment into the Bond franchise is the introduction of a Bond girl that can resist Bond's every sly come-on and also has enough umph in her to kick both the bad guys and Bond around. Michelle Yeoh, whom we last saw in SuperCop with Jackie Chan, is this cool Bond girl. She plays Wai Lin, a female Chinese version of Bond working for the Chinese government trying to avert the world war. Yeoh steals every scene that she's in, even the ones she shares with Brosnan. She is, so far, the only Bond girl that I would like to return for another installment in the Bond franchise.
The other Bond girl is the less vivacious and the obvious weak link in this Bond installment, and that is Teri Hatcher as Paris Carver, the former love interest of Bond who is now married to the media mogul. Hatcher gives a bland and wooden performance in Tomorrow Never Dies. And it looks as if her part was cut a bit short because of her pregnancy which occurred early on during the filming of Tomorrow Never Dies.
Jonathan Pryce is absolutely fantastic as Elliot Carver, the egomaniac on drugs of sorts. His performance has to been seen! And his quiet henchman, Stamper (Gotz Otto), is tough looking and a good match for Bond.
So, how's the action? You may be wondering. Perfect, I would have to reply. The opening sequence was a bit on the weak side compared to some of the other Bond films (even to the opening sequence of GoldenEye), but it is an exciting opening for the movie. The action sequences are great. Two of them stick out in my mind. One is a car chase through a parking structure with James Bond driving his new BMW 750 from the back seat. His car is just cool, featuring all kinds of anti-theft devices and anti-bad-guys-in-car devices. The other is the motorcycle sequence in which Bond and Lin try to escape from a killer helicopter while on a BMW (can you say BMW product placement?) motorcycle and while also handcuffed together.
There was something about this film that I really liked as an addition and that was the humor. There was a heavy dose of self-mocking and also general humor in this Bond installment and that made the film feel more relaxed and homely feeling, which I think was a good thing. I found myself chuckling and laughing out loud in many places during the film.
Director Roger Spottiswoode (Air America, Turner & Hooch) does a good job with his directorial duties keeping the movie moving along at a quick pace. He also handled the conventional action sequences well, though I think he grossly mishandled the martial arts sequences with Michelle Yeoh.
Worth mentioning is the fantastic musical score by David Arnold. His score fits the movie very well and is well suited in all of the scenes. I at first cringed when I heard that he was going to be scoring this film because I thought is score for Independence Day was too over-the-top and melodramatic, but Arnold does a great job with the score for Tomorrow Never Dies. The title song though does not fair as well. Sheryl Crow was flat and boring during this title song and the song is wholly forgettable.
Tomorrow Never Dies is good installment of the Bond franchise and is definitely a Don't Miss film. The mix of the familiar Bond character, action, cool gadgets, and humor makes for a good and fun movie. Look for great performances from Jonathan Pryce and Michelle Yeoh. And don't forget…shaken, not stirred.
--- steve kong<EMAIL_ADDRESS>find the latest movie reviews at the hard boiled movie page http://boiled.sbay.org/boiled/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


WebXR Starter Kit
Virtual Reality
VR 101
VR Load Scene
VR Load Objects
VR Move
Augmented Reality
AR 101
AR Load Scene
AR Placement
AR 3D Viewer
Ideas


Monetizor Etheriums are here for the take
Earn free etheriums by sharing useful informtion to your peers and help the community grow
Login With FacebookOur software features custom designed for startups to excel.
Lorem Ipsum
Lorem Ipsum and something that can look good here. Lorem Ipsum and something that can look good here.
Lorem Ipsum
Lorem Ipsum and something that can look good here. Now this block looks really great in a way I guess.
Lorem Ipsum
Lorem Ipsum and something that can look good here. Now this block looks really great in a way I guess.
Lorem Ipsum
Lorem Ipsum and something that can look good here. Lorem Ipsum and something that can look good here.
Lorem Ipsum
Lorem Ipsum and something that can look good here. Now this block looks really great in a way I guess.
Lorem Ipsum
Lorem Ipsum and something that can look good here. Lorem Ipsum and something that can look good here.
Why you need our pixel
Unmatched social sharing performance and audience reach.
Just kidding you have to pay every month or every year to get all the benefits we mentioned everywhere. Everything comes at a cost.
Pricing
Pick the right pricing plan for your needs
We have very fair pricing policy that would benefit you and us at the same time. Get the free plan & if you need more - pay.
Have something big? Contact us
Free Plan
Free- First basic feature
- Second feature goes here
- Any other third feature
Starter Plan
$29.99- First premium feature
- Second premium feature
- Third premium feature


Prioritization for ranking impacts
Invasive alien species’ impact classification
Invasive alien species (IAS) are considered one of the biggest threats to biodiversity. Their ecological impacts have been reported at different levels of biological organization and at different spatial scales. Evaluating, comparing and predicting impacts of non-native species is critical for developing mitigation measures. In particular, quantifying IAS impacts can help decision makers and managers to prioritize their efforts to regulate and manage species with the highest impact on ecosystems. However, in order to prioritize species, they need to be ranked, which can only be done by quantifying their impact within severity categories.
Impact classification schemes
There are a myriad of available impact classifications and their results can vary greatly. That creates uncertainty about which to use. Impact scoring systems are most generally qualitative. Meaning that they verbally describe the importance of consequences of the hazard as ‘severity categories’. An example is the classification criteria used in Rovira (2016) to define species impacts were created by Phillips et al. (2008), and evaluated “the effect of the invader on the abundance of one or more native species, or on the functioning of an organism or an ecological process”. The classifications comprised four categories (none, minor, occasionally major and major).
While there is an extensive literature on systems for assessing both risk and impact, there is a little agreement on how impacts should be incorporated in risk assessment and how impacts should be compared between invading taxa and ecosystems (Parker et al. 1999, Essl et al. 2011, Kumschick and Richardson 2013). Thus, there has been a drift towards creating a unified impact-scoring system, the Generic Impact Scoring System (GISS), to standardize impact assessments (e.g. Nentwig et al. 2010, Sandvik et al. 2013, Blackburn et al. 2014). But, the qualitative nature of impact descriptions that characterizes the GISS, and most of the impact scoring systems, can lead to inconsistencies between assessors, as a literature review showed.
Using expert elicitation to explore Impact classification schemes
There is a large literature that emphasizes the need for systematic approaches to select assessors, elicit estimates and combine their judgements. Since systematic elicitation protocols can offset a range of predictable biases, such as experts being subject to cognitive and motivational biases that impair their ability to accurately report their true beliefs (Burgman 2005, McBride et al. 2012). In Rovira, (2016) a structured expert elicitation process was carried and the results showed to increase agreement between the experts. Future research should focus on developing generic quantitative framework for expert elicitation and impact classification.


SVG Loader
with
GSAP
by
Chris Gannon
Previous Demo
Back to the Codrops article
Jump Loader
More ideas:
Flip Box Loader
Creeper
Squash Box Loader
Veggie Loader
Infinity Loader
Goo Loader