github.com/vertgenlab/gonomics@v1.0.0/cmd/gsw/cmdGraph.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"os"
     7  )
     8  
     9  // Genome Graph Gonomics.
    10  func usage() {
    11  	fmt.Print(
    12  		"GSW - Graph Smith Waterman:\n\nGenome Graph Software\n" +
    13  			"Author: Eric Au\n\tCraig Lowe\n\n" +
    14  			"Vertebrate Genetics Laboratory: http://www.vertgenlab.org\n" +
    15  			"Source code: https://github.com/vertgenlab/gonomics\n" +
    16  			"Documents: https://github.com/vertgenlab/vglDocumentation\n\n" +
    17  			"Version: 0.1.0\n\n" +
    18  			"Usage:\n" +
    19  			"  gsw [options]\n\n" +
    20  			"Options:\n")
    21  	alignUsage()
    22  	ggToolsUsage()
    23  	viewUsage()
    24  	helpMessage()
    25  	flagsPrint()
    26  }
    27  
    28  func main() {
    29  	flag.Usage = usage
    30  	if len(os.Args) < 2 {
    31  		usage()
    32  	} else {
    33  		switch os.Args[1] {
    34  		case "align":
    35  			if len(os.Args) == 2 { //2 ./gsw align, this catch makes it equivalent to gsw align -h includes the name first command
    36  				alignUsage()
    37  				extendedAlignUsage()
    38  			} else {
    39  				RunAlignExe()
    40  			}
    41  		case "ggtools":
    42  			RunGgTools()
    43  		case "view":
    44  			RunViewExe()
    45  		case "help":
    46  			extendHelpMsg.Parse(os.Args[2:])
    47  			moreHelp(os.Args[2])
    48  		default:
    49  			errorMessage()
    50  		}
    51  	}
    52  }
    53  
    54  /*
    55  func main() {
    56  	if err := root(os.Args[1:]); err != nil {
    57  		fmt.Println(err)
    58  		os.Exit(1)
    59  	}
    60  }*/
    61  
    62  /*
    63  	} else if strings.Compare(cmdName, "ggTools") == 0 {
    64  		answer += "\nggTools: utilities to create, manipulate and operate on genome graphs\n" +
    65  			"\nTo create genome graph reference w/ vcf file:\n" +
    66  			"./gsw --ggTools --vcf SNPsIndels.vcf genome.fa\n\n" +
    67  			"usage:\t./gsw --ggTools [options] ref.[.gg/.fa]\n\n" +
    68  			"\t--vcf\tSNPsIndels.vcf --out ref.gg ref.fa\n\n" +
    69  			"\t--split\t--out genome_[chr1, chr2, chr3 ...].gg\n" +
    70  			"\t\tgraph reference split by chromosome\n\n" +
    71  			"\t--merge\t--out merge.sam chr1.sam chr2.sam chr3.sam ...\n" +
    72  			"\t\tmerge split by chromosome sam files into one\n" +
    73  			"\t\tfinds best alignment for each read\n\n" +
    74  			"\t--axt\tgenomes.axt --out SNPsIndels.vcf ref.fa\n" +
    75  			"\t\tuse axt alignment to create VCF: small SNPs and indels\n\n" +
    76  			"\t--fa\t--out graph.fa ref.gg\n" +
    77  			"\t\tgenome graph to fasta format\n\n" +
    78  			"\t--slurm\tbeta: submit GSW command as a slurm job\n" +
    79  			"\t\tdefault settings are: --mem=32G, --ntasks=1, --cpus-per-task=8\n\n"
    80  		//"\t--kent\tkentUtils - ucsc\n\n"
    81  	} else if strings.Compare(cmdName, "view") == 0 {
    82  		answer += "GSW - genome graph toolkit:\n\n" + "Visualize Alignment\n\n" + "usage:" +
    83  			"\t./gsw --view [options] graph.sam ref.[.gg/.fa]\n\n" +
    84  			"\t--out\tdefault: /dev/stdout\n" +
    85  			"\t\tnotes.txt\n\n" //+
    86  		//"\tscores\tprint score matrix options\n\n"
    87  	} else if strings.Compare(cmdName, "axt") == 0 {
    88  		answer +=
    89  			"\t./gsw  --out SNPsIndels.vcf ref.fa\n\n"
    90  	} else {
    91  		errorMessage()
    92  		//log.Fatalf("Error: Apologies, your command prompt was not recognized...\n\t\t\t\t\t\t\t\t-xoxo GG")
    93  	}
    94  	fmt.Print(answer)
    95  }
    96  
    97  
    98  //TODO: Will remove to a personal script
    99  func slurm() {
   100  	//set basic commands for now:
   101  	slurmJob := "sbatch"
   102  	args := []string{"--mem=32G", "--nodes=1", "--ntasks=1", "--cpus-per-task=8"}
   103  	//, "--mail-type=END,FAIL", "--mail-user=eric.au@duke.edu"
   104  	var gswCommand []string
   105  	var wrapPrompt string = "--wrap=\""
   106  
   107  	for _, cmds := range os.Args {
   108  		if !strings.Contains(cmds, "slurm") {
   109  			gswCommand = append(gswCommand, cmds)
   110  		}
   111  	}
   112  	wrapPrompt += strings.Join(gswCommand, " ") + "\""
   113  	args = append(args, wrapPrompt)
   114  	echo := slurmJob + " " + strings.Join(args, " ")
   115  	log.Printf("\n\nSlurm job submission:\n\n%s\n\n", echo)
   116  	cmd := exec.Command(slurmJob, args...)
   117  	cmdOutput := &bytes.Buffer{}
   118  	cmd.Stdout = cmdOutput
   119  	err := cmd.Run()
   120  	if err != nil {
   121  		os.Stderr.WriteString(err.Error() + "\n")
   122  	}
   123  	fmt.Print(string(cmdOutput.Bytes()) + "\n")
   124  }
   125  }*/