diff --git a/README.md b/README.md
index a7e9f53..3fdc450 100644
--- a/README.md
+++ b/README.md
@@ -189,15 +189,15 @@ analytical function.
In case you want to use a custom mask like you may set up with _bentopy mask_,
you could specify the space in the following manner.
-> ```diff
-> "compartments": [
-> {
-> "id": "main",
-> - "shape": "spherical"
-> + "voxels": { "path": "mask.npz" }
-> }
-> ]
-> ```
+```diff
+ "compartments": [
+ {
+ "id": "main",
+- "shape": "spherical"
++ "voxels": { "path": "mask.npz" }
+ }
+ ]
+```
Here, **voxels** and the associated **path** point to a precomputed voxel mask.
This mask can be any data that can be loaded by [`np.load()`][np-load] to be
@@ -205,6 +205,26 @@ interpreted as a three-dimensional boolean mask. The provided mask must have
the same size as specified in the **space** section's **dimensions** divided by
the **resolution**.
+
+Constraining compartments.
+
+A compartment definition can also take a **constraint** parameter. Currently,
+only the **axis** predicate is available, which constrains all placements in
+that compartment such that only placements with the specified value for that
+axis are considered valid. The following example of a compartment definition
+accepts placements as valid if and only if the _z_-component of a placement is
+at 50 nm.
+
+```json
+ {
+ "id": "flat",
+ "constraint": "axis:z=50.0",
+ "shape": "cuboid"
+ }
+```
+
+
+
#### Output
In **output**, we set a **title** and **dir**ectory to write the placement list
@@ -227,6 +247,45 @@ the structure file for this segment can be found.
> valid topology file using _bentopy render_, the value of **name** must
> correspond to the names in the `itp` files.
+
+Constraining segment rotations and setting a center adjustment.
+
+For some structures, it can be helpful or necessary to constrain the rotation
+of certain segments. The **rotation_axes** parameter takes a string with the
+axes over which a structure may be randomly rotated. Any axes that are not
+mentioned will not be rotated. For instance, the axes definition `"xyz"`
+indicates full rotational freedom and is the tacit default (rotation is allowed
+over _x_, _y_, and _z_ axes), while `"z"` constrains the rotation such that it
+may only occur over the _z_-axis, leaving _x_ and _z_ rotation as provided in
+the structure file.
+
+The **center** parameter can be used to provide an offset in nm. When ommitted,
+its default value is `"auto, auto, auto"`, which defines the center as the
+geometric center of the structure. Any of the three values can be replaced by a
+floating point value, which sets an adjustment _from_ the `auto` center.
+
+See [#24](https://github.com/marrink-lab/bentopy/issues/24), which tracks the
+development of an additional `keep` parameter, which would respect the center
+for some axis as its zero-value in the structure file.
+
+```json
+ {
+ "name": "1a0s",
+ "number": 100,
+ "path": "structures/1a0s.pdb",
+ "rotation_axes": "z",
+ "center": "auto, auto, -1.2",
+ "compartments": ["flat"]
+ }
+```
+
+With the above segment definition, up to a 100 instances of some structure will
+be placed according to some compartment with the id "flat", with a -1.2 nm
+offset to its geometric center over the _z_-axis, while only allowing rotation
+over its _z_-axis.
+
+
+
### _pack_
Now, we are ready to pack the system. We could simply do this as follows.