=====Getting Statistical Data Out of Your Simulation===== You have a simulation up and running, but how do you get the statistical data you need ouput to a file? Below you will find some code provided by Professor Ackley that will allow you to do so. There are two files that need to be modified: 1. /src/drivers/mfmc/src/main.cpp 2. /src/sim/include/AbstractDriver.h ====main.cpp==== To edit the main.cpp file, paste the following code into the **Private** section of the file: const char* GetSimDirPathTemporary(const char* format, ...) const { static OverflowableCharBufferByteSink<500> buf; buf.Reset(); buf.Printf("%s",this->GetSimulationBasePath()); va_list ap; va_start(ap, format); buf.Vprintf(format, ap); if (buf.HasOverflowed()) { FAIL(OUT_OF_ROOM); } return buf.GetZString(); } and typedef typename CC::PARAM_CONFIG P; typedef typename CC::ATOM_TYPE T; Then paste the following in the **public** section of main.cpp: virtual void DoEpochEvents(Grid& grid, u32 epochs, u32 epochAEPS) { u32 H = Grid::GetHeight(); u32 W = Grid::GetWidth(); u32 emptyCount = 0; for (u32 y = 0; y < H; ++y) { for (u32 x = 0; x < W; ++x) { Tile & tile = grid.GetTile(SPoint(x,y)); for (u32 x = 0; x < P::TILE_WIDTH; ++x) { for (u32 y = 0; y < P::TILE_WIDTH; ++y) { const SPoint pt(x, y); if(Tile::IsInCache(pt)) { continue; } const T * atom = tile.GetAtom(x,y); //<<>> This is where you grab the data from your element. Modify accordingly. if (atom->GetType() == Element_Empty::THE_INSTANCE.GetType()) ++emptyCount; } } } } //<<>> replace FILE_NAME with the file name of your choice const char* path = GetSimDirPathTemporary("tbd/FILE_NAME.dat"); FILE* fp = fopen(path, "a"); //<<>> This is where you output the specific data you need. Modify accordingly. fprintf(fp, "%d %d %d\n",epochs, epochAEPS, emptyCount); fclose(fp); // Remember to let the parent run too! Super::DoEpochEvents(grid, epochs, epochAEPS); } Please note: There are 3 TODO tags in the above snippet. These are where you'll need to modify the code to suit your needs. ====AbstractDriver.h==== Now we need to do a small modifcation to the AbstractDriver.h file. Paste the following code into the **public** section: const char * GetSimulationBasePath() const { return &m_simDirBasePath[0]; } And that's it! Happy scienceing.