Perlで多次元配列がいじれるらしい
昨晩、遅くまでNMR測定していたので、今朝は神戸からの出勤。昼過ぎ、とある西神戸の実験機器メーカーの人(もと大学院生のひと)が面白い試料をもって遊びにきてくれる。なかなか面白い試料だなあ。で、そのあと3時間以上かかって会議があって、それが終わってからデスクワークをこなして・・・・そして。ひさしぶりにPerlのスクリプトで遊んでみるO先生に依頼された天然変性タンパク質の統計解析の続きが気になったので自宅でLinuxをいじりはじめたのであった。で、例の解析を二面角座標空間に拡張してみたらどうなるかというのを考えた。で、どうやればいいのかと考えたとき、割と簡単にPDBをPHI/PSIだけの二面角座標に書き換える応報を思いついたので試してみたら、うまくいったのでここにかいておく。(1)PDBファイルを主鎖heavy atomだけにする(gawkを使う)(2)それをmolmolで読み込ませる(3)WriteAngでDYANA形式二面角ファイル(*.cor format)に書き出すと、PHI/PSIの表になっているのであった。実際にはshell scriptを使って、まず全てのファイルに対して処理を行うmolmolのマクロを作成して、molmolを1回だけ立ち上げてXUserMac で一撃である。あとは、Perlで二次元配列をつくれるというのと(こんなかんじ my @Array = ();$Array[0][0] = "a";$Array[0][2] = "b";$Array[1][1] = "c";$Array[2][0] = "d";$Array[2][3] = "e";)総和や平均や標準偏差を計算する簡単な関数をウェブ上で手に入れたということとmore math.pl test.pl::::::::::::::math.pl::::::::::::::package math;sub sum{ my $sum=0; $??????@_; for($i=0;$i<$n;$i++){ $sum+=$_[$i]; } return($sum);}sub mean{ $goukei=sum(@_); $??????@_; $mean=$goukei/$n; return($mean);}sub var{ my $mean=mean(@_); my $??????@_; my $sum=0; for($i=0;$i<$n;$i++){ $sum+=($_[$i]-$mean)**2; } $var=$sum/($n-1); return($var);}sub stdev{ my $var=var(@_); $sd=sqrt($var); return($sd);}1;::::::::::::::test.pl::::::::::::::#!/usr/bin/perl@dat=(1,2,3,4,5,6,7,8,9,10);require("/home/piyota0/JUNK/120410/math.pl");my $x=math::sum(@dat);my $y=math::mean(@dat);my $z=math::var(@dat);my $a=math::stdev(@dat);print $x, " ", $y, " ",$z, " ",$a,"\n";1;具体的にはこの二つでなんなく実現できそうである。ちなみにN末端C末端の残基にはそれぞれPSI/PHIしかないのとPROにもPSIしかないことに注意すべし。わーいブログ村で田舎暮らし・自然満喫のブログを探してみる