Example #1
0
class ScanSerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name="mri:scan-detail")
    dicom = serializers.HyperlinkedRelatedField(
        view_name="dicom:series-detail", queryset=Series.objects.all()
    )
    subject = serializers.HyperlinkedRelatedField(
        view_name="research:subject-detail",
        queryset=get_subject_model().objects.all(),
        required=False,
    )
    nifti = serializers.HyperlinkedRelatedField(
        view_name="mri:nifti-detail",
        queryset=NIfTI.objects.all(),
        required=False,
        allow_null=True,
    )
    study_groups = serializers.HyperlinkedRelatedField(
        view_name="research:group-detail",
        queryset=get_group_model().objects.all(),
        many=True,
        required=False,
    )
    sequence_type = serializers.HyperlinkedRelatedField(
        view_name="mri:sequencetype-detail",
        queryset=SequenceType.objects.all(),
        required=False,
        allow_null=True,
    )

    class Meta:
        model = Scan
        fields = (
            "id",
            "url",
            "dicom",
            "subject",
            "nifti",
            "study_groups",
            "sequence_type",
            "institution_name",
            "time",
            "description",
            "number",
            "echo_time",
            "repetition_time",
            "inversion_time",
            "spatial_resolution",
            "comments",
        )

    def create(self, validated_data):
        scan, created = Scan.objects.get_or_create(**validated_data)
        if created and scan.dicom and len(validated_data) == 1:
            scan.update_fields_from_dicom()
            scan.save()
        return scan
    def scan_subject_to_session(apps, schema_editor):
        Subject = get_subject_model()
        Scan = apps.get_model("django_mri", "Scan")
        Session = apps.get_model("django_mri", "Session")

        for scan in Scan.objects.all():
            subject = Subject.objects.filter(
                id_number=scan.dicom.patient.uid
            ).first()
            first_image = scan.dicom.image_set.first().dcm.path
            header = DicomHeader(first_image)
            date = header.get("StudyDate") or header.get("SeriesDate")
            try:
                time = header.get("StudyTime")
            except ValueError:
                time = datetime.time()
            else:
                if not time:
                    time = datetime.time()
            session_time = datetime.datetime.combine(date, time)
            if not subject:
                session = Session.objects.create(time=session_time)
                scan.session_id = session.id
            else:
                session = subject.mri_session_set.filter(
                    time=session_time
                ).first()
                if not session:
                    session = Session.objects.create(
                        subject_id=subject.id, time=session_time
                    )
                else:
                    existing_scan_number = Scan.objects.filter(
                        session_id=session.id, number=scan.number
                    )
                    if existing_scan_number:
                        session = Session.objects.create(
                            subject_id=subject.id, time=session_time
                        )
                scan.session_id = session.id
            scan.save()
Example #3
0
from django_mri.utils.utils import (
    get_group_model,
    get_measurement_model,
    get_study_model,
    get_subject_model,
)
from rest_framework import serializers

Group = get_group_model()
Measurement = get_measurement_model()
Subject = get_subject_model()
Study = get_study_model()


class MiniStudySerializer(serializers.ModelSerializer):
    """
    Minified serializer class for the :class:`Study` model.
    """

    class Meta:
        model = Study
        fields = "id", "title", "description"


class MiniGroupSerializer(serializers.ModelSerializer):
    """
    Minified serializer class for the :class:`Group` model.
    """

    study = MiniStudySerializer()
Example #4
0
 def test_get_subject_model(self):
     result = utils.get_subject_model()
     self.assertEqual(result, Subject)