8 #include "oImageDimensionsAndQuantification.hh" 9 #include "vDataFile.hh" 112 for (
int bed=0; bed<
m_nbBeds; bed++)
145 if (a_flipOut==
"x" || a_flipOut==
"X")
151 else if (a_flipOut==
"y" || a_flipOut==
"Y")
157 else if (a_flipOut==
"z" || a_flipOut==
"Z")
163 else if (a_flipOut==
"xy" || a_flipOut==
"yx" || a_flipOut==
"XY" || a_flipOut==
"YX")
169 else if (a_flipOut==
"zy" || a_flipOut==
"yz" || a_flipOut==
"ZY" || a_flipOut==
"YZ")
175 else if (a_flipOut==
"xz" || a_flipOut==
"zx" || a_flipOut==
"XZ" || a_flipOut==
"ZX")
181 else if ( a_flipOut==
"xyz" || a_flipOut==
"xzy" || a_flipOut==
"yxz" || a_flipOut==
"yzx" || a_flipOut==
"zxy" || a_flipOut==
"zyx" ||
182 a_flipOut==
"XYZ" || a_flipOut==
"XZY" || a_flipOut==
"YXZ" || a_flipOut==
"YZX" || a_flipOut==
"ZXY" || a_flipOut==
"ZYX" )
191 Cerr(
"***** oImageDimensionsAndQuantification::SetFlipOut() -> Output flip settings is incorrect !" << endl);
211 size_t first_comma = a_nbThreads.find_first_of(
",");
212 size_t last_comma = a_nbThreads.find_last_of(
",");
213 if (first_comma!=last_comma || first_comma==0 || first_comma==a_nbThreads.length()-1)
215 Cerr(
"***** oImageDimensionsAndQuantification::SetNbThreads() -> Wrong syntax in the thread parameters ! See help." << endl);
220 if (first_comma==string::npos)
235 Cerr(
"***** oImageDimensionsAndQuantification::SetNbThreads() -> Negative number of threads provided for projection computation !" << endl);
240 Cerr(
"***** oImageDimensionsAndQuantification::SetNbThreads() -> Negative number of threads provided for image computation !" << endl);
284 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Should provide a strictly positive number of threads !" << endl);
291 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Should provide strictly positive number of voxels !" << endl);
297 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Should provide strictly positive voxel or FOV dimensions !" << endl);
303 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Both FOV and voxels dimensions provided, should not provide both !" << endl);
309 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Output transaxial FOV percentage must be strictly positive !" << endl);
313 if (m_nbSliceOutMask<0 || m_nbSliceOutMask>
m_nbVoxZ/2)
315 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Number of output axial slices to be masked is incorrectly set !" << endl);
321 Cerr(
"***** oImageDimensionsAndQuantification::CheckParameters() -> Error : DynamicDataManager object not initialized !" << endl);
340 Cerr(
"***** oImageDimensionsAndQuantification::Initialize() -> Cannot initialize before a call to CheckParameters() !" << endl);
345 if (
m_verbose>=2)
Cout(
"oImageDimensionsAndQuantification::Initialize() -> Initialize image dimensions, basis functions and quantification" << endl);
369 Cerr(
"***** oImageDimensionsAndQuantification::Initialize() -> A problem occurred while initializing framing and quantification tabs !" << endl);
398 Cerr(
"***** oImageDimensionsAndQuantification::Initialize() -> A problem occurred while initializing ignored corrections !" << endl);
444 for (
int bed=0; bed<
m_nbBeds; bed++)
451 Cerr(
"!!!!! oImageDimensionsAndQuantification::CheckNumberOfProjectionThreadsConsistencyWithDataFileSize() !!!!!" << endl);
452 Cerr(
" --> The number of projection threads was reduced to the provided datafile's number of events: " <<
m_nbThreadsForProjection << endl);
481 if (a2p_DataFile[0]->GetBedPositionFlag())
486 for (
int bed=0; bed<
m_nbBeds; bed++) center += a2p_DataFile[bed]->GetRelativeBedPosition();
487 center /= ((
FLTNB)m_nbBeds);
489 for (
int bed=0; bed<
m_nbBeds; bed++)
mp_bedPositions[bed] = a2p_DataFile[bed]->GetRelativeBedPosition() - center;
502 Cerr(
"***** oImageDimensionsAndQuantification::DealWithBedPositions() -> Bed displacement between two successive bed positions must be strictly positive !" << endl);
506 for (
int bed=0; bed<
m_nbBeds; bed++)
509 FLTNB bed_offset = 0.;
524 Cout(
"oImageDimensionsAndQuantification::DealWithBedPositions() -> Use following relative bed positions:" << endl);
525 for (
int bed=0; bed<
m_nbBeds; bed++)
Cout(
" --> Bed " << bed <<
" | Relative axial position: " <<
mp_bedPositions[bed] <<
" mm" << endl);
544 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Number of beds must be set before setting the framing of the acquisition !" << endl);
554 for (
int bed=0; bed<
m_nbBeds; bed++)
568 for (
int bed=0; bed<
m_nbBeds; bed++)
590 bool frame_start_inMinutes =
false;
591 bool frame_duration_inMinutes =
false;
595 size_t comma_pos = 0;
596 size_t colon_pos = 0;
598 while ((comma_pos=frame_list.find_first_of(
","))!=string::npos)
604 frame_start_inMinutes =
false;
605 frame_duration_inMinutes =
false;
609 for (
int bed=0; bed<
m_nbBeds; bed++)
616 string param = frame_list.substr(0,comma_pos);
620 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing definition detected !" << endl);
624 if ((colon_pos = param.find_first_of(
":")) != string::npos)
627 string param_start = param.substr(0, colon_pos);
629 if ((unit_pos = param_start.find(
"s"))!= string::npos)
632 param_start.erase(unit_pos);
634 else if ((unit_pos = param_start.find(
"m"))!= string::npos)
637 param_start.erase(unit_pos);
638 frame_start_inMinutes =
true;
641 if (param_start.empty())
643 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing definition detected !" << endl);
647 string param_duration = param.substr(colon_pos + 1, comma_pos);
649 if ((unit_pos = param_duration.find(
"s"))!= string::npos)
651 param_duration.erase(unit_pos);
653 else if ((unit_pos = param_duration.find(
"m"))!= string::npos)
655 param_duration.erase(unit_pos);
656 frame_duration_inMinutes =
true;
659 if (param_duration.empty())
661 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing duration detected !" << endl);
665 frame_start = (
HPFLTNB) atof(param_start.c_str());
666 frame_duration = (
HPFLTNB) atof(param_duration.c_str());
668 if (frame_start_inMinutes) frame_start *= (
HPFLTNB)60.;
669 if (frame_duration_inMinutes) frame_duration *= (
HPFLTNB)60.;
671 if (frame_duration<=0.)
673 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Negative or null frame duration detected !" << endl);
679 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Negative or null frame start detected !" << endl);
683 for (
int bed=0; bed<
m_nbBeds; bed++)
693 if ((unit_pos = param.find(
"s"))!= string::npos)
696 param.erase(unit_pos);
698 else if ((unit_pos = param.find(
"m"))!= string::npos)
701 param.erase(unit_pos);
702 frame_start_inMinutes=
true;
707 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing definition detected !" << endl);
711 frame_start = (
HPFLTNB) atof(param.c_str());
713 if (frame_start_inMinutes) frame_start *= (
HPFLTNB)60.;
717 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Negative or null frame start detected !" << endl);
721 for (
int bed=0; bed<
m_nbBeds; bed++)
729 frame_list = frame_list.substr(comma_pos+1);
739 frame_start_inMinutes =
false;
740 frame_duration_inMinutes =
false;
742 string param = frame_list;
743 if ((colon_pos = param.find_first_of(
":")) != string::npos)
748 for (
int bed=0; bed<
m_nbBeds; bed++)
755 string param_start = param.substr(0, colon_pos);
757 if ((unit_pos = param_start.find(
"s"))!= string::npos)
760 param_start.erase(unit_pos);
762 else if ((unit_pos = param_start.find(
"m"))!= string::npos)
765 param_start.erase(unit_pos);
766 frame_start_inMinutes =
true;
769 if (param_start.empty())
771 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing definition detected !" << endl);
775 string param_duration = param.substr(colon_pos + 1, param.size());
777 if ((unit_pos = param_duration.find(
"s"))!= string::npos)
779 param_duration.erase(unit_pos);
781 else if ((unit_pos = param_duration.find(
"m"))!= string::npos)
783 param_duration.erase(unit_pos);
784 frame_duration_inMinutes=
true;
787 if (param_duration.empty())
789 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Null framing duration detected !" << endl);
793 frame_start = (
HPFLTNB) atof(param_start.c_str());
794 frame_duration = (
HPFLTNB) atof(param_duration.c_str());
796 if (frame_start_inMinutes) frame_start *= (
HPFLTNB)60.;
797 if (frame_duration_inMinutes) frame_duration *= (
HPFLTNB)60.;
799 if (frame_duration<=0.)
801 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Found a duration which is negative or null !" << endl);
807 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Negative or null frame start detected !" << endl);
811 for (
int bed=0; bed<
m_nbBeds; bed++)
821 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Last frame duration has not been provided !" << endl);
832 for (
int bed=0; bed<
m_nbBeds; bed++)
843 for (
int bed=0; bed<
m_nbBeds; bed++)
860 Cerr(
"***** oImageDimensionsAndQuantification::InitializeFramingAndQuantification() -> Illegal frame overlap detected between frames: " << frmch+1 <<
" and "<< frm+1 << endl);
868 for (
int bed=0; bed<
m_nbBeds; bed++)
911 string *p_keywords =
new string[nb_keywords];
915 Cerr(
"***** oImageDimensionsAndQuantification::InitializeIgnoredCorrections() -> An error occurred while reading the list of ignored corrections !" << endl);
920 for (
size_t k=0; k<nb_keywords; k++)
933 Cerr(
"***** oImageDimensionsAndQuantification::InitializeIgnoredCorrections() -> Unknown keyword '" << p_keywords[k] <<
"' in the provided ignored corrections list !" << endl);
953 Cerr(
"***** oImageDimensionsAndQuantification::SetAcquisitionTime() -> Object not initialized !" << endl);
970 Cerr(
"***** oImageDimensionsAndQuantification::SetAcquisitionTime() -> Gate durations have been initialized in both the datafile header and the gating configuration file!" << endl);
971 Cerr(
"***** Only one must be used (preferably the gating configuration file) " << endl);
975 if(a_gateListDurationInSec !=
"")
981 "Gate duration (s)"))
983 Cerr(
"***** oImageDimensionsAndQuantification::SetAcquisitionTime() -> Failed to correctly read the following list of gate durations (datafile header): !" << endl);
984 Cerr(
"***** "<<a_gateListDurationInSec << endl);
985 Cerr(
"***** "<<
m_nbRespGates*m_nbCardGates<<
" parameters were expected (1 for each gate)" << endl);
1029 Cout(
"oImageDimensionsAndQuantification::SetAcquisitionTime() -> Static single bed acquisition with duration [ " <<
GetFrameTimeStartInSec(0,0) <<
" : " 1035 Cout(
"oImageDimensionsAndQuantification::SetAcquisitionTime() -> Static " <<
m_nbBeds <<
" beds acquisition with following bed durations:" << endl);
1036 for (
int bed=0; bed<
m_nbBeds; bed++)
1042 Cout(
"oImageDimensionsAndQuantification::SetAcquisitionTime() -> Dynamic single bed acquisition with following " <<
m_nbTimeFrames <<
" frame durations:" << endl);
1049 Cout(
"oImageDimensionsAndQuantification::SetAcquisitionTime() -> Dynamic " <<
m_nbBeds <<
" beds acquistion with following " <<
m_nbTimeFrames <<
" frame durations:" << endl);
1050 for (
int bed=0; bed<
m_nbBeds; bed++)
1052 Cout(
" --> Bed " << bed+1 <<
" as following framing:" << endl);
1059 else Cout(
" --> Correct for frame duration" << endl);
1075 Cerr(
"***** oImageDimensionsAndQuantification::SetCalibrationFactor() -> Object not initialized !" << endl);
1082 if (
m_verbose>=2 && a_bed==
m_nbBeds-1)
Cout(
"oImageDimensionsAndQuantification::SetCalibrationFactor() -> Ignore calibration factor correction" << endl);
1087 if (a_calibrationFactor<=0.)
1089 Cerr(
"***** oImageDimensionsAndQuantification::SetCalibrationFactor() -> Provided calibration factor (" << a_calibrationFactor <<
") is negative or null !" << endl);
1101 Cout(
"oImageDimensionsAndQuantification::SetCalibrationFactor() -> Correct for following calibration factor: " << a_calibrationFactor << endl);
1116 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> Object not initialized !" << endl);
1124 if (a_quantificationFile==
"")
return 0;
1129 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> Multi-bed gated acquisitions cannot be reconstructed !" << endl);
1134 if (
m_verbose>=2)
Cout(
"oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors()-> Processing quantification file '" << a_quantificationFile <<
"'" << endl);
1150 for (
int bed=0 ; bed<
m_nbBeds ; bed++)
1161 string *bed_name =
new string[m_nbBeds + 1];
1163 for(
int bed=0 ; bed<
m_nbBeds ; bed++)
1165 ostringstream oss( ostringstream::out );
1166 oss <<
"bed" << bed+1;
1167 bed_name[bed] = oss.str();
1172 for (
int bed=0 ; bed<
m_nbBeds ; bed++)
1177 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> Didn't found quantitative factors in file " << a_quantificationFile <<
" !" << endl);
1180 else if(return_value == 1)
1182 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> An error occurred while trying to recover specific quantitative factors for frame !" << endl);
1185 else if(return_value == 0)
1187 for(
int bed=0 ; bed<
m_nbBeds ; bed++)
1190 if (pp_dynamic_quantification_factors[bed][fr][g] <= 0)
1192 Cerr(
"***** oImageDimensionsAndQuantification::SetDynamicSpecificQuantificationFactors() -> Provided quantification factor (" << pp_dynamic_quantification_factors[bed][fr][g] <<
") is negative or null !" << endl);
1203 for (
int bed=0; bed<
m_nbBeds; bed++)
1205 for (
int fr=0; fr<
m_nbTimeFrames; fr++)
delete pp_dynamic_quantification_factors[bed][fr];
1206 delete[] pp_dynamic_quantification_factors[bed];
1208 delete[] pp_dynamic_quantification_factors;
1242 Cerr(
"***** oImageDimensionsAndQuantification::SetSPECTIsotope() -> Object not initialized !" << endl);
1262 Cerr(
"***** oImageDimensionsAndQuantification::SetPETIsotope() -> Object not initialized !" << endl);
1274 Cout(
"oImageDimensionsAndQuantification::SetPETIsotope() -> Ignore isotope dependent corrections" << endl);
1284 if (a_isotope==
"UNKNOWN" || a_isotope==
"Unknown" || a_isotope==
"unknown")
1288 Cout(
"oImageDimensionsAndQuantification::SetPETIsotope() -> Un-specified isotope; no decay nor branching ratio correction" << endl);
1302 string file_name = config_dir +
"/misc/isotopes_pet.txt";
1303 ifstream fin(file_name.c_str());
1307 Cerr(
"***** oImageDimensionsAndQuantification::SetPETIsotope() -> Failed to open PET isotopes data file '" << file_name <<
"' !" << endl);
1312 int line_max_size = 10240;
1313 char *line =
new char[line_max_size];
1314 FLTNB half_life = -1.;
1315 FLTNB branching_ratio = -1.;
1316 bool found_it =
false;
1317 fin.getline(line,line_max_size);
1321 size_t found_position;
1323 string test = (string)line;
1325 if ((found_position=test.find(
"#"))==0)
1328 fin.getline(line,line_max_size);
1332 found_position = test.find(a_isotope);
1333 if (found_position!=string::npos)
1337 test = test.substr(found_position+1+a_isotope.length());
1339 istringstream fstr(test);
1340 fstr >> half_life >> branching_ratio;
1346 fin.getline(line,line_max_size);
1357 if (branching_ratio<=0. || branching_ratio>1.)
1359 Cerr(
"***** oImageDimensionsAndQuantification::SetPETIsotope() -> Branching ratio (" << branching_ratio <<
") is not in the ]0:1] range !" << endl);
1367 Cout(
"oImageDimensionsAndQuantification::SetPETIsotope() -> Isotope " << a_isotope <<
" has infinite half life and " << branching_ratio <<
" branching ratio" << endl);
1369 Cout(
"oImageDimensionsAndQuantification::SetPETIsotope() -> Isotope " << a_isotope <<
" has " << half_life <<
" seconds half life and " << branching_ratio <<
" branching ratio" << endl);
1375 Cerr(
"***** oImageDimensionsAndQuantification::SetPETIsotope() -> Did not find " << a_isotope <<
" isotope in the PET isotope data file, please add it !" << endl);
1440 int a_respMotionCorrectionFlag,
1441 int a_cardMotionCorrectionFlag,
1442 int a_invMotionCorrectionFlag,
1443 int a_nbRespGates,
int a_nbCardGates )
1445 if (
m_verbose>=5)
Cout(
"oImageDimensionsAndQuantification::InitDynamicData()" << endl);
1449 a_respMotionCorrectionFlag, a_cardMotionCorrectionFlag, a_invMotionCorrectionFlag ))
1451 Cerr(
"***** oImageDimensionsAndQuantification::InitDynamicData() -> A problem occurred while initializing the dynamic data from dynamic data manager !" << endl);
1456 if (a_respMotionCorrectionFlag || a_cardMotionCorrectionFlag)
1458 else if (a_nbRespGates>1 || a_nbCardGates>1)
1460 else if (a_invMotionCorrectionFlag)
1476 if (
m_verbose>=5)
Cout(
"oImageDimensionsAndQuantification::CheckDynamicParameters()" << endl);
1489 Cerr(
"***** oImageDimensionsAndQuantification::ProcessAndSetMask() -> Mask already initialized !" << 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)
This class is designed to be a mother virtual class for DataFile.
int SetSPECTIsotope(int a_bed, const string &a_isotope)
int SetPETIsotope(int a_bed, const string &a_isotope)
static sScannerManager * GetInstance()
Instanciate the singleton object and Initialize member variables if not already done, return a pointer to this object otherwise.
oImageDimensionsAndQuantification()
The constructor of oImageDimensionsAndQuantification.
oDynamicDataManager * mp_DynamicDataManager
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.
FLTNB GetFrameDurationInSec(int a_bed, int a_frame)
FLTNB ** m2p_respBasisFunctions
This class gathers the information about the dynamic splitting of the data.
bool m_ignoreNormCorrectionFlag
bool m_ignoreRandCorrectionFlag
bool m_ignoreAttnCorrectionFlag
FLTNB *** m3p_quantificationFactors
uint32_t ** m2p_frameDurationsInMs
void SetVerbose(int a_verboseLevel)
int SetCalibrationFactor(int a_bed, FLTNB a_calibrationFactor)
void CheckNumberOfProjectionThreadsConsistencyWithDataFileSize(vDataFile **a2p_DataFile)
int DealWithBedPositions(vDataFile **a2p_DataFile)
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
FLTNB GetFrameTimeStartInSec(int a_bed, int a_frame)
FLTNB ** m2p_cardBasisFunctions
int SetNbThreads(const string &a_nbThreads)
~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)
FLTNB ** m2p_timeBasisFunctions
int CheckParameters()
A function used to check the parameters settings.
FLTNB GetFrameTimeStopInSec(int a_bed, int a_frame)
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()
bool GetBedPositionFlag()
uint32_t ** m2p_frameTimeStartInMs
bool m_ignoreBratCorrectionFlag
FLTNB GetQuantificationFactor(int a_bed, int a_frame, int a_respGate, int a_cardGate)
bool m_ignoreScatCorrectionFlag
vScanner * GetScannerObject()
int SetDynamicSpecificQuantificationFactors(FLTNB **a2p_quantificationFactors)
int InitDynamicData(string a_pathTo4DDataSplittingFile, int a_respMotionCorrectionFlag, int a_cardMotionCorrectionFlag, int a_invMotionCorrectionFlag, int a_nbRespGates, int a_nbCardGates)
#define KEYWORD_MANDATORY
uint32_t ** m2p_frameTimeStopInMs
int ProcessAndSetMask(FLTNB *ap_maskImage)
int m_nbTimeBasisFunctions
int CheckDynamicParameters(int64_t a_nbEvents)
FLTNB GetDefaultBedDisplacementInMm()
FLTNB GetRelativeBedPosition()
void SetImageDimensionsAndQuantification(oImageDimensionsAndQuantification *ap_ImageDimensionsAndQuantification)
#define DYN_RECO_MCGATING
void SetDefault()
A function used to set number of threads and MPI instances to 1 and bypass the CheckParameters() func...
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 m_ignoreDecaCorrectionFlag
int SetAcquisitionTime(int a_bed, FLTNB a_timeStartInSec, FLTNB a_durationInSec, string a_GateListDurationsInSec)
int InitializeIgnoredCorrections()
A function used to initialize the ignored corrections.
bool IsVoxelMasked(INTNB a_voxIndex)
bool m_providedBedPosition
Generic class for scanner objects.
int SetFlipOut(const string &a_flipOut)
int SetDynamicSpecificQuantificationFactors(const string &a_quantificationFile)