87 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> Image dimensions and quantification object is null !" << endl);
92 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> Image space object is null !" << endl);
97 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> Scanner object is null !" << endl);
102 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> Projector manager object is null !" << endl);
107 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> Convolver manager object is null !" << endl);
112 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> Deformation manager object is null !" << endl);
117 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> Data file array is null !" << endl);
124 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> Data file object for bed " << b+1 <<
" is null !" << endl);
130 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> Verbose level is negative !" << endl);
136 Cerr(
"***** oSensitivityGenerator::CheckParameters() -> It was asked to compute global sensitivity from the provided datafile whereas it is not a histogram !" << endl);
155 Cerr(
"***** oSensitivityGenerator::Initialize() -> Must call the CheckParameters() function before initialization !" << endl);
159 if (
m_verbose>=2)
Cout(
"oSensitivityGenerator::Initialize() -> Start initialization" << endl);
163 Cerr(
"***** oSensitivityGenerator::Initialize() -> Sensitivity for SPECT not yet implemented !" << endl);
169 Cerr(
"***** oSensitivityGenerator::Initialize() -> Sensitivity for PET with TOF is not yet possible, will soon be !" << endl);
177 Cerr(
"***** oSensitivityGenerator::Initialize() -> A problem occured while initializing the normalization data files !" << endl);
183 Cerr(
"***** oSensitivityGenerator::Initialize() -> A problem occured while initializing the attenuation files !" << endl);
235 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> Normalization correction is included in the data file while it is not in the sensitivity computation !" << endl);
244 if (
m_verbose>=2)
Cout(
"oSensitivityGenerator::InitializeNormalizationFiles() -> Initialize normalization files" << endl);
254 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> Number of normalization files options should be one or equal to the number of data files !" << endl);
286 vector<string> normalization_files;
288 int bed_data_file_name_index = bed;
293 while (comma!=string::npos)
314 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> Number of normalization files for bed " << bed+1 <<
" should be one or equal to the number of frames !" << endl);
321 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> If only one normalization file is provided for all frames, then it must be so for all beds !" << endl);
348 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> Unknown scanner type (" << p_ScannerManager->
GetScannerType() <<
") or not yet implemented !" << endl);
356 bool affect_quantification_flag =
false;
359 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> A problem occurred during normalization datafile header reading !" << endl);
364 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> A problem occurred while checking normalization datafile parameters !" << endl);
369 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> A problem occurred in normalization datafile event size computation !" << endl);
374 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> A problem occurred in normalization datafile initialization !" << endl);
379 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> A problem occured in normalization datafile preparation !" << endl);
385 Cerr(
"***** oSensitivityGenerator::InitializeNormalizationFiles() -> Normalization data file used for sensitivity computation must be either histogram or normalization mode !" << endl);
416 Cerr(
"***** oSensitivityGenerator::InitializeAttenuationFiles() -> Attenuation correction is included in the data file while it is not in the sensitivity computation !" << endl);
427 Cout(
"oSensitivityGenerator::InitializeAttenuationFiles() -> Ignore provided mumap and consider ACF provided in the normalization data file" << endl);
432 if (
m_verbose>=2)
Cout(
"oSensitivityGenerator::InitializeAttenuationFiles() -> Allocate and read attenuation images (assumed to be in cm-1)" << endl);
437 Cerr(
"***** oSensitivityGenerator::Initialize() -> A problem occured while initializing the attenuation image into the image space !" << endl);
471 if (
m_verbose>=1)
Cout(
"oSensitivityGenerator::Launch() -> Start the sensitivity computation" << endl);
500 Cerr(
"***** oSensitivityGenerator::LaunchCPU() -> A problem occured while computing the sensitivity using the histogram data file for bed " << bed+1 <<
" !" << endl);
509 Cerr(
"***** oSensitivityGenerator::LaunchCPU() -> A problem occured while computing the sensitivity using the normalization file for bed " << bed+1 <<
" !" << endl);
518 Cerr(
"***** oSensitivityGenerator::LaunchCPU() -> A problem occured while computing the sensitivity from scanner elements for bed " << bed+1 <<
" !" << endl);
523 MPI_Barrier(MPI_COMM_WORLD);
580 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromHistogramDataFile() -> Cannot compute sensitivity from histogram file with gating !" << endl);
588 else Cout(
"oSensitivityGenerator::ComputeSensitivityFromHistogramDataFile() -> Start computation" << endl);
592 clock_t clock_start = clock();
593 time_t time_start = time(NULL);
596 bool problem =
false;
603 int64_t index_start = 0;
604 int64_t index_stop = 0;
616 int64_t loop_increment = 1;
618 int64_t index_start_for_this_thread = index_start + th * loop_increment;
619 int64_t nb_loop_pass_through = (index_stop - 1 - index_start_for_this_thread) / increment_for_this_thread;
620 p_last_index[th] = index_start_for_this_thread + nb_loop_pass_through * increment_for_this_thread;
624 int64_t index = 0, printing_index = 0;
625 #pragma omp parallel for private(index) schedule(static, 1)
626 for ( index = index_start ; index < index_stop ; index++)
631 th = omp_get_thread_num();
636 if (printing_index%1000==0)
638 int percent = ((int)( ((
FLTNB)(index-index_start)) * 100. / ((
FLTNB)(index_stop-index_start)) ));
639 cout <<
"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b "
640 << percent <<
" % " << flush;
648 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromHistogramDataFile() -> An error occured while getting the event from index "
649 << index <<
" (thread " << th <<
") !" << endl);
667 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromHistogramDataFile() -> A problem occured while computing the projection line !" << endl);
674 int no_resp_gate = 0;
675 int no_card_gate = 0;
678 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromHistogramDataFile() -> A problem occured while processing a line !" << endl);
684 MPI_Barrier(MPI_COMM_WORLD);
689 cout <<
"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
690 <<
" --> 100 % " << endl;
694 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromHistogramDataFile() -> A problem occured inside the parallel loop over events !" << endl);
699 clock_t clock_stop = clock();
700 time_t time_stop = time(NULL);
702 Cout(
" --> Time spent for sensitivity generation for bed " << a_bed+1 <<
" | User: " << time_stop-time_start
703 <<
" sec | CPU: " << (clock_stop-clock_start)/((
FLTNB)CLOCKS_PER_SEC) <<
" sec" << endl);
705 Cout(
" --> Time spent for sensitivity generation | User: " << time_stop-time_start
706 <<
" sec | CPU: " << (clock_stop-clock_start)/((
FLTNB)CLOCKS_PER_SEC) <<
" sec" << endl);
723 else Cout(
"oSensitivityGenerator::ComputeSensitivityFromNormalizationFile() -> Start computation" << endl);
727 clock_t clock_start = clock();
728 time_t time_start = time(NULL);
735 cout <<
" --> Processing frame " << fr+1 << endl;
741 cout <<
" --> Processing respiratory gate " << rg+1 << endl;
747 cout <<
" --> Processing cardiac gate " << cg+1 << endl;
759 bool problem =
false;
766 int64_t index_start = 0;
767 int64_t index_stop = 0;
775 int64_t loop_increment = 1;
777 int64_t index_start_for_this_thread = index_start + th * loop_increment;
778 int64_t nb_loop_pass_through = (index_stop - 1 - index_start_for_this_thread) / increment_for_this_thread;
779 p_last_index[th] = index_start_for_this_thread + nb_loop_pass_through * increment_for_this_thread;
783 int64_t index = 0, printing_index = 0;
784 #pragma omp parallel for private(index) schedule(static, 1)
785 for ( index = index_start ; index < index_stop ; index++)
790 th = omp_get_thread_num();
795 if (printing_index%1000==0)
797 int percent = ((int)( ((
FLTNB)(index-index_start)) * 100. / ((
FLTNB)(index_stop-index_start)) ));
798 cout <<
"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b "
799 << percent <<
" % " << flush;
807 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromNormalizationFile() -> An error occured while getting the event from index "
808 << index <<
" (thread " << th <<
") !" << endl);
818 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromNormalizationFile() -> A problem occured while computing the projection line !" << endl);
827 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromNormalizationFile() -> A problem occured while processing a line !" << endl);
832 cout <<
"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
833 <<
" --> 100 % " << endl;
837 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromNormalizationFile() -> A problem occured inside the parallel loop over events !" << endl);
845 clock_t clock_stop = clock();
846 time_t time_stop = time(NULL);
848 Cout(
" --> Time spent for sensitivity generation for bed " << a_bed+1 <<
" | User: " << time_stop-time_start
849 <<
" sec | CPU: " << (clock_stop-clock_start)/((
FLTNB)CLOCKS_PER_SEC) <<
" sec" << endl);
851 Cout(
" --> Time spent for sensitivity generation | User: " << time_stop-time_start
852 <<
" sec | CPU: " << (clock_stop-clock_start)/((
FLTNB)CLOCKS_PER_SEC) <<
" sec" << endl);
872 else Cout(
"oSensitivityGenerator::ComputeSensitivityFromScanner() -> Start computation" << endl);
882 clock_t clock_start = clock();
883 time_t time_start = time(NULL);
886 int64_t main_loop_start_index = 0 ;
887 int64_t main_loop_stop_index = 0;
893 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromScanner() -> An error occured when trying to initialize main loop stop index !" << endl);
898 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromScanner() -> An error occured when trying to initialize inner loop start index !" << endl);
904 int64_t* progression_elts_array =
new int64_t[nb_total_elts*
sizeof(int64_t)];
905 progression_elts_array[0] = 0;
910 uint64_t printing_index = 0;
920 cout <<
" --> Processing frame " << fr+1 << endl;
926 cout <<
" --> Processing respiratory gate " << rg+1 << endl;
932 cout <<
" --> Processing cardiac gate " << cg+1 << endl;
942 bool problem =
false;
951 #pragma omp parallel for private(idx_elt1) schedule(static, 1)
952 for(idx_elt1=main_loop_start_index ; idx_elt1<main_loop_stop_index ; idx_elt1++)
957 th = omp_get_thread_num();
965 for (int64_t idx_elt2=inner_loop_start_index ; idx_elt2<inner_loop_stop_index ; idx_elt2++)
970 if (
m_verbose>=2 && printing_index%10000==0)
976 int64_t percent = (int64_t) (( ((
FLTNB)progression_index_current)/((
FLTNB)progression_index_total) ) * ((
FLTNB)100));
977 cout <<
"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b "
993 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromScanner() -> A problem occured while computing the projection line !" << endl);
1003 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromScanner() -> A problem occured while processing a line !" << endl);
1009 cout <<
"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
1010 <<
" --> 100 % " << endl;
1014 Cerr(
"***** oSensitivityGenerator::ComputeSensitivityFromScanner() -> A problem occured inside the parallel loop over events !" << endl);
1020 delete[] progression_elts_array;
1023 clock_t clock_stop = clock();
1024 time_t time_stop = time(NULL);
1026 Cout(
" --> Time spent for sensitivity generation for bed " << a_bed+1 <<
" | User: " << time_stop-time_start
1027 <<
" sec | CPU: " << (clock_stop-clock_start)/((
FLTNB)CLOCKS_PER_SEC) <<
" sec" << endl);
1029 Cout(
" --> Time spent for sensitivity generation | User: " << time_stop-time_start
1030 <<
" sec | CPU: " << (clock_stop-clock_start)/((
FLTNB)CLOCKS_PER_SEC) <<
" sec" << endl);
1052 if (multiplicative_factor<=0.)
return 0;
1056 if (quantification_factor<=0.)
return 0;
1063 FLTNB attenuation_correction_factor = 1.;
1069 FLTNB cumulative_mu = 0.;
1078 attenuation_correction_factor = max(((
FLTNB)1.),exp(cumulative_mu*((
FLTNB)0.1)));
1086 FLTNB lor_sensitivity = 1. / (quantification_factor * attenuation_correction_factor * multiplicative_factor);
1117 merge_dynamic_files )
oImageSpace * mp_ImageSpace
oImageConvolverManager * mp_ImageConvolverManager
FLTNB **** m4p_forwardImage
This class is designed to be a mother virtual class for Datafile.
This header file is mainly used to declare some macro definitions and all includes needed from the st...
bool GetNormCorrectionFlag()
Simply return m_normCorrectionFlag.
oProjectorManager * mp_ProjectorManager
static sScannerManager * GetInstance()
Instanciate the singleton object and Initialize member variables if not already done, return a pointer to this object otherwise.
void GetEventIndexStartAndStop(int64_t *ap_indexStart, int64_t *ap_indexStop, int a_subsetNum=0, int a_NbSubsets=1)
Compute the index start and stop of the events loop with respect to the current subset and MPI size a...
int ProcessThisLine(oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_frame, int a_respGate, int a_cardGate, int a_thread)
This function manages the computation of the sensitivity contribution of the projection line provided...
int64_t PROJ_GetModalityStartValueInnerLoop(int64_t a_elt1)
Get the start value for the inner loop of analytic projection depending on the modality.
#define MODE_NORMALIZATION
oSensitivityGenerator()
The constructor of oSensitivityGenerator.
int Initialize()
A public function used to initialize the sensitivity generator.
#define DYNAMIC_SWITCH_CONTINUE
int LMS_SaveSensitivityImage(const string &a_pathToSensitivityImage, oDeformationManager *ap_DeformationManager)
Call the interfile function to write the sensitivity image on disk.
bool m_oneNormalizationFileForAllBeds
int m_nbAtnRespGateImages
vDataFile *** m3p_NormalizationDataFile
oDeformationManager * mp_DeformationManager
string GetPathToSensitivityImage()
This function return the path to the sensitivity image.
int64_t PROJ_GetProgressionFinalValue()
Get numerator value according to the modality to compute percent progression during the projection pr...
int DynamicSwitch(int64_t a_currentEventIndex, uint32_t a_currentTime, int a_bed, int a_th)
Call the eponym function from the oDynamicDataManager class using the member object.
bool m_oneNormalizationFileForAllFrames
void SetVerbose(int a_verboseLevel)
set verbosity
bool GetIgnoreAttnCorrectionFlag()
Get the boolean that says if the attenuation correction is ignored or not.
~oSensitivityGenerator()
The destructor of oSensitivityGenerator.
int Launch()
A public function used to launch the sensitivity generator (compute the sensitivity image) ...
virtual FLTNB GetMultiplicativeCorrections()=0
This is a pure virtual function implemented in the child classes.
void LMS_InstantiateForwardImage()
Allocate memory for the forward image matrices (for list-mode sensitivity generation) ...
static sOutputManager * GetInstance()
Instanciate the singleton object and Initialize member variables if not already done, return a pointer to this object otherwise.
int InitAttenuationImage(const string &a_pathToAtnImage)
Memory allocation and initialisation for the attenuation image using either :
Declaration of class iDataFilePET.
bool GetIgnoreNormCorrectionFlag()
Get the boolean that says if the normalization correction is ignored or not.
INTNB GetVoxelIndex(int a_direction, int a_TOFBin, INTNB a_voxelInLine)
This function is used to get the contributing voxel index of the provided direction, TOF bin and voxel rank.
bool m_computeFromHistogramFlag
const string & GetPathName()
FLTNB ****** m6p_backwardImage
bool m_inverseDataFileOrderFlag
int m_nbAtnCardGateImages
Singleton class that manages output writing on disk (images, sinograms, etc). It also manages loggi...
int ComputeSensitivityFromNormalizationFile(int a_bed)
Launch the computation of the sensitivity image for this bed, based on normalization data files...
void LMS_DeallocateSensitivityImage()
Free memory for the sensitivity image matrices (for list-mode sensitivity generation) ...
int GetNbBeds()
Get the number of bed positions.
Singleton class that Instantiate and initialize the scanner object.
void ResetBufferRange()
Simply set the m_1stIdxArrayEvents and m_lastIdxArrayEvents to -1 only if the percentage load is stri...
void ResetCurrentDynamicIndices()
Call the eponym function from the oDynamicDataManager class using the member object.
int GetSensNbRespGates()
call the eponym function from the oDynamicDataManager object
INTNB GetCurrentNbVoxels(int a_direction, int a_TOFBin)
This function is used to get the current number of contributing voxels to the line.
uint64_t * mp_lineCounter
oProjectionLine * ComputeProjectionLine(vEvent *ap_Event, int a_th)
This function is used to compute system matrix elements from the associated projector or pre-computed...
FLTNB GetQuantificationFactor(int a_bed, int a_frame, int a_respGate, int a_cardGate)
Get the quantification factor corresponding to the provided bed, frame, respiratory and cardiac gates...
int InitializeAttenuationFiles()
Initialize the attenuation images provided for sensitivity computation.
void SetHeaderDataFileName(const string &a_headerFileName)
set the data header file name
void ApplyBedOffset(int a_bed)
Compute the bed offset from the provided bed index and apply it to all projection lines...
vEvent * PROJ_GenerateEvent(int idx_elt1, int idx_elt2, int a_th)
Generate a standard event and set up its ID Used by the projection, list-mode sensitivity generatio...
bool NotEmptyLine()
This function is used to know if the line contains any voxel contribution.
vEvent * GetEventWithAscendingOrderAssumption(int64_t a_eventIndex, int64_t a_eventIndexLimit, int a_th)
According to the current part of the datafile loaded in memory, either read from this buffer or direc...
int LaunchCPU()
Launch the computation of the sensitivity image (CPU version)
bool m_forwardProjectAttenuation
bool m_mumapAttenuationFlag
virtual int GetSystemNbElts()=0
This is a pure virtual method that must be implemented by children.
vDataFile ** m2p_DataFile
void ReduceBackwardImage(int a_imageIndex, int a_timeIndex, int a_respIndex, int a_cardIndex)
Merge parallel results into the backward image matrix of the first thread for the specific image / ti...
This class is designed to manage and store system matrix elements associated to a vEvent...
const string & GetBaseName()
oImageDimensionsAndQuantification * mp_ImageDimensionsAndQuantification
string m_pathToSensitivityImage
void InstantiateBackwardImageFromDynamicBins()
Allocate memory for the backward image matrices and initialize them.
Declaration of class oSensitivityGenerator.
void LMS_DeallocateAttenuationImage()
Free memory for the Attenuation image matrices (for analytical projection or list-mode sensitivity ge...
int GetNbCardGates()
Get the number of cardiac gates.
bool MergeDynImages()
Indicate if a dynamic serie of 3D images should be merged in one file (true) or written on disk as on...
void SetBedIndex(int a_bedIndex)
set the bed index corresponding to this data file
Mother class for the Event objects.
int GetNbThreadsForImageComputation()
Get the number of threads used for image operations.
int GetNbTimeFrames()
Get the number of time frames.
string m_pathToAttenuationImage
int InitializeNormalizationFiles()
Initialize the normalization datafiles provided for sensitivity computation.
int CheckParameters()
A public function used to check the parameters settings.
int64_t PROJ_GetCurrentProgression(int64_t a_elt1, int64_t a_elt2, int64_t *ap_nbEltsArray, int a_nbRGates, int a_nbCGates, int a_fr, int a_rg, int a_cg)
Get numerator value according to the modality to compute percent progression during the analytical pr...
int GetNbTOFBins()
This function is used to get the number of TOF bins in use.
int GetNbThreadsForProjection()
Get the number of threads used for projections.
FLTNB GetVoxelWeights(int a_direction, int a_TOFBin, INTNB a_voxelInLine)
This function is used to get the contributing voxel weight of the provided direction, TOF bin and voxel rank.
vector< string > mp_pathToNormalizationFileName
int ComputeSensitivityFromHistogramDataFile(int a_bed)
Launch the computation of the sensitivity image for this bed, based on the input histogram data files...
int GetNbRespGates()
Get the number of respiratory gates.
int64_t PROJ_GetModalityStopValueMainLoop()
Get the stop value for the main loop of analytic projection depending on the modality.
void LMS_CopyAtnToForwardImage()
Copy the attenuation image contained in the 'm2p_attenuation' matrix inside the m4p_forwardImage matr...
int ConvolveSensitivity(oImageSpace *ap_ImageSpace)
A function used to apply convolvers onto the sensitivity image of the oImageSpace.
virtual int IsAvailableLOR(int a_elt1, int a_elt2)
This function is implemented in child classes. Check if the LOR is available according to the scann...
int ComputeSensitivityFromScanner(int a_bed)
Launch the computation of the sensitivity image for this bed, based on a loop over all scanner elemen...
bool GetAtnCorrectionFlag()
Simply return m_atnCorrectionFlag.
void SetImageDimensionsAndQuantification(oImageDimensionsAndQuantification *ap_ImageDimensionsAndQuantification)
set the pointer to the oImageDimensionsAndQuantification object
void DeallocateBackwardImageFromDynamicBins()
Free memory of the backward image matrices.
Inherit from vDataFile. Class that manages the reading of a PET input file (header + data)...
void LMS_InstantiateSensitivityImage()
Allocate memory for the sensitivity image matrices (for list-mode sensitivity generation) ...
void SetPercentageLoad(int a_percentageLoad)
Set the percentage of the data file that will be loaded in memory.
int GetMPIRank()
Get the MPI instance number (the rank)
void LMS_CopyBackwardToSensitivity()
int GetCurrentTimeFrame(int a_th)
call the eponym function from the oDynamicDataManager object
void LMS_DeallocateForwardImage()
Free memory for the forward image matrices (for list-mode sensitivity generation) ...