Модификация awk-программы, которая назначает цвета последовательностям на основе их значений - PullRequest
2 голосов
/ 02 января 2012

У меня есть сценарий AWK, который окрашивает последовательность в соответствии с оценкой, он окрашивает остатки в режиме RGB, и эти последовательности можно визуализировать с помощью некоторого программного обеспечения. Проблема заключается в том, что сценарий окрашивает в красный цвет для более высокого диапазона оценок и зеленый для среднего и в белый для низкого диапазона. Я хотел бы изменить его так, назначает красный для низкого диапазона, синий для среднего, или, другими словами, я хочу, чтобы скрипт работал по-другому, от низкого к высокому, от высокого к низкому ... как мне справиться с этим. Я биолог и Я понятия не имею, как работает 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

сценарий использует последовательности и их оценку, например, первая последовательность A с оценкой 53,8 будет окрашена в красный цвет, а самая низкая последовательность оценок L - в белый или любой более светлый, но я бы хотел вместо этого покрасить их в красный цвет и изменить порядок .

sequence      no.            score

A             394            53.8314

E             395            12.7202

L             396             4.5191

L             397             22.1270

Q             398             47.6526

Заранее благодарим за ваши бесценные предложения.

1 Ответ

5 голосов
/ 02 января 2012

Переменные в блоке 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...