App-Egaz

 view release on metacpan or  search on metacpan

lib/App/Egaz/Command/lpcnam.pm  view on Meta::CPAN

            my $cmd
                = "chainMergeSort"
                . " -inputList="
                . Path::Tiny::path( $outdir, "chainList.tmp" )->stringify
                . " > $outdir/all.$i.chain.tmp";
            App::Egaz::Common::exec_cmd( $cmd, { verbose => $opt->{verbose}, } );
            Path::Tiny::path( $outdir, "chainList.tmp" )->remove;

            $i++;
        }

        my $cmd = "chainMergeSort" . " $outdir/all.*.chain.tmp" . " > $outdir/all.chain";
        App::Egaz::Common::exec_cmd( $cmd, { verbose => $opt->{verbose}, } );

        # chainPreNet - Remove chains that don't have a chance of being netted
        # usage:
        #   chainPreNet in.chain target.sizes query.sizes out.chain
        $cmd
            = "chainPreNet"
            . " $outdir/all.chain"
            . " $args->[0]/chr.sizes"
            . " $args->[1]/chr.sizes"
            . " $outdir/all.pre.chain";
        App::Egaz::Common::exec_cmd( $cmd, { verbose => $opt->{verbose}, } );
    }

    #----------------------------#
    # chain-net
    #----------------------------#
    {
        # chainNet - Make alignment nets out of chains
        # usage:
        #   chainNet in.chain target.sizes query.sizes target.net query.net
        #
        # netSyntenic - Add synteny info to net.
        # usage:
        #   netSyntenic in.net out.net
        my $cmd
            = "chainNet -minSpace=1"
            . " $outdir/all.pre.chain"
            . " $args->[0]/chr.sizes"
            . " $args->[1]/chr.sizes"
            . " stdout"    # $dir_lav/target.chainnet
            . " $outdir/query.chainnet" . " | netSyntenic" . " stdin" . " $outdir/noClass.net";
        App::Egaz::Common::exec_cmd( $cmd, { verbose => $opt->{verbose}, } );

        # netChainSubset - Create chain file with subset of chains that appear in
        # the net
        # usage:
        #    netChainSubset in.net in.chain out.chain
        # options:
        #    -gapOut=gap.tab - Output gap sizes to file
        #    -type=XXX - Restrict output to particular type in net file
        #    -splitOnInsert - Split chain when get an insertion of another chain
        #    -wholeChains - Write entire chain references by net, don't split
        #     when a high-level net is encoundered.  This is useful when nets
        #     have been filtered.
        #    -skipMissing - skip chains that are not found instead of generating
        #     an error.  Useful if chains have been filtered.
        #
        # chainStitchId - Join chain fragments with the same chain ID into a single
        #    chain per ID.  Chain fragments must be from same original chain but
        #    must not overlap.  Chain fragment scores are summed.
        # usage:
        #    chainStitchId in.chain out.chain
        $cmd
            = "netChainSubset -verbose=0 $outdir/noClass.net"
            . " $outdir/all.chain"
            . " stdout"
            . " | chainStitchId"
            . " stdin"
            . " $outdir/over.chain";
        App::Egaz::Common::exec_cmd( $cmd, { verbose => $opt->{verbose}, } );

        # netSplit - Split a genome net file into chromosome net files
        # usage:
        #   netSplit in.net outDir
        $cmd = "netSplit" . " $outdir/noClass.net" . " $outdir/net";
        App::Egaz::Common::exec_cmd( $cmd, { verbose => $opt->{verbose}, } );
    }

    #----------------------------#
    # netToAxt
    #----------------------------#
    {
        my @files = File::Find::Rule->file->name('*.net')->in("$outdir/net");
        printf STDERR "* .net files: [%d]\n", scalar @files;

        my $mce = MCE->new( chunk_size => 1, max_workers => $opt->{parallel}, );
        $mce->foreach(
            [ sort @files ],
            sub {
                my ( $self, $chunk_ref, $chunk_id ) = @_;

                my $file   = $chunk_ref->[0];
                my $output = Path::Tiny::path($file)->basename;
                $output .= ".axt.gz";

                # netToAxt - Convert net (and chain) to axt.
                # usage:
                #   netToAxt in.net in.chain target.2bit query.2bit out.axt
                # note:
                # directories full of .nib files (an older format)
                # may also be used in place of target.2bit and query.2bit.
                #
                # axtSort - Sort axt files
                # usage:
                #   axtSort in.axt out.axt
                my $cmd
                    = "netToAxt"
                    . " $file"
                    . " $outdir/all.pre.chain"
                    . " $args->[0]/chr.2bit"
                    . " $args->[1]/chr.2bit"
                    . " stdout"
                    . " | axtSort stdin stdout"
                    . " | $gzip_bin >"
                    . " $outdir/axtNet/$output";
                App::Egaz::Common::exec_cmd( $cmd, { verbose => $opt->{verbose}, } );
            }
        );

    }



( run in 0.993 second using v1.01-cache-2.11-cpan-b16cb0d3907 )