68 cout <<
"This optimizer is the AML algorithm derived from the AB-EMML of C. Byrne, Inverse Problems, 1998, vol. 14, pp. 1455-67." << endl;
69 cout <<
"The bound B is taken to infinity, so only the bound A can be parameterized." << endl;
70 cout <<
"This bound must be quantitative (same unit as the reconstructed image)." << endl;
71 cout <<
"It is provided as a single value and thus assuming a uniform bound." << endl;
72 cout <<
"Subsets can be used." << endl;
73 cout <<
"With a negative or null bound, this algorithm implements equation 6 of A. Rahmim et al, Phys. Med. Biol., 2012, vol. 57, pp. 733-55." << endl;
74 cout <<
"If a positive bound is provided, then we suppose that the bound A is taken to minus infinity. In that case, this algorithm implements" << endl;
75 cout <<
"equation 22 of K. Van Slambrouck et al, IEEE TMI, Jan 2015, vol. 34, pp. 126-136." << endl;
76 cout <<
"The following options can be used (in this particular order when provided as a list):" << endl;
77 cout <<
" initial image value: to set the uniform voxel value for the initial image" << endl;
78 cout <<
" denominator threshold: to set the threshold of the data space denominator under which the ratio is set to 1" << endl;
79 cout <<
" bound: to set the bound parameter that shift the Poisson law (quantitative, negative or null for standard AML and positive for infinite AML)." << endl;
91 key_word =
"initial image value";
94 Cerr(
"***** iOptimizerOriginalAML::ReadAndCheckConfigurationFile() -> Failed to get the '" << key_word <<
"' keyword !" << endl);
98 key_word =
"denominator threshold";
101 Cerr(
"***** iOptimizerOriginalAML::ReadAndCheckConfigurationFile() -> Failed to get the '" << key_word <<
"' keyword !" << endl);
108 Cerr(
"***** iOptimizerOriginalAML::ReadAndCheckConfigurationFile() -> Failed to get the '" << key_word <<
"' keyword !" << endl);
127 Cerr(
"***** iOptimizerOriginalAML::ReadAndCheckConfigurationFile() -> Failed to correctly read the list of options !" << endl);
148 Cerr(
"***** iOptimizerOriginalAML->Initialize() -> Provided data space denominator threshold (" <<
m_dataSpaceDenominatorThreshold <<
") must be strictly positive !" << endl);
154 Cerr(
"***** iOptimizerOriginalAML::Initialize() -> The initial image value (" <<
m_initialValue <<
") must be higher than or equal to the provided bound value ("
172 Cout(
"iOptimizerOriginalAML::Initialize() -> Use the AML optimizer" << endl);
178 else Cout(
" --> Bound value taken to minus infinity" << endl);
191 FLTNB a_multiplicativeCorrections,
FLTNB a_additiveCorrections,
206 FLTNB a_multiplicativeCorrections,
FLTNB a_additiveCorrections,
215 FLTNB denominator = a_forwardModel - shift;
222 FLTNB numerator = a_data - shift;
224 if (numerator<0.) *ap_backwardValues = 0.;
226 else *ap_backwardValues = numerator / denominator;
232 *ap_backwardValues = (a_data - a_forwardModel) /
ForwardProject(ap_Line);
244 FLTNB a_sensitivity,
FLTNB* ap_correctionValues )
247 FLTNB image_update_factor = *ap_correctionValues / a_sensitivity;
249 if (
m_bound<=0.) *ap_newImageValue =
m_bound + (a_currentImageValue -
m_bound) * image_update_factor;
251 else *ap_newImageValue = a_currentImageValue + image_update_factor;
bool m_listmodeCompatibility
iOptimizerOriginalAML()
The constructor of iOptimizerOriginalAML.
int ImageSpaceSpecificOperations(FLTNB a_currentImageValue, FLTNB *ap_newImageValue, FLTNB a_sensitivity, FLTNB *ap_correctionValues)
This function perform the image update step specific to the optimizer.
FLTNB ForwardProject(oProjectionLine *ap_Line, FLTNB *ap_image=NULL)
A function used to forward project the provided image (or 1 if NULL), based on the provided oProjecti...
int DataSpaceSpecificOperations(FLTNB a_data, FLTNB a_forwardModel, FLTNB *ap_backwardValues, FLTNB a_multiplicativeCorrections, FLTNB a_additiveCorrections, FLTNB a_quantificationFactor, oProjectionLine *ap_Line)
This function performs the data space operations specific to the optimizer (computes the values to be...
Declaration of class iOptimizerOriginalAML.
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...
int ReadConfigurationFile(const string &a_configurationFile)
A function used to read options from a configuration file.
void ShowHelpSpecific()
A function used to show help about the child optimizer.
bool m_histogramCompatibility
#define KEYWORD_MANDATORY
int CheckSpecificParameters()
A private function used to check the parameters settings specific to the child optimizer.
This class is designed to generically described any iterative optimizer.
This class is designed to manage and store system matrix elements associated to a vEvent...
~iOptimizerOriginalAML()
The destructor of iOptimizerOriginalAML.
int InitializeSpecific()
This function is used to initialize specific stuff to the child optimizer.
Declaration of class sOutputManager.
int SensitivitySpecificOperations(FLTNB a_data, FLTNB a_forwardModel, FLTNB *ap_weight, FLTNB a_multiplicativeCorrections, FLTNB a_additiveCorrections, FLTNB a_quantificationFactor, oProjectionLine *ap_Line)
This function compute the weight associated to the provided event (for sensitivity computation) ...
int ReadOptionsList(const string &a_optionsList)
A function used to read options from a list of options.
FLTNB m_dataSpaceDenominatorThreshold
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.