diff --git a/package/src/pyaslreport/main.py b/package/src/pyaslreport/main.py index 553e7e5e..65120b4c 100644 --- a/package/src/pyaslreport/main.py +++ b/package/src/pyaslreport/main.py @@ -34,7 +34,10 @@ def get_bids_metadata(data): if sequence is None: raise ValueError(f"No matching sequence found for modality '{modality}' with the provided DICOM header") - return sequence.extract_bids_metadata() + metadata = sequence.extract_bids_metadata() + asl_context = sequence.generate_asl_context(data.get("nifti_file")) + + return metadata, asl_context def get_dicom_header(dicom_dir: str): diff --git a/package/src/pyaslreport/sequences/base_sequence.py b/package/src/pyaslreport/sequences/base_sequence.py index 44304fab..2acad57e 100644 --- a/package/src/pyaslreport/sequences/base_sequence.py +++ b/package/src/pyaslreport/sequences/base_sequence.py @@ -30,6 +30,11 @@ def extract_bids_metadata(self) -> dict: """Extract and convert DICOM metadata to BIDS fields.""" pass + @abstractmethod + def generate_asl_context(self, nifti_path: str = None) -> list: + """Generate the ASL context array.""" + pass + def _extract_common_metadata(self) -> dict: """Extract and convert common DICOM metadata fields to BIDS fields, including ms->s conversion where needed.""" dataset = self.dicom_header diff --git a/package/src/pyaslreport/sequences/ge/asl/ge_basic_single_pld.py b/package/src/pyaslreport/sequences/ge/asl/ge_basic_single_pld.py index bc40610d..a8137349 100644 --- a/package/src/pyaslreport/sequences/ge/asl/ge_basic_single_pld.py +++ b/package/src/pyaslreport/sequences/ge/asl/ge_basic_single_pld.py @@ -23,7 +23,8 @@ def extract_bids_metadata(self): bids["PostLabelingDelay"] = dicom_header.get(dcm_tags.GE_INVERSION_TIME, None).value - asl_context = self._generate_asl_context(1) + return bids - return bids, asl_context + def generate_asl_context(self, nifti_path: str = None) -> list: + return self._generate_asl_context(1) diff --git a/package/src/pyaslreport/sequences/ge/asl/ge_easl_multi_pld.py b/package/src/pyaslreport/sequences/ge/asl/ge_easl_multi_pld.py index f544e4f4..778087e2 100644 --- a/package/src/pyaslreport/sequences/ge/asl/ge_easl_multi_pld.py +++ b/package/src/pyaslreport/sequences/ge/asl/ge_easl_multi_pld.py @@ -95,7 +95,9 @@ def extract_bids_metadata(self): bids["LabelingDuration"] = LD_lin bids["PostLabelingDelay"] = PLD_lin - # ASLcontext: all deltaM, last one is m0scan - asl_context = self._generate_asl_context(npld if npld else 2) + return bids - return bids, asl_context \ No newline at end of file + def generate_asl_context(self, nifti_path: str = None) -> list: + dataset = self.dicom_header + npld = dataset.get(dcm_tags.GE_PRIVATE_CV6, None).value if dcm_tags.GE_PRIVATE_CV6 in dataset else None + return self._generate_asl_context(npld if npld else 2) \ No newline at end of file diff --git a/package/src/pyaslreport/sequences/siemens/asl/siemens_basic_single_pld.py b/package/src/pyaslreport/sequences/siemens/asl/siemens_basic_single_pld.py index 7cd9a570..5a926070 100644 --- a/package/src/pyaslreport/sequences/siemens/asl/siemens_basic_single_pld.py +++ b/package/src/pyaslreport/sequences/siemens/asl/siemens_basic_single_pld.py @@ -19,4 +19,7 @@ def extract_bids_metadata(self): bids["LabelingDuration"] = d.get(dcm_tags.GE_LABEL_DURATION, None).value if dcm_tags.GE_INVERSION_TIME in d: bids["PostLabelingDelay"] = d.get(dcm_tags.GE_INVERSION_TIME, None).value - return bids \ No newline at end of file + return bids + + def generate_asl_context(self, nifti_path: str = None) -> list: + return ["m0scan", "control", "label"] \ No newline at end of file