![]() | ![]() |
Please select properties from above selection. [HELP]\n"; if (empty($sp1) || empty($sp2) || empty($sp3) || $sp1==$sp2 || $sp1==$sp3 || $sp2==$sp3) { echo " "; echo "Back to qtl.pzr.uni-rostock.de"; echo ", for feedback or assistance please contact Pablo Serrano-Fernández or Steffen Möller\n"; exit; } if (empty($tol) || $tol<1000 || $tol>500000){ $tol=10000; } if (empty($metatrait)) $metatrait="EAE/MS"; if (empty($afn) || $afn<50 || $afn>100){ echo " Minimal similarity between first and second species was not properly set ('$afn'), setting it to 90 \n"; $afn=90; } if (empty($afn2) || $afn2<50 || $afn2>100){ echo "Minimal similarity between consensi of first and second species to the third was not properly set ('$afn2'), setting it to 60 \n"; $afn2=60; } $start_qtl=array(); $stop_qtl=array(); $n=array(); $a=array(); $chr=array(); $joined=array(); $sp2LinkToExpressionview=array(); $sp3LinkToExpressionview=array(); $metatrait=strtolower(substr($metatrait,0,3)); for ($i=1; $i<20; $i++) { array_push ($chr,$i); } array_push ($chr, 'X'); $match=array(); //$connect=mysql_connect("kaka.sanger.ac.uk","anonymous",""); # Use this for direct connection to ensembl.org $connect=mysql_connect("rack8.pzr.uni-rostock.de","correlation","",TRUE); if (!$connect) { echo "Could not connect to MySQL server."; exit; } if (!mysql_select_db("ensembl_compara_16_1",$connect)) { echo "Could not select database on server."; mysql_close($connect); exit; } $connectQTL=mysql_connect("rack8.pzr.uni-rostock.de","correlation","",TRUE); # now (6.4.2004) in rack8 if (!$connectQTL) { echo "Could not connect to MySQL server. "; mysql_close($connect); exit; } ######################################################### FUNCTIONS ################################################################### #######################-------- Get QTLs ---------####################### function getqtls ($db,$trait,$sp) { global $start_qtl; global $stop_qtl; global $connectQTL; global $centroid; global $metatrait; $tmp=0; if ($centroid=="on"){ if ($sp=="Homo_sapiens") $query="SELECT chr,start_centroid,stop_centroid,name,start_mrk FROM ".$metatrait."_qtl WHERE species='$sp' "; else $query="SELECT chr,start_centroid,stop_centroid,name FROM ".$metatrait."_qtl WHERE species='$sp' "; } else { if ($sp=="Homo_sapiens") $query="SELECT chr,start_bps,stop_bps,name,start_mrk FROM ".$metatrait."_qtl WHERE species='$sp' "; else $query="SELECT chr,start_bps,stop_bps,name FROM ".$metatrait."_qtl WHERE species='$sp' "; } if (!empty($trait)) $query .= " AND trait='$trait'"; $query .= " order by 1,2,3"; if (!mysql_select_db($db,$connectQTL)) { echo "Could not select database on server."; mysql_close($connect); mysql_close($connectQTL); exit; } $result=mysql_query($query,$connectQTL); if (!$result) { echo "Could not execute query '$query'"; mysql_close($connect); mysql_close($connectQTL); exit; } $ret=array(); for ($i=0; $n=mysql_fetch_row($result); $i++) { if ($n[1]>$n[2]) { $tmp=$n[1]; $n[1]=$n[2]; $n[2]=$tmp; } $ret[]=$n; } mysql_free_result ($result); return $ret; } #######################-------- Orgname 2 Genomedbid ---------####################### function orgname2genomedbid($org) { $org=str_replace("_"," ",$org); $org=strtolower($org); switch($org) { case "homo sapiens": case "human": return 1; break; case "mus musculus": case "mouse": return 2; break; case "rattus norvegicus": case "rat": return 3; break; default: return $org; } } #######################-------- Get Frags ---------####################### function getfrags ($c,$begin,$end,$orgQTL,$orgFrag,$affn) { global $connect; $query="SELECT consensusfrag.name, consensus_start, consensus_end, perc_id FROM dnafrag AS consensusfrag, genomic_align_block AS gab, dnafrag AS queryfrag WHERE consensusfrag.dnafrag_id = gab.consensus_dnafrag_id AND queryfrag.dnafrag_id = gab.query_dnafrag_id AND ( (query_start > $begin AND query_start < $end) OR (query_end > $begin AND query_end < $end) ) AND queryfrag.name='$c' AND queryfrag.genome_db_id=".orgname2genomedbid($orgQTL)." AND consensusfrag.genome_db_id=".orgname2genomedbid($orgFrag); if ($affn>=0) { $query .= " AND perc_id>$affn "; } $query .= " ORDER BY consensusfrag.name,consensus_start"; $result=mysql_query($query,$connect); if (mysql_errno($connect)) { echo "Could not execute query '$query' because of error '".mysql_error($connect)."' "; mysql_close($connect); mysql_close($connectQTL); exit; } $ret=array(); for ($i=0; $n=mysql_fetch_row($result); $i++) { $ret[]=$n; } mysql_free_result ($result); return $ret; } #######################-------- Fragment matching QTLs ---------####################### function fragmatchqtl($chr,$s,$e,$qtlsp) { $ret=array(); $resulthistory=array(); foreach ($qtlsp as $i) { $ret[0]=0; $ret[1]=0; $ret[2]=0; if($chr==$i[0]){ $ret[1]=$i[1]; $ret[2]=$i[2]; if ($s>=$i[1] && $s<=$i[2]) { $ret[0]=1; $ret[1]=$s; } if ($e>=$i[1] && $e<=$i[2]) { $ret[0]=1; $ret[2]=$e; } if ($s<=$i[1] && $e>=$i[2]) { $ret[0]=1; } if (1 == $ret[0]) { array_push($resulthistory,array("chr"=>$chr, "s"=>$ret[1], "e"=>$ret[2], "n"=>$i[3], "mrk"=>$i[4])); } } } return $resulthistory; } #######################-------- Join Fragments ---------####################### function joinfrags ($frags,$qtlsp) { $c=0; $s=0; $e=0; $min_perc_id=100; $sum_perc_id=0; $subfrags=0; $match=array(); global $tol; $reshis=array(); foreach($frags as $f) { if (0==$c) { // init, first record special case $subfrags++; $c=$f[0]; $s=$f[1]; $e=$f[2]; if (count($f)>=4) { $min_perc_id=$f[3]; $sum_perc_id=$f[3]; } } elseif ($f[0]==$c && $f[1]<=($e+$tol)) { // join of current fragment with prev $subfrags++; // incrementing counter of fragments joined $e=$f[2]; if (count($f)>=4) { if ($f[3]<$min_perc_id) $min_perc_id=$f[3]; $sum_perc_id+=$f[3]; } } else { // join not possible $match=fragmatchqtl($c,$s,$e,$qtlsp); // search for overlapping QTLs in target species array_push($reshis,array("chr"=>$c, "s"=>$s, "e"=>$e, "mc"=>$match[0]['chr'], "ms"=>$match[0]['s'], "me"=>$match[0]['e'], "mn"=>$match[0]['n'], "gen"=>$match[0]['mrk'])); $subfrags=1; // resetting counter of fragments that are joined $c=$f[0]; $s=$f[1]; $e=$f[2]; if (count($f)>=4) { $min_perc_id=$f[3]; $sum_perc_id=$f[3]; } } } // foreach $match=fragmatchqtl($c,$s,$e,$qtlsp); array_push($reshis,array("chr"=>$c, "s"=>$s, "e"=>$e, "mc"=>$match[0]['chr'], "ms"=>$match[0]['s'], "me"=>$match[0]['e'], "mn"=>$match[0]['n'], "gen"=>$match[0]['mrk'])); return $reshis; } #######################-------- Rip QTLs ---------####################### function ripqtl ($qtlsp) { $intermediate=array(); $res_qtlsp=array(); $single=array(); $intermediate=split("\n",$qtlsp); foreach ($intermediate as $q){ $single=split("\t",$q); if ($single[0]!=""){ array_push($res_qtlsp,$single); } } return $res_qtlsp; } #######################-------- Associative Array of QTLs ---------####################### function assqtl($siz,$name) { if (empty($siz) || empty($name)){ echo "Array zum assoziieren ist leer"; mysql_close($connect); mysql_close($connectQTL); exit; } $res=array(); $tmp=array(); $c1=count($siz); $c2=count($name); if ($c1!=$c2) { echo "Array zum assoziieren ist von falscher Laenge"; mysql_close($connect); mysql_close($connectQTL); exit; } for ($i=0;$i<$c1;$i++){ $tmp=array($name[$i]=>$siz[$i]); $res=array_merge($res,$tmp); } return($res); } #######################-------- Randomize QTLs ---------####################### function randomqtls($chromosomes,$qtls) { if(!is_array($chromosomes)) { echo "Chromosomes must be defined as array ID => length, not as "; print_r($chromosomes); echo " "; mysql_close($connect); mysql_close($connectQTL); exit; } $totallength=0; $res=array(); foreach($chromosomes as $n=>$l) { if ("0"==$n){ echo "oh, Chromosome==0"; mysql_close($connect); mysql_close($connectQTL); exit; } $res[$n]=intval($l/1000); } $chromosomes=$res; $res=array(); foreach($qtls as $n=>$l) { if ("0"==$n){ print_r($qtls); echo "Chromosome==0"; mysql_close($connect); mysql_close($connectQTL); exit; } $res[$n]=intval($l/1000); } $qtls=$res; $newpos=array(); foreach($chromosomes as $n=>$c) { $totallength += $c; } foreach($qtls as $n=>$l) { $newpos[$n]=array(); $newpos[$n]["sum"]=mt_rand(1,$totallength-1);#*1000; $partsum=0; foreach($chromosomes as $c=>$cl) { $partsum+=$cl; if ($partsum>$newpos[$n]["sum"]) { $newpos[$n]["n"]=$n; $newpos[$n]["l"]=$l; $newpos[$n]["c"]=$c; if (0==$c){ echo "oh, oh Chromosome=0"; mysql_close($connect); mysql_close($connectQTL); exit; } $newpos[$n]["p"]=$newpos[$n]["sum"]+$cl-$partsum; if ($newpos[$n]["p"]+$l>$cl) { $newpos[$n."'"]=array(); $newpos[$n."'"]["c"]=$c; $newpos[$n."'"]["n"]=$n; $newpos[$n."'"]["l"]=$l-($cl-$newpos[$n]["p"]); $newpos[$n."'"]["p"]=1; } break; } } $newpos[$n]["sum"]=mt_rand(1,$totallength-1);#*1000; $i++; } $qtlstring=array(); foreach ($newpos as $n=>$a) { array_push($qtlstring,$a["c"],($a["p"]*1000),(($a["p"]+$a["l"])*1000),($a["n"])); } return $qtlstring; }//function randomqtls #######################-------- Retrieve Merged! QTLs ---------####################### function retrieveqtls($organism="Mus_musculus",$db="qtl"){ global $metatrait; global $centroid; $checklist=array(); global $connectQTL; echo "metatrait:".$metatrait." "; if ($centroid=="on") $queryQTLs="SELECT chr,start_centroid,stop_centroid,name FROM "; else $queryQTLs="SELECT chr,start_bps,stop_bps,name FROM "; switch(strtolower($metatrait)) { case 'cia': $queryQTLs .= "cia_qtl"; break; case 'CIA': $queryQTLs .= "cia_qtl"; break; case 'eae': $queryQTLs .= "eae_qtl"; break; case 'EAE': $queryQTLs .= "eae_qtl"; break; case 'games': $queryQTLs .= "gam_qtl"; break; case 'GAMES': $queryQTLs .= "gam_qtl"; break; case 'ms': $queryQTLs .= "ms_qtl"; break; default: echo " Please specify metatrait. "; exit; } $queryQTLs .= " WHERE species='$organism' "; # definiere organism if (!mysql_select_db($db,$connectQTL)) { echo "Could not select database on server."; exit; } $result=mysql_query($queryQTLs,$connectQTL); if (!$result) { echo "Could not execute query for QTLs'$queryQTLs'"; exit; } $txt4screen=array(); for ($i=0; $n=mysql_fetch_row($result); $i++) { if ($n[1]>$n[2]) { $tmp=$n[1]; $n[1]=$n[2]; $n[2]=$tmp; } $txt4screen[]=$n; } mysql_free_result ($result); $txt=array(); $i=0; $rows=4; #echo "count: ".count($txt4screen); #print_r($txt4screen); for ($j=0;$jno expand"; array_push($mergedqtls,$t); } } } } }# end of while return $mergedqtls; } #######################-------- Read QTLs ---------####################### function readqtls($string) { $arr1=array(); $arr2=array(); $rows=preg_split("/[\n\r]+/",$string); $i=0; foreach ($rows as $r) { $i++; $arr1=preg_split("/[ \t]+/",$r); $arr2[$arr1[3].$i]=array($arr1[0],$arr1[1],$arr1[2],($arr1[3]."-".$i)); if ("0"==$arr1[3]) { echo "wir haben die Fehlerquelle in readqtls"; print($r); echo "arr1[0]: ".$arr1[0]."arr1[1]: ".$arr1[1]."arr1[2]: ".$arr1[2]."arr1[3]: ".$arr1[3]; exit; } } return $arr2; } ########################################## MAIN ################################################## echo " QTLs and SLs submitted"; $doit="no"; if (is_string($qtlsp1)) $doit="yes"; elseif ($metatrait!="-no") $doit="yes"; if ($doit=="yes") { # MYSQL QUERY ON QTL DBASE if (empty($qtlsp1)) $qtlsp1=getqtls("qtl","",$sp1); else $qtlsp1=ripqtl($qtlsp1); if ($sp2!="----none----") { if (empty($qtlsp2)) $qtlsp2=getqtls("qtl","",$sp2); else $qtlsp2=ripqtl($qtlsp2); } if (empty($qtlsp3)) $qtlsp3=getqtls("qtl","",$sp3); else $qtlsp3=ripqtl($qtlsp3); if ($sp2!="----none----") { $controlc=0; $controls=0; foreach ($qtlsp2 as $qsp) { if ($controlc==$qsp[0] && $controls==$qsp[1]); else { if (empty($qsp[4])) $qsp[4]=chop($qsp[3]); array_push($sp2LinkToExpressionview, array("chr"=>($qsp[0]), "name"=>(chop($qsp[4]).":".$sp2), "s"=>($qsp[1]), "e"=>($qsp[2]), "t"=>"QTL/SL region" ) ); } $controlc=$qsp[0]; $controls=$qsp[1]; } } $controlc=0; $controls=0; foreach ($qtlsp3 as $qsp) { if ($controlc==$qsp[0] && $controls==$qsp[1]); else { if (empty($qsp[4])) $qsp[4]=chop($qsp[3]); array_push($sp3LinkToExpressionview, array("chr"=>($qsp[0]), "name"=>(chop($qsp[4]).":".$sp3), "s"=>($qsp[1]), "e"=>($qsp[2]), "t"=>"QTL/SL region" ) ); } $controlc=$qsp[0]; $controls=$qsp[1]; } $consensus_locations=array(); $count_consensus=0; $count_consensus_c2=0; $bps_size_c2=0; $frag_number_c2=0; $frag_number_c3=0; $joined_frag_number_c2=0; $joined_frag_number_c3=0; } // if meta=none $control_size="no"; if (is_array($qtlsp1)){ if (count($qtlsp1)>0 && count($qtlsp3)>0) { if (count($qtlsp1[0])>3 && count($qtlsp3[0])>3) $control_size="ok"; } } ###### DISPLAY OF THE CURRENT QTLs: ####### ################ RETRIEVES THE CURRENT QTL POSITIONS (Random or not) ############## echo "\n";
if ($control_size!="ok" ){
echo "Please paste your QTLs and SLs in the corresponding textareas and click on the refresh button | "; echo " "; echo "Back to qtl.pzr.uni-rostock.de"; echo ", for feedback or assistance please contact Pablo Serrano-Fernández or Steffen Möller\n"; exit; } # MYSQL QUERY ON COMPARA DBASE , FRAGMENTS JOINING , DISPLAY echo "
no match | ";
}
echo "Consensi in ".$$org."\n";
echo " |
Consensus genes
Summary\n";
echo " |
"; echo " "; echo " Back to qtl.pzr.uni-rostock.de, for feedback or assistance please contact "; echo "Pablo Serrano-Fernández or Steffen Möller\n"; mysql_close($connect); ?> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||