The Study-Card and its mechanism

Tutorial

Study-Card definition

  • Une Study-Card (StudyCard) = ensemble de Règles (StudyCardRuleList)
  • Une Règle (StudyCardRule) = Un ensemble de Conditions (StudyCardConditionList) + un ensemble d'Affectations à appliquer (StudyCardAssignmentList)
  • Une Condition (StudyCardCondition) = un Dicom tag + un signe de comparaison (RefComparaisonSign) + une valeur Dicom
  • Une Affectation (StudyCardAssignment) = un champ + une valeur (le champs va prendre une nouvelle valeur)


  • StudyCard = StudyCardRuleList
  • StudyCardRule = StudyCardConditionList + StudyCardAssignmentList
  • StudyCardCondition = Dicom tag + Comparaison sign + Dicom value
  • StudyCardAssignment = field + value

Exemple

Exemple de Study-Card (abstraction) :

  • SI Condition1 ET Condition3 ALORS APPLIQUER Règle1, Règle2, Règle3
  • SI Condition3 ALORS APPLIQUER Règle4, Règle5, Règle6
  • SI Condition4 ET Condition5 ALORS APPLIQUER Règle7

Conditions

Comme expliqué ci-dessus : une condition correspond à un triplet (Dicom tag, Signe de comparaison, valeur)

Les différents signes de comparaison (RefComparaisonSign)

Il existe 6 types de signes de comparaison :

  • equals
  • ends with
  • starts with
  • contains
  • bigger than
  • smaller than

Priorités des conditions

Les Règles d'une Study-Card sont ordonnées.
La priorité (place) d'une Règle est fixée par la somme des priorités de ses Conditions, qui change en fonction du signe de comparaison de la Condition.

Rule.priority <-- SUM(Rule.Condition.ComparaisonSign.priority)

N.B. : Les Règles de type “Always” ont toujours une priorité égale à zéro étant donné qu'elles ne comportent pas de Conditions.

A chaque signe de comparaison est donc associé à une priorité

  • equals → priorité = 5
  • ends with → priorité = 2
  • starts with → priorité = 2
  • bigger than → priorité = 2
  • smaller than → priorité = 2
  • contains → priorité = 1

N.B. : Toute règle ayant au moins une condition dépendant d'un autre Dicom tag que “Serie Description” aura une priorité égale à zéro.

Exemples de calcul des priorités de Règles

Règle “Always” (donc sans Conditions)
–> Priorité de la Règle « Always » = 0

Conditions de la Règle1 :

  • Series Description - (0008,103E) contains 3D EG T1

–> Priorité de la Règle 1 = 1

Conditions de la Règle2 :

  • Series Description - (0008,103E) ends with GADO

–> Priorité de la Règle 2 = 1

Conditions de la Règle3 :

  • Series Description - (0008,103E) contains T1
  • Series Description - (0008,103E) contains GADO

–> Priorité de la Règle 3 = 2

Conditions de la Règle4 :

  • Series Description - (0008,103E) starts with 3D
  • Series Description - (0008,103E) ends with FLAIR

–> Priorité de la Règle 4 = 4

Conditions de la Règle5 :

  • Series Description - (0008,103E) equals 3D T1 GADO (3mm)

–> Priorité de la Règle 5 = 5

Conditions de la Règle6 :

  • Echo Time - (0018,0081) equals 15
  • Series Description - (0008,103E) contains DUAL

–> Priorité de la Règle 6 = 0

Conditions de la Règle7 :

  • Echo Time - (0018,0081) bigger than 10
  • Echo Time - (0018,0081) smaller than 30
  • Series Description - (0008,103E) contains DUAL

–> Priorité de la Règle 7 = 0

Application de la Study-Card

On applique les Règles par ordre de priorité des plus petites au plus grande

Exemple

Study-Card

If Always (priority = 0), Then set

  • transmittingCoil > BODY
  • receivingCoil > HEAD
  • protocolName > Protocole OFSEP cerveau

If (priority = 1) Series Description - (0008,103E) contains 3D T1, Then set

  • refSliceOrientationAtAcquisition > sagittal
  • refAcquisitionContrast > T1
  • refContrastAgentUsed > NONE
  • refMrDatasetNature > T1WeightedMRDataset
  • refMrSequencePhysics > Magnetization prepared spoiled GRE

If (priority = 1) Series Description - (0008,103E) contains Sag T2, Then set

  • protocolName > Protocole OFSEP moelle
  • receivingCoil > SPINE
  • refSliceOrientationAtAcquisition > sagittal
  • refAcquisitionContrast > T2
  • refMrDatasetNature > T2WeightedMRDataset
  • refMrSequencePhysics > Standard segmented spin-echo sequence

If (priority = 2) Series Description - (0008,103E) ends with GADO, Then set

  • refContrastAgentUsed > GADOLINIUM
  • refMrDatasetNature > T1WeightedDCEMRDataset

Application de la Study-Card sur des séquences

3D T1
  • transmittingCoil > BODY
  • receivingCoil > HEAD
  • protocolName > Protocole OFSEP cerveau
  • refSliceOrientationAtAcquisition > sagittal
  • refAcquisitionContrast > T1
  • refContrastAgentUsed > NONE
  • refMrDatasetNature > T1WeightedMRDataset
  • refMrSequencePhysics > Magnetization prepared spoiled GRE
3D T1 GADO
  • transmittingCoil > BODY
  • receivingCoil > HEAD
  • protocolName > Protocole OFSEP cerveau
  • refSliceOrientationAtAcquisition > sagittal
  • refAcquisitionContrast > T1
  • refContrastAgentUsed > GADOLINIUM
  • refMrDatasetNature > T1WeightedDCEMRDataset
  • refMrSequencePhysics > Magnetization prepared spoiled GRE
Sag T2
  • transmittingCoil > BODY
  • receivingCoil > SPINE
  • protocolName > Protocole OFSEP moelle
  • refSliceOrientationAtAcquisition > sagittal
  • refAcquisitionContrast > T2
  • refMrDatasetNature > T2WeightedMRDataset
  • refMrSequencePhysics > Standard segmented spin-echo sequence

Study-Card mechanism

forAll studyCardRule
   forAll studyCardCondition
      dicomFileTagValue ← dicomFile.getValue(studyCardCondition.tag) 
      if ( dicomFileTagValue == null) then
         exit
      else
         if (comparaisonSign == equals) then
            if !(DicomFileTagValue.equals(studyCardCondition.value) exit
         elseif (comparaisonSign == startsWith) then
            if !(DicomFileTagValue.startsWith (studyCardCondition.value) then exit
         elseif (comparaisonSign == endsWith)
            if !(DicomFileTagValue.endsWith (studyCardCondition.value) then exit
         elseif (comparaisonSign == contains)
            if !(DicomFileTagValue.contains (studyCardCondition.value) then exit
      endIf

      forAll studyCardAssignment
         valueToBeSet ← studyCardAssignment.value
         fieldToFind ← studyCardAssignment.field
         tagCorrespondingTo(fieldToFind).value ← valueToBeSet
      endForAll
   endForAll
endForAll

How to create a Study-Card ?


Outils personnels