def parse_config_file(job, config_file):
    job.fileStore.logToMaster('Parsing config file')
    config_file = os.path.abspath(config_file)
    if not os.path.exists(config_file):
        raise ParameterError('The config file was not found at specified location. Please verify ' +
                             'and retry.')
    sample_set = defaultdict()
    univ_options = defaultdict()
    tool_options = defaultdict()
    with open(config_file, 'r') as conf:
        for line in conf:
            line = line.strip()
            if line.startswith('
                continue
            if line.startswith('BEGIN'):
                break
        for groupname, group_params in tool_specific_param_generator(job, conf):
            if groupname == 'patient':
                if 'patient_id' not in group_params.keys():
                    raise ParameterError('A patient group is missing the patient_id flag.')
                sample_set[group_params['patient_id']] = group_params
            elif groupname == 'Universal_Options':
                univ_options = group_params
                required_options = {'java_Xmx', 'output_folder', 'storage_location'}
                missing_opts = required_options.difference(set(univ_options.keys()))
                if len(missing_opts) > 0:
                    raise ParameterError(' The following options have no arguments in the config '
                                         'file :\n' + '\n'.join(missing_opts))
                if univ_options['sse_key_is_master']:
                    assert univ_options['sse_key_is_master'] in ('True', 'true', 'False', 'false')
                    univ_options['sse_key_is_master'] = \
                        univ_options['sse_key_is_master'] in ('True', 'true')
            else:
                tool_options[groupname] = group_params
    required_tools = {'cutadapt', 'bwa', 'star', 'phlat', 'transgene', 'mut_callers', 'rsem',
                      'mhci', 'mhcii', 'snpeff', 'rank_boost'}
    missing_tools = required_tools.difference(set(tool_options.keys()))
    if len(missing_tools) > 0:
        raise ParameterError(' The following tools have no arguments in the config file : \n' +
                             '\n'.join(missing_tools))
    for patient_id in sample_set.keys():
        job.addFollowOnJobFn(pipeline_launchpad, sample_set[patient_id], univ_options, tool_options)
    return None