2009年7月13日 星期一

搶先看!! 藥物設計 PHP讀取*.mol2藥物檔案,並且以3D結構圖形輸出

搶先看!! 藥物設計 PHP讀取*.mol2藥物檔案,並且以3D結構圖形輸出

這就是最近在研究的目標

最終目標就是用PHP寫出藥物設計DOCKING的程式出來

不過這個目標遠大

所以還是一步一步先來

首先第一個當然就是要讀取 LIGAND 和 PROTEIN 的檔案

並且能把3d圖形顯示出來

所以就先分析了一下普遍藥物LIGAND的檔案 *.mol2 檔

然後做出一些分析......

================待補齊==============

至於輸出結果為以下


寄件者 FQstory


寄件者 FQstory


Z軸為 以Z軸為不動 轉動XY平面

X軸為 以X軸為不動 轉動YZ平面

其他的就設定大小和出現位置

不過 當然 這是不能直接轉動的

因為他是PHP麻

他是以圖片輸出 然後顯示出來

=============程式碼==============

<?php

function readligand($name){

$checkprint = 0;

$i = 1;

$fp = fopen($name,"r");

$atom ='';

while(!feof($fp)){

$read = fgets($fp);

if(trim($read) == '@<TRIPOS>ATOM'){

$checkprint = 1;

}elseif(trim($read) == '@<TRIPOS>BOND'){

$checkprint = 2;

$i =1;

}elseif($checkprint > 0){

$atoms ='';

$atom = explode(" ",$read);

for($j=0;$j<count($atom);$j++){ //去除多個空白只留一個

if($atom[$j] != ''){

$atoms = $atoms.' '.$atom[$j];

}

}



$atomr[$checkprint][$i] = explode(" ",$atoms);

if($checkprint == 1){

$atomr[$checkprint][$i][3] = $atomr[$checkprint][$i][3];

$atomr[$checkprint][$i][4] = $atomr[$checkprint][$i][4];

$atomr[$checkprint][$i][5] = $atomr[$checkprint][$i][4];

//$atomr[$checkprint][$i][5] = $atomr[$checkprint][$i][5]*50+400;

}

//echo chop($read)."<br>";

$i++;

}

}

fclose($fp);

return $atomr;

}



function change($x,$y,$z,$xp,$em,$move,$theta,$phi,$turny){

//$r = sqrt($x*$x+$y*$y+$z*$z);

$theta = $theta/180*3.14;

$phi = $phi/180*3.14;

//轉Z軸

$new['x'] = $x*cos($theta)-$y*sin($theta);

$new['y'] = $x*sin($theta)+$y*cos($theta);

$new['z'] = $z;

//轉X軸

$new['x'] = $new['x'];

$new['y'] = $new['y']*cos($phi)+$new['z']*sin($phi);

$new['z'] = $new['y']*sin($phi)+$new['z']*cos($phi);

//轉Y軸

$new['x'] = $new['x']*cos($turny)+$new['z']*sin($turny);

$new['y'] = $new['y'];

$new['z'] = $new['x']*sin($turny)-$new['z']*cos($turny);

$new['x'] = $new['x']*$em+$xp/$move;

$new['y'] = $new['y']*$em+$xp/$move;

//$new['z'] = $new['z']*$xp/$em+$xp/$move;

//$new['x'] = $x*$xp/$em+$xp/$move;

//$new['y'] = $y*$xp/$em+$xp/$move;

return $new;

}



if(@$_POST['show'] == "SHOW"){

$filename = $_POST['filename'];

$theta = $_POST['theta'];

$phi =$_POST['phi'];

$turny =$_POST['turny'];

$em = $_POST['em'];//LIGAND大小,越小越大

$move = $_POST['move'];//離邊界位置 , 預設2

$xp = $_POST['xp'];//圖檔邊長(正方)



// 1.建立新影像

$im = imagecreate($xp,$xp);

// 2. 定義白色顏色的 RGB (背景顏色)

$white = imagecolorallocate($im, 255, 255, 255);

// 3. 定義黑色的 RGB (線的顏色)

$black = imagecolorallocate($im, 0, 0, 0);

$atomr = readligand($filename);//atomsread

for($i =1;$i<=count($atomr[1]);$i++){

$x = $atomr[1][$i][3];

$y = $atomr[1][$i][4];

$z = $atomr[1][$i][5];

$f = $atomr[2][$i][2];//讀取BOND

$l = $atomr[2][$i][3];//讀取BOND

$x1 = $atomr[1][$f][3];

$y1 = $atomr[1][$f][4];

$z1 = $atomr[1][$f][5];

$x2 = $atomr[1][$l][3];

$y2 = $atomr[1][$l][4];

$z2 = $atomr[1][$l][5];

$new = change($x,$y,$z,$xp,$em,$move,$theta,$phi,$turny);//dot

$newf = change($x1,$y1,$z1,$xp,$em,$move,$theta,$phi,$turny);//bond

$newl = change($x2,$y2,$z2,$xp,$em,$move,$theta,$phi,$turny);

imageline($im, $newf['x'], $newf['y'], $newl['x'], $newl['y'], $black);// 4. 開始畫線

imagesetpixel ($im,$new['x'],$new['y'],$black);//畫點

}



// 5. 做成 png 圖檔並輸出

imagejpeg($im, "draw.jpg");

// 6. 完成後將圖檔毀滅

imagedestroy($im);

echo '<img src="draw.jpg" width="'.$xp.'" height="'.$xp.'" />';

}

?>



<form id="form1" name="form1" method="post" action="readligand.php">

<p>檔案名稱:

<input name="filename" type="text" id="filename" value="<?php echo @$_POST['filename'];?>" />

<input type="submit" name="show" id="show" value="SHOW" />

</p>

<p>Z軸:

<input name="theta" type="text" id="theta" value="<?php echo @$_POST['theta'];?>" />

</p>

<p>X軸:

<input name="phi" type="text" id="phi" value="<?php echo @$_POST['phi'];?>" />

</p>

<p>Y軸:

<input name="turny" type="text" id="turny" value="<?php echo @$_POST['turny'];?>" />

</p>

<p>LIGAND SIZE:

<input name="em" type="text" id="em" value="<?php echo @$_POST['em'];?>" />

</p>

<p>邊界:

<input name="move" type="text" id="move" value="<?php echo @$_POST['move'];?>" />

預設2,為圖中心</p>

<p>檔案邊界(像素):

<input name="xp" type="text" id="xp" value="400" />

</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

</form>

已輸出至 <a href="../draw.jpg">draw.jpg</a>


=============程式碼==============

實際測試結果好像有點怪怪的
但又不知道哪邊怪怪的

================END==================

沒有留言:

張貼留言