$tPatientName = new Tag(0x0, 0x0); $de1 = $pubdict->GetDictEntryByName("Patient Name", $tPatientName); printf("Found %s", $tPatientName); // Indeed the attribute could not be found. Since DICOM 2003, Patient Name // has become Patient's Name. $tPatientsName = new Tag(); $de2 = $pubdict->GetDictEntryByName("Patient's Name", $tPatientsName); printf("Found: %s", $tPatientsName); // Let's try to read an arbitrary DICOM Attribute: $tDoseGridScaling = new Tag(); $de3 = $pubdict->GetDictEntryByName("Dose Grid Scaling", $tDoseGridScaling); printf("Found: %s", $tDoseGridScaling); if ($ds->FindDataElement($tDoseGridScaling)) { $sf = new StringFilter(); $sf->SetFile($file); printf("Attribute Value as String: %s", $sf->ToString($tDoseGridScaling)); // Let's check the name again: $pss = $sf->ToStringPair($tDoseGridScaling); printf("Attribute Name Checked: %s", $pss->first); printf("Attribute Value (string): %s", $pss->second); $dgs = $ds->GetDataElement($tDoseGridScaling); // Let's assume for a moment we knew the tag number: $at = new Tag(0x3004, 0xe); assert($at . GetTag() == $tDoseGridScaling); $at->SetFromDataSet($ds); // For the sake of long term maintenance, we will not write // that this particular attribute is stored as a double. What if // a user made a mistake. It is much safer to rely on GDCM internal // mechanism to deduce the VR::DS type (represented as a ieee double) $v = $at->GetValue(); printf("DoseGridScaling=%s", $v);