Repository: pydicom/pydicom

Issue:
FileSet.__str__ add `SeriesDescription` if present
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Example: I'm always frustrated when [...]
Please take into account that *pydicom* is a general-purpose framework and 
does not handle the specifics of individual SOP classes.

`FileSet.__str__` (through `RecordNode.__str__`) prints a basic overview of the FileSet. Currently for Series, this only prints the `Modality` and `SeriesNumber`, but users still have no idea what each series contains. 

**Describe the solution you'd like**
The optional DICOM attribute [`StudyDescription` is already added optionally.](https://github.com/pydicom/pydicom/blob/main/src/pydicom/fileset.py#L646-L647) I propose we add the optional attribute "SeriesDescription" to give more information on the series. 

Discussion:
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/pydicom/pydicom/pull/1960?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=pydicom) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Comparison is base [(`d866520`)](https://app.codecov.io/gh/pydicom/pydicom/commit/d8665209fa0585258dc51a883cf2b842c44bc984?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=pydicom) 97.78% compared to head [(`128327f`)](https://app.codecov.io/gh/pydicom/pydicom/pull/1960?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=pydicom) 97.78%.


<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##             main    #1960   +/-   ##
=======================================
  Coverage   97.78%   97.78%           
=======================================
  Files          63       63           
  Lines       10737    10739    +2     
=======================================
+ Hits        10499    10501    +2     
  Misses        238      238           
```



</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/pydicom/pydicom/pull/1960?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=pydicom).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=pydicom).


Patch:
diff --git a/src/pydicom/fileset.py b/src/pydicom/fileset.py
index 487d50522..aa2103738 100644
--- a/src/pydicom/fileset.py
+++ b/src/pydicom/fileset.py
@@ -647,6 +647,8 @@ class RecordNode(Iterable["RecordNode"]):
                 s.append(f"StudyDescription='{ds.StudyDescription}'")
         elif self.record_type == "SERIES":
             s += [f"Modality={ds.Modality}", f"SeriesNumber={ds.SeriesNumber}"]
+            if getattr(ds, "SeriesDescription", None):
+                s.append(f"SeriesDescription='{ds.SeriesDescription}'")
         elif self.record_type == "IMAGE":
             s.append(f"InstanceNumber={ds.InstanceNumber}")
         else:


Test patch:
diff --git a/tests/test_fileset.py b/tests/test_fileset.py
index 2d77de944..70c8c77d0 100644
--- a/tests/test_fileset.py
+++ b/tests/test_fileset.py
@@ -1727,7 +1727,13 @@ class TestFileSet:
         """Test str(FileSet) with empty + additions."""
         fs = FileSet()
         fs.add(ct)
-        fs.add(get_testdata_file("MR_small.dcm"))
+        mr = get_testdata_file("MR_small.dcm", read=True)
+        # mr.SeriesDescription = "TEST_DESC"
+        fs.add(mr)
+        # Hack to add description because pydicom.fileset._define_series doesn't copy
+        # optional attribute "Series Description".
+        _mr_series_record = fs._tree.children[-1].children[-1].children[-1]._record
+        _mr_series_record.SeriesDescription = "TEST_DESC"
 
         for p in list(Path(TINY_ALPHA_FILESET).parent.glob("**/*"))[::2]:
             if p.is_file() and p.name not in ["DICOMDIR", "README"]:
@@ -1771,7 +1777,7 @@ class TestFileSet:
             "    PATIENT: PatientID='4MR1', "
             "PatientName='CompressedSamples^MR1'\n"
             "      STUDY: StudyDate=20040826, StudyTime=185059\n"
-            "        SERIES: Modality=MR, SeriesNumber=1\n"
+            "        SERIES: Modality=MR, SeriesNumber=1, SeriesDescription='TEST_DESC'\n"
             "          IMAGE: 1 SOP Instance (1 addition)\n"
             "    PATIENT: PatientID='12345678', PatientName='Citizen^Jan'\n"
             "      STUDY: StudyDate=20200913, StudyTime=161900, "
@@ -1803,7 +1809,7 @@ class TestFileSet:
             "    PATIENT: PatientID='4MR1', "
             "PatientName='CompressedSamples^MR1'\n"
             "      STUDY: StudyDate=20040826, StudyTime=185059\n"
-            "        SERIES: Modality=MR, SeriesNumber=1\n"
+            "        SERIES: Modality=MR, SeriesNumber=1, SeriesDescription='TEST_DESC'\n"
             "          IMAGE: 1 SOP Instance\n"
             "    PATIENT: PatientID='12345678', PatientName='Citizen^Jan'\n"
             "      STUDY: StudyDate=20200913, StudyTime=161900, "
@@ -1842,7 +1848,7 @@ class TestFileSet:
             "    PATIENT: PatientID='4MR1', "
             "PatientName='CompressedSamples^MR1'\n"
             "      STUDY: StudyDate=20040826, StudyTime=185059\n"
-            "        SERIES: Modality=MR, SeriesNumber=1\n"
+            "        SERIES: Modality=MR, SeriesNumber=1, SeriesDescription='TEST_DESC'\n"
             "          IMAGE: 0 SOP Instances (1 initial, 1 removal)\n"
             "    PATIENT: PatientID='12345678', PatientName='Citizen^Jan'\n"
             "      STUDY: StudyDate=20200913, StudyTime=161900, "