def STL_receiver(rec_param, hemisphere='North'):
    """
    hemishpere : 'North' or 'South' hemisphere of the earth where the field located
                if North: the field is in the positive y direction
                if South: the field is in the negtive y direction
                this will influence:
                 (1) the setting of the receiver tilt angle, 
                     if the front surface always facing to the field is desirable
                 (2) the position of the virtual target
    """
    rec_w = rec_param[0].astype(float)
    rec_h = rec_param[1].astype(float)
    stlfile = rec_param[2]
    x = rec_param[3].astype(float)
    y = rec_param[4].astype(float)
    z = rec_param[5].astype(float)
    tilt = rec_param[6].astype(float)
    entt = ''
    entt += '\n- entity:\n'
    entt += '    name: STL_receiver_e\n'
    entt += '    primary: 0\n'
    if hemisphere == 'North':
        entt += '    transform: { translation: %s, rotation: %s }\n' % ([x,
            y, z], [-90.0 - tilt, 0, 0])
    else:
        entt += '    transform: { translation: %s, rotation: %s }\n' % ([x,
            y, z], [180.0 + tilt, 0, 0])
    entt += '    geometry:\n'
    entt += '    - material: *material_target\n'
    entt += '      transform: {translation: [0, 0, 0], rotation: [0, 0, 0]}\n'
    entt += '      stl : {path: %s }  \n' % stlfile
    pts = [[-rec_w * 10.0, -rec_h * 10.0], [-rec_w * 10.0, rec_h * 10.0], [
        rec_w * 10.0, rec_h * 10.0], [rec_w * 10.0, -rec_h * 10.0]]
    slices = 4
    entt += '\n- entity:\n'
    entt += '    name: virtual_target_e\n'
    entt += '    primary: 0\n'
    if hemisphere == 'North':
        entt += '    transform: { translation: %s, rotation: %s }\n' % ([x,
            y - 5.0, z], [-90.0 - tilt, 0, 0])
    else:
        entt += '    transform: { translation: %s, rotation: %s }\n' % ([x,
            y + 5.0, z], [90.0 + tilt, 0, 0])
    entt += '    geometry: \n'
    entt += '      - material: *%s\n' % 'material_virtual'
    entt += '        plane: \n'
    entt += '          clip: \n'
    entt += '          - operation: AND \n'
    entt += '            vertices: %s\n' % pts
    entt += '          slices: %d\n' % slices
    rcv = ''
    rcv += '- name: STL_receiver_e \n'
    rcv += '  side: %s \n' % 'FRONT_AND_BACK'
    rcv += '  per_primitive: %s \n' % 'INCOMING_AND_ABSORBED'
    rcv += '- name: virtual_target_e \n'
    rcv += '  side: %s \n' % 'FRONT'
    rcv += '  per_primitive: %s \n' % 'INCOMING'
    return entt, rcv
