LibStatGen: BAM: Difference between revisions

From Genome Analysis Wiki
Jump to navigationJump to search
Created page with '= SAM/BAM File= == Reading/Writing SAM/BAM Files == The SamFile class allows a user to easily read/write a SAM/BAM file. This methods found in this class are: {| class="wikitabl…'
 
No edit summary
Line 35: Line 35:
Returns true if successfully written, false if not.
Returns true if successfully written, false if not.
|}
|}
=== Usage Example ===
The following example reads in a sam/bam file and writes it out as a sam/bam file.  The file format of the input sam/bam is determined by the SamFile class based on reading the type from the file.  The file format of the output sam/bam file is determined by the SamFile class based on the extension of the output file.  A ".bam" extension indicates a BAM file.  All other extensions indicate SAM files.
<pre>
int main(int argc, char ** argv)
{
  if(argc != 3)
  {
      printf("./bam <inputFile> <outputFile.sam/bam>\n");
      exit(-1);
  }
  SamFile samIn;
     
  samIn.OpenForRead(argv[1]);
  SamFile samOut;
  samOut.OpenForWrite(argv[2]);
  // Read the sam header.
  SamFileHeader samHeader;
  samIn.ReadHeader(samHeader);
  samOut.WriteHeader(samHeader);
  // Read the first sam record.
  SamRecord samRecord;
  // Keep reading records until it fails.
  int recordCount = 0;
  while (samIn.ReadRecord(samHeader, samRecord) == true)
  {
      recordCount++;
      samOut.WriteRecord(samHeader, samRecord);
  }
  printf("RecordCount = %d\n", recordCount);
}
</pre>

Revision as of 13:46, 16 March 2010

SAM/BAM File

Reading/Writing SAM/BAM Files

The SamFile class allows a user to easily read/write a SAM/BAM file. This methods found in this class are:

SamFile Class Methods
Method Name Description
bool OpenForRead(const char* filename) Opens the specified file for reading.

Determines if it is a BAM/SAM file by reading the beginning of the file. Returns true if successfully opened reading, false if not.

bool OpenForWrite(const char * filename) bool: true if successfully opened, false if not.

Opens as BAM file if the specified filename ends in .bam. Otherwise it is opened as a SAM file. Returns true if successfully opened for writing, false if not.

bool ReadHeader(SamFileHeader& header) Reads the header section from the file and stores it in the passed in header.

Returns true if successfully read, false if not.

bool WriteHeader(const SamFileHeader& header) Writes the specified header into the file.

Returns true if successfully written, false if not.

bool ReadRecord(SamFileHeader& header, SamRecord& record) Reads the next record from the file and stores it in the passed in record.

Returns true if successfully read, false if not.

bool WriteRecord(SamFileHeader& header, SamRecord& record) Writes the specified record into the file.

Returns true if successfully written, false if not.

Usage Example

The following example reads in a sam/bam file and writes it out as a sam/bam file. The file format of the input sam/bam is determined by the SamFile class based on reading the type from the file. The file format of the output sam/bam file is determined by the SamFile class based on the extension of the output file. A ".bam" extension indicates a BAM file. All other extensions indicate SAM files.

int main(int argc, char ** argv)
{
   if(argc != 3)
   {
      printf("./bam <inputFile> <outputFile.sam/bam>\n");
      exit(-1);
   }


   SamFile samIn;
      
   samIn.OpenForRead(argv[1]);

   SamFile samOut;

   samOut.OpenForWrite(argv[2]);

   // Read the sam header.
   SamFileHeader samHeader;
   samIn.ReadHeader(samHeader);

   samOut.WriteHeader(samHeader);

   // Read the first sam record.
   SamRecord samRecord;

   // Keep reading records until it fails.
   int recordCount = 0;
   while (samIn.ReadRecord(samHeader, samRecord) == true)
   {
      recordCount++;
      samOut.WriteRecord(samHeader, samRecord);
   }
   printf("RecordCount = %d\n", recordCount);
}