17 #include "itksys/SystemTools.hxx" 53 parser.
setTitle(
"MR Signal to Concentration Converter");
54 parser.
setDescription(
"MiniApp that allows to convert a T1 or T2 signal image into a concentration image for perfusion analysis.");
70 "where to save the output concentration image.",
77 "t1-absolute",
"",
mitkCommandLineParser::Bool,
"T1 absolute signal enhancement",
"Activate conversion for T1 absolute signal enhancement.");
79 "t1-relative",
"",
mitkCommandLineParser::Bool,
"T1 relative signal enhancement",
"Activate conversion for T1 relative signal enhancement.");
106 if (parsedArgs.size() == 0)
113 if (parsedArgs.count(
"verbose"))
119 if (parsedArgs.count(
"t1-absolute"))
121 t1_absolute =
us::any_cast<
bool>(parsedArgs[
"t1-absolute"]);
125 if (parsedArgs.count(
"t1-relative"))
127 t1_relative =
us::any_cast<
bool>(parsedArgs[
"t1-relative"]);
131 if (parsedArgs.count(
"t1-flash"))
137 if (parsedArgs.count(
"t2"))
143 if (parsedArgs.count(
"k"))
149 if (parsedArgs.count(
"relaxivity"))
151 relaxivity =
us::any_cast<
float>(parsedArgs[
"relaxivity"]);
155 if (parsedArgs.count(
"recovery-time"))
157 rec_time =
us::any_cast<
float>(parsedArgs[
"recovery-time"]);
161 if (parsedArgs.count(
"relaxation-time"))
163 rel_time =
us::any_cast<
float>(parsedArgs[
"relaxation-time"]);
167 if (parsedArgs.count(
"te"))
174 if (t1_absolute) ++modeCount;
175 if (t1_flash) ++modeCount;
176 if (t1_relative) ++modeCount;
181 mitkThrow() <<
"Invalid program call. Please select the type of conversion.";
186 mitkThrow() <<
"Invalid program call. Please select only ONE type of conversion.";
189 if (!k && (t2 || t1_absolute || t1_relative))
191 mitkThrow() <<
"Invalid program call. Please set 'k', if you use t1-absolute, t1-relative or t2.";
196 mitkThrow() <<
"Invalid program call. Please set 'te', if you use t2 mode.";
199 if ((!rec_time||!rel_time||!relaxivity) && t1_flash)
201 mitkThrow() <<
"Invalid program call. Please set 'recovery-time', 'relaxation-time' and 'relaxivity', if you use t1-flash mode.";
209 mitk::ConcentrationCurveGenerator::Pointer concentrationGen =
211 concentrationGen->SetDynamicImage(image);
213 concentrationGen->SetisTurboFlashSequence(
t1_flash);
214 concentrationGen->SetAbsoluteSignalEnhancement(
t1_absolute);
215 concentrationGen->SetRelativeSignalEnhancement(
t1_relative);
217 concentrationGen->SetisT2weightedImage(
t2);
221 concentrationGen->SetRecoveryTime(
rec_time);
222 concentrationGen->SetRelaxationTime(
rel_time);
227 concentrationGen->SetT2Factor(
k);
228 concentrationGen->SetT2EchoTime(
te);
232 concentrationGen->SetFactor(
k);
240 std::cout <<
"Store result: " <<
outFileName << std::endl;
243 int main(
int argc,
char* argv[])
247 const std::map<std::string, us::Any>& parsedArgs = parser.
parseArguments(argc, argv);
256 if (parsedArgs.count(
"help") || parsedArgs.count(
"h"))
265 image = mitk::IOUtil::Load<mitk::Image>(
inFilename, &readerFilterFunctor);
266 std::cout <<
"Input: " << inFilename << std::endl;
270 std::cout <<
"Processing finished." << std::endl;
274 catch (
const itk::ExceptionObject& e)
279 catch (
const std::exception& e)
286 MITK_ERROR <<
"Unexpected error encountered.";
Option callback functor with a preference list/ black list option selection strategy.
void setupParser(mitkCommandLineParser &parser)
bool configureApplicationSettings(std::map< std::string, us::Any > parsedArgs)
void setContributor(std::string contributor)
ValueType * any_cast(Any *operand)
mitk::Image::Pointer image
void addArgument(const std::string &longarg, const std::string &shortarg, Type type, const std::string &argLabel, const std::string &argHelp=std::string(), const us::Any &defaultValue=us::Any(), bool optional=true, bool ignoreRest=false, bool deprecated=false, mitkCommandLineParser::Channel channel=mitkCommandLineParser::Channel::None)
std::map< std::string, us::Any > parseArguments(const StringContainerType &arguments, bool *ok=nullptr)
NodeUIDType MITKMODELFIT_EXPORT EnsureModelFitUID(mitk::BaseData *data)
std::string helpText() const
int main(int argc, char *argv[])
void setCategory(std::string category)
void setArgumentPrefix(const std::string &longPrefix, const std::string &shortPrefix)
static void Save(const mitk::BaseData *data, const std::string &path, bool setPathProperty=false)
Save a mitk::BaseData instance.
void setTitle(std::string title)
void setDescription(std::string description)
void beginGroup(const std::string &description)