private void testIsNotRemovedAndRetainsValue( String description, AttributeTag creatorTag, String creator, Attribute privateAttribute, String expectValue) throws DicomException { AttributeList list = new AttributeList(); { Attribute a = new LongStringAttribute(creatorTag); a.addValue(creator); list.put(a); } list.put(privateAttribute); AttributeTag privateTag = privateAttribute.getTag(); list.removeUnsafePrivateAttributes(); assertTrue("Checking Creator is not removed", list.get(creatorTag) != null); assertEquals( "Checking Creator retains value", creator, Attribute.getDelimitedStringValuesOrEmptyString(list, creatorTag)); assertTrue("Checking " + description + " is not removed", list.get(privateTag) != null); assertEquals( "Checking " + description + " retains value", expectValue, Attribute.getDelimitedStringValuesOrEmptyString(list, privateTag)); }
public void TestSafePrivateGEMRRelated_CreatorFromList() throws Exception { { AttributeList list = new AttributeList(); { Attribute a = new LongStringAttribute(new AttributeTag(0x0019, 0x0010)); a.addValue("GEMS_ACQU_01"); list.put(a); } assertTrue( "Internal Pulse Sequence Name is safe", ClinicalTrialsAttributes.isSafePrivateAttribute(new AttributeTag(0x0019, 0x109E), list)); } { AttributeList list = new AttributeList(); { Attribute a = new LongStringAttribute(new AttributeTag(0x0025, 0x0010)); a.addValue("GEMS_SERS_01"); list.put(a); } assertTrue( "Images In Series is safe", ClinicalTrialsAttributes.isSafePrivateAttribute(new AttributeTag(0x0025, 0x1007), list)); } { AttributeList list = new AttributeList(); { Attribute a = new LongStringAttribute(new AttributeTag(0x0043, 0x0010)); a.addValue("GEMS_PARM_01"); list.put(a); } assertTrue( "Scanner Table Entry + Gradient Coil Selected", ClinicalTrialsAttributes.isSafePrivateAttribute(new AttributeTag(0x0043, 0x106F), list)); } }
/** * @exception IOException * @exception DicomException */ public CEchoRequestCommandMessage() throws DicomException, IOException { commandField = MessageServiceElementCommand.C_ECHO_RQ; messageID = super.getNextAvailableMessageID(); int dataSetType = 0x0101; // none // NB. The Affected SOP Class UID should have no extra trailing padding, otherwise the // SCP may fail and send an A-ABORT :) (Part 5 says one null (not space) is allowed) // This is taken care of by the Attribute.write() AttributeList list = new AttributeList(); { AttributeTag t = groupLengthTag; Attribute a = new UnsignedLongAttribute(t); a.addValue(0); list.put(t, a); } { AttributeTag t = TagFromName.AffectedSOPClassUID; Attribute a = new UniqueIdentifierAttribute(t); a.addValue(SOPClass.Verification); list.put(t, a); } { AttributeTag t = TagFromName.CommandField; Attribute a = new UnsignedShortAttribute(t); a.addValue(commandField); list.put(t, a); } { AttributeTag t = TagFromName.MessageID; Attribute a = new UnsignedShortAttribute(t); a.addValue(messageID); list.put(t, a); } { AttributeTag t = TagFromName.CommandDataSetType; Attribute a = new UnsignedShortAttribute(t); a.addValue(dataSetType); list.put(t, a); } ByteArrayOutputStream bout = new ByteArrayOutputStream(); DicomOutputStream dout = new DicomOutputStream( bout, null /* no meta-header */, TransferSyntax.ImplicitVRLittleEndian); list.write(dout); bytes = bout.toByteArray(); groupLength = bytes.length - 12; bytes[8] = (byte) groupLength; // little endian bytes[9] = (byte) (groupLength >> 8); bytes[10] = (byte) (groupLength >> 16); bytes[11] = (byte) (groupLength >> 24); // System.err.println("CEchoRequestCommandMessage: bytes="+HexDump.dump(bytes)); }
public void TestSafePrivateGEPACSRelated_AddedToList() throws Exception { AttributeList list = new AttributeList(); { Attribute a = new LongStringAttribute(new AttributeTag(0x0903, 0x0010)); a.addValue("GEIIS PACS"); list.put(a); } { Attribute a = new UnsignedShortAttribute(new AttributeTag(0x0903, 0x1010)); a.addValue(0); list.put(a); } list.removeUnsafePrivateAttributes(); assertTrue( "Checking Creator is not removed", list.get(new AttributeTag(0x0903, 0x0010)) != null); assertTrue( "Checking Reject Image Flag is not removed", ClinicalTrialsAttributes.isSafePrivateAttribute(new AttributeTag(0x0903, 0x1010), list)); }
public void TestSafePrivateGEPACSRelated_CreatorFromList() throws Exception { AttributeList list = new AttributeList(); { Attribute a = new LongStringAttribute(new AttributeTag(0x0903, 0x0010)); a.addValue("GEIIS PACS"); list.put(a); } assertTrue( "Checking Reject Image Flag is safe", ClinicalTrialsAttributes.isSafePrivateAttribute(new AttributeTag(0x0903, 0x1010), list)); }
public void TestSafePrivatePhilipsPETRelated_ScaleFactors_FromList() throws Exception { AttributeList list = new AttributeList(); { Attribute a = new LongStringAttribute(new AttributeTag(0x7053, 0x0010)); a.addValue("Philips PET Private Group"); list.put(a); } assertTrue( "Checking SUV Factor is safe", ClinicalTrialsAttributes.isSafePrivateAttribute(new AttributeTag(0x7053, 0x1000), list)); assertTrue( "Checking Activity Concentration Factor is safe", ClinicalTrialsAttributes.isSafePrivateAttribute(new AttributeTag(0x7053, 0x1009), list)); }
protected CompositeInstanceContext mergePatientContext( Group group, CompositeInstanceContext newContext) { if (group.context == null) { // System.err.println("mergePatientContext(): creating new context for group"); group.context = newContext; } else { AttributeList groupList = group.context.getAttributeList(); Iterator<Attribute> newListIterator = newContext.getAttributeList().values().iterator(); while (newListIterator.hasNext()) { Attribute a = newListIterator.next(); AttributeTag tag = a.getTag(); String groupValue = Attribute.getSingleStringValueOrEmptyString(groupList, tag); String newValue = a.getSingleStringValueOrEmptyString(); if (!newValue.equals(groupValue)) { String describeTag = tag + " " + groupList.getDictionary().getFullNameFromTag(tag); System.err.println( "mergePatientContext(): in group " + group.identity + " for " + describeTag + " values differ between existing group value <" + groupValue + "> and new value <" + newValue + ">"); if (newValue.length() > 0 && (groupValue.length() == 0 || isNonZeroLengthDummyValue(groupValue))) { System.err.println( "mergePatientContext(): in group " + group.identity + " for " + describeTag + " replacing absent/empty/dummy existing group value with new value <" + newValue + ">"); groupList.put(a); } } } } return group.context; }
protected void performRetrieve( AttributeList uniqueKeys, String selectionLevel, String retrieveAE) { try { AttributeList identifier = new AttributeList(); if (uniqueKeys != null) { identifier.putAll(uniqueKeys); { AttributeTag t = TagFromName.QueryRetrieveLevel; Attribute a = new CodeStringAttribute(t); a.addValue(selectionLevel); identifier.put(t, a); } currentRemoteQueryInformationModel.performHierarchicalMoveFrom(identifier, retrieveAE); } else { // else do nothing, since no unique key to specify what to retrieve log.warning("UniqueKeys for retrieval are null"); } } catch (Exception e) { e.printStackTrace(System.err); } }
/** * Generate commomn attributes for converted images. * * <p>Does NOT add ManufacturerModelName ... that should be added by caller. * * <p>Does NOT call * CodingSchemeIdentification.replaceCodingSchemeIdentificationSequenceWithCodingSchemesUsedInAttributeList * ... that should be done by caller. * * @param list * @param patientName * @param patientID * @param studyID * @param seriesNumber * @param instanceNumber * @param modality may be null * @param sopClass may be null * @throws DicomException * @throws NumberFormatException */ public static void generateCommonAttributes( AttributeList list, String patientName, String patientID, String studyID, String seriesNumber, String instanceNumber, String modality, String sopClass) throws DicomException { UIDGenerator u = new UIDGenerator(); { Attribute a = new UniqueIdentifierAttribute(TagFromName.SOPInstanceUID); a.addValue(u.getAnotherNewUID()); list.put(a); } { Attribute a = new UniqueIdentifierAttribute(TagFromName.SeriesInstanceUID); a.addValue(u.getAnotherNewUID()); list.put(a); } { Attribute a = new UniqueIdentifierAttribute(TagFromName.StudyInstanceUID); a.addValue(u.getAnotherNewUID()); list.put(a); } { Attribute a = new UniqueIdentifierAttribute(TagFromName.FrameOfReferenceUID); a.addValue(u.getAnotherNewUID()); list.put(a); } { Attribute a = new PersonNameAttribute(TagFromName.PatientName); a.addValue(patientName); list.put(a); } { Attribute a = new LongStringAttribute(TagFromName.PatientID); a.addValue(patientID); list.put(a); } { Attribute a = new DateAttribute(TagFromName.PatientBirthDate); list.put(a); } { Attribute a = new CodeStringAttribute(TagFromName.PatientSex); list.put(a); } { Attribute a = new ShortStringAttribute(TagFromName.StudyID); a.addValue(studyID); list.put(a); } { Attribute a = new PersonNameAttribute(TagFromName.ReferringPhysicianName); a.addValue("^^^^"); list.put(a); } { Attribute a = new ShortStringAttribute(TagFromName.AccessionNumber); list.put(a); } { Attribute a = new IntegerStringAttribute(TagFromName.SeriesNumber); a.addValue(seriesNumber); list.put(a); } { Attribute a = new IntegerStringAttribute(TagFromName.InstanceNumber); a.addValue(instanceNumber); list.put(a); } { Attribute a = new LongStringAttribute(TagFromName.Manufacturer); a.addValue("PixelMed"); list.put(a); } { Attribute a = new LongStringAttribute(TagFromName.DeviceSerialNumber); a.addValue(new java.rmi.dgc.VMID().toString()); list.put(a); } { Attribute a = new LongStringAttribute(TagFromName.SoftwareVersions); a.addValue(VersionAndConstants.getBuildDate()); list.put(a); } { Attribute a = new CodeStringAttribute(TagFromName.PatientOrientation); list.put(a); } { Attribute a = new CodeStringAttribute(TagFromName.BurnedInAnnotation); a.addValue("NO"); list.put(a); } { Attribute a = new CodeStringAttribute(TagFromName.RecognizableVisualFeatures); a.addValue("NO"); list.put(a); } { Attribute a = new CodeStringAttribute(TagFromName.ContentQualification); a.addValue("RESEARCH"); list.put(a); } { Attribute a = new CodeStringAttribute(TagFromName.LossyImageCompression); a.addValue("00"); list.put(a); } { Attribute a = new LongStringAttribute(TagFromName.PositionReferenceIndicator); list.put(a); } { java.util.Date currentDateTime = new java.util.Date(); String currentDate = new java.text.SimpleDateFormat("yyyyMMdd").format(currentDateTime); String currentTime = new java.text.SimpleDateFormat("HHmmss.SSS").format(currentDateTime); { Attribute a = new DateAttribute(TagFromName.StudyDate); a.addValue(currentDate); list.put(a); } { Attribute a = new TimeAttribute(TagFromName.StudyTime); a.addValue(currentTime); list.put(a); } { Attribute a = new DateAttribute(TagFromName.SeriesDate); a.addValue(currentDate); list.put(a); } { Attribute a = new TimeAttribute(TagFromName.SeriesTime); a.addValue(currentTime); list.put(a); } { Attribute a = new DateAttribute(TagFromName.ContentDate); a.addValue(currentDate); list.put(a); } { Attribute a = new TimeAttribute(TagFromName.ContentTime); a.addValue(currentTime); list.put(a); } { Attribute a = new DateAttribute(TagFromName.InstanceCreationDate); a.addValue(currentDate); list.put(a); } { Attribute a = new TimeAttribute(TagFromName.InstanceCreationTime); a.addValue(currentTime); list.put(a); } { Attribute a = new ShortStringAttribute(TagFromName.TimezoneOffsetFromUTC); a.addValue(DateTimeAttribute.getTimeZone(java.util.TimeZone.getDefault(), currentDateTime)); list.put(a); } } { Attribute a = new UniqueIdentifierAttribute(TagFromName.InstanceCreatorUID); a.addValue(VersionAndConstants.instanceCreatorUID); list.put(a); } int numberOfFrames = Attribute.getSingleIntegerValueOrDefault(list, TagFromName.NumberOfFrames, 1); int samplesPerPixel = Attribute.getSingleIntegerValueOrDefault(list, TagFromName.SamplesPerPixel, 1); if (sopClass == null) { // if modality were not null, could actually attempt to guess SOP Class based on modality here // :( sopClass = SOPClass.SecondaryCaptureImageStorage; if (numberOfFrames > 1) { if (samplesPerPixel == 1) { int bitsAllocated = Attribute.getSingleIntegerValueOrDefault(list, TagFromName.BitsAllocated, 1); if (bitsAllocated == 8) { sopClass = SOPClass.MultiframeGrayscaleByteSecondaryCaptureImageStorage; } else if (bitsAllocated == 16) { sopClass = SOPClass.MultiframeGrayscaleWordSecondaryCaptureImageStorage; } else { Attribute aPixelData = list.getPixelData(); if (aPixelData instanceof OtherFloatAttribute || aPixelData instanceof OtherDoubleAttribute) { sopClass = SOPClass.ParametricMapStorage; } } } else if (samplesPerPixel == 3) { sopClass = SOPClass.MultiframeTrueColorSecondaryCaptureImageStorage; } } } if (sopClass.equals(SOPClass.ParametricMapStorage)) { addParametricMapFrameTypeSharedFunctionalGroup(list); { Attribute a = new CodeStringAttribute(TagFromName.ContentLabel); a.addValue("LABEL1"); list.put(a); } { Attribute a = new LongStringAttribute(TagFromName.ContentDescription); list.put(a); } { Attribute a = new PersonNameAttribute(TagFromName.ContentCreatorName); list.put(a); } } if (SOPClass.isEnhancedMultiframeImageStorage(sopClass)) { if (samplesPerPixel == 1) { double windowWidth = Attribute.getSingleDoubleValueOrDefault(list, TagFromName.WindowWidth, 0); if (windowWidth > 0) { double windowCenter = Attribute.getSingleDoubleValueOrDefault(list, TagFromName.WindowCenter, 0); String voiLUTFunction = Attribute.getSingleStringValueOrDefault(list, TagFromName.VOILUTFunction, "LINEAR"); FunctionalGroupUtilities.generateVOILUTFunctionalGroup( list, numberOfFrames, windowWidth, windowCenter, voiLUTFunction); list.remove(TagFromName.WindowCenter); list.remove(TagFromName.WindowWidth); list.remove(TagFromName.VOILUTFunction); } } double rescaleSlope = Attribute.getSingleDoubleValueOrDefault(list, TagFromName.RescaleSlope, 0); if (rescaleSlope > 0) { double rescaleIntercept = Attribute.getSingleDoubleValueOrDefault(list, TagFromName.RescaleIntercept, 0); String rescaleType = Attribute.getSingleStringValueOrDefault(list, TagFromName.RescaleType, "US"); FunctionalGroupUtilities.generatePixelValueTransformationFunctionalGroup( list, numberOfFrames, rescaleSlope, rescaleIntercept, rescaleType); list.remove(TagFromName.RescaleSlope); list.remove(TagFromName.RescaleIntercept); list.remove(TagFromName.RescaleType); } // four values required { Attribute a = new CodeStringAttribute(TagFromName.ImageType); a.addValue("DERIVED"); a.addValue("PRIMARY"); a.addValue(""); a.addValue(""); list.put(a); } } else { // two values will usually do { Attribute a = new CodeStringAttribute(TagFromName.ImageType); a.addValue("DERIVED"); a.addValue("PRIMARY"); list.put(a); } } if (SOPClass.isMultiframeSecondaryCaptureImageStorage(sopClass)) { if (list.get(TagFromName.PerFrameFunctionalGroupsSequence) != null) { { AttributeTagAttribute a = new AttributeTagAttribute(TagFromName.FrameIncrementPointer); a.addValue(TagFromName.PerFrameFunctionalGroupsSequence); list.put(a); } } else { if (numberOfFrames > 1) { { AttributeTagAttribute a = new AttributeTagAttribute(TagFromName.FrameIncrementPointer); a.addValue(TagFromName.PageNumberVector); list.put(a); } { Attribute a = new IntegerStringAttribute(TagFromName.PageNumberVector); for (int page = 1; page <= numberOfFrames; ++page) { a.addValue(page); } list.put(a); } } } } System.err.println( "CommonConvertedAttributeGeneration.generateCommonAttributes(): SOP Class = " + sopClass); { Attribute a = new UniqueIdentifierAttribute(TagFromName.SOPClassUID); a.addValue(sopClass); list.put(a); } if (SOPClass.isSecondaryCaptureImageStorage(sopClass)) { { Attribute a = new CodeStringAttribute(TagFromName.ConversionType); a.addValue("WSD"); list.put(a); } } if (modality == null) { // could actually attempt to guess modality based on SOP Class here :( modality = "OT"; } { Attribute a = new CodeStringAttribute(TagFromName.Modality); a.addValue(modality); list.put(a); } { Attribute a = new SequenceAttribute(TagFromName.AcquisitionContextSequence); list.put(a); } }