Exemplo n.º 1
0
        public Ontology_enrichment_class Calculate_p_values_and_do_multiple_hypothesis_correction(Deg_class deg_input)
        {
            if (Options.Report)
            {
                Report_class.Write_major_separation_line();
                Report_class.WriteLine("{0}: Calculate p values and perform multiple hypothesis correction for {1}", typeof(Ontology_fisher_exact_class).Name, this.Ontology_association.Ontology);
            }
            Deg_class deg = deg_input.Deep_copy();

            deg.Keep_only_input_genes(this.Background_genes);
            this.Ontology_association.Process_gene_associations = this.Ontology_association.Process_gene_associations.OrderBy(l => l.ProcessName).ThenBy(l => l.GeneSymbol).ToArray();
            deg.Degs = deg.Degs.OrderBy(l => l.Sequencing_run).ThenBy(l => l.Cell).ThenBy(l => l.Condition1).ThenBy(l => l.Condition2).ToArray();
            int            degs_length = deg.Degs.Length;
            Deg_line_class deg_line;
            List <string>  inputGenes = new List <string>();

            Ontology_enrichment_line_class[]      add_enrichment_results;
            List <Ontology_enrichment_line_class> enrichment_results = new List <Ontology_enrichment_line_class>();

            for (int indexDeg = 0; indexDeg < degs_length; indexDeg++)
            {
                deg_line = deg.Degs[indexDeg];
                if ((indexDeg == 0) ||
                    (!deg_line.Sequencing_run.Equals(deg.Degs[indexDeg - 1].Sequencing_run)) ||
                    (!deg_line.Cell.Equals(deg.Degs[indexDeg - 1].Cell)) ||
                    (!deg_line.Condition1.Equals(deg.Degs[indexDeg - 1].Condition1)) ||
                    (!deg_line.Condition2.Equals(deg.Degs[indexDeg - 1].Condition2)))
                {
                    inputGenes.Clear();
                }
                if ((indexDeg != 0) &&
                    (!deg_line.Sequencing_run.Equals(deg.Degs[indexDeg - 1].Sequencing_run)) &&
                    (!deg_line.Cell.Equals(deg.Degs[indexDeg - 1].Cell)) &&
                    (!deg_line.Condition1.Equals(deg.Degs[indexDeg - 1].Condition1)) &&
                    (!deg_line.Condition2.Equals(deg.Degs[indexDeg - 1].Condition2)) &&
                    (deg_line.Gene.Equals(deg_line.Gene)))
                {
                    throw new Exception(); //duplicated gene in same condition
                }
                inputGenes.Add(deg_line.Gene);
                if ((indexDeg == degs_length - 1) ||
                    (!deg_line.Sequencing_run.Equals(deg.Degs[indexDeg + 1].Sequencing_run)) ||
                    (!deg_line.Cell.Equals(deg.Degs[indexDeg + 1].Cell)) ||
                    (!deg_line.Condition1.Equals(deg.Degs[indexDeg + 1].Condition1)) ||
                    (!deg_line.Condition2.Equals(deg.Degs[indexDeg + 1].Condition2)))
                {
                    add_enrichment_results = Calculate_p_values_and_do_mutliple_hypothesis_correcion_for_input_genes(inputGenes.ToArray(), deg_line);
                    enrichment_results.AddRange(add_enrichment_results);
                }
            }
            Ontology_enrichment_class onto_enrich = new Ontology_enrichment_class();

            onto_enrich.Add_to_array(enrichment_results.ToArray());
            return(onto_enrich);
        }