Example #1
0
 public RTDose(DICOMObject dcm)
 {
     _doseObject      = new DICOMSelector(dcm);
     ValueSizeInBytes = _doseObject.Bits​Stored.Data / 8;
     DoseValues       = new List <double>();
     Scaling          = _doseObject.Dose​Grid​Scaling.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());
             }
         }
     }
 }
Example #2
0
 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());
             }
         }
     }
 }
Example #3
0
        public void ConvertRelToAbs(double totalDose)
        {
            DoseValues = DoseValues.Select(d => d * totalDose).ToList();
            var _16b = 1 / Math.Pow(2, 16);

            _doseObject.Dose​Grid​Scaling.Data = _16b;
            _doseObject.Dose​Units.Data        = "GY";
            _doseObject.Dose​Type.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.Pixel​Data, stream.ToArray());
                _doseObject.ToDICOMObject().Replace(ows);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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;
        }