/** * Get synthenies between two sets of grouped loci. * * @param $qtldb database for eQTL * @param $comparadb * @param $groups1 * = groupnr -> ('loci' -> lociOfGroup, 'start', 'end', 'Chr') * @param $groups2 * = groupnr -> ('loci' -> lociOfGroup, 'start', 'end', 'Chr') * @param $species_names * at pos. 0 is name of species one, at pos 1 is name of species 2 * @param $genome_db_ids * at pos. 0 is genome_db_id of species one, at pos 1 is genome_db_id of species 2 * @param $databases * at pos. 0 is database of species one, at pos 1 is database of species 2 * */ function getSyntenyGroups($qtldbs, $comparadb, $groups1, $groups2, $species_names, $genome_db_ids, $databases) { $synteny_ex1 = array(); $result = array(); useDB($databases[0], $qtldbs[0]); $bps1 = groups2bps($qtldbs[0], $groups1, $species_names[0]); useDB($databases[1], $qtldbs[1]); $bps2 = groups2bps($qtldbs[1], $groups2, $species_names[1]); $dnafragids1 = get_dnafragids($comparadb, $genome_db_ids[0], get_chromo_names_from_group($groups1)); $dnafrag2name = get_all_dnafragids($comparadb, $genome_db_ids[1]); $group2region = array(); for ($i = 0; $i < sizeof($bps1); $i++) { $group2region[$i] = getGroupSyntenyIDs($comparadb, $bps1[$i], $dnafragids1[$groups1[$i]['Chr']], $dnafrag2name, $species_names[1]); } $synteny1to2 = array(); foreach ($group2region as $group1nr => $regions) { $synteny1to2[$group1nr] = array(); foreach ($regions as $region) { foreach ($groups2 as $group2nr => $group2) { if ($group2['Chr'] == $region['chr']) { if ($group2['start'] <= $region['end'] && $group2['end'] >= $region['start']) { //add the groupnumber $synteny1to2[$group1nr][] = $group2nr; //filter array for duplicate entries $synteny1to2[$group1nr] = array_unique($synteny1to2[$group1nr]); } } } } } return $synteny1to2; }
$sql = 'select Name from ' . $db1 . '.locus where Chr = ' . $chr1 . ' and cMorgan >= ' . $start1 . ' and cMorgan <= ' . $end1 . ';'; $loci_ex1 = get_only_loci_from_sql($sql, $experiment1['connection']); $db2 = $experiment2["db_name"]; $sql = 'select Name from ' . $db2 . '.locus where Chr = ' . $chr2 . ' and cMorgan >= ' . $start2 . ' and cMorgan <= ' . $end2 . ';'; $loci_ex2 = get_only_loci_from_sql($sql, $experiment2['connection']); // Loci to genes useDB($db1, $experiment1['connection']); $loci2stable_ids_ex1 = loci2stable_ids($loci_ex1, $experiment1['connection']); $unique_ens_ids_ex1 = get_unique_vals_from_2d_array($loci2stable_ids_ex1[0]); useDB($db2, $experiment2['connection']); $loci2stable_ids_ex2 = loci2stable_ids($loci_ex2, $experiment2['connection']); $unique_ens_ids_ex2 = get_unique_vals_from_2d_array($loci2stable_ids_ex2[0]); //exit('Exit: Debbuging in compara.php!'); // HOMOLOGY => do it on the fewer genes $n_ens_ids_ex1 = sizeof($unique_ens_ids_ex1); $n_ens_ids_ex2 = sizeof($unique_ens_ids_ex2); $traits12traits2 = array(); if ($n_ens_ids_ex1 < $n_ens_ids_ex2) { // homology on experiment 1 $homology_ex1 = get_homologue_ens_ids($compara, $unique_ens_ids_ex1, $experiment2['ensembl_species']); //intersection foreach ($homology_ex1 as $unique_id_ex1 => $corr_homologue_ens_ids_ex2) { $intersect = array_intersect(array_keys($corr_homologue_ens_ids_ex2), $unique_ens_ids_ex2); foreach ($intersect as $id_ex2) { $traits12traits2[$unique_id_ex1][$id_ex2] = $corr_homologue_ens_ids_ex2[$id_ex2];
} // display arguments: //include 'display_args.php'; // SYNTENY $species_names = array("Mus musculus", "Rattus norvegicus"); $genome_db_ids = array(57, 3); $dbs = array('eqtl_rostock_eae', 'eqtl_stockholm_eae_logplier'); $synteny_ex12ex2 = getSynteny($qtldb, $compara, $loci_ex1, $loci_ex2, $species_names, $genome_db_ids, $dbs); // Loci to genes //"Mus musculus" useDB('eqtl_rostock_eae', $qtldb); //loci2stable_ $loci2stable_ids_ex1 = loci2stable_ids($loci_ex1, $qtldb); $unique_ens_ids_ex1 = get_unique_vals_from_2d_array($loci2stable_ids_ex1[0]); //"Rat" useDB('eqtl_stockholm_eae_logplier', $qtldb); $loci2stable_ids_ex2 = loci2stable_ids($loci_ex2, $qtldb); $unique_ens_ids_ex2 = get_unique_vals_from_2d_array($loci2stable_ids_ex2[0]); // HOMOLOGY => do it on the fewer $n_loci_ex1 = sizeof($unique_ens_ids_ex1); $n_loci_ex2 = sizeof($unique_ens_ids_ex2); $traits12traits2 = array(); if ($n_loci_ex1 < $n_loci_ex2) { $homology_ex1 = get_homologue_ens_ids($compara, $unique_ens_ids_ex1, $genome_db_ids[1]); //intersection foreach ($homology_ex1 as $unique_id_ex1 => $corr_homologue_ens_ids_ex1) { $traits12traits2[$unique_id_ex1] = array_intersect($corr_homologue_ens_ids_ex1, $unique_ens_ids_ex2); } } else { $homology_ex2 = get_homologue_ens_ids($compara, $unique_ens_ids_ex2, $genome_db_ids[0]); //intersection
//getChromosoms($compara, $experiment1['genome_db_id']); //initialize array for mapping groupnumbers to regions $group2region2 = array(); $ex2 = get_loci_from_sql($database2, $experiment2['connection'], 'wholeGenome', $chromosomsEx2, $confidence_int, $group2region2); // converts $ex2 in 2 arrays: $groups2 = groupnr -> ('loci' -> lociOfGroup, 'start', 'end') $mapEx2 = index -> (locus,groupNr) list($groups2, $mapEx2) = $ex2; // generates an arrays with index -> locinames $loci_ex2 = array_map('current', $mapEx2); // SYNTENY $genome_db_ids = getGenomeDBIDs($compara, array($experiment1['ensembl_species'], $experiment2['ensembl_species'])); $groupSynteny_ex12ex2 = getSyntenyGroups(array($experiment1['connection'], $experiment2['connection']), $compara, $groups1, $groups2, $species_names, $genome_db_ids, $dbs); // h**o useDB($database1, $experiment1['connection']); $loci2stable_ids_ex1 = loci2stable_ids($loci_ex1, $experiment1['connection']); $unique_ens_ids_ex1 = get_unique_vals_from_2d_array($loci2stable_ids_ex1[0], $n_qtls1); useDB($database2, $experiment2['connection']); $loci2stable_ids_ex2 = loci2stable_ids($loci_ex2, $experiment2['connection']); $n_qtls2 = 0; $unique_ens_ids_ex2 = get_unique_vals_from_2d_array($loci2stable_ids_ex2[0], $n_qtls2); // HOMOLOGY => do it on the fewer genes $n_ens_ids_ex1 = sizeof($unique_ens_ids_ex1); $n_ens_ids_ex2 = sizeof($unique_ens_ids_ex2); $traits12traits2 = array(); //$cnt_homo = array(); if ($n_ens_ids_ex1 < $n_ens_ids_ex2) { // homology on experiment 1 $homology_ex1 = get_homologue_ens_ids($compara, $unique_ens_ids_ex1, $experiment2['ensembl_species']); //intersection foreach ($homology_ex1 as $unique_id_ex1 => $corr_homologue_ens_ids_ex2) { $intersect = array_intersect(array_keys($corr_homologue_ens_ids_ex2), $unique_ens_ids_ex2); foreach ($intersect as $id_ex2) {