From 64b836e9e98f24338b5b3ea388003aad2cf724c3 Mon Sep 17 00:00:00 2001 From: Lars-B Date: Mon, 28 Jul 2025 12:30:09 -0700 Subject: [PATCH] adding option to set seed for alignment generation --- .../app/seqgen/SimulatedAlignment.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/beastfx/app/seqgen/SimulatedAlignment.java b/src/beastfx/app/seqgen/SimulatedAlignment.java index ee712e7..f64bba6 100644 --- a/src/beastfx/app/seqgen/SimulatedAlignment.java +++ b/src/beastfx/app/seqgen/SimulatedAlignment.java @@ -6,6 +6,7 @@ import beast.base.core.Description; import beast.base.core.Input; import beast.base.core.Input.Validate; +import beast.base.core.Log; import beast.base.evolution.alignment.Alignment; import beast.base.evolution.alignment.Sequence; import beast.base.evolution.branchratemodel.BranchRateModel; @@ -32,7 +33,12 @@ public class SimulatedAlignment extends Alignment { final public Input m_sequenceLengthInput = new Input<>("sequencelength", "nr of samples to generate (default 1000).", 1000); final public Input m_outputFileNameInput = new Input<>( "outputFileName", - "If provided, simulated alignment is additionally written to this file."); + "If provided, simulated alignment is additionally written to this file."); + final public Input localSeedInput = new Input<>( + "seed", + "Optional local random seed for simulating this alignment. If not set, global seed is used.", + Input.Validate.OPTIONAL + ); /** * nr of samples to generate * @@ -87,9 +93,24 @@ public void initAndValidate() { m_outputFileName = m_outputFileNameInput.get(); sequenceInput.get().clear(); - - simulate(); - + + Long customSeed = localSeedInput.get(); + long originalSeed = Randomizer.getSeed(); + long seedToUse = customSeed != null ? customSeed : originalSeed; + + if (customSeed != null) { + Log.info.println(); + Log.info.println("Random number seed for alignment simulation: " + customSeed); + Log.info.println(); + } + + try { + Randomizer.setSeed(seedToUse); + simulate(); + } finally { + Randomizer.setSeed(originalSeed); + } + // Write simulated alignment to disk if requested: if (m_outputFileName != null) { PrintStream pstream;