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); }