48 timeinfo = std::localtime(&rawtime);
50 std::strftime(buffer, 80,
"%Y%m%d-%H%M%S", timeinfo);
52 return std::string(buffer);
57 static const char alphanum[] =
"0123456789" 58 "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
60 for (
int i = 0; i < len; ++i)
62 s[i] = alphanum[rand() % (
sizeof(alphanum) - 1)];
70 if (len > 0 && len < 100)
74 return std::string(retval);
78 return std::string(
"");
85 for (std::string::const_iterator it = str.begin(); it != str.end(); ++it)
88 if ((c >=
'0' && c <=
'9') || (c >=
'A' && c <= 'Z') || (c >=
'a' && c <=
'z') || (c ==
'.') || (c ==
'-') ||
99 std::string wholeprefix = dirString.substr(0, dirString.find_last_of(
"/\\"));
100 std::string lastDirectoryPart = wholeprefix.substr(wholeprefix.find_last_of(
"/\\") + 1);
102 if (!cleanLastDirectoryPart.empty())
104 return cleanLastDirectoryPart;
108 std::stringstream emptydirname;
111 return emptydirname.str();
115 int main(
int argc,
char *argv[])
117 bool fileDetails(
false);
118 bool loadimage(
false);
119 int firstFileIndex = 1;
122 if (argc > 1 && std::string(argv[firstFileIndex]) ==
"-v")
129 if (argc > 1 && std::string(argv[firstFileIndex]) ==
"-l")
137 for (
int a = firstFileIndex; a < argc; ++a)
139 inputFiles.push_back(std::string(argv[a]));
142 if (inputFiles.empty())
144 MITK_INFO <<
"0 input files given, exiting...";
149 configSelector->LoadBuiltIn3DConfigs();
150 configSelector->SetInputFiles(inputFiles);
151 mitk::DICOMFileReader::Pointer reader = configSelector->GetFirstReaderWithMinimumNumberOfOutputImages();
154 MITK_ERROR <<
"Could not configure any DICOM reader.. Exiting...";
159 MITK_INFO <<
"---- Best reader configuration '" << reader->GetConfigurationLabel() <<
"' with " 160 << reader->GetNumberOfOutputs() <<
" outputs";
163 reader->PrintOutputs(std::cout, fileDetails);
170 std::string logfilename = datestring +
"_dir_" + dirString +
".mitkdump";
175 fs.open(logfilename.c_str());
176 fs <<
"---- " << dirString <<
": Best reader configuration '" << reader->GetConfigurationLabel() <<
"' with " 177 << reader->GetNumberOfOutputs() <<
" outputs" << std::endl;
178 reader->PrintOutputs(fs,
true);
183 std::string readerSerialization = serializer->CreateConfigStringFromReader(reader.GetPointer());
185 bool outputError(
false);
186 for (
unsigned int outputIndex = 0; outputIndex < reader->GetNumberOfOutputs(); ++outputIndex)
192 for (
auto fIter = frames.begin(); fIter != frames.end(); ++fIter)
194 filenamesOfThisGroup.push_back((*fIter)->Filename);
198 mitk::DICOMFileReader::Pointer dicomReader = readerConfigurator->CreateFromUTF8ConfigString(readerSerialization);
199 dicomReader->SetInputFiles(filenamesOfThisGroup);
200 dicomReader->AnalyzeInputFiles();
201 if (dicomReader->GetNumberOfOutputs() != 1)
203 MITK_ERROR <<
"****** Re-analyzing files of output group " << outputIndex <<
" yields " 204 << dicomReader->GetNumberOfOutputs() <<
" groups";
207 for (
auto fIter = frames.begin(); fIter != frames.end(); ++fIter)
209 MITK_INFO <<
"filename group " << outputIndex <<
": " << (*fIter)->Filename;
214 MITK_INFO <<
"Re-analyzing files of output group " << outputIndex <<
" yields " 215 << dicomReader->GetNumberOfOutputs() <<
" groups";
221 std::stringstream es;
222 es <<
"Original reader configuration: " << std::endl;
223 reader->PrintConfiguration(es);
226 mitk::DICOMFileReader::Pointer dicomReader = readerConfigurator->CreateFromUTF8ConfigString(readerSerialization);
227 es <<
"New reader configuration: " << std::endl;
228 dicomReader->PrintConfiguration(es);
231 es <<
"Original XML: \n" << readerSerialization << std::endl;
232 std::string newSerialization = serializer->CreateConfigStringFromReader(dicomReader.GetPointer());
233 es <<
"New XML: \n" << newSerialization << std::endl;
240 reader->LoadImages();
244 if (geo3D.IsNotNull())
249 unsigned int nos = sg->GetSlices();
255 MITK_INFO <<
"Geometry says: First slice at " << firstOrigin <<
", last slice at " << lastOrigin;
259 if (sliceLocations.IsNotNull())
261 std::string firstSliceLocation = sliceLocations->GetValue().GetTableValue(0);
262 std::string lastSliceLocation = sliceLocations->GetValue().GetTableValue(nos - 1);
263 MITK_INFO <<
"Image properties says: first slice location at " << firstSliceLocation
264 <<
", last slice location at " << lastSliceLocation;
269 if (instanceNumbers.IsNotNull())
271 std::string firstInstanceNumber = instanceNumbers->GetValue().GetTableValue(0);
272 std::string lastInstanceNumber = instanceNumbers->GetValue().GetTableValue(nos - 1);
273 MITK_INFO <<
"Image properties says: first instance number at " << firstInstanceNumber
274 <<
", last instance number at " << lastInstanceNumber;
std::string removeUnsafeChars(const std::string &str)
Representation of a DICOM tag.
const DICOMImageFrameList & GetImageFrameList() const
List of frames that constitute the mitk::Image (DICOMImageFrames)
int main(int argc, char *argv[])
std::string extractDirString(const std::string &dirString)
void gen_random(char *s, const int len)
std::vector< DICOMImageFrameInfo::Pointer > DICOMImageFrameList
Output descriptor for DICOMFileReader.
mitk::Image::Pointer image
std::vector< std::string > StringList
Describes the geometry of a data object consisting of slices.
std::string buildDateString()