Predict the binding score for the normal counterparts of the peptides in mhc_dict and then
    return the results in a properly formatted structure.

    :param str binding_result: The results from running predict_mhci_binding or
           predict_mhcii_binding on a single allele
    :param dict transgened_files: A dictionary containing the jobstore IDs for "T_<peplen>_mer.faa"
           and "N_<peplen>_mer.faa"
    :param str allele: The allele to get binding for
    :param str peplen: The peptide length
    :param dict univ_options: Dict of universal options used by almost all tools
    :param dict mhc_options: Options specific to mhci or mhcii binding predictions
    :return: A fully filled out mhc_dict with normal information
             output_dict:
                |- 'tumor': fsID
                +- 'normal': fsID or (fsID, str)     -- Depending on MHCI or MHCII
    :rtype: dict

def predict_normal_binding(job, binding_result, transgened_files, allele, peplen, univ_options,
                           mhc_options):
    """
    Predict the binding score for the normal counterparts of the peptides in mhc_dict and then
    return the results in a properly formatted structure.

    :param str binding_result: The results from running predict_mhci_binding or
           predict_mhcii_binding on a single allele
    :param dict transgened_files: A dictionary containing the jobstore IDs for "T_<peplen>_mer.faa"
           and "N_<peplen>_mer.faa"
    :param str allele: The allele to get binding for
    :param str peplen: The peptide length
    :param dict univ_options: Dict of universal options used by almost all tools
    :param dict mhc_options: Options specific to mhci or mhcii binding predictions
    :return: A fully filled out mhc_dict with normal information
             output_dict:
                |- 'tumor': fsID
                +- 'normal': fsID or (fsID, str)     -- Depending on MHCI or MHCII
    :rtype: dict
    """
    work_dir = os.getcwd()
    results = pandas.DataFrame(columns=['allele', 'pept', 'tumor_pred', 'core'])
    input_files = get_files_from_filestore(job, transgened_files, work_dir)
    iars = read_fastas(input_files)
    if peplen == '15':  # MHCII
        mhc_file = job.fileStore.readGlobalFile(binding_result[0],
                                                os.path.join(work_dir, 'mhci_results'))
        predictor = binding_result[1]
        core_col = None  # Variable to hold the column number with the core
        if predictor is None:
            return {'tumor': None,
                    'normal': None,
                    'predictor': None}
        elif predictor == 'Consensus':
            results = _process_consensus_mhcii(mhc_file)
            results, peptides = _get_normal_peptides(job, results, iars, peplen)
            with open('peptides.faa', 'w') as pfile:
                for pept in peptides:
                    print('>', pept, '\n', pept, sep='', file=pfile)
            peptfile = job.fileStore.writeGlobalFile(pfile.name)
            with open('results.json', 'w') as rj:
                json.dump(results.to_json(), rj)
            return {'tumor': job.fileStore.writeGlobalFile(rj.name),
                    'normal': job.addChildJobFn(predict_mhcii_binding, peptfile, allele,
                                                univ_options, mhc_options, disk='100M',
                                                memory='100M', cores=1).rv(),
                    'predictor': 'Consensus'}
        elif predictor == 'Sturniolo':
            results = _process_sturniolo_mhcii(mhc_file)
            results, peptides = _get_normal_peptides(job, results, iars, peplen)
            with open('peptides.faa', 'w') as pfile:
                for pept in peptides:
                    print('>', pept, '\n', pept, sep='', file=pfile)
            peptfile = job.fileStore.writeGlobalFile(pfile.name)
            with open('results.json', 'w') as rj:
                json.dump(results.to_json(), rj)
            return {'tumor': job.fileStore.writeGlobalFile(rj.name),
                    'normal': job.addChildJobFn(predict_mhcii_binding, peptfile, allele,
                                                univ_options, mhc_options, disk='100M',
                                                memory='100M', cores=1).rv(),
                    'predictor': 'Sturniolo'}
        elif predictor == 'netMHCIIpan':
            results = _process_net_mhcii(mhc_file)
            results, peptides = _get_normal_peptides(job, results, iars, peplen)
            with open('peptides.faa', 'w') as pfile:
                for pept in peptides:
                    print('>', pept, '\n', pept, sep='', file=pfile)
            peptfile = job.fileStore.writeGlobalFile(pfile.name)
            with open('results.json', 'w') as rj:
                json.dump(results.to_json(), rj)
            return {'tumor': job.fileStore.writeGlobalFile(rj.name),
                    'normal': job.addChildJobFn(predict_netmhcii_binding, peptfile, allele,
                                                univ_options, mhc_options['netmhciipan'],
                                                disk='100M', memory='100M',
                                                cores=1).rv(),
                    'predictor': 'netMHCIIpan'}
        else:
            raise RuntimeError('Shouldn\'t ever see this!!!')

    else:  # MHCI
        mhc_file = job.fileStore.readGlobalFile(binding_result,
                                                os.path.join(work_dir, 'mhci_results'))
        results = _process_mhci(mhc_file)
        results, peptides = _get_normal_peptides(job, results, iars, peplen)
        with open('peptides.faa', 'w') as pfile:
            for pept in peptides:
                print('>', pept, '\n', pept, sep='', file=pfile)
        peptfile = job.fileStore.writeGlobalFile(pfile.name)
        with open('results.json', 'w') as rj:
            json.dump(results.to_json(), rj)
        job.fileStore.logToMaster('Ran predict_normal_binding on %s for allele %s and length %s '
                                  'successfully' % (univ_options['patient'], allele, peplen))
        return {'tumor': job.fileStore.writeGlobalFile(rj.name),
                'normal': job.addChildJobFn(predict_mhci_binding, peptfile, allele, peplen,
                                            univ_options, mhc_options, disk='100M', memory='100M',
                                            cores=1).rv()}