35#include <xercesc/dom/DOM.hpp>
47XERCES_CPP_NAMESPACE_USE
53template <
class T =
double>
79 inline size_t Size ()
const {
149 inline void Init (
const size_t ndim,
const size_t* dims,
const size_t live) {
152 std::copy (dims, dims+ndim,
m_dims.begin());
173 inline void Init (
const std::vector<size_t>& dims,
const size_t live) {
209 inline void Init (
const size_t live) {
220 inline void Init (
const size_t nprops,
const size_t live) {
232 inline const vector<size_t>
Dims ()
const {
244 for (
int i=0;i<d.size();i++)
m_dims[i]=d[i];
255 assert(pos <
m_data.size());
266 assert(pos <
m_data.size());
280 typename std::vector<T>::iterator At (
const size_t n) {
281 return m_data.begin() + n;
284 typename std::vector<T>::const_iterator At (
const size_t n)
const {
285 return m_data.begin() + n;
318 Sample (
const string& file,
const int multiple = 1);
327 Sample (
const size_t size);
338 virtual void Prepare (
const std::string& fname =
"");
357 void CreateSpins (
const size_t nprops,
const size_t size);
410 void GetValues (
const size_t l,
double* val) ;
484 void ReportSpin(
int beg,
int end,
int value) {
for (
int i=beg; i<=end; i++) m_spin_state[i] = value;}
508 void GetNextPacket(
int &noSpins,
int &NextSpinToSend,
int SlaveId);
526 void GetHelper (
double* target);
528 double* GetHelper ();
530 size_t GetHelperSize ();
532 int GetNoSpinCompartments ();
534 void SetNoSpinCompartments (
int n);
536 void CreateHelper (
const size_t l);
538 void CreateDims (
const size_t l);
540 void CopyHelper (
double* out);
542 virtual void CropEnumerate ();
546 void MultiplySample(
int multiple);
551 vector<size_t> m_index;
562 int m_max_paket_size;
567 vector<char> m_spin_state;
575 double m_no_spins_done;
577 vector<double> m_helper;
578 int m_no_spin_compartments;
Implementation of JEMRIS Declarations.
Status
Definition Declarations.h:150
Coil configuration and sensitivities.
Definition CoilArray.h:40
base class for different sample reorder strategies.
Definition SampleReorderStrategyInterface.h:16
The Sample is the object to simulate. It contains the spins.
Definition Sample.h:301
bool IsRestart()
true if simulation run is from a restart
Definition Sample.h:523
SampleReorderStrategyInterface * m_reorder_strategy
Definition Sample.h:559
void SetReorderStrategy(string strat)
Definition Sample.cpp:358
void SetTimeInterval(double val)
Set Time interval in seconds after which new spins are sent (approx. value.)
Definition Sample.h:518
Ensemble< double > m_ensemble
Definition Sample.h:548
void GetValues(const size_t l, double *val)
Get values for spin l and deliver them in val.
Definition Sample.cpp:325
double * GetResolution()
Get grid resolution.
Definition Sample.h:417
int m_next_spin_to_send
Definition Sample.h:564
virtual void Prepare(const std::string &fname="")
Definition Sample.cpp:45
Sample()
Definition Sample.cpp:102
double m_total_cpu_time
Definition Sample.h:574
void CreateSpins(const size_t size)
create the spin structure
Definition Sample.cpp:88
bool m_is_restart
Definition Sample.h:568
void ClearSpinsState()
Utility function for restart: mark all spins as not simulated.
Definition Sample.cpp:574
vector< size_t > GetSampleDims() const
Definition Sample.h:378
RNG m_rng
Definition Sample.h:555
vector< int > m_last_offset_sent
Definition Sample.h:570
vector< timeval > m_last_time
Definition Sample.h:571
double m_r2prime
Definition Sample.h:556
void ClearSpins()
delete the spin structure
Definition Sample.cpp:80
vector< int > m_spins_sent
Definition Sample.h:569
Sample * GetSubSample(const int n, const size_t size)
vector< double > m_res
Definition Sample.h:552
double GetDeltaB(size_t pos=-1)
Get off-resonance of a specific spin.
Definition Sample.cpp:339
void SetPositionRandomness(double val)
Set the position randomness in per cent of the cartesian resolution.
Definition Sample.h:438
void SetSampleDims(vector< size_t > d)
Definition Sample.h:385
int SpinsLeft()
Returns No spins which still needs to be calculated.
Definition Sample.cpp:582
int ReadSpinsState()
Utility function for restart: Read restart file after crash.
Definition Sample.cpp:537
const int GetSampleDimsSize() const
Dimensions.
Definition Sample.h:392
double m_sent_interval
Definition Sample.h:572
void ReorderSample()
Definition Sample.cpp:351
double * GetSpinsData()
Definition Sample.h:462
int m_min_paket_size
Definition Sample.h:563
double m_pos_rand_perc
Definition Sample.h:557
void DumpRestartInfo(CoilArray *RxCA)
Utility function for restart: dump information to restart jemris after crash.
Definition Sample.cpp:522
virtual IO::Status Populate(const string &file)
Definition Sample.cpp:155
void SetR2Prime(double val)
Set the random local field fluctuations.
Definition Sample.h:431
void ReportSpin(int beg, int end, int value)
Utility function for restart: mark spins which have been calculated.
Definition Sample.h:484
size_t GetSize() const
Definition Sample.cpp:320
void GetScatterVectors(int *sendcount, int *displ, int size)
utility function to send sample in parallel mode: initial samples are send via mpi_scatterv; get need...
Definition Sample.cpp:366
vector< double > m_offset
Definition Sample.h:553
virtual ~Sample()
Definition Sample.cpp:110
void GetNextPacket(int &noSpins, int &NextSpinToSend, int SlaveId)
utility function to send sample in parallel mode: get next spin packet to be sent....
Definition Sample.cpp:458
size_t GetNProps() const
Definition Sample.h:371
void InitRandGenerator(int val=1)
Initialize the randome number generator.
Definition Sample.h:424
Spin ensemble.
Definition Sample.h:54
size_t Size() const
Number of raw data elements.
Definition Sample.h:79
const vector< size_t > Dims() const
get Dimensions
Definition Sample.h:232
void Init(const size_t live)
Initialize data store number of non-zero spins only (MPI slaves)
Definition Sample.h:209
void ResizeDims(const size_t ndim)
Clear data store and dimensions.
Definition Sample.h:137
T & operator[](const size_t pos)
Access to position in store.
Definition Sample.h:253
~Ensemble()
Destruct.
Definition Sample.h:69
size_t NSpins() const
Number of spins in data store.
Definition Sample.h:89
void SetDims(vector< size_t > d)
set Dimensions
Definition Sample.h:242
T * Data()
Access to data.
Definition Sample.h:275
void Init(const std::vector< size_t > &dims, const size_t live)
Initialize data store with dimensions and number of non-zero spins.
Definition Sample.h:173
std::vector< T > m_data
Definition Sample.h:57
void Clear()
Clear data store and dimensions.
Definition Sample.h:117
std::vector< size_t > m_dims
Definition Sample.h:56
Ensemble()
Construct.
Definition Sample.h:63
size_t & NProps()
Reference to innermost data dimensions.
Definition Sample.h:109
void ClearData()
Clear data store and dimensions.
Definition Sample.h:127
size_t m_nspins
Definition Sample.h:58
void Zero()
Zero data.
Definition Sample.h:199
size_t NProps() const
Innermost data dimension containing physical parameters of every isochromat.
Definition Sample.h:99
void Allocate()
Allocate RAM.
Definition Sample.h:191
void Init(const size_t ndim, const size_t *dims, const size_t live)
Initialize data store with dimensions and number of non-zero spins.
Definition Sample.h:149
void Init(const size_t nprops, const size_t live)
Initialize data store number of non-zero spins only (MPI slaves)
Definition Sample.h:220
a container of spins
Definition Sample.h:294
size_t size
Definition Sample.h:295
Ensemble< double > * data
Definition Sample.h:296