Amon2::Lite 안녕 3. bl2seq 하는 Web App

7329 단어 PerlMacbioinformatics
2. 계속

2.의 예는 너무 간단하고, Kolon의 활약이 거의 없다. 그럼 굉장히 안 되니까.

할 일


blastn
html로,
  • sequence 던지는 페이지
  • 두 종류의 시퀀스를 던지기 때문에 두 개의 텍스트 영역이 필요합니다

  • 결과보기 페이지

  • 두 가지가 필요합니다.
    perl 의 경우 외부 명령을 실행하여 결과를 캡처해야 합니다.

    마지막으로 마지막 app.psgi를 편집하십시오.
    blastn 가 들어 있지 않은 경우.

    여기 에서 최신 버전 다운로드

    OSX의 경우 ncbi-blast-2.2.31+-universal-macosx.tar.gz 배포
    $ wget -q ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.2.31+-universal-macosx.tar.gz
    $ tar zxf ncbi-blast-2.2.31+-universal-macosx.tar.gz 
    $ mv ncbi-blast-2.2.31+ ~/cmd/bin
    
  • bl2seq 라고 말하면서, legacy 쪽에는 링크조차 붙이지 않는다.

  • perl 코드 부분



    먼저 perl 코드 부분을.
    get / 직전까지는 이전의 코드와 완전히 같다. 그래서 get / 는 index.tx 를 그릴 뿐입니다.
    get '/' => sub { return shift->render('index.tx'); };
    

    그런 다음 index.tx 에서 게시된 내용을 받는 컨트롤러를 작성합니다. 우선 /bl2seq 로 한다.
    post '/bl2seq' => sub {
        my $c = shift;
        my ( $out_fh1, $seq1 ) = tempfile ;
        my ( $out_fh2, $seq2 ) = tempfile ;
        print { $out_fh1 } $c->req->param('seq1') ;
        print { $out_fh2 } $c->req->param('seq2') ;
        my $result = qx{/Users/bunzaemon/cmd/bin/ncbi-blast-2.2.31+/bin/blastn -query $seq1  -subject $seq2 } ;
        return $c->render('result.tx', { result => $result });
    };
    
  • $c->req->param('') 에서 던진 요청을 받을 수 있으므로 두 개의 시퀀스를 각각 seq1
  • 물론, seq2
  • use File::Temp qw( tempfile ) ; 의 실행은 각 사람의 환경에 맞춘다.
  • blastn 를 사용하고 싶은 곳이지만, IPC::Open3
  • 에서 결과를 qx{} 에.

  • 이것만으로 매우 간단한 것.

    html 편집



    sequence 던지는 페이지


    @@ index.tx
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>BL2SEQ</title>
    </head>
    <body>
         <h1>input</h1>
         <form method="get" action="/">
         <textarea name="seq1" rows="4">input sequence1</textarea><br>
         <textarea name="seq2" rows="4">input sequence2'</textarea><br>
         <input type="submit" value="submit" /></br>
         <p>それぞれのテキストエリアにシーケンスを入力してください。</p>
    </body>
    </html>
    
  • 글쎄, 제목과 표제 정도는 붙이자?
  • 시퀀스를 게시하는 프레임을 두 개 만들까?
  • 코멘트도 필요하네요.
  • 그럼 charset 의 선언 만약 이런가? => perl 코드 부분에서 result.tx 필요.

  • 결과를 표시하는 페이지


    @@ result.tx
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>BL2SEQ</title>
    </head>
    <body>
         <h1>result</h1>
         <pre><: $result :></pre>
         <p>結果が出ました。</p>
         <form method="get" action="/">
         <input type="submit" value="了解" /></br>
         </form>
    </body>
    </html>
    
  • 그럼, 변수 result 에 결과를 그대로 넣고, use utf8; 로 곧바로 표시시키겠습니까?
  • 그런 다음 <pre>로 돌아가는 것도 생각해 봅시다.

  • app.psgi



    이번 app.psgi의 모든 코드.
    간단하지만 html 부분이 중복되는 느낌이 든다.
    use strict;
    use warnings;
    use Amon2::Lite;
    use utf8 ;
    use File::Temp qw( tempfile ) ;
    
    sub load_config {
        +{
            'Text::Xslate' => +{
                syntax => 'Kolon',
                suffix => '.tx',
                module => undef,
                cache  => 0,
            },
        }
    }
    
    get '/' => sub { return shift->render('index.tx'); };
    
    post '/bl2seq' => sub {
        my $c = shift;
        my ( $out_fh1, $seq1 ) = tempfile ;
        my ( $out_fh2, $seq2 ) = tempfile ;
        print { $out_fh1 } $c->req->param('seq1') ;
        print { $out_fh2 } $c->req->param('seq2') ;
        my $result = qx{${HOME}/cmd/bin/ncbi-blast-2.2.31+/bin/blastn -query $seq1  -subject $seq2 } ;
        return $c->render('result.tx', { result => $result }); 
    } ;
    
    
    __PACKAGE__->to_app(handle_static => 1);
    
    __DATA__
    
    @@ index.tx
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>BL2SEQ</title>
    </head>
    <body>
         <h1>input</h1>
         <form method="post" action="/bl2seq">
         <textarea name="seq1" rows="15">input sequence1</textarea><br>
         <textarea name="seq2" rows="15">input sequence2</textarea><br>
         <input type="submit" value="submit" /></br>
         <p>それぞれのテキストエリアにシーケンスを入力してください。</p>
    </body>
    </html>
    
    @@ result.tx
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>BL2SEQ</title>
    </head>
    <body>
         <h1>result</h1>
         <pre><: $result :></pre>
         <p>結果が出ました。</p>
         <form method="get" action="/">
         <input type="submit" value="了解" /></br>
         </form>  
    </body>
    </html>
    

    브라우저를 리로드 1 한다.

    움직여 보자.



    적절한 배열을 두 가지 가져와 양식에 세트.
    예를 들어, 2 3
    4

    에서, submit 그리고.



    글쎄, 가벼운 시퀀스의 비교라면, 이것으로 충분하다. 후는, 옵션류의 ON/OFF 를 제어하는 ​​라디오 버튼당을 실장해,,,
    틀림없기 때문에, 거기엔은, 언급하지 않고.
    후에는 / 의 기능 메모와 Kolon 의 메모.


    launchctl 반환 값은 파일 핸들과 경로입니다.
    tmpfile 하고 있는 전제.

    인간의 비만 유전자와 꿀벌의 상응하는 유전자

    bio 이외의 사람으로, 여기까지 한 취미인 사람. plackup -r 의 행에서 를 복사합니다.

    좋은 웹페이지 즐겨찾기