convert_scoremat.pl
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:4k
源码类别:

生物技术

开发平台:

C/C++

  1. #!/usr/bin/perl -w
  2. # $Id: convert_scoremat.pl,v 1000.0 2003/10/29 16:03:43 gouriano Exp $
  3. use strict;
  4. use IO::File;
  5. use POSIX;
  6. my $HEADER = <<EOF;
  7. /*  $Id$
  8. * ===========================================================================
  9. *
  10. *                            PUBLIC DOMAIN NOTICE
  11. *               National Center for Biotechnology Information
  12. *
  13. *  This software/database is a "United States Government Work" under the
  14. *  terms of the United States Copyright Act.  It was written as part of
  15. *  the author's official duties as a United States Government employee and
  16. *  thus cannot be copyrighted.  This software/database is freely available
  17. *  to the public for use. The National Library of Medicine and the U.S.
  18. *  Government have not placed any restriction on its use or reproduction.
  19. *
  20. *  Although all reasonable efforts have been taken to ensure the accuracy
  21. *  and reliability of the software and data, the NLM and the U.S.
  22. *  Government do not and cannot warrant the performance or results that
  23. *  may be obtained by using this software or data. The NLM and the U.S.
  24. *  Government disclaim all warranties, express or implied, including
  25. *  warranties of performance, merchantability or fitness for any particular
  26. *  purpose.
  27. *
  28. *  Please cite the author in any work or product based on this material.
  29. *
  30. * ===========================================================================
  31. *
  32. * Author:  Aaron Ucko (via $0)
  33. *
  34. * File Description:
  35. *   Protein alignment score matrices; shared between the two toolkits.
  36. *
  37. * ===========================================================================
  38. */
  39. #include <util/tables/raw_scoremat.h>
  40. EOF
  41. foreach my $filename (@ARGV) {
  42.     my $in = new IO::File($filename);
  43.     if ( !$in ) {
  44. warn "Unable to open $filename: $!";
  45. next;
  46.     }
  47.     my $varbase = $filename;
  48.     $varbase =~ s:.*/::;
  49.     $varbase =~ s/([A-Z])([A-Z]+)/$1L$2/g;
  50.     my $outfn = "sm_L$varbase.c";
  51.     my $out = new IO::File(">$outfn");
  52.     if ( !$out ) {
  53. warn "Unable to open $outfn: $!";
  54. next;
  55.     }
  56.     print $out $HEADER;
  57.     my @symbols;
  58.     my $i;
  59.     my $n;
  60.     my $width; # score entries per line
  61.     my $min;
  62.     while (<$in>) {
  63. if (s/# *(.*)//  &&  $1) {
  64.     print $out '/* ', $1, " */n";
  65. }
  66. my @elts = split;
  67. next unless @elts;
  68. if (defined @symbols  &&  @symbols) {
  69.     if ($elts[0] ne $symbols[$i]) {
  70. warn "$filename:$.: Expected $symbols[$i] but got $elts[0]";
  71.     }
  72.     print $out "    /*$elts[0]*/ {";
  73.     for (my $j = 0;  $j < $n;  ++$j) {
  74. if ($j > 0  &&  !($j % $width)) {
  75.     print $out "n", ' ' x 11;
  76. }
  77. printf $out '%3d', $elts[$j+1];
  78. if ( !defined($min)  ||  $min > $elts[$j+1]) {
  79.     $min = $elts[$j+1];
  80. }
  81. if ($j == $n - 1) {
  82.     print $out ' }';
  83.     print $out ',' unless $i == $n - 1;
  84.     print $out "n";
  85. } else {
  86.     print $out ',';
  87. }
  88.     }
  89.     ++$i;
  90. } else {
  91.     @symbols = @elts;
  92.     $n = @symbols;
  93.     $i = 0;
  94.     print $out
  95. "nstatic const TNCBIScore s_${varbase}PSM[$n][$n] = {n";
  96.     my $rows = POSIX::ceil($n / 16);
  97.     # Find the minimum width that yields the necessary number of rows.
  98.     $width = POSIX::ceil($n / $rows);
  99.     print $out '    /*     ';
  100.     for (my $j = 0;  $j < $n;  ++$j) {
  101. if ($j > 0  &&  !($j % $width)) {
  102.     print $out "n", ' ' x 11;
  103. }
  104. print $out '  ', $symbols[$j];
  105. if ($j == $n - 1) {
  106.     print $out " */n";
  107. } else {
  108.     print $out ',';
  109. }
  110.     }
  111. }
  112.     }
  113.     my $symstr = join '', @symbols;
  114.     print $out <<EOF;
  115. };
  116. const SNCBIPackedScoreMatrix NCBISM_$varbase = {
  117.     "$symstr",
  118.     s_${varbase}PSM[0],
  119.     $min
  120. };
  121. EOF
  122. }
  123. #  ===========================================================================
  124. #  PRODUCTION $Log: convert_scoremat.pl,v $
  125. #  PRODUCTION Revision 1000.0  2003/10/29 16:03:43  gouriano
  126. #  PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.1
  127. #  PRODUCTION
  128. #  ===========================================================================