This file was automatically generated by mantidgeometry/ILL/IDF/panther_generateIDF.py
       """
validFrom = '1900-01-31 23:59:59'
geometry = MantidGeom(instrumentName, comment=comment, valid_from=validFrom)
geometry.addSnsDefaults(theta_sign_axis='x')
geometry.addComponentILL('fermi_chopper', 0.0, 0.0, -l1, 'Source')
geometry.addComponentILL('sample-position', 0.0, 0.0, 0.0, 'SamplePos')
geometry.addMonitors(names=['monitor'], distance=[monitorZ])
geometry.addDummyMonitor(0.01, 0.03)
geometry.addMonitorIds(['100000'])
geometry.addCylinderPixelAdvanced(
    'pixel', center_bottom_base={'x': 0., 'y': 0., 'z': -pixelHeight / 2.},
    axis={'x': 0., 'y': 1., 'z': 0.}, pixel_radius=pixelRadius,
    pixel_height=pixelHeight,
    algebra='pixel_shape')
root = geometry.getRoot()
bank = le.SubElement(root, 'type', name='bank')
tubes = le.SubElement(bank, 'component', type='tube')
for boxIndex, boxAngle in enumerate(boxAngles):
    for tubeIndex in range(numberOfTubesPerBox):
        tubeAngle = boxAngle - boxAngleWidth / 2. + tubeIndex * tubeAngleStep
        x = l2 * np.sin(np.deg2rad(tubeAngle))
        y = tubeVerticalShift
        z = l2 * np.cos(np.deg2rad(tubeAngle))
        attributes = {
            'x': str(x),
            'y': str(y),
            'z': str(z),
            'rot': str(tubeAngle),
            'axis-x': str(0.),
            'axis-y': str(1.),
    for i in range(NUM_DETS):
        bank = det.addComponent("bank"+str(i+1),
                                idlist="bank"+str(i+1),
                                root=doc_handle)
        log = le.SubElement(bank, "parameter", **{"name": "y"})
        le.SubElement(log, "logfile",
                      **{"id": "HB2C:Mot:detz.RBV", # detz is in mm
                         "eq": "rint(value*100)/100000", # Round to 0.01mm and convert to metres
                         "extract-single-value-as": "mean"})

        det_type = "panel"
        angle = (i)*15+7.5  # Mantid
        angle -= 0.03125*6 # Offset by six pixels
        #angle = i*15+7.5  # Flipped

        type_element = le.SubElement(det.getRoot(), "type",
                                     name="bank"+str(i+1))
        comp_element = le.SubElement(type_element, "component",
                                     type=det_type)
        location = le.SubElement(comp_element, "location")

        log = le.SubElement(location, "parameter", **{"name": "r-position"})
        le.SubElement(log, "value", **{"val": str(RADIUS)})
        log = le.SubElement(location, "parameter", **{"name": "t-position"})
        le.SubElement(log, "logfile",
                      **{"id": "HB2C:Mot:s2.RBV",
                         "eq": str(angle)+"+rint(value*1000)/1000", # Round to 1/1000 of a degree
                         "extract-single-value-as": "mean"})
        log = le.SubElement(location, "parameter", **{"name": "roty"})
        le.SubElement(log, "logfile",
                      **{"id": "HB2C:Mot:s2.RBV",
        le.SubElement(
            log,
            "logfile",
            **{
                "id": "HB2C:Mot:detz.RBV",  # detz is in mm
                "eq":
                "rint(value*100)/100000",  # Round to 0.01mm and convert to metres
                "extract-single-value-as": "mean"
            })

        det_type = "panel"
        angle = (i) * 15 + 7.5  # Mantid
        angle -= 0.03125 * 6  # Offset by six pixels
        #angle = i*15+7.5  # Flipped

        type_element = le.SubElement(det.getRoot(),
                                     "type",
                                     name="bank" + str(i + 1))
        comp_element = le.SubElement(type_element, "component", type=det_type)
        location = le.SubElement(comp_element, "location")

        log = le.SubElement(location, "parameter", **{"name": "r-position"})
        le.SubElement(log, "value", **{"val": str(RADIUS)})
        log = le.SubElement(location, "parameter", **{"name": "t-position"})
        le.SubElement(
            log,
            "logfile",
            **{
                "id": "HB2C:Mot:s2.RBV",
                "eq": str(angle) +
                "+rint(value*1000)/1000",  # Round to 1/1000 of a degree
geometry.addMonitorIds(['100000'])
geometry.addCylinderPixelAdvanced('pixel',
                                  center_bottom_base={
                                      'x': 0.,
                                      'y': -pixelHeight / 2.,
                                      'z': 0.
                                  },
                                  axis={
                                      'x': 0.,
                                      'y': 1.,
                                      'z': 0.
                                  },
                                  pixel_radius=pixelRadius,
                                  pixel_height=pixelHeight,
                                  algebra='pixel_shape')
root = geometry.getRoot()
detectorType = le.SubElement(root, 'type', name='detector')
tubes = le.SubElement(detectorType, 'component', type='tube')
for tubeIndex, tubeAngle in enumerate(tubeAngles):
    x = l2 * np.sin(-np.deg2rad(tubeAngle))
    z = l2 * np.cos(np.deg2rad(tubeAngle))
    attributes = {
        'x': str(x),
        'y': str(0.),
        'z': str(z),
        'name': 'tube_{}'.format(tubeIndex + 1)
    }
    le.SubElement(tubes, 'location', **attributes)
tubeType = le.SubElement(root, 'type', name='tube', outline='yes')
tube = le.SubElement(tubeType, 'component', type='pixel')
tube_bottom_pos = -(equator - 1) * pixelHeight