diff --git a/src/aliby/pipeline.py b/src/aliby/pipeline.py
index 37a4182a9f25c4b9ca81b359b369571cbafe6040..e7d32ec027a5090500b20b517267d7a44a1d85aa 100644
--- a/src/aliby/pipeline.py
+++ b/src/aliby/pipeline.py
@@ -186,11 +186,19 @@ class Pipeline(ProcessABC):
             for k in ("host", "username", "password")
         }
         self.expt_id = config["general"]["id"]
-        self.setLogger(config["general"]["directory"])
+        self.setLogger(
+            config["general"]["directory"],
+            logfile_root_name=config["general"]["id"]
+            .split("/")[-1]
+            .split(".")[0],
+        )
 
     @staticmethod
     def setLogger(
-        folder, file_level: str = "INFO", stream_level: str = "INFO"
+        folder,
+        file_level: str = "INFO",
+        stream_level: str = "INFO",
+        logfile_root_name: str = None,
     ):
         """Initialise and format logger."""
         logger = logging.getLogger("aliby")
@@ -205,7 +213,11 @@ class Pipeline(ProcessABC):
         ch.setFormatter(formatter)
         logger.addHandler(ch)
         # create file handler that logs even debug messages
-        fh = logging.FileHandler(Path(folder) / "aliby.log", "w+")
+        if logfile_root_name is None:
+            logfile_root_name = "aliby"
+        fh = logging.FileHandler(
+            Path(folder) / f"{logfile_root_name}.log", "w+"
+        )
         fh.setLevel(getattr(logging, file_level))
         fh.setFormatter(formatter)
         logger.addHandler(fh)
@@ -400,6 +412,7 @@ class Pipeline(ProcessABC):
                         self.log(
                             "WARNING: Bud has been assigned as its own mother."
                         )
+                        raise Exception("Catastrophic Baby error")
                     baby_writer.write(
                         data=result,
                         overwrite=["mother_assign"],
@@ -486,8 +499,7 @@ def check_earlystop(filename: str, es_parameters: dict, tile_size: int):
     )
     # find tiles with cells covering too great a fraction of the tiles' area
     traps_above_athresh = (
-        cells_used.groupby("trap").sum().apply(np.mean, axis=1)
-        / tile_size**2
+        cells_used.groupby("trap").sum().apply(np.mean, axis=1) / tile_size**2
         > es_parameters["thresh_trap_area"]
     )
     return (traps_above_nthresh & traps_above_athresh).mean()