如何使用pixelmed(java)访问嵌套序列中的dicom属性?

如何使用pixelmed(java)访问嵌套序列中的dicom属性?,java,sequence,dicom,pixelmed,Java,Sequence,Dicom,Pixelmed,我需要访问BeamSequence属性中每个ControlPointSequence属性中的所有甘特角度值 下面是嵌套的快速可视化 Beam Sequence ... Control Point Sequence Gantry Angle ... ... Control Point Sequence Gantry Angle ... ... Control Point Sequence

我需要访问BeamSequence属性中每个ControlPointSequence属性中的所有甘特角度值

下面是嵌套的快速可视化

Beam Sequence
    ...
    Control Point Sequence
        Gantry Angle
        ...
    ...
    Control Point Sequence
        Gantry Angle
        ...
    ...
    Control Point Sequence
        Gantry Angle
    ...
如何使用库访问每个机架角度

编辑:

多亏了cnellar的帮助,以下是最终的效果

private ArrayList<Double> getAngles( SequenceAttribute beamSequence ) {
ArrayList<Double> n = new ArrayList<Double>();

Iterator is = beamSequence.iterator();
while (is.hasNext()) {
    SequenceItem item = (SequenceItem)is.next();
    if (item != null) { 
        AttributeList itemList = item.getAttributeList();
        if (itemList != null) {
            SequenceAttribute ctrlPoint = (SequenceAttribute)itemList.get( TagFromName.ControlPointSequence );
            //System.out.print(ctrlPoint);
            Iterator is1 = ctrlPoint.iterator();
            while (is1.hasNext()) {
                SequenceItem item1 = (SequenceItem)is1.next();
                if (item1 != null) { 
                    AttributeList itemList1 = item1.getAttributeList();
                    if (itemList1 != null) {

                        Attribute gantry_angle = itemList1.get( TagFromName.GantryAngle );
                        if(gantry_angle!=null)
                            n.add(gantry_angle.getSingleDoubleValueOrDefault(0));


                    }
                }

            }



        }
    }
}
return n;
private ArrayList getAngles(SequenceAttribute-beamSequence){
ArrayList n=新的ArrayList();
迭代器is=beamSequence.Iterator();
while(is.hasNext()){
SequenceItem=(SequenceItem)为.next();
如果(项!=null){
AttributeList itemList=item.getAttributeList();
if(itemList!=null){
SequenceAttribute ctrlPoint=(SequenceAttribute)itemList.get(TagFromName.ControlPointSequence);
//系统输出打印(ctrlPoint);
迭代器is1=ctrlPoint.Iterator();
while(is1.hasNext()){
SequenceItem1=(SequenceItem)为1.next();
如果(item1!=null){
AttributeList itemList1=item1.getAttributeList();
if(itemList1!=null){
属性tangle\u angle=itemList1.get(TagFromName.GantryAngle);
if(机架角度!=null)
n、 添加(龙门架角度。GetSingleDoubleValuerDefault(0));
}
}
}
}
}
}
返回n;

}

我希望有这样的事情:

private double[] getAngles( SequenceAttribute beamSequence ) {

Iterator is = beamSequence.iterator();
while (is.hasNext()) {
    SequenceItem item = (SequenceItem)is.next();
    if (item != null) { 
        AttributeList itemList = item.getAttributeList();
        if (itemList != null) {
            Attribute ctrlPoint = itemList.get( TagFromName.ControlPointSequence );

            // Do the same sifting through this sequence to get your gantry angle
            // and add it to your list of values.
        }
    }
}

检查一下我刚刚发布的编辑,我想我几乎有了它,“这是打破”不是很描述性。还要注意的是,机架角度的VR为DS,所以你应该使用double而不是float。算了吧。控制点序列中有2组,机架角度仅出现在第一组中,因此它在迭代第一个项目时将其添加,然后在第二个项目上断开。我把最后的代码放在编辑栏里。谢谢