Program: gdcm
Module: $RCSfile: SplitIntoXCoherentDirectoriesIgnoreSerieUID.cxx,v $
Language: C++
- Date: $Date: 2007/10/01 09:56:42 $
- Version: $Revision: 1.1 $
+ Date: $Date: 2011/04/22 14:39:41 $
+ Version: $Revision: 1.5 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
START_USAGE(usage)
"\n SplitIntoCoherentFileSetIgnoreSerieUID :\n ",
"Shows the various 'XCoherent' Filesets within a directory ",
- "Optionaly copis the images in a Directories tree ",
+ "Optionaly copies the images in a Directories tree ",
"usage: SplitIntoCoherentFileSetIgnoreSerieUID{dirin=inputDirectoryName} ",
" dirout=outputDirectoryName ",
" { tag=group-elem | pos | ori } [sort] ",
- " [{ write | copy }] ",
+ " [{ write | copy }] ",
" [ { [noshadowseq] | [noshadow][noseq] } ] [debug] ",
- " [studyUID = ] ",
+ " [studyUID = ] ",
" dirin : user wants to analyze *all* the files ",
" within the directory ",
" write : user wants to create directories ",
" tag : group-elem (in hexa, no space) ",
" the user wants to split on ",
" sort : user wants FileHelper to sort the images ",
- " Warning : will probabely crah if sort has no meaning ",
+ " Warning : will probabely crash if sort has no meaning ",
" (not only look at image names) ",
" studyUID : *aware* user wants to add the serie ",
" to an already existing study ",
bool pos = ( 0 != am->ArgMgrDefined("pos") );
bool ori = ( 0 != am->ArgMgrDefined("ori") );
bool sort = ( 0 != am->ArgMgrDefined("sort") );
+ bool copy = ( 0 != am->ArgMgrDefined("copy") );
bool write = ( 0 != am->ArgMgrDefined("write") );
bool verbose = ( 0 != am->ArgMgrDefined("verbose") );
bool tag = ( 0 != am->ArgMgrDefined("tag") );
+ if( copy && write )
+ {
+ std::cout << "COPY and WRITE are mutually exclusive" << std::endl;
+ delete am;
+ return 0;
+ }
+
if( (tag && (pos || ori)) || (pos && (tag || ori)) || (ori && (tag || pos)) )
{
std::cout << " POS, ORI and TAG are mutually exclusive" << std::endl;
delete am; // ------ we don't need Arguments Manager any longer ------
-
GDCM_NAME_SPACE::SerieHelper *s;
s = GDCM_NAME_SPACE::SerieHelper::New();
-
+
GDCM_NAME_SPACE::File *f;
GDCM_NAME_SPACE::DirList dirlist(dirName, true); // recursive exploration
GDCM_NAME_SPACE::DirListType fileNames = dirlist.GetFilenames();
-
GDCM_NAME_SPACE::FileList *l = new GDCM_NAME_SPACE::FileList;
+
+ std::string replaceChar("_");
// Loop on all the gdcm-readable files
for (GDCM_NAME_SPACE::DirListType::iterator it = fileNames.begin();
it != fileNames.end();
f->SetMaxSizeLoadEntry(0x7fff); // load any length
f->SetFileName( *it );
f->Load();
- l->push_back(f);
+ l->push_back(f);
}
-
/* ===========================================================================================*/
std::string systemCommand;
- std::string filenameout;
- if (write) {
+ std::string filenameout;
+ if (write) {
if (verbose)
std::cout << "Check for output directory :[" << dirNameout << "]."
<<std::endl;
if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(dirNameout) ) // dirout not found
{
std::string strDirNameout(dirNameout); // to please gcc 4
- systemCommand = "mkdir " +strDirNameout; // create it!
+ systemCommand = "mkdir \"" +strDirNameout + "\""; // create it!
if (verbose)
std::cout << systemCommand << std::endl;
system (systemCommand.c_str());
else
{
if (verbose)
- std::cout << "Output Directory [" << dirNameout
+ std::cout << "Output Directory [" << dirNameout
<< "] already exists; Used as is."
<< std::endl;
- }
+ }
}
-
// --> End of checking supposed-to-be-directory names
int nbFiles;
// For all the Single SerieUID Files Sets of the GDCM_NAME_SPACE::Serie
- //GDCM_NAME_SPACE::FileList *l = s->GetFirstSingleSerieUIDFileSet();//===> Ignore 'Serie UID"
+ // GDCM_NAME_SPACE::FileList *l = s->GetFirstSingleSerieUIDFileSet();//===> Ignore 'Serie UID"
GDCM_NAME_SPACE::XCoherentFileSetmap xcm;
std::string serieUID;
std::string currentSerieWriteDir = "";
std::string xCoherentWriteDir = "";
- std::string xCoherentName = "";
+ std::string xCoherentName = "";
std::string serieDirectory;
std::string lastFilename;
std::string rep("_");
int controlCount = 0;
-
+
// 'Study Instance UID'
// The user is allowed to create his own Study,
// keeping the same 'Study Instance UID' for various images
// The user may add images to a 'Manufacturer Study',
// adding new Series to an already existing Study
std::string strStudyUID;
- if ( !userDefinedStudy)
+ if ( !userDefinedStudy )
strStudyUID = GDCM_NAME_SPACE::Util::CreateUniqueUID();
else
strStudyUID = studyUID;
// Why not ? Just an example, for testing!
{
// Just not to make too many modif in the code
- serieUID = "aaaa"; //s->GetCurrentSerieUIDFileSetUID();
+ //serieUID = "SingleSerie"; // s->GetCurrentSerieUIDFileSetUID();
+ serieUID = s->GetCurrentSerieUIDFileSetUID();
GDCM_NAME_SPACE::Util::ReplaceSpecChar(serieUID, rep);
-
+
// --- for write
if (write)
{
std::cout << "[" << currentSerieWriteDir<< "]" << std::endl;
// if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(currentSerieWriteDir) )
{
- systemCommand = "mkdir " + currentSerieWriteDir;
+ systemCommand = "mkdir \"" + currentSerieWriteDir + "\"";
system( systemCommand.c_str());
if (verbose)
std::cout << "1 " <<systemCommand << std::endl;
else if (pos)
xcm = s->SplitOnPosition(l);
else if (groupelem != 0) {
-
+
std:: cout << GDCM_NAME_SPACE::Global::GetDicts()->GetDefaultPubDict()->GetEntry(groupelem[0],groupelem[1])->GetName() << std::endl;
xcm = s->SplitOnTagValue(l, groupelem[0],groupelem[1] );
}
-
+
GDCM_NAME_SPACE::FileHelper *fh;
-
+
for (GDCM_NAME_SPACE::XCoherentFileSetmap::iterator i = xcm.begin();
i != xcm.end();
++i)
{
- xCoherentName = (*i).first;
+ xCoherentName = (*i).first;
if (verbose)
- std::cout << "xCoherentName = " << xCoherentName << std::endl;
+ std::cout << "==========================================xCoherentName = " << xCoherentName << std::endl;
GDCM_NAME_SPACE::Util::ReplaceSpecChar(xCoherentName, rep);
// --- for write
if (write)
xCoherentWriteDir = currentSerieWriteDir + GDCM_NAME_SPACE::GDCM_FILESEPARATOR+ xCoherentName;
// if ( ! GDCM_NAME_SPACE::DirList::IsDirectory(xCoherentWriteDir) )
{
- systemCommand = "mkdir " + xCoherentWriteDir;
+ systemCommand = "mkdir \"" + xCoherentWriteDir + "\"";
system( systemCommand.c_str());
if (verbose)
std::cout << "2 " << systemCommand << std::endl;
// OrderFileList() causes trouble, since some files
// (eg:MIP views) don't have 'Position', now considered as mandatory
// --> Activated on user demand.
-
+
if (sort) {
s->OrderFileList((*i).second); // sort the XCoherent Fileset
std::cout << "ZSpacing for the file set " << s->GetZSpacing()
}
std::string strSerieUID = GDCM_NAME_SPACE::Util::CreateUniqueUID();
-
+
for (GDCM_NAME_SPACE::FileList::iterator it2 = ((*i).second)->begin();
it2 != ((*i).second)->end();
++it2)
controlCount ++;
fileName = (*it2)->GetFileName();
std::cout << " " << fileName << std::endl;
-
- // --- for write
+
+ lastFilename = GDCM_NAME_SPACE::Util::GetName( fileName );
+
+ // If you want to create file names of your own, here is the place!
+ // Just replace 'lastFilename' by anything that's better for you.
+ GDCM_NAME_SPACE:: Util::ReplaceSpecChar(lastFilename, replaceChar);
+
+ filenameout = xCoherentWriteDir + GDCM_NAME_SPACE::GDCM_FILESEPARATOR+ lastFilename;
+ //systemCommand = "cp \"" + fileName + " \"" + filenameout;
+ //system( systemCommand.c_str());
+ // --- for write
if (write)
{
- fh = GDCM_NAME_SPACE::FileHelper::New( (*it2) );
+ fh = GDCM_NAME_SPACE::FileHelper::New( (*it2) );
fh->SetKeepOverlays( true );
fh->InsertEntryString(strSerieUID,0x0020,0x000e,"UI");
unsigned int dataSize = fh->GetImageDataRawSize();
uint8_t *imageData = fh->GetImageDataRaw();// somewhat important : Loads the Pixels in memory !
if (!imageData)
- std::cout << "fail to read [" << (*it2)->GetFileName() << std::endl;
- lastFilename = GDCM_NAME_SPACE::Util::GetName( fileName );
- filenameout = xCoherentWriteDir + GDCM_NAME_SPACE::GDCM_FILESEPARATOR+ lastFilename;
- //systemCommand = "cp " + fileName + " " + filenameout;
- //system( systemCommand.c_str());
-
+ std::cout << "fail to read [" << (*it2)->GetFileName() << std::endl;
fh->SetWriteTypeToDcmExplVR();
fh->SetContentType(GDCM_NAME_SPACE::UNMODIFIED_PIXELS_IMAGE);
if (!fh->Write(filenameout))
{
std::cout << "Fail to write :[" << filenameout << "]"
<< std::endl;
- }
+ }
if (verbose)
std::cout << "3 " << systemCommand << std::endl;
fh->Delete();
- }
- // --- end for write
- }
- std::cout << std::endl;
+ }
+ // --- end for write
+ }
+ std::cout << std::endl;
}
}
// l = s->GetNextSingleSerieUIDFileSet(); //===> Ignore 'Serie UID"
if ( controlCount == 0 )
std::cout << "No suitable file was found!" << std::endl;
-
+
s->Delete();
/*===============================================================================================*/
return 0;