133 for (
int bed=0; bed<
m_nbBeds; bed++)
166 if (a_flipOut==
"x" || a_flipOut==
"X")
172 else if (a_flipOut==
"y" || a_flipOut==
"Y")
178 else if (a_flipOut==
"z" || a_flipOut==
"Z")
184 else if (a_flipOut==
"xy" || a_flipOut==
"yx" || a_flipOut==
"XY" || a_flipOut==
"YX")
190 else if (a_flipOut==
"zy" || a_flipOut==
"yz" || a_flipOut==
"ZY" || a_flipOut==
"YZ")
196 else if (a_flipOut==
"xz" || a_flipOut==
"zx" || a_flipOut==
"XZ" || a_flipOut==
"ZX")
202 else if ( a_flipOut==
"xyz" || a_flipOut==
"xzy" || a_flipOut==
"yxz" || a_flipOut==
"yzx" || a_flipOut==
"zxy" || a_flipOut==
"zyx" ||
203 a_flipOut==
"XYZ" || a_flipOut==
"XZY" || a_flipOut==
"YXZ" || a_flipOut==
"YZX" || a_flipOut==
"ZXY" || a_flipOut==
"ZYX" )
212 Cerr(
"***** oImageDimensionsAndQuantification::SetFlipOut() -> Output flip settings is incorrect !" << endl);
232 size_t first_comma = a_nbThreads.find_first_of(
",");
233 size_t last_comma = a_nbThreads.find_last_of(
",");
234 if (first_comma!=last_comma || first_comma==0 || first_comma==a_nbThreads.length()-1)
236 Cerr(
"***** oImageDimensionsAndQuantification::SetNbThreads() -> Wrong syntax in the thread parameters ! See help." << endl);
241 if (first_comma==string::npos)
256 Cerr(
"***** oImageDimensionsAndQuantification::SetNbThreads() -> Negative number of threads provided for projection computation !" << endl);
261 Cerr(
"***** oImageDimensionsAndQuantification::SetNbThreads() -> Negative number of threads provided for image computation !" << endl);
305 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Should provide a strictly positive number of threads !" << endl);
312 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Should provide strictly positive number of voxels !" << endl);
318 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Should provide strictly positive voxel or FOV dimensions !" << endl);
324 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Both FOV and voxels dimensions provided, should not provide both !" << endl);
328 if (m_fovOutPercent<0. || m_fovOutPercent>100.)
330 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Output transaxial FOV percentage must be in ]0:100] !" << endl);
334 if (m_nbSliceOutMask<0 || m_nbSliceOutMask>
m_nbVoxZ/2)
336 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Number of output axial slices to be masked is incorrectly set !" << endl);
342 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Error : DynamicDataManager object not initialized !" << endl);
361 Cerr(
"***** oImageDimensionsAndQuantification::Initialize() -> Cannot initialize before a call to CheckParameters() !" << endl);
366 if (
m_verbose>=2)
Cout(
"oImageDimensionsAndQuantification::Initialize() -> Initialize image dimensions, basis functions and quantification" << endl);
390 Cerr(
"***** oImageDimensionsAndQuantification::Initialize() -> A problem occurred while initializing framing and quantification tabs !" << endl);
419 Cerr(
"***** oImageDimensionsAndQuantification::Initialize() -> A problem occurred while initializing ignored corrections !" << endl);
465 for (
int bed=0; bed<
m_nbBeds; bed++)
472 Cerr(
"!!!!! oImageDimensionsAndQuantification::CheckNumberOfProjectionThreadsConsistencyWithDataFileSize() !!!!!" << endl);
473 Cerr(
" --> The number of projection threads was reduced to the provided datafile's number of events: " <<
m_nbThreadsForProjection << endl);
502 if (a2p_DataFile[0]->GetBedPositionFlag())
507 for (
int bed=0; bed<
m_nbBeds; bed++) center += a2p_DataFile[bed]->GetRelativeBedPosition();
508 center /= ((
FLTNB)m_nbBeds);
510 for (
int bed=0; bed<
m_nbBeds; bed++)
mp_bedPositions[bed] = a2p_DataFile[bed]->GetRelativeBedPosition() - center;
523 Cerr(
"***** oImageDimensionsAndQuantification::DealWithBedPositions() -> Bed displacement between two successive bed positions must be strictly positive !" << endl);
527 for (
int bed=0; bed<
m_nbBeds; bed++)
530 FLTNB bed_offset = 0.;
545 Cout(
"oImageDimensionsAndQuantification::DealWithBedPositions() -> Use following relative bed positions:" << endl);
546 for (
int bed=0; bed<
m_nbBeds; bed++)
Cout(
" --> Bed " << bed <<
" | Relative axial position: " <<
mp_bedPositions[bed] <<
" mm" << endl);
565 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Number of beds must be set before setting the framing of the acquisition !" << endl);
575 for (
int bed=0; bed<
m_nbBeds; bed++)
589 for (
int bed=0; bed<
m_nbBeds; bed++)
609 FLTNB frame_duration ;
611 bool frame_start_inMinutes =
false;
612 bool frame_duration_inMinutes =
false;
616 size_t comma_pos = 0;
617 size_t colon_pos = 0;
619 while ((comma_pos=frame_list.find_first_of(
","))!=string::npos)
622 frame_start = (
FLTNB) 0.;
623 frame_duration = (
FLTNB) 0.;
625 frame_start_inMinutes =
false;
626 frame_duration_inMinutes =
false;
630 for (
int bed=0; bed<
m_nbBeds; bed++)
637 string param = frame_list.substr(0,comma_pos);
641 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing definition detected !" << endl);
645 if ((colon_pos = param.find_first_of(
":")) != string::npos)
648 string param_start = param.substr(0, colon_pos);
650 if ((unit_pos = param_start.find(
"s"))!= string::npos)
653 param_start.erase(unit_pos);
655 else if ((unit_pos = param_start.find(
"m"))!= string::npos)
658 param_start.erase(unit_pos);
659 frame_start_inMinutes =
true;
662 if (param_start.empty())
664 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing definition detected !" << endl);
668 string param_duration = param.substr(colon_pos + 1, comma_pos);
670 if ((unit_pos = param_duration.find(
"s"))!= string::npos)
672 param_duration.erase(unit_pos);
674 else if ((unit_pos = param_duration.find(
"m"))!= string::npos)
676 param_duration.erase(unit_pos);
677 frame_duration_inMinutes =
true;
680 if (param_duration.empty())
682 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing duration detected !" << endl);
686 frame_start = (
FLTNB) atof(param_start.c_str());
687 frame_duration = (
FLTNB) atof(param_duration.c_str());
689 if (frame_start_inMinutes) frame_start *= 60.;
690 if (frame_duration_inMinutes) frame_duration *= 60.;
692 if (frame_duration<=0.)
694 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Negative or null frame duration detected !" << endl);
700 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Negative or null frame start detected !" << endl);
704 for (
int bed=0; bed<
m_nbBeds; bed++)
714 if ((unit_pos = param.find(
"s"))!= string::npos)
717 param.erase(unit_pos);
719 else if ((unit_pos = param.find(
"m"))!= string::npos)
722 param.erase(unit_pos);
723 frame_start_inMinutes=
true;
728 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing definition detected !" << endl);
732 frame_start = (
FLTNB) atof(param.c_str());
734 if (frame_start_inMinutes) frame_start *= 60.;
738 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Negative or null frame start detected !" << endl);
742 for (
int bed=0; bed<
m_nbBeds; bed++)
750 frame_list = frame_list.substr(comma_pos+1);
757 frame_start = (
FLTNB) 0.;
758 frame_duration = (
FLTNB) 0.;
760 frame_start_inMinutes =
false;
761 frame_duration_inMinutes =
false;
763 string param = frame_list;
764 if ((colon_pos = param.find_first_of(
":")) != string::npos)
769 for (
int bed=0; bed<
m_nbBeds; bed++)
776 string param_start = param.substr(0, colon_pos);
778 if ((unit_pos = param_start.find(
"s"))!= string::npos)
781 param_start.erase(unit_pos);
783 else if ((unit_pos = param_start.find(
"m"))!= string::npos)
786 param_start.erase(unit_pos);
787 frame_start_inMinutes =
true;
790 if (param_start.empty())
792 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing definition detected !" << endl);
796 string param_duration = param.substr(colon_pos + 1, param.size());
798 if ((unit_pos = param_duration.find(
"s"))!= string::npos)
800 param_duration.erase(unit_pos);
802 else if ((unit_pos = param_duration.find(
"m"))!= string::npos)
804 param_duration.erase(unit_pos);
805 frame_duration_inMinutes=
true;
808 if (param_duration.empty())
810 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing duration detected !" << endl);
814 frame_start = (
FLTNB) atof(param_start.c_str());
815 frame_duration = (
FLTNB) atof(param_duration.c_str());
817 if (frame_start_inMinutes) frame_start *= 60.;
818 if (frame_duration_inMinutes) frame_duration *= 60.;
820 if (frame_duration<=0.)
822 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Found a duration which is negative or null !" << endl);
828 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Negative or null frame start detected !" << endl);
832 for (
int bed=0; bed<
m_nbBeds; bed++)
842 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Last frame duration has not been provided !" << endl);
853 for (
int bed=0; bed<
m_nbBeds; bed++)
864 for (
int bed=0; bed<
m_nbBeds; bed++)
881 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Illegal frame overlap detected between frames: " << frmch+1 <<
" and "<< frm+1 << endl);
889 for (
int bed=0; bed<
m_nbBeds; bed++)
932 string *p_keywords =
new string[nb_keywords];
936 Cerr(
"***** oImageDimensionsAndQuantification::InitializeIgnoredCorrections() -> An error occurred while reading the list of ignored corrections !" << endl);
941 for (
size_t k=0; k<nb_keywords; k++)
954 Cerr(
"***** oImageDimensionsAndQuantification::InitializeIgnoredCorrections() -> Unknown keyword '" << p_keywords[k] <<
"' in the provided ignored corrections list !" << endl);
974 Cerr(
"***** oImageDimensionsAndQuantification::SetAcquisitionTime() -> Object not initialized !" << endl);
991 Cerr(
"***** oImageDimensionsAndQuantification::SetAcquisitionTime() -> Gate durations have been initialized in both the datafile header and the gating configuration file!" << endl);
992 Cerr(
"***** Only one must be used (preferably the gating configuration file) " << endl);
996 if(a_gateListDurationInSec !=
"")
1002 "Gate duration (s)"))
1004 Cerr(
"***** oImageDimensionsAndQuantification::SetAcquisitionTime() -> Failed to correctly read the following list of gate durations (datafile header): !" << endl);
1005 Cerr(
"***** "<<a_gateListDurationInSec << endl);
1006 Cerr(
"***** "<<
m_nbRespGates*m_nbCardGates<<
" parameters were expected (1 for each gate)" << endl);
1050 Cout(
"oImageDimensionsAndQuantification::SetAcquisitionTime() -> Static single bed acquisition with duration [ " <<
GetFrameTimeStartInSec(0,0) <<
" : " 1056 Cout(
"oImageDimensionsAndQuantification::SetAcquisitionTime() -> Static " <<
m_nbBeds <<
" beds acquisition with following bed durations:" << endl);
1057 for (
int bed=0; bed<
m_nbBeds; bed++)
1063 Cout(
"oImageDimensionsAndQuantification::SetAcquisitionTime() -> Dynamic single bed acquisition with following " <<
m_nbTimeFrames <<
" frame durations:" << endl);
1070 Cout(
"oImageDimensionsAndQuantification::SetAcquisitionTime() -> Dynamic " <<
m_nbBeds <<
" beds acquistion with following " <<
m_nbTimeFrames <<
" frame durations:" << endl);
1071 for (
int bed=0; bed<
m_nbBeds; bed++)
1073 Cout(
" --> Bed " << bed+1 <<
" as following framing:" << endl);
1080 else Cout(
" --> Correct for frame duration" << endl);
1096 Cerr(
"***** oImageDimensionsAndQuantification::SetCalibrationFactor() -> Object not initialized !" << endl);
1103 if (
m_verbose>=2 && a_bed==
m_nbBeds-1)
Cout(
"oImageDimensionsAndQuantification::SetCalibrationFactor() -> Ignore calibration factor correction" << endl);
1108 if (a_calibrationFactor<=0.)
1110 Cerr(
"***** oImageDimensionsAndQuantification::SetCalibrationFactor() -> Provided calibration factor (" << a_calibrationFactor <<
") is negative or null !" << endl);
1122 Cout(
"oImageDimensionsAndQuantification::SetCalibrationFactor() -> Correct for following calibration factor: " << a_calibrationFactor << endl);
1137 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> Object not initialized !" << endl);
1145 if (a_quantificationFile==
"")
return 0;
1150 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> Multi-bed gated acquisitions cannot be reconstructed !" << endl);
1155 if (
m_verbose>=2)
Cout(
"oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors()-> Processing quantification file '" << a_quantificationFile <<
"'" << endl);
1171 for (
int bed=0 ; bed<
m_nbBeds ; bed++)
1182 string *bed_name =
new string[m_nbBeds + 1];
1184 for(
int bed=0 ; bed<
m_nbBeds ; bed++)
1186 ostringstream oss( ostringstream::out );
1187 oss <<
"bed" << bed+1;
1188 bed_name[bed] = oss.str();
1193 for (
int bed=0 ; bed<
m_nbBeds ; bed++)
1198 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> Didn't found quantitative factors in file " << a_quantificationFile <<
" !" << endl);
1201 else if(return_value == 1)
1203 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> An error occurred while trying to recover specific quantitative factors for frame !" << endl);
1206 else if(return_value == 0)
1208 for(
int bed=0 ; bed<
m_nbBeds ; bed++)
1211 if (pp_dynamic_quantification_factors[bed][fr][g] <= 0)
1213 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> Provided quantification factor (" << pp_dynamic_quantification_factors[bed][fr][g] <<
") is negative or null !" << endl);
1224 for (
int bed=0; bed<
m_nbBeds; bed++)
1226 for (
int fr=0; fr<
m_nbTimeFrames; fr++)
delete pp_dynamic_quantification_factors[bed][fr];
1227 delete[] pp_dynamic_quantification_factors[bed];
1229 delete[] pp_dynamic_quantification_factors;
1263 Cerr(
"***** oImageDimensionsAndQuantification::SetSPECTIsotope() -> Object not initialized !" << endl);
1283 Cerr(
"***** oImageDimensionsAndQuantification::SetPETIsotope() -> Object not initialized !" << endl);
1295 Cout(
"oImageDimensionsAndQuantification::SetPETIsotope() -> Ignore isotope dependent corrections" << endl);
1305 if (a_isotope==
"UNKNOWN" || a_isotope==
"Unknown" || a_isotope==
"unknown")
1309 Cout(
"oImageDimensionsAndQuantification::SetPETIsotope() -> Un-specified isotope; no decay nor branching ratio correction" << endl);
1323 string file_name = config_dir +
"/misc/isotopes_pet.txt";
1324 ifstream fin(file_name.c_str());
1328 Cerr(
"***** oImageDimensionsAndQuantification::SetPETIsotope() -> Failed to open PET isotopes data file '" << file_name <<
"' !" << endl);
1333 int line_max_size = 10240;
1334 char *line =
new char[line_max_size];
1335 FLTNB half_life = -1.;
1336 FLTNB branching_ratio = -1.;
1337 bool found_it =
false;
1338 fin.getline(line,line_max_size);
1342 size_t found_position;
1344 string test = (string)line;
1346 if ((found_position=test.find(
"#"))==0)
1349 fin.getline(line,line_max_size);
1353 found_position = test.find(a_isotope);
1354 if (found_position!=string::npos)
1358 test = test.substr(found_position+1+a_isotope.length());
1360 istringstream fstr(test);
1361 fstr >> half_life >> branching_ratio;
1367 fin.getline(line,line_max_size);
1378 if (branching_ratio<=0. || branching_ratio>1.)
1380 Cerr(
"***** oImageDimensionsAndQuantification::SetPETIsotope() -> Branching ratio (" << branching_ratio <<
") is not in the ]0:1] range !" << endl);
1388 Cout(
"oImageDimensionsAndQuantification::SetPETIsotope() -> Isotope " << a_isotope <<
" has infinite half life and " << branching_ratio <<
" branching ratio" << endl);
1390 Cout(
"oImageDimensionsAndQuantification::SetPETIsotope() -> Isotope " << a_isotope <<
" has " << half_life <<
" seconds half life and " << branching_ratio <<
" branching ratio" << endl);
1396 Cerr(
"***** oImageDimensionsAndQuantification::SetPETIsotope() -> Did not find " << a_isotope <<
" isotope in the PET isotope data file, please add it !" << endl);
1461 int a_respMotionCorrectionFlag,
1462 int a_cardMotionCorrectionFlag,
1463 int a_invMotionCorrectionFlag,
1464 int a_nbRespGates,
int a_nbCardGates )
1466 if (
m_verbose>=5)
Cout(
"oImageDimensionsAndQuantification::InitDynamicData()" << endl);
1470 a_respMotionCorrectionFlag, a_cardMotionCorrectionFlag, a_invMotionCorrectionFlag ))
1472 Cerr(
"***** oImageDimensionsAndQuantification::InitDynamicData() -> A problem occurred while initializing the dynamic data from dynamic data manager !" << endl);
1477 if (a_respMotionCorrectionFlag || a_cardMotionCorrectionFlag)
1479 else if (a_nbRespGates>1 || a_nbCardGates>1)
1481 else if (a_invMotionCorrectionFlag)
1497 if (
m_verbose>=5)
Cout(
"oImageDimensionsAndQuantification::CheckDynamicParameters()" << endl);
string m_cardBasisFunctionsFile
int InitializeFramingAndQuantification()
A function used to initialize the framing and quantification tables.
string m_respBasisFunctionsFile
int CheckParameters(int64_t a_nbEvents)
Check all mandatory parameters.
This class is designed to be a mother virtual class for DataFile.
int SetSPECTIsotope(int a_bed, const string &a_isotope)
Set the SPECT isotope for the provided bed.
int SetPETIsotope(int a_bed, const string &a_isotope)
Set the PET isotope for the provided bed.
static sScannerManager * GetInstance()
Instanciate the singleton object and Initialize member variables if not already done, return a pointer to this object otherwise.
Declaration of class oImageDimensionsAndQuantification.
void SetVerbose(int a_verboseLevel)
set verbosity
oImageDimensionsAndQuantification()
The constructor of oImageDimensionsAndQuantification.
FLTNB ** m2p_cardBasisFunctions
FLTNB GetFrameTimeStartInSec(int a_bed, int a_frame)
Get the frame time start for the given bed, in seconds as a FLTNB.
oDynamicDataManager * mp_DynamicDataManager
This class gathers the information about the dynamic splitting of the data.
FLTNB ** m2p_timeBasisFunctions
bool m_ignoreNormCorrectionFlag
bool m_ignoreRandCorrectionFlag
bool m_ignoreAttnCorrectionFlag
int SetCalibrationFactor(int a_bed, FLTNB a_calibrationFactor)
Set the calibration factor for the provided bed.
void CheckNumberOfProjectionThreadsConsistencyWithDataFileSize(vDataFile **a2p_DataFile)
int DealWithBedPositions(vDataFile **a2p_DataFile)
Deal with provided or default bed relative positions.
int m_nbCardBasisFunctions
bool m_ignoreFdurCorrectionFlag
bool m_ignoreCaliCorrectionFlag
int m_nbThreadsForImageComputation
static sOutputManager * GetInstance()
Instanciate the singleton object and Initialize member variables if not already done, return a pointer to this object otherwise.
int m_nbThreadsForProjection
int SetNbThreads(const string &a_nbThreads)
Set the number of threads.
~oImageDimensionsAndQuantification()
The destructor of oImageDimensionsAndQuantification.
int InitDynamicData(int a_nbRespGates, int a_nbCardGates, const string &a_pathTo4DDataSplittingFile, int a_rmMCorrFlag, int a_cMmCorrFlag, int a_pMotionCorrFlag)
Main function for instanciation and initialization of the member variables and arrays. Call the specific initialization function depending of the type of dataset.
int CheckParameters()
A function used to check the parameters settings.
int Initialize()
A function used to initialize all that is needed.
Singleton class that manages output writing on disk (images, sinograms, etc). It also manages loggi...
const string & GetPathToConfigDir()
Return the path to the CASTOR config directory.
int m_nbRespBasisFunctions
string m_ignoredCorrectionsList
bool GateDurationProvided()
Declaration of class vDataFile.
uint32_t ** m2p_frameDurationsInMs
int ReadDataASCIIFile(const string &a_file, const string &a_keyword, T *ap_return, int a_nbElts, bool a_mandatoryFlag)
Look for "a_nbElts" elts in the "a_file" file matching the "a_keyword" string passed as parameter a...
bool GetBedPositionFlag()
void SetImageDimensionsAndQuantification(oImageDimensionsAndQuantification *ap_ImageDimensionsAndQuantification)
set the pointer to the oImageDimensionsAndQuantification object
bool m_ignoreBratCorrectionFlag
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...
bool m_ignoreScatCorrectionFlag
vScanner * GetScannerObject()
int SetDynamicSpecificQuantificationFactors(FLTNB **a2p_quantificationFactors)
Compute gate-specific quantificative factors using the number of events within each gate...
int InitDynamicData(string a_pathTo4DDataSplittingFile, int a_respMotionCorrectionFlag, int a_cardMotionCorrectionFlag, int a_invMotionCorrectionFlag, int a_nbRespGates, int a_nbCardGates)
Call the eponym function from the oDynamicDataManager object in order to initialize its data...
#define KEYWORD_MANDATORY
int m_nbTimeBasisFunctions
uint32_t ** m2p_frameTimeStopInMs
int CheckDynamicParameters(int64_t a_nbEvents)
Call the eponym function from the oDynamicDataManager object in order to check its parameters...
FLTNB GetDefaultBedDisplacementInMm()
FLTNB GetFrameTimeStopInSec(int a_bed, int a_frame)
Get the frame time stop for the given bed, in seconds as a FLTNB.
FLTNB GetRelativeBedPosition()
#define DYN_RECO_MCGATING
FLTNB GetFrameDurationInSec(int a_bed, int a_frame)
Get the frame duration for the given bed, in seconds as a FLTNB.
void SetDefault()
A function used to set number of threads and MPI instances to 1 and bypass the CheckParameters() func...
bool m_ignoreDecaCorrectionFlag
uint32_t ** m2p_frameTimeStartInMs
int ReadStringOption(const string &a_input, T *ap_return, int a_nbElts, const string &sep, const string &a_option)
Parse the 'a_input' string corresponding to the 'a_option' into 'a_nbElts' elements, using the 'sep' separator. The results are returned in the templated 'ap_return' dynamic templated array. Call "ConvertFromString()" to perform the correct conversion depending on the type of the data to convert.
int SetAcquisitionTime(int a_bed, FLTNB a_timeStartInSec, FLTNB a_durationInSec, string a_GateListDurationsInSec)
Set the acquisition time if not already set by the SetTimeFrames()
int InitializeIgnoredCorrections()
A function used to initialize the ignored corrections.
bool m_providedBedPosition
Generic class for scanner objects.
int SetFlipOut(const string &a_flipOut)
Set the output flip options, the parameter being a string potentially containing the letters x...
int SetDynamicSpecificQuantificationFactors(const string &a_quantificationFile)
Apply specific quantification factors manually provided as an option.
FLTNB *** m3p_quantificationFactors
FLTNB ** m2p_respBasisFunctions