<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2627" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2>1ere partie (sinon ca passait pas...)</FONT></DIV>
<DIV> </DIV></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Je crois qu'il y a eu confusion dans la
compréhension de Document.</FONT></DIV>
<DIV><FONT face=Arial size=2>Pour moi, Document, c'est le contenu Dicom (donc
une donnée qui equivaudrait</FONT></DIV>
<DIV><FONT face=Arial size=2>à un vtkImageData).</FONT></DIV>
<DIV><FONT face=Arial size=2>Pour Mathieu, il semble que c'etait plutot la
partie Reader/Writer. </FONT></DIV>
<DIV><FONT face=Arial size=2>Ce qui je crois amene des confusions dans les
reponses aux questions.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Je crois qu'il faut commencer à donner des noms
correct. Voici ce que je propose </FONT></DIV>
<DIV><FONT face=Arial size=2>(je ne prefixe pas de gdcm pour ne pas alourdir les
choses) :</FONT></DIV>
<DIV><FONT face=Arial size=2>DocEntry : comme le DocEntry actuel (contient
gr|elem + VR + value)</FONT></DIV>
<DIV><FONT face=Arial
size=2>
dérivé en ValEntry, BinEntry, SeqEntry</FONT></DIV>
<DIV><FONT face=Arial size=2>SQItem : comme le SQItem actuel, données contenant
une liste de DocEntry.</FONT></DIV>
<DIV><FONT face=Arial size=2>Document : données contenant une liste de
DocEntry.</FONT></DIV>
<DIV><FONT face=Arial
size=2>
gère une image Dicom. Contient des méthodes facilitant l'accès aux</FONT></DIV>
<DIV><FONT face=Arial
size=2>
informations de l'image : taille, spacing, origin, orientation,
etc.</FONT></DIV>
<DIV><FONT face=Arial size=2>DicomDir : données contenant une arborescence
</FONT></DIV>
<DIV><FONT face=Arial
size=2>
DicomDirPatient / DicomDirStudy / DicomDirSerie / DicomDirImage</FONT></DIV>
<DIV><FONT face=Arial
size=2>
(qui sont aussi des données dérivant de SQItem)</FONT></DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2>Image : donnée image Dicom décompressée + Document
?</FONT></DIV>
<DIV> </DIV></FONT></DIV>
<DIV><FONT face=Arial size=2>Reader : traitement qui permet de lire un fichier
au format Dicom</FONT></DIV>
<DIV><FONT face=Arial size=2>DocReader : traitement qui permet de lire un
fichier Dicom contenant un Document</FONT></DIV>
<DIV><FONT face=Arial
size=2> retourne
un Document</FONT></DIV>
<DIV><FONT face=Arial
size=2>
derive de Reader</FONT></DIV>
<DIV><FONT face=Arial size=2>DicomDirReader : traitement qui permet de lire un
fichier Dicom contenant un DicomDir</FONT></DIV>
<DIV><FONT face=Arial
size=2> retourne
un DicomDir</FONT></DIV>
<DIV>
<DIV><FONT face=Arial
size=2> derive
de Reader</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV>
<DIV><FONT face=Arial size=2>Writer : traitement qui permet d'ecrire un fichier
au format Dicom</FONT></DIV><FONT face=Arial size=2>DocWriter : traitement qui
permet d'ecrire un fichier au format Dicom à partir d'un Document</FONT></DIV>
<DIV><FONT face=Arial size=2>DicomV3Writer : traitement qui permet d'ecrire
un fichier au format DicomV3</FONT></DIV>
<DIV><FONT face=Arial
size=2> prend
un Document en entrée </FONT></DIV>
<DIV><FONT face=Arial
size=2>
derive de DocWriter </FONT></DIV>
<DIV><FONT face=Arial size=2>LibidoWriter : traitement qui permet d'ecrire
un fichier au format Libido</FONT></DIV>
<DIV><FONT face=Arial
size=2> prend
un Document en entrée <BR></FONT>
<DIV>
<DIV><FONT face=Arial
size=2>
derive de DocWriter </FONT></DIV><FONT face=Arial size=2>AcrNemaWriter
: traitement qui permet d'ecrire un fichier au format ACR-NEMA</FONT></DIV>
<DIV><FONT face=Arial
size=2> prend
un Document en entrée <BR></FONT>
<DIV><FONT face=Arial
size=2>
derive de DocWriter </FONT></DIV>
<DIV><FONT face=Arial size=2>DicomDirWriter : traitement qui permet d'ecrire un
fichier au format Dicom à partir d'un DicomDir</FONT></DIV>
<DIV><FONT face=Arial
size=2> prend
un DicomDir en entrée <BR>
<DIV><FONT face=Arial
size=2>
derive de Writer </FONT></DIV></FONT></DIV>
<DIV><FONT face=Arial size=2>DocValidator : traitement qui verifie la structure
d'un Document</FONT></DIV>
<DIV><FONT face=Arial
size=2>
prend un Document en entrée</FONT></DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial
size=2>
retourne du texte</FONT></DIV>DicomDirValidator : traitement qui verifie la
structure d'un DicomDir</FONT></DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial
size=2>
prend un DicomDir en entrée</FONT></DIV>
<DIV><FONT face=Arial
size=2>
retourne du texte</FONT></DIV>
<DIV>SerieOrder : traitement ordonnant une serie de Document</DIV>
<DIV>
prend une liste de Document en entrée</DIV>
<DIV>
retourne l'ordre de ces documents (sous quelle forme ?)</FONT></DIV>
<DIV><FONT face=Arial size=2>Decompress : traitement decompressant l'image d'un
Document</FONT></DIV>
<DIV><FONT face=Arial
size=2>
prend un Document en entrée</FONT></DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial
size=2>
retourne une Image</FONT></DIV>
<DIV>Document2DicomDirImage : tranforme un Document en DicomDirImage</DIV>
<DIV>
prend un Document en entrée</DIV></FONT></DIV>
<DIV><FONT face=Arial size=2>
<DIV>
retourne un DicomDirImage</DIV>
<DIV>
<DIV>DicomDirImage2Document : tranforme un DicomDirImage en Document</DIV>
<DIV>
prend un DicomDirImage en entrée</DIV>
<DIV><FONT face=Arial size=2>
<DIV>
retourne un Document</DIV></FONT></DIV></DIV></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV>
<DIV><FONT face=Arial size=2>On voit donc apparaitre une dérivation
comme suit (incomplète bien sur) : </FONT></DIV>
<DIV><FONT face="Courier New" size=2>Data</FONT></DIV>
<DIV><FONT face="Courier New" size=2> - Document </FONT></DIV>
<DIV><FONT face="Courier New" size=2> - DicomDir</FONT></DIV>
<DIV><FONT face="Courier New" size=2> - Image</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Process</FONT></DIV>
<DIV><FONT face="Courier New" size=2> - Reader</FONT></DIV>
<DIV><FONT face="Courier New" size=2> -
DicomDirReader</FONT></DIV>
<DIV><FONT face="Courier New" size=2> -
DocReader</FONT></DIV>
<DIV><FONT face="Courier New" size=2> - Writer</FONT></DIV>
<DIV><FONT face="Courier New" size=2>
<DIV><FONT face=Arial size=2>
<DIV><FONT face="Courier New" size=2> -
DicomDirWriter</FONT></DIV>
<DIV><FONT face="Courier New" size=2> -
DocWriter</FONT></DIV>
<DIV><FONT face="Courier New">
<DIV><FONT face="Courier New"> -
DicomV3Writer</FONT></DIV>
<DIV><FONT face="Courier New"> -
LibidoWriter</FONT></DIV> -
DicomV3Writer</FONT></DIV></FONT></DIV> - Validator</FONT></DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face="Courier New" size=2> -
DicomDirValidator</FONT></DIV>
<DIV><FONT face="Courier New" size=2> -
DocValidator</FONT></DIV></FONT></DIV></DIV>
<DIV><FONT face="Courier New" size=2> - SerieOrder</FONT></DIV>
<DIV><FONT face="Courier New" size=2>
<DIV><FONT face="Courier New" size=2> - Decompress</FONT></DIV>
<DIV> - Document2DicomDirImage</DIV>
<DIV><FONT face=Arial>
<DIV><FONT face="Courier New" size=2> -
DicomDirImage2Document</FONT></DIV></FONT></DIV></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Si j'ai bien tout compris, Mathieu, on aura une
séparation données traitements (comme dans VTK).</FONT></DIV>
<DIV><FONT face=Arial size=2>Ceci n'est bien sur qu'une ebauche, s'appuyant sur
ce qui fonctionne deja et les morceaux à changer.</FONT></DIV>
<DIV><FONT face=Arial size=2>L'arborescence n'est pas complète, et il y a peut
etre des choses fausses ou a revoir.</FONT></DIV>
<DIV><FONT face=Arial size=2>Mais une question se pose avec cela... on fait
comme dans VTK avec un pipeline mis a jour automatiquement </FONT></DIV>
<DIV><FONT face=Arial size=2>ou pas ? Comment on gere les sorties, comme en VTK
avec la meme sortie a chaque fois ou avec une </FONT></DIV>
<DIV><FONT face=Arial size=2>nouvelle sortie ? Et quand le traitement est
détruit, qui détruit la sortie ?</FONT></DIV>
<DIV><FONT face=Arial size=2>Désolé de ne parler que de VTK, je ne connais pas
encore ITK (mais c'est pour bientot)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Ce qui me plait pas dans ce que je viens de
présenter (et vi, on peut faire des choses pas belles des </FONT></DIV>
<DIV><FONT face=Arial size=2>le début...) c'est la différence entre Document et
DicomDirImage... ce qui nous oblige apres a avoir</FONT></DIV>
<DIV><FONT face=Arial size=2>des passerelles entre les 2. Mais d'un autre coté,
c'est justifiable sur le fait que les deux n'ont pas </FONT></DIV>
<DIV><FONT face=Arial size=2>tout en commun... mais la question va etre :
pourquoi ne pas dire qu'un DicomDirImage est un Document ?</FONT></DIV>
<DIV><FONT face=Arial size=2>et bien tout simplement car dans le DicomDirImage
(actuel), on n'a que les champs correspondant au </FONT></DIV>
<DIV><FONT face=Arial size=2>niveau image du DicomDir, le DicomDirSerie
contenant les info de la serie, idem avec Study et Patient.</FONT></DIV>
<DIV><FONT face=Arial size=2>Or, le Document doit contenir toutes les infos de
chaque niveau du DicomDir (Patient + Study + Serie + Image).</FONT></DIV>
<DIV><FONT face=Arial size=2>Avoir ces convertisseurs obligerait aussi a pouvoir
remonter de l'Image jusqu'au Patient, ce qui n'est pas le cas</FONT></DIV>
<DIV><FONT face=Arial size=2>actuellement (mais rien empeche de le faire ;-)
)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV></DIV></DIV></DIV>
<DIV><FONT face=Arial size=2>----- Original Message ----- </FONT>
<DIV><FONT face=Arial size=2>From: "Mathieu Malaterre" <</FONT><A
href="mailto:mathieu.malaterre@kitware.com"><FONT face=Arial
size=2>mathieu.malaterre@kitware.com</FONT></A><FONT face=Arial
size=2>></FONT></DIV>
<DIV><FONT face=Arial size=2>To: "Benoit Regrain" <</FONT><A
href="mailto:benoit.regrain@creatis.insa-lyon.fr"><FONT face=Arial
size=2>benoit.regrain@creatis.insa-lyon.fr</FONT></A><FONT face=Arial
size=2>></FONT></DIV>
<DIV><FONT face=Arial size=2>Cc: "Mailing list gdcm" <</FONT><A
href="mailto:dcmlib@creatis.insa-lyon.fr"><FONT face=Arial
size=2>dcmlib@creatis.insa-lyon.fr</FONT></A><FONT face=Arial
size=2>></FONT></DIV>
<DIV><FONT face=Arial size=2>Sent: Wednesday, April 27, 2005 5:45
PM</FONT></DIV>
<DIV><FONT face=Arial size=2>Subject: Re: [Dcmlib] gdcm
proposal</FONT></DIV></DIV>
<DIV><FONT face=Arial><BR><FONT size=2></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2>> <BR>>> Par contre je n'ai pas compris :
tu veux que ton gdcm.Writer modifie<BR>>> définitivement le gdcm.Document
passé en entrée ? ou que la modification<BR>>> soit juste temporaire (le
temps de l'écriture du fichier) ?<BR>> <BR>> Mon probleme est plus vaste,
je voudrais un mechnisme qui interdise de <BR>> modifier l'input d'un filtre.
Je concois parfaitement maintenant que <BR>> j'ai souligner le probleme on
aille le deplacer ailleurs ou le cacher....<BR>> <BR>> Sinon pour
l'ecriture effectivement le 12 qui devient un 16 ca devrait <BR>> etre
temporaire. Par exemple un gdcm.Validator ne pourrait pas reporter <BR>> que
BitsStorage=12 est une faute, pourtant dans le cas present -et pour <BR>>
lontemps- nous sommes incapable de gerer ca. Donc au moment de <BR>>
l'ecriture gdcm.Writer fais la suite d'actions:<BR>> <BR>> (version
gourmande):<BR>> - recopie du gdcm.Document dans un gdcm.Document
interne<BR>> - ensuite gdcm.Writer regarde gdcm.Image et doit determiner les
valeurs <BR>> a changer: BitStord 12 devient 16, dans le Cas clunie, les
spacing=0 <BR>> deviennent 1 ...<BR>> - ensuite on ecrase les anciennes
UID (user request ?) par les valeurs <BR>> generer<BR>> -> derniere
etape on ecris le fichier.</FONT></DIV>
<DIV><FONT face=Arial size=2>Autre solution, utiliser ma méthode d'archivage des
Entry de facon temporaire,</FONT></DIV>
<DIV><FONT face=Arial size=2>modifier la source, puis tout remettre en place.
Mais est-ce une bonne solution ?</FONT></DIV>
<DIV><FONT face=Arial size=2>Pour ce qui est de la copie, cela ne risque-t-il
pas de ralentir les choses ?</FONT></DIV>
<DIV><FONT face=Arial size=2>Ou sinon, il faudrait pouvoir faire comme dans
VTK... des DeepCopy et</FONT></DIV>
<DIV><FONT face=Arial size=2>des ShallowCopy. Dans ce cas, il faudrait
proprement gerer l'appartenance d'un Entry</FONT></DIV>
<DIV><FONT face=Arial size=2>par un Document... donc ajouter du reference
counting... </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> </DIV>
<DIV>Benoit</FONT></DIV></BODY></HTML>