Program: gdcm
Module: $RCSfile: exXCoherentFileSet.cxx,v $
Language: C++
- Date: $Date: 2005/11/04 08:59:08 $
- Version: $Revision: 1.3 $
+ Date: $Date: 2007/06/15 13:18:51 $
+ Version: $Revision: 1.10 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
"\n exXCoherentFileSet :\n ",
"Shows the various 'XCoherent' Filesets within a directory ",
"usage: exXCoherentFileSet {dirin=inputDirectoryName} ",
- " { tag= group-elem | pos | ori } ",
+ " { tag= group-elem | pos | ori } sort ",
" [ { [noshadowseq] | [noshadow][noseq] } ] [debug] ",
" ",
" inputDirectoryName : user wants to analyze *all* the files ",
" 'Image Orientation ' ",
" 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 ",
" noshadowseq: user doesn't want to load Private Sequences ",
" noshadow : user doesn't want to load Private groups (odd number) ",
" noseq : user doesn't want to load Sequences ",
// ----- Initialize Arguments Manager ------
- gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv);
+ GDCM_NAME_SPACE::ArgMgr *am = new GDCM_NAME_SPACE::ArgMgr(argc, argv);
if (am->ArgMgrDefined("usage") || argc == 1)
{
}
if (am->ArgMgrDefined("debug"))
- gdcm::Debug::DebugOn();
+ GDCM_NAME_SPACE::Debug::DebugOn();
- int loadMode = gdcm::LD_ALL;
+ int loadMode = GDCM_NAME_SPACE::LD_ALL;
if ( am->ArgMgrDefined("noshadowseq") )
- loadMode |= gdcm::LD_NOSHADOWSEQ;
+ loadMode |= GDCM_NAME_SPACE::LD_NOSHADOWSEQ;
else
{
if ( am->ArgMgrDefined("noshadow") )
- loadMode |= gdcm::LD_NOSHADOW;
+ loadMode |= GDCM_NAME_SPACE::LD_NOSHADOW;
if ( am->ArgMgrDefined("noseq") )
- loadMode |= gdcm::LD_NOSEQ;
+ loadMode |= GDCM_NAME_SPACE::LD_NOSEQ;
}
- char *dirName = am->ArgMgrGetString("dirin",(char *)0);
+ const char *dirName = am->ArgMgrGetString("dirin");
if (dirName == 0)
{
std::cout <<std::endl
// FIXME : check only one of them is set !
- int pos = am->ArgMgrDefined("pos");
- int ori = am->ArgMgrDefined("ori");
- int tag = am->ArgMgrDefined("tag");
-
+ int pos = am->ArgMgrDefined("pos");
+ int ori = am->ArgMgrDefined("ori");
+ int sort = am->ArgMgrDefined("sort");
+
int nb;
uint16_t *groupelem;
- if (tag)
+ groupelem = am->ArgMgrGetXInt16Enum("tag", &nb);
+
+ if (groupelem != 0)
{
- groupelem = am->ArgMgrGetXInt16Enum("tag", &nb);
if (nb != 1)
{
std::cout << "TAG : one and only one group,elem!" << std::endl;
delete am; // ------ we don't need Arguments Manager any longer ------
- gdcm::SerieHelper *s;
+ GDCM_NAME_SPACE::SerieHelper *s;
- s = new gdcm::SerieHelper();
- s->SetLoadMode(gdcm::LD_ALL); // Load everything for each File
- //s->AddRestriction(tagKey, valueToCheck); // Keep only files where
+ s = GDCM_NAME_SPACE::SerieHelper::New();
+ s->SetLoadMode(GDCM_NAME_SPACE::LD_ALL); // Load everything for each File
+ //GDCM_NAME_SPACE::TagKey t(0x0020,0x0013);
+ //s->AddRestriction(t, "340", GDCM_NAME_SPACE::GDCM_LESS); // Keep only files where
// restriction is true
s->SetDirectory(dirName, true); // true : recursive exploration
+ // The Dicom file set is splitted into several 'Single SerieUID Files Sets'
+ // (a 'Single SerieUID Files Set' per SerieUID)
+ // In some cases, it's not enough, since, in some cases
+ // we can find scout view with the same SerieUID
+
/*
std::cout << " ---------------------------------------- "
<< "'Single UID' Filesets found in :["
*/
int nbFiles;
std::string fileName;
- // For all the Single SerieUID Files Sets of the gdcm::Serie
- gdcm::FileList *l = s->GetFirstSingleSerieUIDFileSet();
+ // For all the Single SerieUID Files Sets of the GDCM_NAME_SPACE::Serie
+ GDCM_NAME_SPACE::FileList *l = s->GetFirstSingleSerieUIDFileSet();
- gdcm::XCoherentFileSetmap xcm;
- while (l)
+ GDCM_NAME_SPACE::XCoherentFileSetmap xcm;
+ while (l) // for each 'Single SerieUID FileSet'
{
nbFiles = l->size() ;
if ( l->size() > 3 ) // Why not ? Just an example, for testing
xcm = s->SplitOnOrientation(l);
if (pos)
xcm = s->SplitOnPosition(l);
- if (tag)
+ if (groupelem != 0)
xcm = s->SplitOnTagValue(l, groupelem[0],groupelem[1] );
- for (gdcm::XCoherentFileSetmap::iterator i = xcm.begin();
+ for (GDCM_NAME_SPACE::XCoherentFileSetmap::iterator i = xcm.begin();
i != xcm.end();
++i)
{
std::cout << "Orientation : ";
if (pos)
std::cout << "Position : ";
- if (tag)
+ if (groupelem != 0)
std::cout << "Tag (" << std::hex << groupelem[0]
<< "|" << groupelem[1] << ") value : ";
std::cout << "[" << (*i).first << "]" << std::endl;
- // Nowadays OrderFileList() causes trouble, since some files
- // (MIP views) don't have 'Position', now considered as mandatory
+ // Within a 'just to see' program,
+ // OrderFileList() causes trouble, since some files
+ // (eg:MIP views) don't have 'Position', now considered as mandatory
// Commented out for the moment.
-
- //s->OrderFileList((*i).second); // sort the XCoherent Fileset
-
- for (std::vector<gdcm::File* >::iterator it = ((*i).second)->begin();
- it != ((*i).second)->end();
- ++it)
+
+ if (sort) {
+ s->OrderFileList((*i).second); // sort the XCoherent Fileset
+ std::cout << "ZSpacing for the file set " << s->GetZSpacing()
+ << std::endl;
+ }
+
+ for (GDCM_NAME_SPACE::FileList::iterator it = ((*i).second)->begin();
+ it != ((*i).second)->end();
+ ++it)
{
fileName = (*it)->GetFileName();
std::cout << " " << fileName << std::endl;
l = s->GetNextSingleSerieUIDFileSet();
}
- delete s;
+ s->Delete();
return 0;
}