Compute transcriptome-wide nJSD between reference and query expression profiles.
    Attribute:
        network (str): File path to a network file.
        ref (str): File path to a reference expression file.
        query (str): File path to a query expression file.

def njsd_all(network, ref, query, file, verbose=True):
    """Compute transcriptome-wide nJSD between reference and query expression profiles.
    Attribute:
        network (str): File path to a network file.
        ref (str): File path to a reference expression file.
        query (str): File path to a query expression file.
    """
    graph, gene_set_total = util.parse_network(network)
    ref_gene_expression_dict = util.parse_gene_expression(ref, mean=True)
    query_gene_expression_dict = util.parse_gene_expression(query, mean=False)
    maximally_ambiguous_gene_experession_dict = util.get_maximally_ambiguous_network(query_gene_expression_dict)
    gene_set_present = set(query_gene_expression_dict.keys())

    with open(file, 'w') as outFile:
        print('nJSD_NT', 'nJSD_TA', 'tITH', sep='\t', file=outFile)

    normal_to_tumor_njsd = entropy.njsd(network=graph,
                                        ref_gene_expression_dict=ref_gene_expression_dict,
                                        query_gene_expression_dict=query_gene_expression_dict,
                                        gene_set=gene_set_present)

    tumor_to_ambiguous_njsd = entropy.njsd(network=graph,
                                           ref_gene_expression_dict=maximally_ambiguous_gene_experession_dict,
                                           query_gene_expression_dict=query_gene_expression_dict,
                                           gene_set=gene_set_present)
    tITH = normal_to_tumor_njsd / (normal_to_tumor_njsd + tumor_to_ambiguous_njsd)

    with open(file, 'a') as outFile:
        print(normal_to_tumor_njsd, tumor_to_ambiguous_njsd, tITH, sep='\t', file=outFile)
    return normal_to_tumor_njsd / (normal_to_tumor_njsd + tumor_to_ambiguous_njsd)