<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def process_vts_params(self, scanner_vts):
 """ Receive an XML object with the Vulnerability Tests an their parameters to be use in a scan and return a dictionary. @param: XML element with vt subelements. Each vt has an id attribute. Optional parameters can be included as vt child. Example form: <vt_selection> <vt_single id='vt1' /> <vt_single id='vt2'> <vt_value id='param1'>value</vt_value> </vt_single> <vt_group filter='family=debian'/> <vt_group filter='family=general'/> </vt_selection> @return: Dictionary containing the vts attribute and subelements, like the VT's id and VT's parameters. Example form: {'vt1': {}, 'vt2': {'value_id': 'value'}, 'vt_groups': ['family=debian', 'family=general']} """

        vt_selection = {}
        filters = list()
        for vt in scanner_vts:
            if vt.tag == 'vt_single':
                vt_id = vt.attrib.get('id')
                vt_selection[vt_id] = {}
                for vt_value in vt:
                    if not vt_value.attrib.get('id'):
                        raise OSPDError('Invalid VT preference. No attribute id',
                                        'start_scan')
                    vt_value_id = vt_value.attrib.get('id')
                    vt_value_value = vt_value.text if vt_value.text else ''
                    vt_selection[vt_id][vt_value_id] = vt_value_value
            if vt.tag == 'vt_group':
                vts_filter = vt.attrib.get('filter', None)
                if vts_filter is None:
                    raise OSPDError('Invalid VT group. No filter given.',
                                    'start_scan')
                filters.append(vts_filter)
        vt_selection['vt_groups'] = filters
        return vt_selection