2012-01-02 4 views
2

AWKスクリプトでは、スコアに応じてシーケンスを色づけします。 RGBモードで残基を色付けします。これらのシーケンスは、いくつかのソフトウェアを使用して視覚化できます。スクリプトの色は高いスコアの範囲では赤、中程度では緑、低い範囲では白です。低範囲では赤、中間では青、言い換えればスクリプトを欲しがるように変更したい私は生物学者であり、どのようにawkが動作するのかわかりません。私を助けてください。awkプログラムを変更して、値に基づいてシーケンスに色を割り当てます

着色はこれに基づいています。 http://www.pymolwiki.org/index.php/Spectrum

/usr/bin/awk -v aa_shift=$2 ' 

BEGIN{ 
     r1=1; g1=1; b1=1; 
     r2=1; g2=1; b2=0; 
     r3=1; g3=0; b3=0; 

    maxfrq=-1*10000; 
    minfrq=1*10000; 
    aan=0; 

    } 

    { 
     if ($1!="" && $2!="") { 
      aan++; 
      aa_ind[aan]=1.0*$2; 
      aa_frq[aan]=1.0*$3; 

    } 

    } 

END{ 
for(i=1;i<=aan;i++) { 
    if(aa_frq[i]>maxfrq) { 
    maxfrq=aa_frq[i]; 

} 

    if(aa_frq[i]<minfrq) { 
     minfrq=aa_frq[i]; 
} 
} 
    half=(maxfrq-minfrq)/2 

    for(i=1;i<=aan;i++) { 
    aa_frq[i]=aa_frq[i]-minfrq 
     if (aa_frq[i]<half) { 
     fraction=aa_frq[i]/half 
     aa_r[i]=r1+fraction*(r2-r1) 
     aa_g[i]=g1+fraction*(g2-g1) 
     aa_b[i]=b1+fraction*(b2-b1) 
     }  else { 
      fraction=(aa_frq[i]-half)/half 
     aa_r[i]=r2+fraction*(r3-r2) 
      aa_g[i]=g2+fraction*(g3-g2) 
      aa_b[i]=b2+fraction*(b3-b2) 
     } 
    print "set_color c" i ", [" aa_r[i] "," aa_g[i] "," aa_b[i] "]" 
    print "color c" i ", resi " aa_ind[i]+aa_shift " and prot" 
     } 
     }' $1 

スクリプトは、配列を使用し、それらのスコアが、例えばスコア53.8を有する第一のシーケンスAは赤色に着色され、最低のスコア配列Lが白または明るい色に着色されているが、私はそれらを着色したいです赤を代わりに使用し、順序を変更します。

sequence  no.   score 

A    394   53.8314 

E    395   12.7202 

L    396    4.5191 

L    397    22.1270 

Q    398    47.6526 

貴重なご意見をお寄せいただきありがとうございます。

+0

私はスコアの場合と同様に、これは今までに緑の行く方法を確認することはできません平均値は[1,1,1](白)から[1,1,0](黄色)の範囲で始まり、平均値より上では[1,1,0]から[1,0,1] 0](赤色)。赤色成分は決して変化しない。 – cmbuckley

答えて

5

BEGINブロック制御における変数あなたの着色ので、あなたの要件に合うようにこれらの値を変更することができます。

r1=1; g1=1; b1=1; 
    r2=1; g2=1; b2=0; 
    r3=1; g3=0; b3=0; 

スコアが平均スコア未満の場合、色がどこかの範囲内になります[r1, g1, b1][r2, g2, b2]の間にある。それが平均スコアを上回る場合、[r2, g2, b2][r3, g3, b3]の間の範囲になります。スコアが平均スコアからどのくらい離れているかによって、範囲がどれだけ上または下にあるかが決まります。

したがって、ニーズに合わせてこれらの初期変数を変更することができます。あなたが高くなるように、中央と緑であることが、青、低い色に赤をしたい場合は、これらに番号を変更してみてください:

r1=1; g1=0; b1=0; 
    r2=0; g2=0; b2=1; 
    r3=0; g3=1; b3=0; 
+0

ありがとう、多くの時間を節約.. !!! – hari

+0

私はあなたの質問に私のコメントを書いたときに偶然にこれを実現しました。:-) – cmbuckley

+0

:)解決策が本当にシンプルだったことはわかりませんでした。 – hari

関連する問題