# for emacs: -*- mode: sh; -*-

# Heterocephalus glaber (naked mole-rat)
# ftp://ftp.ncbi.nlm.nih.gov/genbank/genomes/Eukaryotes/vertebrates_mammals/Heterocephalus_glaber/HetGla_1.0/

# Project ID:  68323
#    http://www.ncbi.nlm.nih.gov/bioproject/68323
#    http://www.ncbi.nlm.nih.gov/nuccore?term=AFSB00000000[pacc]
#   Beijing Genomics Institute, Shenzhen
 
# Whole Genome Shotgun sequencing project:
#    http://www.ncbi.nlm.nih.gov/Traces/wgs/?val=AFSB00
#    WGS: AFSB01000001:AFSB01273990 
#    Scaffold: JH165514:JH204779 

##########################################################################
# Download sequence (DONE - 2011-12-01 Chin)
    mkdir /hive/data/genomes/hetGla1
    cd /hive/data/genomes/hetGla1
    mkdir genbank
    cd genbank
    wget --timestamping -r --cut-dirs=6 --level=0 -nH -x \
        --no-remove-listing -np \
"ftp://ftp.ncbi.nlm.nih.gov/genbank/genomes/Eukaryotes/vertebrates_mammals/Heterocephalus_glaber/HetGla_1.0/*"
    # FINISHED --2011-12-01 11:18:35--
    # Downloaded: 20 files, 1003M in 35m 12s (486 KB/s)
    # Read ASSEMBLY_INFO 

    faSize Primary_Assembly/unplaced_scaffolds/FASTA/unplaced.scaf.fa.gz
    # 2643961837 bases (213913418 N's 2430048419 real 2430048419 upper 0 lower)
    # in 39266 sequences in 1 files

    zcat Primary_Assembly/unplaced_scaffolds/AGP/unplaced.scaf.agp.gz \
        | grep "^#" > ucsc.agp
    # remove the .1 accession versions from the scaffold/contig names
    # our database tables can not function with periods in the scaffold names
    zcat Primary_Assembly/unplaced_scaffolds/AGP/unplaced.scaf.agp.gz \
        | grep -v "^#" | sed -e "s/\.1//" >> ucsc.agp
    gzip ucsc.agp
    # extract the scaffold/contig name and remove the .1 accession
    # version
    zcat Primary_Assembly/unplaced_scaffolds/FASTA/unplaced.scaf.fa.gz \
        | sed -e "s/^>.*JH/>JH/; s/^>.*AFSB01/>AFSB01/; s/\.1.*//" \
            > ucsc.fa
    gzip ucsc.fa
    # verify nothing lost in the translation, should be same numbers as above
    faSize ucsc.fa.gz
    # 2643961837 bases (213913418 N's 2430048419 real 2430048419 upper 0 lower)
    #  in 39266 sequences in 1 files

    # verify the names are OK
    zcat ucsc.fa.gz | grep "^>" | sort | head
    zcat ucsc.fa.gz | grep "^>" | sort | tail
    # head:tail =  JH165514:JH204779 

#########################################################################
# Initial  database build (working - 2011-05-09 - Chin)
    cd /hive/data/genomes/hetGla1
    cat << '_EOF_' > hetGla1.config.ra
# Config parameters for makeGenomeDb.pl:
db hetGla1
clade mammal
genomeCladePriority ??31
scientificName Heterocephalus glaber 
commonName naked mole-rat
assemblyDate Nov. 2009
assemblyLabel UMD_3.1 (NCBI project 10708, accession GCA_000003055.3)
assemblyShortLabel Bos_taurus_UMD_3.1
orderKey 236
mitoAcc NC_006853
fastaFiles /hive/data/genomes/hetGla1/genbank/ucscChr/chr*.fa.gz
agpFiles /hive/data/genomes/hetGla1/genbank/ucscChr/chr*.agp.gz
# qualFiles none
dbDbSpeciesDir cow
taxId 9913
'_EOF_'
    # << happy emacs
    time makeGenomeDb.pl -noGoldGapSplit -workhorse=hgwdev hetGla1.config.ra \
	> makeGenomeDb.log 2>&1 &
    # real    21m31.993s

    # real    real    12m42.419s
    #	add the trackDb entries to the source tree, and the 2bit link:
    ln -s `pwd`/hetGla1.unmasked.2bit /gbdb/hetGla1/hetGla1.2bit

    #  Per instructions in makeGenomeDb.log:
#Search for '***' notes in each file in and make corrections (sometimes the
#files used for a previous assembly might make a better template):
#  description.html /cluster/data/hetGla1/html/{trackDb.ra,gap.html,gold.html}
#
#Then copy these files to your ~/kent/src/hg/makeDb/trackDb/cow/hetGla1
# - cd ~/kent/src/hg/makeDb/trackDb
# - edit makefile to add hetGla1 to DBS.
# - git add cow/hetGla1/*.{ra,html}
# - git commit -m "Added hetGla1 to DBS." makefile
# - git commit -m "Initial descriptions for hetGla1." cow/hetGla1/*.{ra,html}
# - git pull; git push
# - Run make update DBS=hetGla1 and make alpha when done.
# - (optional) Clean up /cluster/data/hetGla1/TemporaryTrackDbCheckout



#########################################################################
# RepeatMasker (working 2011-05-09 - Chin)
    mkdir /hive/data/genomes/hetGla1/bed/repeatMasker
    cd /hive/data/genomes/hetGla1/bed/repeatMasker
    time nice -n +19 doRepeatMasker.pl -buildDir=`pwd` \
	-workhorse=hgwdev -bigClusterHub=swarm -noSplit hetGla1 > do.log 2>&1 &
    #   real    355m43.294s
    cat faSize.rmsk.txt
    # 2670422299 bases (20740270 N's 2649682029 real 1370807360 upper 
    # 1278874669 lower) in 3317 sequences in 1 files
    # %47.89 masked total, %48.27 masked real

#########################################################################
# simpleRepeats (working - 2011-05-09 - Chin)
    mkdir /hive/data/genomes/hetGla1/bed/simpleRepeat
    cd /hive/data/genomes/hetGla1/bed/simpleRepeat

    time nice -n +19 doSimpleRepeat.pl -buildDir=`pwd` -workhorse=hgwdev \
	-dbHost=hgwdev -bigClusterHub=swarm -smallClusterHub=memk \
        hetGla1 > do.log 2>&1 &
    #   real    13m47.346s

    # Batch failed after 4 tries on 
    #   ./TrfRun.csh /hive/data/genomes/hetGla1/TrfPart/071/071.lst.bed
    # Command failed:
    # ssh -x -o 'StrictHostKeyChecking = no' -o 'BatchMode = yes' memk 
    #  nice /hive/data/genomes/hetGla1/bed/simpleRepeat/run.cluster/doTrf.csh
    # 071 failed due to no input TrfPart/071/071.lst.bed
    #  which is chrM and can be ignored.
    # to continue, create an empty TrfPart/071/071.lst.bed by:
    touch /hive/data/genomes/hetGla1/TrfPart/071/071.lst.bed 
    # run a para time > run.time on memk to get that file to exist:
    # Checking finished jobs
    # Completed: 71 of 72 jobs
    # Crashed: 1 jobs
    # CPU time in finished jobs: 12340s     205.67m     3.43h    0.14d  0.000 y
    # IO & Wait Time:              236s       3.93m     0.07h    0.00d  0.000 y
    # Average job time:            177s       2.95m     0.05h    0.00d
    # Longest finished job:        606s      10.10m     0.17h    0.01d
    # Submission to last job:      984s      16.40m     0.27h    0.01d


    #   continue
    time doSimpleRepeat.pl -buildDir=`pwd` -bigClusterHub=swarm \
        -dbHost=hgwdev -workhorse=hgwdev -smallClusterHub=memk \
        -continue=filter hetGla1 > filter.log 2>&1 &
    # real	0m20.430s

    cat fb.simpleRepeat 
    # 32390355 bases of 2649685036 (1.222%) in intersection

    #	add to the repeatMasker
    cd /hive/data/genomes/hetGla1
    twoBitMask hetGla1.rmsk.2bit -add bed/simpleRepeat/trfMask.bed hetGla1.2bit
    #	safe to ignore warnings about >=13 fields
    twoBitToFa hetGla1.2bit stdout | faSize stdin > hetGla1.2bit.faSize.txt
    cat hetGla1.2bit.faSize.txt
    # 2670422299 bases (20740270 N's 2649682029 real 1370313596 upper 
    #    1279368433 lower) in 3317 sequences in 1 files
    # %47.91 masked total, %48.28 masked real

    # double check with featureBits
    featureBits -countGaps hetGla1 gap
    # 20740270 bases of 2670422299 (0.777%) in intersection

    rm /gbdb/hetGla1/hetGla1.2bit
    ln -s `pwd`/hetGla1.2bit /gbdb/hetGla1/hetGla1.2bit

#########################################################################
# Marking *all* gaps - they are not all in the AGP file
#	(working - 2011-05-10 - Chin)
    mkdir /hive/data/genomes/hetGla1/bed/allGaps
    cd /hive/data/genomes/hetGla1/bed/allGaps

    time nice -n +19 findMotif -motif=gattaca -verbose=4 \
	-strand=+ ../../hetGla1.unmasked.2bit > findMotif.txt 2>&1
    #   real    1m10.942s
    grep "^#GAP " findMotif.txt | sed -e "s/^#GAP //" > allGaps.bed
    featureBits hetGla1 -not gap -bed=notGap.bed
    # 2649685036 bases of 2649685036 (100.000%) in intersection
    featureBits hetGla1 allGaps.bed notGap.bed -bed=new.gaps.bed
    # 3007 bases of 2649685036 (0.000%) in intersection
    #	what is the highest index in the existing gap table:
    hgsql -N -e "select ix from gap;" hetGla1 | sort -n | tail -1
    #	17354

    # use tcsh and ctrl-c to create the here doc
    cat << '_EOF_' > mkGap.pl
#!/usr/bin/env perl

use strict;
use warnings;

my $ix=`hgsql -N -e "select ix from gap;" hetGla1 | sort -n | tail -1`;
chomp $ix;

open (FH,"<new.gaps.bed") or die "can not read new.gaps.bed";
while (my $line = <FH>) {
    my ($chrom, $chromStart, $chromEnd, $rest) = split('\s+', $line);
    ++$ix;
    printf "%s\t%d\t%d\t%d\tN\t%d\tother\tyes\n", $chrom, $chromStart,
        $chromEnd, $ix, $chromEnd-$chromStart;
}
close (FH);
'_EOF_'
    # << happy emacs
    chmod +x ./mkGap.pl
    ./mkGap.pl > other.bed
    featureBits hetGla1 other.bed
    # 3007 bases of 2649685036 (0.000%) in intersection
    hgLoadBed -sqlTable=$HOME/kent/src/hg/lib/gap.sql \
	-noLoad hetGla1 otherGap other.bed
    #  Loaded 2011 elements of size 8
    #	adding this many:
    wc -l bed.tab
    #   2011 bed.tab 
    #	starting with this many
    hgsql -e "select count(*) from gap;" hetGla1
    #	72454
    hgsql hetGla1 -e 'load data local infile "bed.tab" into table gap;'
    #	result count:
    hgsql -e "select count(*) from gap;" hetGla1
    #	74465
    # == 72454 + 2011


########################################################################
# Create kluster run files (working - 2011-05-10 - Chin)
    # numerator is hetGla1 gapless bases "real" as reported by: 
    featureBits -noRandom -noHap hetGla1 gap
    # 20740230 bases of 2640182513 (0.786%) in intersection

    # denominator is hg19 gapless bases as reported by:
    #	featureBits -noRandom -noHap hg19 gap
    #     234344806 bases of 2861349177 (8.190%) in intersection
    # 1024 is threshold used for human -repMatch:
    calc \( 2640182513 / 2861349177 \) \* 1024
    ( 2640182513 / 2861349177 ) * 1024 = 944.850393
    # ==> use -repMatch=900 according to size scaled down from 1024 for human.
    #	and rounded down to nearest 50
    cd /hive/data/genomes/hetGla1
    blat hetGla1.2bit \
	 /dev/null /dev/null -tileSize=11 -makeOoc=jkStuff/hetGla1.11.ooc \
	-repMatch=900 &
    #	Wrote 33615 overused 11-mers to jkStuff/hetGla1.11.ooc
    mkdir /hive/data/staging/data/hetGla1
    cp -p hetGla1.2bit jkStuff/hetGla1.11.ooc /hive/data/staging/data/hetGla1
    cp -p chrom.sizes /hive/data/staging/data/hetGla1
    #	check non-bridged gaps to see what the typical size is:
    hgsql -N \
	-e 'select * from gap where bridge="no" order by size;' hetGla1 \
	| sort -k7,7nr
    #   most non-bridges gaps have size = 100, follow pig's example (5000) 
    #	decide on a minimum gap for this break
    gapToLift -verbose=2 -minGap=100 hetGla1 jkStuff/nonBridged.lft \
	-bedFile=jkStuff/nonBridged.bed
    cp -p jkStuff/nonBridged.lft \
	/hive/data/staging/data/hetGla1/hetGla1.nonBridged.lft
    # ask cluster-admin to copy (evry time if any file chsnged)
    #    /hive/data/staging/data/hetGla1 directory to
    #    /scratch/data/hetGla1 on cluster nodes
    # before porceed to genbank step

########################################################################
# GENBANK AUTO UPDATE (working - 2011-05-10 - Chin)
    ssh hgwdev
    cd $HOME/kent/src/hg/makeDb/genbank
    git pull

    # edit etc/genbank.conf to add hetGla1 just before susScr2

# hetGla1 (Cow)
hetGla1.serverGenome = /hive/data/genomes/hetGla1/hetGla1.2bit
hetGla1.clusterGenome = /scratch/data/hetGla1/hetGla1.2bit
hetGla1.ooc = /scratch/data/hetGla1/hetGla1.11.ooc
hetGla1.lift = no
hetGla1.perChromTables = no
hetGla1.refseq.mrna.native.pslCDnaFilter  = ${ordered.refseq.mrna.native.pslCDnaFilter}
hetGla1.refseq.mrna.xeno.pslCDnaFilter    = ${ordered.refseq.mrna.xeno.pslCDnaFilter}
hetGla1.genbank.mrna.native.pslCDnaFilter = ${ordered.genbank.mrna.native.pslCDnaFilter}
hetGla1.genbank.mrna.xeno.pslCDnaFilter   = ${ordered.genbank.mrna.xeno.pslCDnaFilter}
hetGla1.genbank.est.native.pslCDnaFilter  = ${ordered.genbank.est.native.pslCDnaFilter}
hetGla1.genbank.est.xeno.pslCDnaFilter    = ${ordered.genbank.est.xeno.pslCDnaFilter}
hetGla1.downloadDir = hetGla1
hetGla1.refseq.mrna.native.load  = yes
hetGla1.refseq.mrna.xeno.load = yes
hetGla1.refseq.mrna.xeno.loadDesc  = yes


    git add etc/genbank.conf
    git commit -m "Added hetGla1" etc/genbank.conf
    git push
    # update /cluster/data/genbank/:
    make etc-update


# Edit src/lib/gbGenome.c to add new species.  Skipped 

    screen	#  control this business with a screen since it takes a while
    cd /cluster/data/genbank
     time nice -n +19 ./bin/gbAlignStep -initial hetGla1 &
    #   logFile: var/build/logs/2011.05.10-15:10:42.hetGla1.initalign.log
    #   real    736m26.569s
    #   To re-do, rm the dir first:
    #     /cluster/data/genbank/data/aligned/genbank.183.0/hetGla1


    # load database when finished
    ssh hgwdev
    cd /cluster/data/genbank
    time nice -n +19 ./bin/gbDbLoadStep -drop -initialLoad hetGla1 &
    # logFile: var/dbload/hgwdev/logs/2011.05.11-08:24:53.dbload.log
    #   real    32m5.964s



    # enable daily alignment and update of hgwdev
    cd ~/kent/src/hg/makeDb/genbank
    gitpull
    # add hetGla1 to:
    #   etc/align.dbs
    #   etc/hgwdev.dbs
    git add etc/align.dbs
    git add etc/hgwdev.dbs
    git commit -m "Added hetGla1 - Cow" etc/align.dbs etc/hgwdev.dbs
    git push
    make etc-update

#########################################################################
# reset default position (working - 2011-05-11 - Chin)
#       Reset default position to an area of chr3 with a number of genes
    hgsql -e \
'update dbDb set defaultPos="chr3:21,592,157-21,596,916" where name="hetGla1";' \
        hgcentraltest


############################################################################
# ctgPos2 track - showing clone sequence locations on chromosomes
#	(working 2011-05-11 - Chin)
# NOTE - create hetGla1 entry in all.joiner since this is a new species
    mkdir /hive/data/genomes/hetGla1/bed/ctgPos2
    cd /hive/data/genomes/hetGla1/bed/ctgPos2
    cat << '_EOF_' > agpToCtgPos2.pl
#!/usr/bin/env perl

use warnings;
use strict;

my $argc = scalar(@ARGV);

if ($argc != 1) {
    printf STDERR "usage: zcat your.files.agp.gz | agpToCtgPos2.pl /dev/stdin > ctgPos2.tab\n";
    exit 255;
}

my $agpFile = shift;

open (FH, "<$agpFile") or die "can not read $agpFile";
while (my $line = <FH>) {
    next if ($line =~ m/^#/);
    chomp $line;
    my @a = split('\s+', $line);
    next if ($a[4] =~ m/^U$/);
    my $chrSize = $a[2]-$a[1]+1;
    my $ctgSize = $a[7]-$a[6]+1;
    die "sizes differ $chrSize != $ctgSize\n$line\n" if ($chrSize != $ctgSize);
    printf "%s\t%d\t%s\t%d\t%d\t%s\n", $a[5], $chrSize, $a[0], $a[1]-1, $a[2], $a[4];
}
close (FH);
'_EOF_'
    # << happy emacs

chmod 775 agpToCtgPos2.pl

export S=../../genbank/Primary_Assembly/assembled_chromosomes
cut -f2 ${S}/chr2acc | while read ACC
do
    C=`grep "${ACC}" ${S}/chr2acc | cut -f1`
    zcat ${S}/AGP/chr${C}.agp.gz \
        | sed -e "s/^${ACC}/chr${C}/"
done | ./agpToCtgPos2.pl /dev/stdin > ctgPos2.tab

    hgLoadSqlTab hetGla1 ctgPos2 $HOME/kent/src/hg/lib/ctgPos2.sql ctgPos2.tab
    # add the track ctgPos2 to src/hg/makeDb/trackDb/cow/hetGla1/trackDb.ra
    # at src/makeDb/trackdb do "make update DBS=hetGla1" or/and "make alpha"
    # based on result of
    # hgsql -N -e "select type from ctgPos2;" hetGla1 | sort | uniq
    # W
    # prepare the src/hg/makeDb/trackDb/cow/hetGla1/ctgPos2.html 


############################################################################
# running cpgIsland business (working -2011-05-16 - Chin)
    mkdir /hive/data/genomes/hetGla1/bed/cpgIsland
    cd /hive/data/genomes/hetGla1/bed/cpgIsland
    cvs -d /projects/compbio/cvsroot checkout -P hg3rdParty/cpgIslands
    cd hg3rdParty/cpgIslands
    #   needed to fixup this source, adding include to readseq.c:
#include "string.h"
    #   and to cpg_lh.c:
#include "unistd.h"
#include "stdlib.h"
    # and fixing a declaration in cpg_lh.c
    sed -e "s#\(extern char\* malloc\)#// \1#" cpg_lh.c > tmp.c
    mv tmp.c cpg_lh.c
    make
    cd ../../ 
    ln -s hg3rdParty/cpgIslands/cpglh.exe
    mkdir -p hardMaskedFa
    cut -f1 ../../chrom.sizes | while read C
do
    echo ${C}
    twoBitToFa ../../hetGla1.2bit:$C stdout \
        | maskOutFa stdin hard hardMaskedFa/${C}.fa
done

    ssh swarm 
    cd /hive/data/genomes/hetGla1/bed/cpgIsland 
    mkdir results
    cut -f1 ../../chrom.sizes > chr.list
    cat << '_EOF_' > template
#LOOP
./runOne $(root1) {check out exists results/$(root1).cpg}
#ENDLOOP
'_EOF_'
    # << happy emacs

    #   the faCount business is to make sure there is enough sequence to
    #   work with in the fasta.  cpglh.exe does not like files with too many
    #   N's - it gets stuck
    cat << '_EOF_' > runOne
#!/bin/csh -fe
set C = `faCount hardMaskedFa/$1.fa | grep ^chr | awk '{print  $2 - $7 }'`
if ( $C > 200 ) then
    ./cpglh.exe hardMaskedFa/$1.fa > /scratch/tmp/$1.$$
    mv /scratch/tmp/$1.$$ $2
else
    touch $2
endif
'_EOF_'
    # << happy emacs


    chmod 775 runOne
    gensub2 chr.list single template jobList
    para create jobList
    para try
    para check ... etc
    para time
    para problems
    para status
    # then, kick it with para push
    # check it with plb
    # when all are done, para time shows:
    #  Checking finished jobs
    # Completed: 3317 of 3317 jobs
    # CPU time in finished jobs:   197s       3.29m     0.05h    0.00d  0.000 y
    # IO & Wait Time:             9373s     156.21m     2.60h    0.11d  0.000 y
    # Average job time:              3s       0.05m     0.00h    0.00d
    # Longest finished job:         18s       0.30m     0.01h    0.00d
    # Submission to last job:      677s      11.28m     0.19h    0.01d

    # Transform cpglh output to bed +
    catDir results | awk '{
$2 = $2 - 1;
width = $3 - $2;
printf("%s\t%d\t%s\t%s %s\t%s\t%s\t%0.0f\t%0.1f\t%s\t%s\n",
       $1, $2, $3, $5,$6, width,
       $6, width*$7*0.01, 100.0*2*$6/width, $7, $9);
}' > cpgIsland.bed

    ssh hgwdev
    cd /hive/data/genomes/hetGla1/bed/cpgIsland
    hgLoadBed hetGla1 cpgIslandExt -tab \
      -sqlTable=$HOME/kent/src/hg/lib/cpgIslandExt.sql cpgIsland.bed
    # Loaded 37638 elements of size 10
    # Sorted
    # Creating table definition for cpgIslandExt
    # Saving bed.tab
    # Loading hetGla1

    #   cleanup
    rm -fr hardMaskedFa


###########################################################################
# ornAna1 Platypus LASTZ/CHAIN/NET (working - 2011-05-20 - Chin)
    screen # use screen to control this job
    mkdir /cluster/data/hetGla1/bed/blastzOrnAna1.2011-05-20
    cd /cluster/data/hetGla1/bed/blastzOrnAna1.2011-05-20

    cat << '_EOF_' > DEF
# Cow vs. Platypus
BLASTZ_Y=3400
BLASTZ_L=6000
BLASTZ_K=2200
BLASTZ_Q=/cluster/data/blastz/HoxD55.q
BLASTZ_M=50

# TARGET: Cow hetGla1
SEQ1_DIR=/scratch/data/hetGla1/hetGla1.2bit
SEQ1_LEN=/cluster/data/hetGla1/chrom.sizes
# Maximum number of scaffolds that can be lumped together
SEQ1_LIMIT=300
SEQ1_CHUNK=20000000
SEQ1_LAP=0

# QUERY: Platypus ornAna1
SEQ2_DIR=/scratch/data/ornAna1/ornAna1.2bit
SEQ2_LEN=/cluster/data/ornAna1/chrom.sizes
SEQ2_CHUNK=20000000
SEQ2_LIMIT=300
SEQ2_LAP=0

BASE=/cluster/data/hetGla1/bed/blastzOrnAna1.2011-05-20
TMPDIR=/scratch/tmp
'_EOF_'
    # << happy emacs
    
    time nice -n +19 doBlastzChainNet.pl `pwd`/DEF \
        -syntenicNet -noDbNameCheck \
        -workhorse=hgwdev -smallClusterHub=memk -bigClusterHub=swarm \
        -chainMinScore=5000 -verbose=2 -chainLinearGap=loose > do.log 2>&1 &
    #   real     329m59.325s

    # filter with doRecipBest.pl 
    time doRecipBest.pl -workhorse=hgwdev -buildDir=`pwd` \
        hetGla1 ornAna1 > rbest.log 2>&1
    # real    15m15.120s
    cat fb.hetGla1.chainOrnAna1Link.txt
    #   195910907 bases of 2649682029 (7.394%) in intersection
    cd /hive/data/genomes/hetGla1/bed
    ln -s blastzOrnAna1.2011-05-20 lastz.ornAna1


    mkdir /cluster/data/ornAna1/bed/blastz.hetGla1.swap
    cd /cluster/data/ornAna1/bed/blastz.hetGla1.swap
    time nice -n +19 doBlastzChainNet.pl \
        /cluster/data/hetGla1/bed/blastzOrnAna1.2011-05-20/DEF \
        -chainMinScore=5000 -verbose=2 -smallClusterHub=memk \
        -swap -syntenicNet \
          -chainLinearGap=loose -bigClusterHub=swarm > swap.log 2>&1 &
    #   real       59m45.336
    cat fb.ornAna1.chainBosTau6Link.txt
    #   190401000 bases of 1842236818 (10.335%) in intersection
# TBD for all chain/net:
 *** All done !  Elapsed time: 59m18s
 *** Make sure that goldenPath/ornAna1/vsBosTau6/README.txt is accurate.
 *** Add {chain,net}BosTau6 tracks to trackDb.ra if necessary.

    cd /cluster/data/ornAna1/bed
    ln -s blastz.hetGla1.swap lastz.hetGla1

#####################################################################
# susScr2 Pig BLASTZ/CHAIN/NET (working - 2011-05-24 - Chin)
    screen # use a screen to manage this multi-day job
    mkdir /hive/data/genomes/hetGla1/bed/lastzSusScr2.2011-05-24
    cd /hive/data/genomes/hetGla1/bed/lastzSusScr2.2011-05-24
    
    cat << '_EOF_' > DEF
# Pig vs. Cow
BLASTZ_M=50

# TARGET: Cow BosTau6
SEQ1_DIR=/scratch/data/hetGla1/hetGla1.2bit
SEQ1_LEN=/scratch/data/hetGla1/chrom.sizes
SEQ1_CHUNK=10000000
SEQ1_LAP=10000

# QUERY: Pig SusScr2
SEQ2_DIR=/scratch/data/susScr2/susScr2.2bit
SEQ2_LEN=/scratch/data/susScr2/chrom.sizes
SEQ2_CHUNK=10000000
SEQ2_LAP=0

BASE=/hive/data/genomes/hetGla1/bed/lastzSusScr2.2011-05-24
TMPDIR=/scratch/tmp
'_EOF_'
    # << this line keeps emacs coloring happy

    time nice -n +19 doBlastzChainNet.pl -verbose=2 \
        `pwd`/DEF \
        -noLoadChainSplit -syntenicNet \
        -workhorse=hgwdev -smallClusterHub=memk -bigClusterHub=swarm \
        -chainMinScore=3000 -chainLinearGap=medium > do.log 2>&1 &
    #   real    2198m44.401s
    cat fb.hetGla1.chainSusScr2Link.txt
    #   1306738899 bases of 2649682029 (49.317%) in intersection
    cd /hive/data/genomes/hetGla1/bed
    ln -s lastzSusScr2.2011-05-24 lastz.susScr2

    # then swap
    mkdir /hive/data/genomes/susScr2/bed/blastz.hetGla1.swap
    cd /hive/data/genomes/susScr2/bed/blastz.hetGla1.swap
    time nice -n +19 doBlastzChainNet.pl -verbose=2 \
        /hive/data/genomes/hetGla1/bed/lastzSusScr2.2011-05-24/DEF \
        -swap -noLoadChainSplit -syntenicNet \
        -workhorse=hgwdev -smallClusterHub=memk -bigClusterHub=pk \
        -chainMinScore=3000 -chainLinearGap=medium > swap.log 2>&1 &
    #  real    380m53.612s

    cat fb.susScr2.chainBosTau6Link.txt
    # 1475323050 bases of 2231298548 (66.119%) in intersection



#########################################################################
#  SWAP mm9 LASTZ (working - 2010-05-17 - Chin)
    #	original alignment done at mm9.txt
    cd /hive/data/genomes/mm9/bed/lastzBosTau6.2011-05-17
    cat fb.mm9.chainBosTau6Link.txt
    # 699351036 bases of 2620346127 (26.689%) in intersection
    # Create link
    cd /hive/data/genomes/mm9/bed
    ln -s  lastzBosTau6.2011-05-17 lastz.hetGla1

    #   and the swap 
    mkdir /hive/data/genomes/hetGla1/bed/blastz.mm9.swap
    cd /hive/data/genomes/hetGla1/bed/blastz.mm9.swap
    time nice -n +19 doBlastzChainNet.pl -verbose=2 \
        /hive/data/genomes/mm9/bed/lastzBosTau6.2011-05-17/DEF \
        -swap -syntenicNet \
        -noLoadChainSplit \
        -workhorse=hgwdev -smallClusterHub=memk -bigClusterHub=swarm \
        -chainMinScore=3000 -chainLinearGap=medium > swap.log 2>&1
    #   real     53m5.237s
    cat fb.hetGla1.chainMm9Link.txt
    # 688894115 bases of 2649682029 (25.999%) in intersection
    cd /hive/data/genomes/hetGla1/bed
    ln -s blastz.mm9.swap lastz.mm9

############################################################################
#  SWAP hg19 LASTZ (working 2011-05-16 - Chin)
    #	original alignment
    cd /hive/data/genomes/hg19/bed/lastzBosTau6.2011-05-16
    cat fb.hg19.chainBosTau6Link.txt
    # 1370696434 bases of 2897316137 (47.309%) in intersection

    #   and the swap
    mkdir /hive/data/genomes/hetGla1/bed/blastz.hg19.swap
    cd /hive/data/genomes/hetGla1/bed/blastz.hg19.swap
    time nice -n +19 doBlastzChainNet.pl -verbose=2 \
        /hive/data/genomes/hg19/bed/lastzBosTau6.2011-05-16/DEF \
        -swap -syntenicNet \
        -noLoadChainSplit \
        -workhorse=hgwdev -smallClusterHub=memk -bigClusterHub=swarm \
        -chainMinScore=3000 -chainLinearGap=medium > swap.log 2>&1
    #   real     72m57.889s
    cat fb.hetGla1.chainHg19Link.txt
    #   1336966333 bases of 2649682029 (50.458%) in intersection
    cd /hive/data/genomes/hetGla1/bed
    ln -s blastz.hg19.swap lastz.hg19


############################################################################
#  SWAP canFam2 LASTZ (working 2011-05-25 - Chin)
    #   original alignment
    cd /hive/data/genomes/canFam2/bed/lastzBosTau6.2011-05-25
    cat fb.canFam2.chainBosTau6Link.txt
    # 1389712912 bases of 2384996543 (58.269%) in intersection

    #   and the swap 
    mkdir /hive/data/genomes/hetGla1/bed/blastz.canFam2.swap
    cd /hive/data/genomes/hetGla1/bed/blastz.canFam2.swap
    time nice -n +19 doBlastzChainNet.pl -verbose=2 \
        /hive/data/genomes/canFam2/bed/lastzBosTau6.2011-05-25/DEF \
        -swap -syntenicNet  \
        -noLoadChainSplit \
        -workhorse=hgwdev -smallClusterHub=memk -bigClusterHub=swarm \
        -chainMinScore=3000 -chainLinearGap=medium > swap.log 2>&1
    #   real     88m38.555s
    cat fb.hetGla1.chainCanFam2Link.txt
    # 1404315725 bases of 2649682029 (52.999%) in intersection
    cd /hive/data/genomes/hetGla1/bed
    ln -s blastz.canFam2.swap lastz.canFam2

############################################################################
#  SWAP rn4 LASTZ (working 2011-05-31 - Chin)
    cd /hive/data/genomes/rn4/bed/blastzBosTau6.2011-05-31
    cat fb.rn4.chainBosTau6Link.txt
    # 660647959 bases of 2571531505 (25.691%) in intersection

    #   and the swap
    mkdir /hive/data/genomes/hetGla1/bed/blastz.rn4.swap
    cd /hive/data/genomes/hetGla1/bed/blastz.rn4.swap
    time nice -n +19 doBlastzChainNet.pl -verbose=2 \
        /hive/data/genomes/rn4/bed/blastzBosTau6.2011-05-31/DEF \
        -swap -noLoadChainSplit -syntenicNet \
        -workhorse=hgwdev -smallClusterHub=memk -bigClusterHub=swarm \
        -chainMinScore=3000 -chainLinearGap=medium > swap.log 2>&1 &
    #   real    49m43.881

    cat fb.hetGla1.chainRn4Link.txt
    # 648232024 bases of 2649682029 (24.465%) in intersection
    cd /hive/data/genomes/hetGla1/bed
    ln -s blastz.rn4.swap lastz.rn4

############################################################################
#  SWAP monDom5 LASTZ (working 2011-05-31 - Chin)
    cd /hive/data/genomes/monDom5/bed/lastzBosTau6.2011-05-31
    cat fb.monDom5.chainBosTau6Link.txt
    #   207703303 bases of 3501660299 (5.932%) in intersection

    # and the swap
    mkdir /hive/data/genomes/hetGla1/bed/blastz.monDom5.swap
    cd /hive/data/genomes/hetGla1/bed/blastz.monDom5.swap
    time nice -n +19 doBlastzChainNet.pl -verbose=2 \
        /hive/data/genomes/monDom5/bed/lastzBosTau6.2011-05-31/DEF \
        -swap -noLoadChainSplit -syntenicNet \
        -workhorse=hgwdev -smallClusterHub=memk -bigClusterHub=swarm \
        -chainMinScore=5000 -chainLinearGap=loose > swap.log 2>&1 &
    #   real    52m10.229s

    cat fb.hetGla1.chainMonDom5Link.txt
    #   199980646 bases of 2649682029 (7.547%) in intersection
    cd /hive/data/genomes/hetGla1/bed
    ln -s blastz.monDom5.swap lastz.monDom5


#########################################################################
# all.joiner update, downloads and in pushQ - (working 2011-06-14 - Chin)
    cd $HOME/kent/src/hg/makeDb/schema
    # fixup all.joiner until this is a clean output
    joinerCheck -database=hetGla1 -all all.joiner

    mkdir /hive/data/genomes/hetGla1/goldenPath
    cd /hive/data/genomes/hetGla1/goldenPath
    makeDownloads.pl hetGla1 > do.log 2>&1

    #	now ready for pushQ entry
    mkdir /hive/data/genomes/hetGla1/pushQ
    cd /hive/data/genomes/hetGla1/pushQ
    makePushQSql.pl hetGla1 > hetGla1.pushQ.sql 2> stderr.out
    #	check for errors in stderr.out, some are OK, e.g.:
    # WARNING: hgwdev does not have /gbdb/hetGla1/wib/gc5Base.wib
    # WARNING: hgwdev does not have /gbdb/hetGla1/wib/quality.wib
    # WARNING: hgwdev does not have /gbdb/hetGla1/bbi/quality.bw
    # WARNING: hetGla1 does not have seq
    # WARNING: hetGla1 does not have extFile
    # 
    # WARNING: Could not tell (from trackDb, all.joiner and hardcoded lists of
    # supporting and genbank tables) which tracks to assign these tables to:
    #   tableList

    #	copy it to hgwbeta
    scp -p hetGla1.pushQ.sql hgwbeta:/tmp
    ssh hgwbeta
    cd /tmp
    hgsql qapushq < hetGla1.pushQ.sql
    #	in that pushQ entry walk through each entry and see if the
    #	sizes will set properly

############################################################################
#  hetGla1 - Cow - Ensembl Genes version 64  (working - 2011-10-12 - hiram)
    ssh hgwdev
    cd /hive/data/genomes/hetGla1
    cat << '_EOF_' > hetGla1.ensGene.ra
# required db variable
db hetGla1
# optional nameTranslation, the sed command that will transform
#       Ensemble names to UCSC names.  With quotes just to make sure.
nameTranslation "s/^\([0-9X][0-9]*\)/chr\1/; s/^MT/chrM/; s/^GJ\([0-9]*\).1/chrUn_GJ\1/"
'_EOF_'
#  << happy emacs

    doEnsGeneUpdate.pl  -ensVersion=64 hetGla1.ensGene.ra
    ssh hgwdev
    cd /hive/data/genomes/hetGla1/bed/ensGene.64
    featureBits hetGla1 ensGene
    # 42264149 bases of 2649682029 (1.595%) in intersection

############################################################################
# ucscToEnsembl name translation table (working - 2011-10-12 - Chin)
    mkdir /hive/data/genomes/hetGla1/bed/ucscToEnsembl
    cd /hive/data/genomes/hetGla1/bed/ucscToEnsembl

    cut -f1 ../../chrom.sizes | while read C
do
E=`echo ${C} | sed -e "s/^chrM/MT/; s/chrUn_GJ\([0-9]*\)/GJ\1.1/; s/^chr//;"`
    echo -e "${C}\t${E}"
done > ucscToEnsembl.tab

    # determine longest UCSC name:
    cut -f1 ucscToEnsembl.tab | awk '{print length($0)}' | sort -nr | head -1
    #	14

    # use that size in this SQL definition index:
    cat << '_EOF_' > ucscToEnsembl.sql
# UCSC to Ensembl chr name translation
CREATE TABLE ucscToEnsembl (
    ucsc varchar(255) not null,        # UCSC chromosome name
    ensembl varchar(255) not null,     # Ensembl chromosome name
              #Indices
    PRIMARY KEY(ucsc(14))
);
'_EOF_'

    hgLoadSqlTab hetGla1 ucscToEnsembl ucscToEnsembl.sql ucscToEnsembl.tab

#############################################################################
# LIFTOVER TO bosTau4 (working - 2011-10-20 - Chin)

    sh hgwdev
    cd /hive/data/genomes/hetGla1
    ln -s jkStuff/hetGla1.11.ooc 11.ooc
    time nice -n +19 doSameSpeciesLiftOver.pl -verbose=2 \
        -bigClusterHub=swarm -dbHost=hgwdev -workhorse=hgwdev \
         hetGla1 bosTau4 > doLiftOverToBosTau4.log 2>&1 &
    # real    110m26.710s
    pushd /usr/local/apache/htdocs-hgdownload/goldenPath/hetGla1/liftOver/
    md5sum hetGla1ToBosTau4.over.chain.gz >> md5sum.txt
    popd

############################################################################

