Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions avida-core/source/actions/PopulationActions.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3900,6 +3900,25 @@ class cActionCopyDeme : public cAction
};


class cActionReplicateDeme : public cAction
{
private:
int m_id;
public:
cActionReplicateDeme(cWorld* world, const cString& args, Feedback&) : cAction(world, args), m_id(0) {
cString largs(args);
if (largs.GetSize()) m_id = largs.PopWord().AsInt();
}

static const cString GetDescription() { return "Arguments: <int src_id>"; }

void Process(cAvidaContext& ctx) {
cDeme& deme = m_world->GetPopulation().GetDeme(m_id);
m_world->GetPopulation().ReplicateDeme(deme, ctx);
}
};


class cActionNewTrial : public cAction
{
private:
Expand Down Expand Up @@ -5757,6 +5776,7 @@ void RegisterPopulationActions(cActionLibrary* action_lib)
action_lib->Register<cActionDivideDemes>("DivideDemes");
action_lib->Register<cActionResetDemes>("ResetDemes");
action_lib->Register<cActionCopyDeme>("CopyDeme");
action_lib->Register<cActionReplicateDeme>("ReplicateDeme");
action_lib->Register<cActionMixPopulation>("MixPopulation");

action_lib->Register<cActionDecayPoints>("DecayPoints");
Expand Down
51 changes: 37 additions & 14 deletions avida-core/source/actions/SaveLoadActions.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "cWorld.h"

#include <cassert>
#include <cstdio>
#include <iostream>


Expand Down Expand Up @@ -234,23 +235,15 @@ class cActionLoadGermlines : public cAction
{
private:
cString m_filename;
bool m_verbose;

public:
cActionLoadGermlines(cWorld* world, const cString& args, Feedback& feedback)
: cAction(world, args), m_filename("")
: cAction(world, args), m_filename(""), m_verbose(false)
{
cArgSchema schema(':','=');

// String Entries
schema.AddEntry("filename", 0, "detailgermlines");

cArgContainer* argc = cArgContainer::Load(args, schema, feedback);

if (argc) {
m_filename = argc->GetString(0);
}

delete argc;
cString largs(args);
if (largs.GetSize()) m_filename = largs.PopWord();
if (largs.GetSize()) m_verbose = largs.PopWord().AsInt();
}

static const cString GetDescription() { return "Arguments: [string filename='detailgermlines']"; }
Expand All @@ -262,19 +255,49 @@ class cActionLoadGermlines : public cAction
ctx.Driver().Feedback()
);
assert(input_file.WasOpened());
if (m_verbose) printf(
"LoadGermlines input file %s has %d lines.\n",
(const char*)m_filename,
input_file.GetNumLines()
);

for (int line_id = 0; line_id < input_file.GetNumLines(); line_id++) {
auto file_props = input_file.GetLineAsDict(line_id);
const int deme_id = Apto::StrAs(file_props->Get("deme_id"));
const auto genome_sequence = Apto::StrAs(file_props->Get("sequence"));
const auto genome_sequence = file_props->Get("sequence");
if (m_verbose) printf(
"LoadGermlines adding sequence %s to deme %d germline...\n",
(const char*)genome_sequence,
deme_id
);

HashPropertyMap seq_props;
const cInstSet& is = m_world->GetHardwareManager().GetDefaultInstSet();
cHardwareManager::SetupPropertyMap(seq_props, (const char*)is.GetInstSetName());
if (m_verbose) printf(
"LoadGermlines hardware type is %d and instruction set is %s.\n",
is.GetHardwareType(),
(const char*)is.GetInstSetName()
);

Genome genome(is.GetHardwareType(), seq_props, GeneticRepresentationPtr(new InstructionSequence((const char*)genome_sequence)));
if (m_verbose) printf(
"Loaded Genome string representation is `%s`.\n",
(const char*)genome.AsString()
);

auto& germline = m_world->GetPopulation().GetDeme(deme_id).GetGermline();
if (m_verbose) printf(
"LoadGermlines deme %d germline size before add was %d.\n",
deme_id,
germline.Size()
);
germline.Add(genome);
if (m_verbose) printf(
"LoadGermlines deme %d germline size after add is %d.\n",
deme_id,
germline.Size()
);
}
}
};
Expand Down
4 changes: 3 additions & 1 deletion avida-core/tests/demes_loadgermlines/config/events.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
i InjectSequence ycdBCiEdimFjfCDaknmsAjemEEcgccgssmhEEcsdseDcAcBcggclEEcDEgcvrsAmlzessjhcdcggkhamtmciEEvjDdhjidzoAyndvmEdbgznjDmcjohohooayaxdyalbcekzebjcogEtjgjacblDvubADnslyyocgsAcjCbobffhmvnnAdbDfkmxcagBFfndytqhutjdzfdjsnflfoqCwcvhsjcvbmlsqcjrgyiDivvnFhrArcsmifbClvluDqmCBbtiDhiEfACcarpEczijdljujACbfzuDEFyaqqekizDosbbzjgmpczypqvcrGxab 101
i LoadGermlines filename=detailgermlines-500.sgerm
i LoadGermlines detailgermlines-500.sgerm

u 5 ReplicateDeme 1

u 10 SavePopulation filename=out
u 10 SaveGermlines filename=out
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
5,1,0
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# 1: Update
# 2: Organism ID
# 3: Deme ID
# 4: Facing

5 1 1 3
5 2 0 3
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@
# 19: Gestation (CPU) Cycle Offsets
# 20: Lineage Label

1 div:ext (none) (none) 1 1 320 0 0 0 0 -1 -1 0 2 transsmt ycdBCiEdimFjfCDaknmsAjemEEcgccgssmhEEcsdseDcAcBcggclEEcDEgcvrsAmlzessjhcdcggkhamtmciEEvjDdhjidzoAyndvmEdbgznjDmcjohohooayaxdyalbcekzebjcogEtjgjacblDvubADnslyyocgsAcjCbobffhmvnnAdbDfkmxcagBFfndytqhutjdzfdjsnflfoqCwcvhsjcvbmlsqcjrgyiDivvnFhrArcsmifbClvluDqmCBbtiDhiEfACcarpEczijdljujACbfzuDEFyaqqekizDosbbzjgmpczypqvcrGxab 101 0 0
2 dup:int germline (none) 2 2 320 0 0 0 0 6 -1 0 2 transsmt ycdBCiEdimFjfCDaknmsAjemEEcgccgssmhEEcsdseDcAcBcggclEEcDEgcvrsAmlzessjhcdcggkhamtmciEEvjDdhjidzoAyndvmEdbgznjDmcjohohooayaxdyalbcekzebjcogEtjgjacblDvubADnslyyocgsAcjCbobffhmvnnAdbDfkmxcagBFfndytqhutjdzfdjsnflfoqCwcvhsjcvbmlsqcjrgyiDivvnFhrArcsmifbClvluDqmCBbtiDhiEfACcarpEczijdljujACbfzuDEFyaqqekizDosbbzjgmpczypqvcrGxab 50,150 0,0 0,0