Skip to content

fix: Correct typos, wrong test URL, and replace GE tags with Siemens-specific tags#20

Open
Devguru-codes wants to merge 1 commit intoOSIPI:mainfrom
Devguru-codes:Typos_Wrong_Paths
Open

fix: Correct typos, wrong test URL, and replace GE tags with Siemens-specific tags#20
Devguru-codes wants to merge 1 commit intoOSIPI:mainfrom
Devguru-codes:Typos_Wrong_Paths

Conversation

@Devguru-codes
Copy link

@Devguru-codes Devguru-codes commented Feb 27, 2026

This PR fixes 5 related issues involving typos, wrong paths, and copy-pasted GE-specific code in Siemens sequence classes.

Changes

1. Siemens manufacturer typo (siemens_base.py)

-"SIEMENS HEALHINEERS"
+"SIEMENS HEALTHINEERS"

2. Enum filename (enums/)

-modaliy_enum.py
+modality_enum.py

Updated imports in enums/__init__.py and sequences/factory.py.

3. Wrong test URL (tests/test_report.py)

-"/report/process/dicom"
+"/api/report/process/dicom"

4. Siemens base uses GE tags (siemens_base.py)
Replaced entire _extract_siemens_common_metadata() to use Siemens-specific tags:

-# Direct GE-specific mappings
-if dcm_tags.GE_ASSET_R_FACTOR in d:
-    bids["AssetRFactor"] = ...
-if dcm_tags.GE_EFFECTIVE_ECHO_SPACING in d:
-    bids["EffectiveEchoSpacing"] = ...
+# Siemens-specific metadata extraction
+if dcm_tags.SIEMENS_BANDWIDTH_PER_PIXEL_PHASE_ENCODING in d:
+    bids["BandwidthPerPixelPhaseEncode"] = ...
+if dcm_tags.SIEMENS_ROWS in d and dcm_tags.SIEMENS_COLUMNS in d:
+    bids["AcquisitionMatrix"] = [rows, cols]

5. Siemens PLD uses GE tags (siemens_basic_single_pld.py)

-if dcm_tags.GE_LABEL_DURATION in d:
+if SIEMENS_LABEL_DURATION in d:
-if dcm_tags.GE_INVERSION_TIME in d:
+if SIEMENS_INVERSION_TIME in d:

Files Changed

  • package/src/pyaslreport/sequences/siemens/siemens_base.py
  • package/src/pyaslreport/sequences/siemens/asl/siemens_basic_single_pld.py
  • package/src/pyaslreport/enums/modaliy_enum.pymodality_enum.py
  • package/src/pyaslreport/enums/__init__.py
  • package/src/pyaslreport/sequences/factory.py
  • apps/backend/tests/test_report.py

Sanity Check Results

main branch (before fix)

# Test Status Detail
S1 HEALTHINEERS spelled correctly FAIL Contains typo "HEALHINEERS"
S2 Enum file named modality_enum.py FAIL Named modaliy_enum.py
S3 All imports reference modality_enum FAIL Old modaliy_enum import present
S4 Test URL uses /api/report/process/dicom FAIL Missing /api prefix
S5 siemens_base.py uses SIEMENS_* tags FAIL Contains GE_ASSET_R_FACTOR
S6 siemens_basic_single_pld.py uses SIEMENS_* tags FAIL Uses GE_LABEL_DURATION

Summary: PASSED=0 FAILED=6

Typos_Wrong_Paths branch (after fix)

# Test Status Detail
S1 HEALTHINEERS spelled correctly PASS
S2 Enum file named modality_enum.py PASS
S3 All imports reference modality_enum PASS
S4 Test URL uses /api/report/process/dicom PASS
S5 siemens_base.py uses SIEMENS_* tags PASS
S6 siemens_basic_single_pld.py uses SIEMENS_* tags PASS
S7 ModalityTypeValues imports correctly after rename PASS
S8 get_sequence imports correctly after rename PASS

Summary: PASSED=8 FAILED=0


API Endpoint Validation

main branch — API Responses

POST /api/report/process/dicom (no files):
  Status: 400
  Body: {"detail": "No DICOM files provided"}

POST /report/process/dicom (WRONG URL — used in test_report.py on main):
  Status: 404
  Body: {"detail": "Not Found"}
  ^^^ This is the URL the test was using — always returns 404, never tests actual endpoint!

POST /api/report/process/bids (no files):
  Status: 500

Static checks on main:

modaliy_enum.py exists: True
modality_enum.py exists: False
HEALHINEERS typo present: True
GE_ASSET_R_FACTOR in siemens_base: True
Wrong URL "/report/process/dicom" in test: True

Typos_Wrong_Paths branch — API Responses

POST /api/report/process/dicom (no files):
  Status: 400
  Body: {"detail": "No DICOM files provided"}

POST /report/process/dicom (wrong URL — no longer used):
  Status: 404
  Body: {"detail": "Not Found"}

POST /api/report/process/bids (no files):
  Status: 500  (pre-existing issue, not related to this PR)

API Test Results (fix branch)

# Test Status Detail
API1 POST /api/report/process/dicom returns 400 (no files) PASS Correct endpoint works
API2 POST /report/process/dicom (wrong URL) returns 404 PASS Confirms old test URL was wrong
API3 POST /api/report/process/bids returns 200 FAIL Returns 500 — pre-existing, unrelated

API Summary: PASSED=2 FAILED=1 (FAIL is pre-existing, not caused by this PR)


Overall: 10/11 checks pass. The single FAIL is a pre-existing 500 on the BIDS endpoint with no files, unrelated to this PR.
Resolves #19
Found a new issue. I will update this PR to fix it.

@Devguru-codes
Copy link
Author

Root Cause

POST /api/report/process/bids (no files)
  → reports.py: data["files"] = [], data["dcm_files"] = []
  → generate_report(data) called with empty file lists
    → ASLProcessor._validate_input_data()
      → raises ValueError("No files provided for ASL processing.")
  → except Exception as e:
      raise HTTPException(500, detail=str(e))  ← Returns 500!

This processor correctly validates and raises ValueError, but the endpoint's generic except Exception converts it to 500 instead of the correct 400.

Simulation Output (before fix)

POST /api/report/process/bids (modality=ASL, no files):
  Status: 500
  Body: {"detail": "No files provided for ASL processing."}
  EXPECTED: 400
  ACTUAL: 500 ← BUG!

I am working on it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix typos, wrong paths, and copy-pasted GE tag references in Siemens code

1 participant