22 #include <itksys/SystemTools.hxx> 29 returnParameters->SetAirThicknessInMillimeters(1.8);
30 returnParameters->SetMinBackgroundAbsorption(0.001);
31 returnParameters->SetMaxBackgroundAbsorption(0.2);
32 returnParameters->SetBackgroundAnisotropy(0.9);
33 returnParameters->SetBackgroundScattering(15);
35 returnParameters->SetDoPartialVolume(
true);
36 returnParameters->SetMinNumberOfVessels(1);
37 returnParameters->SetMaxNumberOfVessels(7);
38 returnParameters->SetMinVesselAbsorption(1);
39 returnParameters->SetMaxVesselAbsorption(12);
40 returnParameters->SetMinVesselAnisotropy(0.9);
41 returnParameters->SetMaxVesselAnisotropy(0.9);
42 returnParameters->SetMinVesselBending(0);
43 returnParameters->SetMaxVesselBending(0.2);
44 returnParameters->SetMinVesselRadiusInMillimeters(0.5);
45 returnParameters->SetMaxVesselRadiusInMillimeters(6);
46 returnParameters->SetMinVesselScattering(15);
47 returnParameters->SetMaxVesselScattering(15);
48 returnParameters->SetMinVesselZOrigin(1);
49 returnParameters->SetMaxVesselZOrigin(3);
50 returnParameters->SetVesselBifurcationFrequency(5000);
51 returnParameters->SetRandomizePhysicalProperties(
false);
52 returnParameters->SetSkinThicknessInMillimeters(0);
53 returnParameters->SetUseRngSeed(
false);
54 returnParameters->SetVoxelSpacingInCentimeters(0.06);
55 returnParameters->SetXDim(70);
56 returnParameters->SetYDim(100);
57 returnParameters->SetZDim(100);
58 returnParameters->SetMCflag(4);
59 return returnParameters;
65 returnParameters->SetAirThicknessInMillimeters(1.8);
66 returnParameters->SetMinBackgroundAbsorption(0.001);
67 returnParameters->SetMaxBackgroundAbsorption(0.2);
68 returnParameters->SetBackgroundAnisotropy(0.9);
69 returnParameters->SetBackgroundScattering(15);
71 returnParameters->SetDoPartialVolume(
true);
72 returnParameters->SetMinNumberOfVessels(1);
73 returnParameters->SetMaxNumberOfVessels(1);
74 returnParameters->SetMinVesselAbsorption(4.73);
75 returnParameters->SetMaxVesselAbsorption(4.73);
76 returnParameters->SetMinVesselAnisotropy(0.9);
77 returnParameters->SetMaxVesselAnisotropy(0.9);
78 returnParameters->SetMinVesselBending(0);
79 returnParameters->SetMaxVesselBending(0.2);
80 returnParameters->SetMinVesselRadiusInMillimeters(3);
81 returnParameters->SetMaxVesselRadiusInMillimeters(3);
82 returnParameters->SetMinVesselScattering(15);
83 returnParameters->SetMaxVesselScattering(15);
84 returnParameters->SetMinVesselZOrigin(1);
85 returnParameters->SetMaxVesselZOrigin(3);
86 returnParameters->SetVesselBifurcationFrequency(5000);
87 returnParameters->SetRandomizePhysicalProperties(
false);
88 returnParameters->SetSkinThicknessInMillimeters(0);
89 returnParameters->SetUseRngSeed(
false);
90 returnParameters->SetVoxelSpacingInCentimeters(0.06);
91 returnParameters->SetXDim(70);
92 returnParameters->SetYDim(100);
93 returnParameters->SetZDim(100);
94 returnParameters->SetMCflag(4);
95 return returnParameters;
101 returnParameters->SetAirThicknessInMillimeters(1.8);
102 returnParameters->SetMinBackgroundAbsorption(0.001);
103 returnParameters->SetMaxBackgroundAbsorption(0.2);
104 returnParameters->SetBackgroundAnisotropy(0.9);
105 returnParameters->SetBackgroundScattering(15);
107 returnParameters->SetDoPartialVolume(
true);
108 returnParameters->SetMinNumberOfVessels(1);
109 returnParameters->SetMaxNumberOfVessels(1);
110 returnParameters->SetMinVesselAbsorption(1);
111 returnParameters->SetMaxVesselAbsorption(12);
112 returnParameters->SetMinVesselAnisotropy(0.9);
113 returnParameters->SetMaxVesselAnisotropy(0.9);
114 returnParameters->SetMinVesselBending(0);
115 returnParameters->SetMaxVesselBending(0.2);
116 returnParameters->SetMinVesselRadiusInMillimeters(0.5);
117 returnParameters->SetMaxVesselRadiusInMillimeters(6);
118 returnParameters->SetMinVesselScattering(15);
119 returnParameters->SetMaxVesselScattering(15);
120 returnParameters->SetMinVesselZOrigin(1);
121 returnParameters->SetMaxVesselZOrigin(3);
122 returnParameters->SetVesselBifurcationFrequency(5000);
123 returnParameters->SetRandomizePhysicalProperties(
false);
124 returnParameters->SetSkinThicknessInMillimeters(0);
125 returnParameters->SetUseRngSeed(
false);
126 returnParameters->SetVoxelSpacingInCentimeters(0.06);
127 returnParameters->SetXDim(70);
128 returnParameters->SetYDim(100);
129 returnParameters->SetZDim(100);
130 returnParameters->SetMCflag(4);
131 return returnParameters;
137 returnParameters->SetAirThicknessInMillimeters(12);
138 returnParameters->SetMinBackgroundAbsorption(0.1);
139 returnParameters->SetMaxBackgroundAbsorption(0.1);
140 returnParameters->SetBackgroundAnisotropy(0.9);
141 returnParameters->SetBackgroundScattering(15);
143 returnParameters->SetDoPartialVolume(
true);
144 returnParameters->SetMinNumberOfVessels(1);
145 returnParameters->SetMaxNumberOfVessels(7);
146 returnParameters->SetMinVesselAbsorption(2);
147 returnParameters->SetMaxVesselAbsorption(8);
148 returnParameters->SetMinVesselAnisotropy(0.9);
149 returnParameters->SetMaxVesselAnisotropy(0.9);
150 returnParameters->SetMinVesselBending(0.1);
151 returnParameters->SetMaxVesselBending(0.3);
152 returnParameters->SetMinVesselRadiusInMillimeters(0.5);
153 returnParameters->SetMaxVesselRadiusInMillimeters(4);
154 returnParameters->SetMinVesselScattering(15);
155 returnParameters->SetMaxVesselScattering(15);
156 returnParameters->SetMinVesselZOrigin(2.2);
157 returnParameters->SetMaxVesselZOrigin(4);
158 returnParameters->SetVesselBifurcationFrequency(5000);
159 returnParameters->SetRandomizePhysicalProperties(
false);
160 returnParameters->SetSkinThicknessInMillimeters(0);
161 returnParameters->SetUseRngSeed(
false);
162 returnParameters->SetVoxelSpacingInCentimeters(0.06);
163 returnParameters->SetXDim(70);
164 returnParameters->SetYDim(100);
165 returnParameters->SetZDim(100);
166 return returnParameters;
172 returnParameters->SetAirThicknessInMillimeters(12);
173 returnParameters->SetMinBackgroundAbsorption(0.1);
174 returnParameters->SetMaxBackgroundAbsorption(0.1);
175 returnParameters->SetBackgroundAnisotropy(0.9);
176 returnParameters->SetBackgroundScattering(15);
178 returnParameters->SetDoPartialVolume(
true);
179 returnParameters->SetMinNumberOfVessels(1);
180 returnParameters->SetMaxNumberOfVessels(7);
181 returnParameters->SetMinVesselAbsorption(2);
182 returnParameters->SetMaxVesselAbsorption(8);
183 returnParameters->SetMinVesselAnisotropy(0.9);
184 returnParameters->SetMaxVesselAnisotropy(0.9);
185 returnParameters->SetMinVesselBending(0.1);
186 returnParameters->SetMaxVesselBending(0.3);
187 returnParameters->SetMinVesselRadiusInMillimeters(0.5);
188 returnParameters->SetMaxVesselRadiusInMillimeters(4);
189 returnParameters->SetMinVesselScattering(15);
190 returnParameters->SetMaxVesselScattering(15);
191 returnParameters->SetMinVesselZOrigin(2.2);
192 returnParameters->SetMaxVesselZOrigin(4);
193 returnParameters->SetVesselBifurcationFrequency(5000);
194 returnParameters->SetRandomizePhysicalProperties(
false);
195 returnParameters->SetSkinThicknessInMillimeters(0);
196 returnParameters->SetUseRngSeed(
false);
197 returnParameters->SetVoxelSpacingInCentimeters(0.03);
198 returnParameters->SetXDim(140);
199 returnParameters->SetYDim(200);
200 returnParameters->SetZDim(180);
201 return returnParameters;
207 returnParameters->SetAirThicknessInMillimeters(12);
208 returnParameters->SetMinBackgroundAbsorption(0.1);
209 returnParameters->SetMaxBackgroundAbsorption(0.1);
210 returnParameters->SetBackgroundAnisotropy(0.9);
211 returnParameters->SetBackgroundScattering(15);
213 returnParameters->SetDoPartialVolume(
true);
214 returnParameters->SetMinNumberOfVessels(1);
215 returnParameters->SetMaxNumberOfVessels(1);
216 returnParameters->SetMinVesselAbsorption(2);
217 returnParameters->SetMaxVesselAbsorption(8);
218 returnParameters->SetMinVesselAnisotropy(0.9);
219 returnParameters->SetMaxVesselAnisotropy(0.9);
220 returnParameters->SetMinVesselBending(0.1);
221 returnParameters->SetMaxVesselBending(0.3);
222 returnParameters->SetMinVesselRadiusInMillimeters(0.5);
223 returnParameters->SetMaxVesselRadiusInMillimeters(4);
224 returnParameters->SetMinVesselScattering(15);
225 returnParameters->SetMaxVesselScattering(15);
226 returnParameters->SetMinVesselZOrigin(2.2);
227 returnParameters->SetMaxVesselZOrigin(4);
228 returnParameters->SetVesselBifurcationFrequency(5000);
229 returnParameters->SetRandomizePhysicalProperties(
false);
230 returnParameters->SetSkinThicknessInMillimeters(0);
231 returnParameters->SetUseRngSeed(
false);
232 returnParameters->SetVoxelSpacingInCentimeters(0.03);
233 returnParameters->SetXDim(140);
234 returnParameters->SetYDim(200);
235 returnParameters->SetZDim(180);
236 return returnParameters;
239 struct InputParameters
241 std::string saveFolderPath;
242 std::string identifyer;
244 std::string probePath;
254 parser.
setTitle(
"Mitk Tissue Batch Generator");
255 parser.
setDescription(
"Creates in silico tissue in batch processing and automatically calculates fluence values for the central slice of the volume.");
256 parser.
setContributor(
"Computer Assisted Medical Interventions, DKFZ");
265 "Input save folder (directory)",
"input save folder",
269 "MitkMcxyz binary (file)",
"path to the MitkMcxyz binary",
275 "xml probe file (file)",
"file to the definition of the used probe (*.xml)",
279 "Verbose Output",
"Whether to produce verbose, or rather debug output");
282 "Generator identifyer (string)",
"A unique identifyer for the calculation instance");
284 InputParameters input;
286 std::map<std::string, us::Any> parsedArgs = parser.
parseArguments(argc, argv);
287 if (parsedArgs.size() == 0)
290 if (parsedArgs.count(
"verbose"))
293 input.verbose =
us::any_cast<
bool>(parsedArgs[
"verbose"]);
297 input.verbose =
false;
300 if (parsedArgs.count(
"savePath"))
303 input.saveFolderPath =
us::any_cast<std::string>(parsedArgs[
"savePath"]);
306 if (parsedArgs.count(
"mitkMcxyz"))
309 input.exePath =
us::any_cast<std::string>(parsedArgs[
"mitkMcxyz"]);
312 if (parsedArgs.count(
"probe"))
315 input.probePath =
us::any_cast<std::string>(parsedArgs[
"probe"]);
318 if (parsedArgs.count(
"identifyer"))
321 input.identifyer =
us::any_cast<std::string>(parsedArgs[
"identifyer"]);
327 input.identifyer = uid.GetUID();
329 MITK_INFO <<
"Paring arguments...[Done]";
333 int main(
int argc,
char * argv[])
336 unsigned int iterationNumber = 0;
341 MITK_INFO(input.verbose) <<
"Generating tissue..";
343 MITK_INFO(input.verbose) <<
"Generating tissue..[Done]";
345 auto inputfolder = std::string(input.saveFolderPath +
"input/");
346 auto outputfolder = std::string(input.saveFolderPath +
"output/");
347 if (!itksys::SystemTools::FileIsDirectory(inputfolder))
349 itksys::SystemTools::MakeDirectory(inputfolder);
351 if (!itksys::SystemTools::FileIsDirectory(outputfolder))
353 itksys::SystemTools::MakeDirectory(outputfolder);
356 std::string savePath = input.saveFolderPath +
"input/BaselineHB_" + input.identifyer +
357 "_" + std::to_string(iterationNumber) +
".nrrd";
359 std::string outputPath = input.saveFolderPath +
"output/BaselineHB_" + input.identifyer +
360 "_" + std::to_string(iterationNumber) +
"/";
362 if (!itksys::SystemTools::FileIsDirectory(outputPath))
364 itksys::SystemTools::MakeDirectory(outputPath);
367 outputPath = outputPath +
"Fluence_BaselineHB_" + input.identifyer +
"_" + std::to_string(iterationNumber);
369 MITK_INFO(input.verbose) <<
"Simulating fluence..";
370 for(
double yo = -1.8; yo <= 1.81; yo=yo+0.12)
372 std::string yo_string = std::to_string(round(yo*100)/100.0);
374 if(!input.probePath.empty())
375 result = std::system(std::string(input.exePath +
" -i " + savePath +
" -o " +
376 (outputPath +
"_yo" + yo_string +
".nrrd") +
377 " -yo " + yo_string +
" -p " + input.probePath +
378 " -n 100000000").c_str());
380 result = std::system(std::string(input.exePath +
" -i " + savePath +
" -o " +
381 (outputPath +
"_yo" + yo_string +
".nrrd") +
382 " -yo " + yo_string +
" -n 100000000").c_str());
383 MITK_INFO <<
"yo: " << yo_string <<
": " << result;
386 MITK_INFO(input.verbose) <<
"Simulating fluence..[Done]";
void CalculateNewRandomlyDivergingDirectionVector(Vector::Pointer direction, double bendingFactor, std::mt19937 *rng)
CalculateRandomlyDivergingPosition calculates the new position by modifying the direction vector rand...
void setContributor(std::string contributor)
ValueType * any_cast(Any *operand)
TissueGeneratorParameters::Pointer CreateMultiHB_13_02_18_Parameters()
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)
static InSilicoTissueVolume::Pointer GenerateInSilicoData(TissueGeneratorParameters::Pointer parameters)
GenerateInSilicoData This method will return a InSilicoTissueVolume created in terms of the given par...
TissueGeneratorParameters::Pointer CreateMultivessel_19_12_17_Parameters()
TissueGeneratorParameters::Pointer CreateSinglevessel_19_10_17_Parameters()
void setCategory(std::string category)
int main(int argc, char *argv[])
void setArgumentPrefix(const std::string &longPrefix, const std::string &shortPrefix)
TissueGeneratorParameters::Pointer CreateSingleVesselHeterogeneousBackground_08_02_18_Parameters()
InputParameters parseInput(int argc, char *argv[])
static void Save(const mitk::BaseData *data, const std::string &path, bool setPathProperty=false)
Save a mitk::BaseData instance.
TissueGeneratorParameters::Pointer CreateBaselineHB_13_02_18_Parameters()
void setTitle(std::string title)
void setDescription(std::string description)
TissueGeneratorParameters::Pointer CreateMultivessel_19_10_17_Parameters()
void beginGroup(const std::string &description)