Lattice Microbes 2.5
This is for whole cell modeling
Loading...
Searching...
No Matches
SimulationFile.h
Go to the documentation of this file.
1/*
2 * University of Illinois Open Source License
3 * Copyright 2010-2018 Luthey-Schulten Group,
4 * All rights reserved.
5 *
6 * Developed by: Luthey-Schulten Group
7 * University of Illinois at Urbana-Champaign
8 * http://www.scs.uiuc.edu/~schulten
9 *
10 * Permission is hereby granted, free of charge, to any person obtaining a copy of
11 * this software and associated documentation files (the Software), to deal with
12 * the Software without restriction, including without limitation the rights to
13 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14 * of the Software, and to permit persons to whom the Software is furnished to
15 * do so, subject to the following conditions:
16 *
17 * - Redistributions of source code must retain the above copyright notice,
18 * this list of conditions and the following disclaimers.
19 *
20 * - Redistributions in binary form must reproduce the above copyright notice,
21 * this list of conditions and the following disclaimers in the documentation
22 * and/or other materials provided with the distribution.
23 *
24 * - Neither the names of the Luthey-Schulten Group, University of Illinois at
25 * Urbana-Champaign, nor the names of its contributors may be used to endorse or
26 * promote products derived from this Software without specific prior written
27 * permission.
28 *
29 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
32 * THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
33 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
34 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
35 * OTHER DEALINGS WITH THE SOFTWARE.
36 *
37 * Author(s): Elijah Roberts
38 */
39
40#ifndef LM_IO_HDF5_SIMULATIONFILE_H_
41#define LM_IO_HDF5_SIMULATIONFILE_H_
42
43#include <string>
44#include <map>
45#include <vector>
46#include "core/Exceptions.h"
47#include "core/Types.h"
48#include "io/lm_hdf5.h"
49#include "io/ArbitraryH5.h"
50
51namespace lm {
52
53namespace rdme{
54class Lattice;
55class ByteLattice;
56class IntLattice;
57}
58
59namespace io {
60
61class DiffusionModel;
62class ReactionModel;
63class Lattice;
64class ParameterValues;
65class SpeciesCounts;
66class SpatialModel;
67class FirstPassageTimes;
68
69namespace hdf5 {
70
71using std::string;
72using std::map;
73using std::vector;
74using lm::IOException;
75
79{
80// Static variables and functions
81public:
82 static const uint MIN_VERSION;
83 static const uint CURRENT_VERSION;
86
87public:
89 static bool isValidFile(const string filename);
91 static bool isValidFile(const char * filename);
93 static void create(const string filename);
95 static void create(const char * filename);
97 static void create(const string filename, unsigned int numberSpecies);
99 static void create(const char * filename, unsigned int numberSpecies);
101 static void create(const char * filename, bool initializeModel, unsigned int numberSpecies=0);
102
103protected:
104 static herr_t parseParameter(hid_t location_id, const char *attr_name, const H5A_info_t *ainfo, void *op_data);
105 void writeParticleLattice_U8LE(const char* path, uint8_t *data, unsigned int x, unsigned int y, unsigned int z, unsigned int w);
106 void writeParticleLattice_U32LE(hid_t handle, const char* path, unsigned int *data, unsigned int x, unsigned int y, unsigned int z, unsigned int w);
107 void write3DLattice_U8LE(const char* path, uint8_t *data, unsigned int x, unsigned int y, unsigned int z);
108 void appendToDataset(H5MetaData *header, byte *data);
109 void makeNewDataset(H5MetaData *header, byte *data);
110 void appendDsToGroup(H5MetaData *header, byte *data);
111 void readDataset(H5Lookup *req, byte *&data, size_t &sz);
112 void readAttr(H5Lookup *req, byte *&data, size_t &sz);
113
114
115// Non static functions and variables
116public:
118 SimulationFile(const string filename);
120 SimulationFile(const char* filename);
122 virtual ~SimulationFile();
123
125 virtual void close();
127 virtual void flush();
130 virtual string checkpoint();
131
132 // Methods for working with parameters.
134 virtual map<string,string> getParameters();
136 virtual string getParameter(string key, string defaultValue="");
138 virtual void setParameter(string key, string value);
139
140 // Methods for working with the model.
143 virtual void getReactionModel(lm::io::ReactionModel * reactionModel);
146 virtual void setReactionModel(lm::io::ReactionModel * reactionModel);
149 virtual void getDiffusionModel(lm::io::DiffusionModel * diffusionModel);
156 virtual void getDiffusionModelLattice(lm::io::DiffusionModel * diffusionModel, byte * lattice, size_t latticeMaxSize, byte * latticeSites, size_t latticeSitesMaxSize);
160 virtual void getDiffusionModelLattice(lm::io::DiffusionModel * diffusionModel, lm::rdme::Lattice * lattice);
163 virtual void setDiffusionModel(lm::io::DiffusionModel * diffusionModel);
164
169 virtual void setDiffusionModelLattice(lm::io::DiffusionModel * m, uint8_t * lattice, uint8_t * latticeSites);
170
175 virtual void setDiffusionModelLattice(lm::io::DiffusionModel * m, uint32_t * lattice, uint8_t * latticeSites);
176
180 virtual void setDiffusionModelLattice(lm::io::DiffusionModel * m, lm::rdme::ByteLattice * lattice);
181
185 virtual void setDiffusionModelLattice(lm::io::DiffusionModel * m, lm::rdme::IntLattice * lattice);
186
189 virtual void setSpatialModel(lm::io::SpatialModel * model);
192 virtual void getSpatialModel(lm::io::SpatialModel * model);
193
194
195 // Methods for working with a replicate.
199 virtual bool replicateExists(unsigned int replicate);
202 virtual void openReplicate(unsigned int replicate);
206 virtual void appendSpeciesCounts(unsigned int replicate, lm::io::SpeciesCounts * speciesCounts);
212 virtual void appendLattice(unsigned int replicate, lm::io::Lattice * lattice, byte * latticeData, size_t latticeDataSize);
213 virtual void appendLattice_U32LE(unsigned int replicate, lm::io::Lattice * lattice, uint32_t * latticeData, size_t latticeDataSize);
214
215 virtual void arbitraryH5(byte *ptr);
216 virtual void arbitraryH5Lookup(byte *in, byte *&out, size_t &out_sz);
217 virtual void appendSites(unsigned int replicate, lm::io::Lattice * lattice, uint8_t * siteData, size_t siteDataSize);
221 virtual void appendParameterValues(unsigned int replicate, lm::io::ParameterValues * parameterValues);
225 virtual void setFirstPassageTimes(unsigned int replicate, lm::io::FirstPassageTimes * speciesCounts);
229 virtual vector<double> getLatticeTimes(unsigned int replicate);
234 virtual void getLattice(unsigned int replicate, unsigned int latticeIndex, lm::rdme::Lattice * lattice);
237 virtual void closeReplicate(unsigned int replicate);
239 virtual void closeAllReplicates();
240
241 //virtual void appendSpatialModelObjects(unsigned int replicate, lm::io::SpatialModel * model);
242 //virtual void getSpatialModelObjects(unsigned int replicate, lm::io::SpatialModel * model);
243
244 /*
245 virtual lattice_coord_t getLatticeSize() const;
246 virtual nmdist_t getLatticeSpacing() const;
247 virtual uint getMaxParticlesPerSite() const;
248 virtual lattice_particle_t getMaxParticleType() const;
249 virtual lattice_site_t getMaxSiteType() const;
250 virtual const std::map<uint64,uint64> getMaxParticleCounts() const;
251 virtual const std::map<uint64,uint64> getMaxSiteCounts() const;
252
253 virtual uint64 getNumberFrames() const;
254 virtual const std::vector<nstime_t> getFrameTimes() const;
255 virtual void loadFrame(uint64 frameIndex, Lattice* lattice, nstime_t* time=NULL) const;
256
257 virtual uint64 getNumberLatticeConfigurations() const;
258 virtual const std::vector<nstime_t> getLatticeConfigurationTimes() const;
259 virtual void loadLatticeConfiguration(uint64 latticeIndex, Lattice* lattice, nstime_t* time=NULL) const;
260 */
261
262 std::map<uint32_t, uint> getParticleCounts(unsigned int replicate, unsigned int latticeIndex);
263 std::map<double, vector<int> > getSpeciesCounts(unsigned int replicate);
264 vector<double> getSpeciesCountTimes(unsigned int replicate);
265 std::map<uint, string> getSpeciesNames();
266 std::map<uint, string> getSiteTypeNames();
267
268
269public:
270
274 {
275 hid_t group; // ID of the group of replicates
278
280 ReplicateHandles():group(H5I_INVALID_HID),speciesCountsDataset(H5I_INVALID_HID),speciesCountTimesDataset(H5I_INVALID_HID) {}
281 };
282
283
284protected:
285 // Protected functions
286 virtual void open();
287 virtual void openGroups();
288 virtual void loadParameters();
289 virtual void loadModel();
290 virtual ReplicateHandles * openReplicateHandles(unsigned int replicate);
291 virtual ReplicateHandles * createReplicateHandles(string replicateString);
292 virtual void closeReplicateHandles(ReplicateHandles * handles);
293
294protected:
295 string filename; // HDF5 file name
296 hid_t file; // file handle
297 unsigned int version; // HDF5 file version
298
299 // Main group handles.
301
302 // The parameters.
303 map<string,string> parameterMap;
304
305 // The model.
307 unsigned int numberSpecies;
308
309 // Handles for each replicate that is open.
310 map<unsigned int,ReplicateHandles *> openReplicates;
311
312};
313
314}
315}
316}
317
318#endif
unsigned int uint
Definition Types.h:52
std::map< uint32_t, uint > getParticleCounts(unsigned int replicate, unsigned int latticeIndex)
Definition SimulationFile.cpp:2052
virtual void closeReplicateHandles(ReplicateHandles *handles)
Definition SimulationFile.cpp:2232
virtual void flush()
Flush the current buffered data to the file.
Definition SimulationFile.cpp:149
virtual void setDiffusionModelLattice(lm::io::DiffusionModel *m, uint8_t *lattice, uint8_t *latticeSites)
Pushes the diffusion lattice into the HDF5 file.
Definition SimulationFile.cpp:833
static const uint MAX_SHAPE_PARAMETERS
Definition SimulationFile.h:85
map< string, string > parameterMap
Definition SimulationFile.h:303
bool modelLoaded
Definition SimulationFile.h:306
static const uint MIN_VERSION
Definition SimulationFile.h:82
std::map< double, vector< int > > getSpeciesCounts(unsigned int replicate)
Definition SimulationFile.cpp:1973
vector< double > getSpeciesCountTimes(unsigned int replicate)
Definition SimulationFile.cpp:1951
virtual void appendParameterValues(unsigned int replicate, lm::io::ParameterValues *parameterValues)
Adds all the parameter values to the replicate.
Definition SimulationFile.cpp:1446
std::map< uint, string > getSiteTypeNames()
Definition SimulationFile.cpp:2264
hid_t file
Definition SimulationFile.h:296
virtual bool replicateExists(unsigned int replicate)
Checks if the specified replicate exists.
Definition SimulationFile.cpp:1077
virtual ReplicateHandles * openReplicateHandles(unsigned int replicate)
Definition SimulationFile.cpp:2138
static herr_t parseParameter(hid_t location_id, const char *attr_name, const H5A_info_t *ainfo, void *op_data)
Definition SimulationFile.cpp:260
map< unsigned int, ReplicateHandles * > openReplicates
Definition SimulationFile.h:310
unsigned int numberSpecies
Definition SimulationFile.h:307
virtual vector< double > getLatticeTimes(unsigned int replicate)
Get the timestep times for the replicate.
Definition SimulationFile.cpp:1929
virtual void closeAllReplicates()
Close all the replicates.
Definition SimulationFile.cpp:2126
virtual void getSpatialModel(lm::io::SpatialModel *model)
Pops the spacial model (i.e. obstacles) from the HDF5 file.
Definition SimulationFile.cpp:875
static bool isValidFile(const string filename)
Check that the HDF5 file is valid.
Definition SimulationFile.cpp:225
void readAttr(H5Lookup *req, byte *&data, size_t &sz)
Definition SimulationFile.cpp:2449
virtual void openReplicate(unsigned int replicate)
Opens the specified replicate for reading.
Definition SimulationFile.cpp:1085
virtual void setFirstPassageTimes(unsigned int replicate, lm::io::FirstPassageTimes *speciesCounts)
Adds all the first passage times to the replicate.
Definition SimulationFile.cpp:1523
virtual void getLattice(unsigned int replicate, unsigned int latticeIndex, lm::rdme::Lattice *lattice)
Get the lattice for the replicate.
Definition SimulationFile.cpp:2010
virtual ReplicateHandles * createReplicateHandles(string replicateString)
Definition SimulationFile.cpp:2184
virtual map< string, string > getParameters()
Get all the parameters from the current replicate.
Definition SimulationFile.cpp:308
virtual void appendLattice(unsigned int replicate, lm::io::Lattice *lattice, byte *latticeData, size_t latticeDataSize)
Appends the lattice to the current replicate.
Definition SimulationFile.cpp:1166
unsigned int version
Definition SimulationFile.h:297
static void create(const string filename)
Create an HDF5 file.
Definition SimulationFile_create.cpp:56
void writeParticleLattice_U32LE(hid_t handle, const char *path, unsigned int *data, unsigned int x, unsigned int y, unsigned int z, unsigned int w)
Definition SimulationFile.cpp:787
void makeNewDataset(H5MetaData *header, byte *data)
Definition SimulationFile.cpp:2368
hid_t modelGroup
Definition SimulationFile.h:300
virtual void getDiffusionModel(lm::io::DiffusionModel *diffusionModel)
Pops the diffusion model from the HDF5 file.
Definition SimulationFile.cpp:557
virtual void getReactionModel(lm::io::ReactionModel *reactionModel)
Pops the reaction model from the HDF5 file.
Definition SimulationFile.cpp:363
virtual void open()
Definition SimulationFile.cpp:94
SimulationFile(const string filename)
Create a SimulationFile with the specified filename.
Definition SimulationFile.cpp:82
virtual void arbitraryH5Lookup(byte *in, byte *&out, size_t &out_sz)
Definition SimulationFile.cpp:2434
std::map< uint, string > getSpeciesNames()
Definition SimulationFile.cpp:2242
hid_t simulationsGroup
Definition SimulationFile.h:300
void appendToDataset(H5MetaData *header, byte *data)
Definition SimulationFile.cpp:2307
virtual void getDiffusionModelLattice(lm::io::DiffusionModel *diffusionModel, byte *lattice, size_t latticeMaxSize, byte *latticeSites, size_t latticeSitesMaxSize)
Pops the diffusion lattice from the HDF5 file.
Definition SimulationFile.cpp:619
virtual string getParameter(string key, string defaultValue="")
Get the specified parameter from the current replicate.
Definition SimulationFile.cpp:313
hid_t parametersGroup
Definition SimulationFile.h:300
static const uint CURRENT_VERSION
Definition SimulationFile.h:83
virtual void close()
Close the file.
Definition SimulationFile.cpp:189
void readDataset(H5Lookup *req, byte *&data, size_t &sz)
Definition SimulationFile.cpp:2489
virtual void loadParameters()
Definition SimulationFile.cpp:254
virtual void appendSpeciesCounts(unsigned int replicate, lm::io::SpeciesCounts *speciesCounts)
Appends the species counts in the various sites into the replicate.
Definition SimulationFile.cpp:1090
virtual void appendLattice_U32LE(unsigned int replicate, lm::io::Lattice *lattice, uint32_t *latticeData, size_t latticeDataSize)
Definition SimulationFile.cpp:1267
virtual string checkpoint()
Create the current checkpoint to the HDF5 file.
Definition SimulationFile.cpp:158
void writeParticleLattice_U8LE(const char *path, uint8_t *data, unsigned int x, unsigned int y, unsigned int z, unsigned int w)
Definition SimulationFile.cpp:763
void write3DLattice_U8LE(const char *path, uint8_t *data, unsigned int x, unsigned int y, unsigned int z)
Definition SimulationFile.cpp:811
virtual void setDiffusionModel(lm::io::DiffusionModel *diffusionModel)
Pushes the diffusion model into the HDF5 file.
Definition SimulationFile.cpp:696
virtual void arbitraryH5(byte *ptr)
Definition SimulationFile.cpp:2287
virtual void closeReplicate(unsigned int replicate)
Close the specified replicate.
Definition SimulationFile.cpp:2114
virtual void appendSites(unsigned int replicate, lm::io::Lattice *lattice, uint8_t *siteData, size_t siteDataSize)
Definition SimulationFile.cpp:1347
virtual void setParameter(string key, string value)
Set the specified parameter to the value.
Definition SimulationFile.cpp:322
static const uint MAX_REACTION_RATE_CONSTANTS
Definition SimulationFile.h:84
virtual void openGroups()
Definition SimulationFile.cpp:136
virtual void setSpatialModel(lm::io::SpatialModel *model)
Pushes the spacial model (i.e. obstacles) into the HDF5 file.
Definition SimulationFile.cpp:970
string filename
Definition SimulationFile.h:295
virtual void setReactionModel(lm::io::ReactionModel *reactionModel)
Pushes the reaction model into the HDF5 file.
Definition SimulationFile.cpp:472
virtual ~SimulationFile()
Destroy the SimulationFile.
Definition SimulationFile.cpp:143
void appendDsToGroup(H5MetaData *header, byte *data)
Definition SimulationFile.cpp:2396
virtual void loadModel()
Definition SimulationFile.cpp:339
A Lattice that is based on packed bytes of memory, i.e. one byte per lattice site to hold particles.
Definition ByteLattice.h:53
A Lattice that is based on one particle per word, with sites strided per particle.
Definition IntLattice.h:53
Base class for lattice type objects.
Definition Lattice.h:132
Definition lm_hdf5.h:49
Definition LatticeBuilder.h:56
Definition LatticeBuilder.h:60
Definition Capsule.cpp:46
Definition ArbitraryH5.h:56
Definition ArbitraryH5.h:72
hid_t speciesCountsDataset
Definition SimulationFile.h:276
hid_t group
Definition SimulationFile.h:275
hid_t speciesCountTimesDataset
Definition SimulationFile.h:277
ReplicateHandles()
Set up the ReplicateHandles.
Definition SimulationFile.h:280