public RTDose(DICOMObject dcm) { _doseObject = new DICOMSelector(dcm); ValueSizeInBytes = _doseObject.BitsStored.Data / 8; DoseValues = new List <double>(); Scaling = _doseObject.DoseGridScaling.Data; using (var stream = _doseObject.ToDICOMObject().GetPixelStream()) { var binReader = new BinaryReader(stream); if (ValueSizeInBytes == 4) { while (binReader.BaseStream.Position < binReader.BaseStream.Length) { DoseValues.Add(Scaling * binReader.ReadInt32()); } } else { while (binReader.BaseStream.Position < binReader.BaseStream.Length) { DoseValues.Add(Scaling * binReader.ReadUInt16()); } } } }
public DoseMatrix(DICOMObject dcm) { _doseObject = new DICOMSelector(dcm); ValueSizeInBytes = _doseObject.BitsStored.Data / 8; DoseValues = new List<double>(); this.Scaling= _doseObject.DoseGridScaling.Data; using (var stream = _doseObject.ToDICOMObject().PixelStream) { var binReader = new BinaryReader(stream); if (ValueSizeInBytes == 4) { while (binReader.BaseStream.Position < binReader.BaseStream.Length) { DoseValues.Add(Scaling * binReader.ReadInt32()); } } else { while (binReader.BaseStream.Position < binReader.BaseStream.Length) { DoseValues.Add(Scaling * binReader.ReadUInt16()); } } } }
public void ConvertRelToAbs(double totalDose) { DoseValues = DoseValues.Select(d => d * totalDose).ToList(); var _16b = 1 / Math.Pow(2, 16); _doseObject.DoseGridScaling.Data = _16b; _doseObject.DoseUnits.Data = "GY"; _doseObject.DoseType.Data = "PHYSICAL"; using (var stream = new MemoryStream()) { var binWriter = new BinaryWriter(stream); foreach (var d in DoseValues) { var integ = (int)(d / _16b); var bytes = BitConverter.GetBytes(integ); binWriter.Write(integ); } var ows = new OtherWordString(TagHelper.PixelData, stream.ToArray()); _doseObject.ToDICOMObject().Replace(ows); } }
public void UpdateDose(string path) { // Compute new dose matrix string fileName = path + this.DoseUID + ".dcm"; var DoseValues = computeEQD2(fileName, this.nFractions, this.alphaBeta); var sel = new DICOMSelector(dose); sel.SOPInstanceUID.Data = UIDHelper.GenerateUID("1.2.246.352.71.7"); sel.SeriesInstanceUID.Data = UIDHelper.GenerateUID("1.2.246.352.71.2"); /* * dose.FindFirst(TagHelper.SOPINSTANCE_UID).DData = UIDHelper.GenerateUID(); * dose.FindFirst(TagHelper.SERIES_INSTANCE_UID).DData = UIDHelper.GenerateUID(); * this.doseUID = dose.FindFirst(TagHelper.SOPINSTANCE_UID).DData.ToString(); * return dose.FindFirst(TagHelper.SOPINSTANCE_UID).DData.ToString(); */ sel.ReferencedRTPlanSequence_[0].ReferencedSOPInstanceUID.Data = this.planUID; // overwrite dose matrix var _16b = 1 / Math.Pow(2, 16); sel.DoseGridScaling.Data = _16b; using (var stream = new MemoryStream()) { var binWriter = new BinaryWriter(stream); foreach (var d in DoseValues) { int integ = (int)(d / _16b); var bytes = BitConverter.GetBytes(integ); binWriter.Write(integ); } var ows = new OtherWordString(TagHelper.PIXEL_DATA, stream.ToArray()); sel.ToDICOMObject().Replace(ows); } //dose = sel.ToDICOMObject(); this.doseUID = sel.SOPInstanceUID.Data; // add metadata dose = AddMetaData(dose); }
public void UpdatePlan() { string description = "EGD2 generated from " + this.planUID + "\r\nα/β = " + this.alphaBeta.ToString(); var sel = new DICOMSelector(plan); if (sel.RTPlanDescription == null) { sel.RTPlanDescription = new ShortText(TagHelper.RTPLAN_DESCRIPTION, description); } else { sel.RTPlanDescription.Data += description; } sel.SOPInstanceUID.Data = UIDHelper.GenerateUID("1.2.246.352.71.5"); sel.SeriesInstanceUID.Data = UIDHelper.GenerateUID("1.2.246.352.71.2"); /* * sel.MediaStorageSOPClassUID = new UniqueIdentifier(TagHelper.MEDIA_STORAGE_SOPCLASS_UID, sel.SOPClassUID.Data); * sel.MediaStorageSOPInstanceUID = new UniqueIdentifier(TagHelper.MEDIA_STORAGE_SOPINSTANCE_UID, sel.SOPInstanceUID.Data); * sel.ImplementationClassUID = new UniqueIdentifier(TagHelper.IMPLEMENTATION_CLASS_UID, UIDHelper.GenerateUID()); */ sel.ApprovalStatus.Data = "REJECTED"; sel.RTPlanLabel.Data = "EQD2_" + sel.RTPlanLabel.Data.Trim(); if (sel.RTPlanLabel.Data.Length > 13) { sel.RTPlanLabel.Data = sel.RTPlanLabel.Data.Substring(0, 13).Trim(); } plan = sel.ToDICOMObject(); /* * plan.FindFirst(TagHelper.SOPINSTANCE_UID).DData = UIDHelper.GenerateUID(); * plan.FindFirst(TagHelper.SERIES_INSTANCE_UID).DData = UIDHelper.GenerateUID(); * plan.FindFirst(TagHelper.RTPLAN_LABEL).DData = "EQD2_" + plan.FindFirst(TagHelper.RTPLAN_LABEL).DData; * plan.FindFirst(TagHelper.APPROVAL_STATUS).DData = "REJECTED"; * this.planUID = plan.FindFirst(TagHelper.SOPINSTANCE_UID).DData.ToString(); * return plan.FindFirst(TagHelper.SOPINSTANCE_UID).DData.ToString(); */ this.planUID = sel.SOPInstanceUID.Data; // add metadata plan = AddMetaData(plan); //return this.planUID; }