c3694589a4868b788e827bad95104fd30703ccbd
ceisenhart
  Mon May 26 13:29:34 2014 -0700
Not working for chromosomes with underscores in their name. Working for others.
diff --git src/utils/bamSplitByChrom/bamSplitByChrom.c src/utils/bamSplitByChrom/bamSplitByChrom.c
index 43c2f39..cfef3fe 100644
--- src/utils/bamSplitByChrom/bamSplitByChrom.c
+++ src/utils/bamSplitByChrom/bamSplitByChrom.c
@@ -1,87 +1,84 @@
 /* bamSplitByChrom -  Splits a bam file into multiple bam files based on chromosome . */
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
 #include "bamFile.h"
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "bamSplitByChrom -  Splits a bam file into multiple bam files based on chromosome \n"
   "usage:\n"
   "   bamSplitByChrom input.bam\n"
   "options:\n"
   "   \n"
   );
 }
 
 /* Command line validation table. */
 static struct optionSpec options[] = {
    {NULL, 0},
 };
-void printBamSeq()
-{
-}
 
 samfile_t *samMustOpen(char *fileName, char *mode, void *extraHeader)
 /* Open up samfile or die trying. */
 {
 samfile_t *sf = samopen(fileName, mode, extraHeader);
 if (sf == NULL)
     errnoAbort("Couldn't open %s.\n", fileName);
 return sf;
 }
 
 char *concat(char *s1, char *s2)
 /* A simple concatenate function. */
 {
 char *result = needMem(strlen(s1)+strlen(s2) +1);
 strcpy(result,s1);
 strcat(result,s2);
 return result;
 }
 
 void bamSplitByChrom(char *inBam)
 /* bamSplitByChrom -  Splits a bam file into multiple bam files based on chromosome . */
 {
 /* Open file and get header for it. */
 samfile_t *input = samMustOpen(inBam, "rb", NULL);
 bam_header_t *head = input->header;
 bam1_t one;
 ZeroVar(&one);	// This seems to be necessary!
 int i =0;
 for (i=0; i<head->n_targets; ++i)
 /* Loop through each chromosome. */   
     {
     samfile_t *in = samMustOpen(inBam, "rb", NULL);
     char *outBam = head->target_name[i];  
     char *bam = ".bam";
     samfile_t *out = bamMustOpenLocal(concat(outBam,bam), "wb", head);
     /* Open an output bam file. */
     for (;;)
     /* Loop through the input bam file. */
         {
         if (samread(in, &one) < 0)
             {
 	    break;
 	    }
 	if (head->target_name[one.core.tid]==outBam)
 	    {
             samwrite(out, &one);
             }
         }
     samclose(out);
     samclose(in);
     }
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, options);
 if (argc != 2)
     usage();
 bamSplitByChrom(argv[1]);
 return 0;
 }