672812fed9c467baac3b53330e1355f8a331e620
ceisenhart
  Mon May 26 11:56:31 2014 -0700
Fixed an I/O bug
diff --git src/utils/bamSplitByChrom/bamSplitByChrom.c src/utils/bamSplitByChrom/bamSplitByChrom.c
index 612148f..43c2f39 100644
--- src/utils/bamSplitByChrom/bamSplitByChrom.c
+++ src/utils/bamSplitByChrom/bamSplitByChrom.c
@@ -1,76 +1,87 @@
 /* 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 *in = samMustOpen(inBam, "rb", NULL);
-bam_header_t *head = in->header;
+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];  
-    samfile_t *out = bamMustOpenLocal(outBam, "wb", head);
+    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;
 }