[Dcmlib] Serie Helper
Jean-Pierre Roux
Jean-Pierre.Roux at creatis.insa-lyon.fr
Fri Oct 14 17:26:02 CEST 2005
Salut, Mathieu .
--> English translation will follow.
Sorry.
JPRx
Il va falloir qu'on se penche *serieusement* sur le pb du SerieHelper,
maintenant qu'on a un peu d'experience.
Actuellement, on passe au constructeur, des noms de fichiers, et/ou des
gdcm::File *, et il fabrique a la volée autant de std::vector qu'il y a
de "Series Instance UID" différents.
Ces std::vector sont rangés dans une std::map (nommée -on s'en tape- :
CoherentFileListmap CoherentFileListHT;)
qui a pour clé le "Series Instance UID".
On accede a chacun de ces std::vector (dont le typedef est
gdcm::FileList), par :
FileList *GetFirstCoherentFileList();
FileList *GetNextCoherentFileList();
C'est a l'utilisateur de decider, en fonction de ce qu'il sait de ses
données, de demander le tri des "CoherentFileList" dont il a besoin.
Par defaut, le tri est fait sur la Position; s'il y a des ex aequo (ou
que la Position n'est pas trouvee), on trie sur ImageNumber, si pas
trouvé, sur le filename -pourquoi pas ?-
-->Si l'utilisateur en sait plus que nous sur son critere de tri (par
exemple, et n'importe quoi : tri sur le 'TimeTrigger'), il positionne un
pointeur sur sa propre fonction de comparaison.
Ca marche tres bien, mais ca a l'air de chagriner Benoit, pour des
problèmes d'utilisation en Python.
Si on se lance dans trucs du genre 'functor', l'utilsation de gdcm par
un utilisateur 'non Itk' ne va pas gagner en clarté, non?
--> On a vu , qu'en fait, ces "ensembles de gdcm::File* de meme Series
Instance UID" ne sont pas si 'coherents' que ca, puis qu'ils peuvent
avoir des orientations, ou des positions differentes, et que, dans ce
cas, ca peut ne pas convenir *du tout* à l'utilisateur.
Je propose que, dans la prochaine release de gdcm, on les renome,
"SingleSerieUIDFileSet", ou qq chose comme ça, et qu'on ajoute des
methodes qui permettraient de ventiler ces "SingleSerieUIDFileSet" en de
vraies "CoherentFileSet" (meme taille image/taille pixel, meme
Orientation, ou meme taille image/taille pixel, meme Position, ou
ventillation sur ce que l'utilisateur souhaite : il nous passe un
pointeur sur sa fonction de "test d'egalite".
(voir remarque précendente : Python pb)
--> Si, pour des raisons qui ne concernent que lui, l'utisateur -qui
sait ce qu'il fait- recupere des images où bon lui semble, qu'il se fait
un std::vector de gdcm::File*, et qu'il lance le tri de ce std::vector,
ca marchera -legitimement- tres bien, mais il lui faudra avoir instancié
un gdcm::SerieHelper pour avoir acces a la methode de tri
SerieHelper::OrderFileList().
Ma question :
Cette methode dit-elle rester dans la classe SerieHelper, ou bien
doit-elle porter sur une nouvelle classe "ensemble de gdcm::File*"
(name it as you like).
--> For application reasons of their own, some users wish to 'order' ,
using OrderFileList() method -or the next one-, not a
std::vector(<gdcm::File*>) - typedefed, right now as
gdcm::FileList -
but a
gdcm::DicomDirSerie - that's, right now, a
std::list(<gdcm::DicomDirImage *>) -
gdcm::File inherits from gdcm::Document
DicomDirImage inherits from gdcm::SQItem
Both gdcm::Document and gdcm::SQItem inherits from gdcm::DocEntrySet.
All the low level methods to access the gdcm::DocEntries to perform the
comparison operations are available at the gdcm::DocEntrySet level(no pb
till here), the iterators work the same way for both std::vector and
std::list
but the 'Added Value Methods', say : GetImageOrientationPatient,
GetXOrigin, GetYOrigin, GetZOrigin are only defined for gdcm;;File (they
are meaningless for, say a gdcm::DicomDir, or any kind of gdcm::SQItem),
but there are fully meaningfull (?) for a gdcm::DicomDirImage.
It would be silly to nove theses methods up to gdcm::DocEntrySet.
Using template method hang at *application* compile time
What do we do ?
JP
More information about the Dcmlib
mailing list