예제 #1
0
        /// <summary>
        /// Defines PointSourceBase class
        /// </summary>
        /// <param name="polarAngleEmissionRange">Polar angle range</param>
        /// <param name="azimuthalAngleEmissionRange">Azimuthal angle range</param>
        /// <param name="direction">Point source emitting direction</param>
        /// <param name="pointLocation">New position</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected PointSourceBase(
            DoubleRange polarAngleEmissionRange,
            DoubleRange azimuthalAngleEmissionRange,
            Direction direction,
            Position pointLocation,
            int initialTissueRegionIndex)
        {
            if (direction == null)
            {
                direction = SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone();
            }
            if (pointLocation == null)
            {
                pointLocation = SourceDefaults.DefaultPosition.Clone();
            }

            _polarAngleEmissionRange     = polarAngleEmissionRange.Clone();
            _azimuthalAngleEmissionRange = azimuthalAngleEmissionRange.Clone();
            _pointLocation = pointLocation.Clone();
            _direction     = direction.Clone();

            _rotationAndTranslationFlags = new SourceFlags(
                direction != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                pointLocation != SourceDefaults.DefaultPosition.Clone(),
                false);
            _initialTissueRegionIndex = initialTissueRegionIndex;
        }
예제 #2
0
        /// <summary>
        /// Defines LineSourceBase class
        /// </summary>
        /// <param name="lineLength">The length of the line source</param>
        /// <param name="sourceProfile">Source profile type</param>
        /// <param name="newDirectionOfPrincipalSourceAxis">New source axis direction</param>
        /// <param name="translationFromOrigin">New source location</param>
        /// <param name="beamRotationFromInwardNormal">Beam rotation from inward normal</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected LineSourceBase(
            double lineLength,
            ISourceProfile sourceProfile,
            Direction newDirectionOfPrincipalSourceAxis,
            Position translationFromOrigin,
            PolarAzimuthalAngles beamRotationFromInwardNormal,
            int initialTissueRegionIndex)
        {
            if (newDirectionOfPrincipalSourceAxis == null)
            {
                newDirectionOfPrincipalSourceAxis = SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone();
            }
            if (translationFromOrigin == null)
            {
                translationFromOrigin = SourceDefaults.DefaultPosition.Clone();
            }
            if (beamRotationFromInwardNormal == null)
            {
                beamRotationFromInwardNormal = SourceDefaults.DefaultBeamRoationFromInwardNormal.Clone();
            }

            _rotationAndTranslationFlags = new SourceFlags(
                newDirectionOfPrincipalSourceAxis != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                translationFromOrigin != SourceDefaults.DefaultPosition.Clone(),
                beamRotationFromInwardNormal != SourceDefaults.DefaultBeamRoationFromInwardNormal.Clone());

            _lineLength    = lineLength;
            _sourceProfile = sourceProfile;
            _newDirectionOfPrincipalSourceAxis = newDirectionOfPrincipalSourceAxis.Clone();
            _translationFromOrigin             = translationFromOrigin.Clone();
            _beamRotationFromInwardNormal      = beamRotationFromInwardNormal.Clone();
            _initialTissueRegionIndex          = initialTissueRegionIndex;
        }
        /// <summary>
        /// Defines SurfaceEmittingTubularSourceBase class
        /// </summary>
        /// <param name="tubeRadius">Tube radius</param>
        /// <param name="tubeHeightZ">Tube height</param>
        /// <param name="newDirectionOfPrincipalSourceAxis">New source axis direction</param>
        /// <param name="translationFromOrigin">New source location</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected SurfaceEmittingTubularSourceBase(
            double tubeRadius,
            double tubeHeightZ,
            Direction newDirectionOfPrincipalSourceAxis,
            Position translationFromOrigin,
            int initialTissueRegionIndex)
        {
            _rotationAndTranslationFlags = new SourceFlags(
                newDirectionOfPrincipalSourceAxis != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                translationFromOrigin != SourceDefaults.DefaultPosition.Clone(),
                false);

            _tubeRadius  = tubeRadius;
            _tubeHeightZ = tubeHeightZ;
            _newDirectionOfPrincipalSourceAxis = newDirectionOfPrincipalSourceAxis.Clone();
            _translationFromOrigin             = translationFromOrigin.Clone();
            _initialTissueRegionIndex          = initialTissueRegionIndex;
        }
        /// <summary>
        /// Read text data file that has input and output data
        /// </summary>
        public void read_data()
        {
            string testpara = "../../../../matlab/test/monte_carlo/source_test_data_generation/UnitTests_SourceToolbox.txt";

            if (File.Exists(testpara))
            {
                using (TextReader reader = File.OpenText(testpara))
                {
                    string   text = reader.ReadToEnd();
                    string[] bits = text.Split('\t');
                    for (int i = 0; i < 140; i++)
                    {
                        _tp[i] = double.Parse(bits[i]);
                    }
                    reader.Close();
                }
            }

            _position    = new Position(_tp[0], _tp[1], _tp[2]);
            _direction   = new Direction(_tp[3], _tp[4], _tp[5]);
            _translation = new Position(_tp[6], _tp[7], _tp[8]);
            _angPair     = new PolarAzimuthalAngles(_tp[9], _tp[10]);
            _polRange    = new DoubleRange(_tp[11], _tp[12]);
            _aziRange    = new DoubleRange(_tp[13], _tp[14]);
            _angRot      = new ThreeAxisRotation(_tp[15], _tp[16], _tp[17]);
            _flags       = new SourceFlags(true, true, true);
            _aParameter  = _tp[18];
            _bParameter  = _tp[19];
            _cParameter  = _tp[20];
            _lengthX     = _tp[21];
            _widthY      = _tp[22];
            _heightZ     = _tp[23];
            _innerRadius = _tp[24];
            _outerRadius = _tp[25];
            _bdFWHM      = _tp[26];
            _limitL      = _tp[27];
            _limitU      = _tp[28];
            _factor      = _tp[29];
            _polarAngle  = _tp[30];
        }
예제 #5
0
        /// <summary>
        /// Defines EllipticalSourceBase class
        /// </summary>
        /// <param name="aParameter">"a" parameter of the ellipse source</param>
        /// <param name="bParameter">"b" parameter of the ellipse source</param>
        /// <param name="sourceProfile">Source Profile {Flat / Gaussian}</param>
        /// <param name="newDirectionOfPrincipalSourceAxis">New source axis direction</param>
        /// <param name="translationFromOrigin">New source location</param>
        /// <param name="beamRotationFromInwardNormal">Polar Azimuthal Rotational Angle of inward Normal</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected EllipticalSourceBase(
            double aParameter,
            double bParameter,
            ISourceProfile sourceProfile,
            Direction newDirectionOfPrincipalSourceAxis,
            Position translationFromOrigin,
            PolarAzimuthalAngles beamRotationFromInwardNormal,
            int initialTissueRegionIndex)
        {
            _rotationAndTranslationFlags = new SourceFlags(
                newDirectionOfPrincipalSourceAxis != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                translationFromOrigin != SourceDefaults.DefaultPosition.Clone(),
                beamRotationFromInwardNormal != SourceDefaults.DefaultBeamRoationFromInwardNormal.Clone());

            _aParameter    = aParameter;
            _bParameter    = bParameter;
            _sourceProfile = sourceProfile;
            _newDirectionOfPrincipalSourceAxis = newDirectionOfPrincipalSourceAxis.Clone();
            _translationFromOrigin             = translationFromOrigin.Clone();
            _beamRotationFromInwardNormal      = beamRotationFromInwardNormal.Clone();
            _initialTissueRegionIndex          = initialTissueRegionIndex;
        }
예제 #6
0
        /// <summary>
        /// Defines VolumetricCuboidalSourceBase class
        /// </summary>
        /// <param name="cubeLengthX">The length of the cuboid</param>
        /// <param name="cubeWidthY">The width of the cuboid</param>
        /// <param name="cubeHeightZ">The height of the cuboid</param>
        /// <param name="beamDiameterFWHM">Beam diameter FWHM (-1 for flat beam)</param>
        /// <param name="newDirectionOfPrincipalSourceAxis">New source axis direction</param>
        /// <param name="translationFromOrigin">New source location</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected VolumetricCuboidalSourceBase(
            double cubeLengthX,
            double cubeWidthY,
            double cubeHeightZ,
            double beamDiameterFWHM,
            Direction newDirectionOfPrincipalSourceAxis,
            Position translationFromOrigin,
            int initialTissueRegionIndex)
        {
            _rotationAndTranslationFlags = new SourceFlags(
                newDirectionOfPrincipalSourceAxis != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                translationFromOrigin != SourceDefaults.DefaultPosition.Clone(),
                false);

            _cubeLengthX      = cubeLengthX;
            _cubeWidthY       = cubeWidthY;
            _cubeHeightZ      = cubeHeightZ;
            _beamDiameterFWHM = beamDiameterFWHM;
            _newDirectionOfPrincipalSourceAxis = newDirectionOfPrincipalSourceAxis.Clone();
            _translationFromOrigin             = translationFromOrigin.Clone();
            _initialTissueRegionIndex          = initialTissueRegionIndex;
        }
        /// <summary>
        /// Defines SurfaceEmittingCylindricalFiberSourceBase class
        /// </summary>
        /// <param name="fiberRadius">Fiber radius</param>
        /// <param name="fiberHeightZ">Fiber height</param>
        /// <param name="curvedSurfaceEfficiency">Efficciency of the curved surface (0-1)</param>
        /// <param name="bottomSurfaceEfficiency">Efficciency of the bottom surface (0-1)</param>
        /// <param name="newDirectionOfPrincipalSourceAxis">New source axis direction</param>
        /// <param name="translationFromOrigin">New source location</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected SurfaceEmittingCylindricalFiberSourceBase(
            double fiberRadius,
            double fiberHeightZ,
            double curvedSurfaceEfficiency,
            double bottomSurfaceEfficiency,
            Direction newDirectionOfPrincipalSourceAxis,
            Position translationFromOrigin,
            int initialTissueRegionIndex)
        {
            _rotationAndTranslationFlags = new SourceFlags(
                newDirectionOfPrincipalSourceAxis != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                translationFromOrigin != SourceDefaults.DefaultPosition.Clone(),
                false);

            _fiberRadius                       = fiberRadius;
            _fiberHeightZ                      = fiberHeightZ;
            _curvedSurfaceEfficiency           = curvedSurfaceEfficiency;
            _bottomSurfaceEfficiency           = bottomSurfaceEfficiency;
            _newDirectionOfPrincipalSourceAxis = newDirectionOfPrincipalSourceAxis.Clone();
            _translationFromOrigin             = translationFromOrigin.Clone();
            _initialTissueRegionIndex          = initialTissueRegionIndex;
        }
        /// <summary>
        /// Defines RectangularSourceBase class
        /// </summary>
        /// <param name="rectLengthX">The length of the Rectangular Source</param>
        /// <param name="rectWidthY">The width of the Rectangular Source</param>
        /// <param name="sourceProfile">Source Profile {Flat / Gaussian}</param>
        /// <param name="newDirectionOfPrincipalSourceAxis">New source axis direction</param>
        /// <param name="translationFromOrigin">New source location</param>
        /// <param name="beamRotationFromInwardNormal">Polar Azimuthal Rotational Angle of inward Normal</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected RectangularSourceBase(
            double rectLengthX,
            double rectWidthY,
            ISourceProfile sourceProfile,
            Direction newDirectionOfPrincipalSourceAxis,
            Position translationFromOrigin,
            PolarAzimuthalAngles beamRotationFromInwardNormal,
            int initialTissueRegionIndex)
        {
            _rotationAndTranslationFlags = new SourceFlags(
                newDirectionOfPrincipalSourceAxis != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                translationFromOrigin != SourceDefaults.DefaultPosition.Clone(),
                beamRotationFromInwardNormal != SourceDefaults.DefaultBeamRoationFromInwardNormal.Clone());

            _rectLengthX   = rectLengthX;
            _rectWidthY    = rectWidthY;
            _sourceProfile = sourceProfile;
            _newDirectionOfPrincipalSourceAxis = newDirectionOfPrincipalSourceAxis.Clone();
            _translationFromOrigin             = translationFromOrigin.Clone();
            _beamRotationFromInwardNormal      = beamRotationFromInwardNormal.Clone();
            _initialTissueRegionIndex          = initialTissueRegionIndex;
        }
        /// <summary>
        /// Defines VolumetricEllipsoidalSourceBase class
        /// </summary>
        /// <param name="aParameter">"a" parameter of the ellipsoid source</param>
        /// <param name="bParameter">"b" parameter of the ellipsoid source</param>
        /// <param name="cParameter">"c" parameter of the ellipsoid source</param>
        /// <param name="sourceProfile">Source Profile {Flat / Gaussian}</param>
        /// <param name="newDirectionOfPrincipalSourceAxis">New source axis direction</param>
        /// <param name="translationFromOrigin">New source location</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected VolumetricEllipsoidalSourceBase(
            double aParameter,
            double bParameter,
            double cParameter,
            ISourceProfile sourceProfile,
            Direction newDirectionOfPrincipalSourceAxis,
            Position translationFromOrigin,
            int initialTissueRegionIndex)
        {
            _rotationAndTranslationFlags = new SourceFlags(
                newDirectionOfPrincipalSourceAxis != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                translationFromOrigin != SourceDefaults.DefaultPosition.Clone(),
                false);

            _aParameter    = aParameter;
            _bParameter    = bParameter;
            _cParameter    = cParameter;
            _sourceProfile = sourceProfile;
            _newDirectionOfPrincipalSourceAxis = newDirectionOfPrincipalSourceAxis.Clone();
            _translationFromOrigin             = translationFromOrigin.Clone();
            _initialTissueRegionIndex          = initialTissueRegionIndex;
        }
예제 #10
0
        /// <summary>
        /// Defines CircularSourceBase class
        /// </summary>
        /// <param name="innerRadius">The inner radius of the circular source</param>
        /// <param name="outerRadius">The outer radius of the circular source</param>
        /// <param name="sourceProfile">Source Profile {Flat / Gaussian}</param>
        /// <param name="newDirectionOfPrincipalSourceAxis">New source axis direction</param>
        /// <param name="translationFromOrigin">New source location</param>
        /// <param name="beamRotationFromInwardNormal">Polar Azimuthal Rotational Angle of inward Normal</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected CircularSourceBase(
            double outerRadius,
            double innerRadius,
            ISourceProfile sourceProfile,
            Direction newDirectionOfPrincipalSourceAxis,
            Position translationFromOrigin,
            PolarAzimuthalAngles beamRotationFromInwardNormal,
            int initialTissueRegionIndex)
        {
            _rotationAndTranslationFlags = new SourceFlags(
                newDirectionOfPrincipalSourceAxis != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                translationFromOrigin != SourceDefaults.DefaultPosition.Clone(),
                beamRotationFromInwardNormal != SourceDefaults.DefaultBeamRoationFromInwardNormal.Clone());

            _outerRadius   = outerRadius;
            _innerRadius   = innerRadius;
            _sourceProfile = sourceProfile;
            _newDirectionOfPrincipalSourceAxis = newDirectionOfPrincipalSourceAxis.Clone();
            _translationFromOrigin             = translationFromOrigin.Clone();
            _beamRotationFromInwardNormal      = beamRotationFromInwardNormal.Clone();
            _initialTissueRegionIndex          = initialTissueRegionIndex;
        }
        /// <summary>
        /// Defines SurfaceEmittingCuboidalSourceBase class
        /// </summary>
        /// <param name="cubeLengthX">The length of the cube (along x axis)</param>
        /// <param name="cubeWidthY">The width of the cube (along y axis)</param>
        /// <param name="cubeHeightZ">The height of the cube (along z axis)</param>
        /// <param name="sourceProfile">Source Profile {Flat / Gaussian}</param>
        /// <param name="polarAngleEmissionRange">Polar angle emission range {0 - 90degrees}</param>
        /// <param name="newDirectionOfPrincipalSourceAxis">New source axis direction</param>
        /// <param name="translationFromOrigin">New source location</param>
        /// <param name="initialTissueRegionIndex">Initial tissue region index</param>
        protected SurfaceEmittingCuboidalSourceBase(
            double cubeLengthX,
            double cubeWidthY,
            double cubeHeightZ,
            ISourceProfile sourceProfile,
            DoubleRange polarAngleEmissionRange,
            Direction newDirectionOfPrincipalSourceAxis,
            Position translationFromOrigin,
            int initialTissueRegionIndex)
        {
            _rotationAndTranslationFlags = new SourceFlags(
                newDirectionOfPrincipalSourceAxis != SourceDefaults.DefaultDirectionOfPrincipalSourceAxis.Clone(),
                translationFromOrigin != SourceDefaults.DefaultPosition.Clone(),
                false);

            _cubeLengthX   = cubeLengthX;
            _cubeWidthY    = cubeWidthY;
            _cubeHeightZ   = cubeHeightZ;
            _sourceProfile = sourceProfile;
            _newDirectionOfPrincipalSourceAxis = newDirectionOfPrincipalSourceAxis.Clone();
            _polarAngleEmissionRange           = polarAngleEmissionRange.Clone();
            _translationFromOrigin             = translationFromOrigin.Clone();
            _initialTissueRegionIndex          = initialTissueRegionIndex;
        }
예제 #12
0
        public TransferStudentData(XmlElement response)
        {
            this.DailyBehaviorData      = new DailyBehaviorData();
            this.GroupActivityData      = new GroupActivityData();
            this.PublicServiceData      = new PublicServiceData();
            this.SchoolSpecialData      = new SchoolSpecialData();
            this.DailyLifeRecommendData = new DailyLifeRecommendData();
            this.AbsenceData            = new AbsenceData();
            this.MeritStatisticData     = new MeritStatisticData();
            this.SourceFlags            = new List <SourceFlag>();
            if (response == null)
            {
                return;
            }

            foreach (XmlNode node in response.SelectNodes("SemesterMoralScore"))
            {
                string schoolyear = node.SelectSingleNode("SchoolYear").InnerText;
                string semester   = node.SelectSingleNode("Semester").InnerText;

                SourceFlag sourceFlag = new SourceFlag();
                sourceFlag.SchoolYear = schoolyear;
                sourceFlag.Semester   = semester;
                XmlElement sourceElement;

                if (node.SelectSingleNode("Summary").ChildNodes.Count > 0)
                {
                    sourceFlag.Flag          = Flag.Summary;
                    sourceElement            = (XmlElement)node.SelectSingleNode("Summary");
                    sourceFlag.SourceElement = sourceElement;
                }
                else
                {
                    sourceFlag.Flag          = Flag.IntialSummary;
                    sourceElement            = (XmlElement)node.SelectSingleNode("InitialSummary");
                    sourceFlag.SourceElement = sourceElement;
                }
                SourceFlags.Add(sourceFlag);

                //處理日常生活表現
                foreach (XmlNode itemNode in node.SelectNodes("TextScore/DailyBehavior/Item"))
                {
                    XmlElement        itemElement = (XmlElement)itemNode;
                    DailyBehaviorItem item        = new DailyBehaviorItem();

                    item.SchoolYear = schoolyear;
                    item.Semester   = semester;
                    item.Degree     = itemElement.GetAttribute("Degree");
                    item.Name       = itemElement.GetAttribute("Name");
                    item.Index      = itemElement.GetAttribute("Index");
                    this.DailyBehaviorData.Items.Add(item);
                }

                //處理團隊活動表現
                foreach (XmlNode itemNode in node.SelectNodes("TextScore/GroupActivity/Item"))
                {
                    XmlElement        itemElement = (XmlElement)itemNode;
                    GroupActivityItem item        = new GroupActivityItem();

                    item.SchoolYear = schoolyear;
                    item.Semester   = semester;
                    item.Degree     = itemElement.GetAttribute("Degree");
                    item.Name       = itemElement.GetAttribute("Name");
                    item.Text       = itemElement.GetAttribute("Description");
                    this.GroupActivityData.Items.Add(item);
                }

                //處理公共服務表現
                foreach (XmlNode itemNode in node.SelectNodes("TextScore/PublicService/Item"))
                {
                    XmlElement        itemElement = (XmlElement)itemNode;
                    PublicServiceItem item        = new PublicServiceItem();

                    item.SchoolYear  = schoolyear;
                    item.Semester    = semester;
                    item.Name        = itemElement.GetAttribute("Name");
                    item.Description = itemElement.GetAttribute("Description");
                    this.PublicServiceData.Items.Add(item);
                }

                //處理校內外特殊表現
                foreach (XmlNode itemNode in node.SelectNodes("TextScore/SchoolSpecial/Item"))
                {
                    XmlElement        itemElement = (XmlElement)itemNode;
                    SchoolSpecialItem item        = new SchoolSpecialItem();

                    item.SchoolYear  = schoolyear;
                    item.Semester    = semester;
                    item.Name        = itemElement.GetAttribute("Name");
                    item.Description = itemElement.GetAttribute("Description");
                    this.SchoolSpecialData.Items.Add(item);
                }

                //日常生活表現具體建議
                //foreach (XmlNode itemNode in node.SelectNodes("TextScore/DailyLifeRecommend/Item"))
                foreach (XmlNode itemNode in node.SelectNodes("TextScore/DailyLifeRecommend"))
                {
                    XmlElement             itemElement = (XmlElement)itemNode;
                    DailyLifeRecommendItem item        = new DailyLifeRecommendItem();

                    item.SchoolYear  = schoolyear;
                    item.Semester    = semester;
                    item.Name        = itemElement.GetAttribute("Name");
                    item.Description = itemElement.GetAttribute("Description");
                    this.DailyLifeRecommendData.Items.Add(item);
                }

                //缺曠統計
                foreach (XmlNode itemNode in sourceElement.SelectNodes("AttendanceStatistics/Absence"))
                {
                    XmlElement  itemElement = (XmlElement)itemNode;
                    AbsenceItem item        = new AbsenceItem();

                    item.SchoolYear = schoolyear;
                    item.Semester   = semester;
                    item.Name       = itemElement.GetAttribute("Name");
                    item.PeriodType = itemElement.GetAttribute("PeriodType");

                    int count;
                    if (!int.TryParse(itemElement.GetAttribute("Count"), out count))
                    {
                        count = 0;
                    }
                    item.Count = count;

                    this.AbsenceData.Items.Add(item);
                }

                //懲統計
                foreach (XmlNode itemNode in sourceElement.SelectNodes("DisciplineStatistics/Demerit"))
                {
                    XmlElement         itemElement = (XmlElement)itemNode;
                    MeritStatisticItem itemA       = new MeritStatisticItem();

                    itemA.SchoolYear = schoolyear;
                    itemA.Semester   = semester;
                    itemA.MeritType  = "大過";
                    int count;
                    if (!int.TryParse(itemElement.GetAttribute("A"), out count))
                    {
                        count = 0;
                    }
                    itemA.Count = count;

                    this.MeritStatisticData.Items.Add(itemA);

                    MeritStatisticItem itemB = new MeritStatisticItem();

                    itemB.SchoolYear = schoolyear;
                    itemB.Semester   = semester;
                    itemB.MeritType  = "小過";

                    if (!int.TryParse(itemElement.GetAttribute("B"), out count))
                    {
                        count = 0;
                    }
                    itemB.Count = count;

                    this.MeritStatisticData.Items.Add(itemB);

                    MeritStatisticItem itemC = new MeritStatisticItem();

                    itemC.SchoolYear = schoolyear;
                    itemC.Semester   = semester;
                    itemC.MeritType  = "警告";

                    if (!int.TryParse(itemElement.GetAttribute("C"), out count))
                    {
                        count = 0;
                    }
                    itemC.Count = count;

                    this.MeritStatisticData.Items.Add(itemC);
                }

                //獎統計
                foreach (XmlNode itemNode in sourceElement.SelectNodes("DisciplineStatistics/Merit"))
                {
                    XmlElement         itemElement = (XmlElement)itemNode;
                    MeritStatisticItem itemA       = new MeritStatisticItem();

                    itemA.SchoolYear = schoolyear;
                    itemA.Semester   = semester;
                    itemA.MeritType  = "大功";
                    int count;
                    if (!int.TryParse(itemElement.GetAttribute("A"), out count))
                    {
                        count = 0;
                    }
                    itemA.Count = count;

                    this.MeritStatisticData.Items.Add(itemA);

                    MeritStatisticItem itemB = new MeritStatisticItem();

                    itemB.SchoolYear = schoolyear;
                    itemB.Semester   = semester;
                    itemB.MeritType  = "小功";

                    if (!int.TryParse(itemElement.GetAttribute("B"), out count))
                    {
                        count = 0;
                    }
                    itemB.Count = count;

                    this.MeritStatisticData.Items.Add(itemB);

                    MeritStatisticItem itemC = new MeritStatisticItem();

                    itemC.SchoolYear = schoolyear;
                    itemC.Semester   = semester;
                    itemC.MeritType  = "嘉獎";

                    if (!int.TryParse(itemElement.GetAttribute("C"), out count))
                    {
                        count = 0;
                    }
                    itemC.Count = count;

                    this.MeritStatisticData.Items.Add(itemC);
                }
            }
        }