rexcardan / Evil-DICOM

A C# DICOM Library
168 stars 98 forks source link

Writing DoseMatrix.DoseValues #38

Closed Fivetee closed 7 years ago

Fivetee commented 8 years ago

I want to modify some dose values. I can read a DoseMatrix and change some dosevalues, but when when I write the dosefile and open it again, I see that nothing has changed.

rexcardan commented 8 years ago

Check out my ConvertRelToAbs method (in the link below) and you can see the gist of how to do it. You have to modify the underlying DICOM object by writing the bytes back to the matrix. The DoseValue list doesn't do that by itself. We could add it though.The issue is you have to make sure the Units and Scaling are correct. Let me know if you think of a clean way to do it.

https://github.com/rexcardan/Evil-DICOM/blob/master/EvilDICOM/EvilDICOM/RT/DoseMatrix.cs

` 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)
            {
                int 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);
        }

`