info = instr.addDetectorIds('Group%d' % (i+1), [start, stop, None])

    for i, _ in enumerate(num_banks):
        group = 'Group%d' % (i+1)
        group = instr.addComponent(group, idlist=group)

    ####################
    # group 1 is banks 1-14 (inclusive)
    bank_offset = 0
    group = instr.makeTypeElement('Group1')
    for i in range(num_banks[0]):
        bank_num = bank_offset + i + 1
        bank = "bank%d" % bank_num
        corners = getCorners(bank_num)
        rect = getRectangle(bank_num, positions, corners)
       	det = instr.makeDetectorElement('pack', root=group)
       	rect.makeLocation(instr, det, bank)

    # group 2 is banks 15-37 (inclusive)
    bank_offset += num_banks[0]
    group = instr.makeTypeElement('Group2')
    for i in range(num_banks[1]):
        bank_num = bank_offset+i+1
        bank = "bank%d" % bank_num
        corners = getCorners(bank_num)
        # appears to be backwards!!!!!!!!!!!!!!!!
        corners = [corners[1], corners[0], corners[3], corners[2]]
        rect = getRectangle(bank_num, positions, corners)
       	det = instr.makeDetectorElement('pack', root=group)
       	rect.makeLocation(instr, det, bank)
                    ysize      = -1.*TUBE_LENGTH,
                    ystartdiff = -1.*TUBE_LENGTH/128.,
                    debug=False)
    pack1.setNames(pixel="onepixel", tube="tubedecreasing", pack="packdecreasing")

    group1 = instr.makeTypeElement("Group1")
    for i in range(n_first):
        offset = i*8*128
        bank = "bank%d" % (i+1)
        rect = Rectangle(
                         (-y[offset+UL], x[offset+UL], z[offset+UL]),
                         (-y[offset+LL], x[offset+LL], z[offset+LL]),
                         (-y[offset+LR], x[offset+LR], z[offset+LR]),
                         (-y[offset+UR], x[offset+UR], z[offset+UR])
                         )
       	det = instr.makeDetectorElement(pack1.namepack, root=group1)
       	rect.makeLocation(instr, det, bank)

    # ---------- add in group2
    """
;;; source idl code
N_second=23
;z0_second=5.05/8.45*3.2
;x0_second=2.24/8.45*3.2
;z1_second=2.54/8.45*3.2
;x1_second=2.24/8.45*3.2
z0_second=5.09/7.06*2.7-0.0095
x0_second=2.22/7.06*2.7
z1_second=2.45/7.06*2.7+0.0095
x1_second=2.22/7.06*2.7
dx_second=x1_second-x0_second
                    ysize=-1. * TUBE_LENGTH,
                    ystartdiff=-1. * TUBE_LENGTH / 128.,
                    debug=False)
    pack1.setNames(pixel="onepixel",
                   tube="tubedecreasing",
                   pack="packdecreasing")

    group1 = instr.makeTypeElement("Group1")
    for i in range(n_first):
        offset = i * 8 * 128
        bank = "bank%d" % (i + 1)
        rect = Rectangle((-y[offset + UL], x[offset + UL], z[offset + UL]),
                         (-y[offset + LL], x[offset + LL], z[offset + LL]),
                         (-y[offset + LR], x[offset + LR], z[offset + LR]),
                         (-y[offset + UR], x[offset + UR], z[offset + UR]))
        det = instr.makeDetectorElement(pack1.namepack, root=group1)
        rect.makeLocation(instr, det, bank)

    # ---------- add in group2
    """
;;; source idl code
N_second=23
;z0_second=5.05/8.45*3.2
;x0_second=2.24/8.45*3.2
;z1_second=2.54/8.45*3.2
;x1_second=2.24/8.45*3.2
z0_second=5.09/7.06*2.7-0.0095
x0_second=2.22/7.06*2.7
z1_second=2.45/7.06*2.7+0.0095
x1_second=2.22/7.06*2.7
dx_second=x1_second-x0_second
    for i, _ in enumerate(num_banks):
        group = 'Group%d' % (i + 1)
        # set blank_location=False to add <location/> tag to component
        group = instr.addComponent(group, idlist=group, blank_location=False)

    ####################
    # group 1 is banks 1-14 (inclusive)
    bank_offset = 0
    group = instr.makeTypeElement('Group1')
    for i in range(num_banks[0]):
        bank_num = bank_offset + i + 1
        bank = "bank%d" % bank_num
        corners = getCorners(bank_num)
        rect = getRectangle(bank_num, positions, corners)
        det = instr.makeDetectorElement('pack', root=group)
        rect.makeLocation(instr, det, bank)

    # group 2 is banks 15-37 (inclusive)
    bank_offset += num_banks[0]
    group = instr.makeTypeElement('Group2')
    for i in range(num_banks[1]):
        bank_num = bank_offset + i + 1
        bank = "bank%d" % bank_num
        corners = getCorners(bank_num)
        # appears to be backwards!!!!!!!!!!!!!!!!
        corners = [corners[1], corners[0], corners[3], corners[2]]
        rect = getRectangle(bank_num, positions, corners)
        det = instr.makeDetectorElement('pack', root=group)
        rect.makeLocation(instr, det, bank)
    createdcolumns = dict()
    for name in banks.keys():
        offset = (int(name)-1) * 15000
        column, rect =  banks[name]
        name = 'bank'+str(name)

        # create the column if it doesn't already exist
        if column in createdcolumns:
            col = createdcolumns[column]
        else:
            col = instr.makeTypeElement(str(column))
            createdcolumns[column] = col

        extra_attrs={"idstart":offset, 'idfillbyfirst':'y', 'idstepbyrow':y_num2}
        det = instr.makeDetectorElement('panel_v2', root=col, extra_attrs=extra_attrs)
        rect.makeLocation(instr, det, name)

    # add the panel shape
    instr.addComment(" Version 2 Detector Panel (7x154)")
    x_delta2 = x_extent/float(x_num2)
    x_offset2 = x_delta2*(1.-float(x_num2))/2.
    y_delta2 = y_extent/float(y_num2)
    y_offset2 = y_delta2*(1.-float(y_num2))/2.
    det = instr.makeTypeElement("panel_v2",
                                extra_attrs={"is":"rectangular_detector", "type":"pixel_v2",
                                             "xpixels":x_num2, "xstart":x_offset2, "xstep":x_delta2,
                                             "ypixels":y_num2, "ystart":y_offset2, "ystep":y_delta2
                                             })
    le.SubElement(det, "properties")