Ejemplo n.º 1
0
GT_INLINE void gt_sam_header_delete(gt_sam_headers* const sam_headers) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  // Clear
  gt_sam_header_clear(sam_headers);
  // Delete
  gt_string_delete(sam_headers->header);
  gt_vector_delete(sam_headers->read_group);
  gt_vector_delete(sam_headers->program);
  gt_vector_delete(sam_headers->comments);
}
GT_INLINE void gt_sam_header_delete(gt_sam_headers* const sam_headers) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  // Clear
  gt_sam_header_clear(sam_headers);
  // Delete
  gt_vector_delete(sam_headers->read_group);
  gt_vector_delete(sam_headers->program);
  gt_vector_delete(sam_headers->sequence_dictionary);
  gt_vector_delete(sam_headers->comments);
  if(sam_headers->sequence_dictionary_sn_hash) gt_shash_delete(sam_headers->sequence_dictionary_sn_hash,true);
  if(sam_headers->read_group_id_hash) gt_shash_delete(sam_headers->read_group_id_hash,true);
  if(sam_headers->program_id_hash) gt_shash_delete(sam_headers->program_id_hash,true);
}
Ejemplo n.º 3
0
GT_INLINE void gt_sam_header_clear(gt_sam_headers* const sam_headers) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  // Header
  gt_string_clear(sam_headers->header);
  // Read group
  GT_VECTOR_ITERATE(sam_headers->read_group,record_h,nh,gt_string*) { gt_string_delete(*record_h); }
  gt_vector_clear(sam_headers->read_group);
  // Program
  GT_VECTOR_ITERATE(sam_headers->program,record_p,np,gt_string*) { gt_string_delete(*record_p); }
  gt_vector_clear(sam_headers->program);
  // Comments
  GT_VECTOR_ITERATE(sam_headers->comments,comment,nc,gt_string*) { gt_string_delete(*comment); }
  gt_vector_clear(sam_headers->comments);
  // Seq Archive
  sam_headers->sequence_archive=NULL;
}
GT_INLINE void gt_sam_header_add_sequence_record(gt_sam_headers* const sam_headers,gt_sam_header_record* const header_record) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  gt_string *sn_tag=gt_sam_header_record_get_tag(header_record,"SN");
  gt_cond_error(!sn_tag,PARSE_SAM_HEADER_MISSING_TAG,"SQ","SN");
  gt_cond_error(!gt_sam_header_record_get_tag(header_record,"LN"),PARSE_SAM_HEADER_MISSING_TAG,"SQ","LN");
  if(sn_tag) {
  	if(!sam_headers->sequence_dictionary_sn_hash) sam_headers->sequence_dictionary_sn_hash=gt_shash_new();
  	char *sn_str=gt_string_get_string(sn_tag);
  	size_t* ix=gt_shash_get_element(sam_headers->sequence_dictionary_sn_hash,sn_str);
  	// If SN Tag already exists, overwrite.
  	if(ix) {
  		gt_sam_header_record_delete(*(gt_sam_header_record **)gt_vector_get_elm(sam_headers->sequence_dictionary,*ix,gt_sam_header_record*));
  		gt_vector_set_elm(sam_headers->sequence_dictionary,*ix,gt_sam_header_record*,header_record);
  		gt_error(PARSE_SAM_HEADER_DUPLICATE_TAG,"SQ","SN",sn_str);
  	} else {
  		ix=gt_alloc(size_t);
  		*ix=gt_vector_get_used(sam_headers->sequence_dictionary);
  	  gt_shash_insert(sam_headers->sequence_dictionary_sn_hash,sn_str,ix,size_t*);
  		gt_vector_insert(sam_headers->sequence_dictionary,header_record,gt_sam_header_record*);
  	}
  }
GT_INLINE void gt_sam_header_clear(gt_sam_headers* const sam_headers) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  // Header
  if(sam_headers->header) {
  	gt_sam_header_record_delete(sam_headers->header);
  	sam_headers->header = NULL;
  }
  // Read group
  GT_VECTOR_ITERATE(sam_headers->read_group,record_h,nh,gt_sam_header_record*) { gt_sam_header_record_delete(*record_h); }
  gt_vector_clear(sam_headers->read_group);
  if(sam_headers->read_group_id_hash) gt_shash_clear(sam_headers->read_group_id_hash,true);
  // Program
  GT_VECTOR_ITERATE(sam_headers->program,record_p,np,gt_sam_header_record*) { gt_sam_header_record_delete(*record_p); }
  gt_vector_clear(sam_headers->program);
  if(sam_headers->program_id_hash) gt_shash_clear(sam_headers->program_id_hash,true);
  // Seq Dictionary
  GT_VECTOR_ITERATE(sam_headers->sequence_dictionary,record_s,ns,gt_sam_header_record*) { gt_sam_header_record_delete(*record_s); }
  gt_vector_clear(sam_headers->sequence_dictionary);
  if(sam_headers->sequence_dictionary_sn_hash) gt_shash_clear(sam_headers->sequence_dictionary_sn_hash,true);
  // Comments
  GT_VECTOR_ITERATE(sam_headers->comments,comment,nc,gt_string*) { gt_string_delete(*comment); }
  gt_vector_clear(sam_headers->comments);
}
Ejemplo n.º 6
0
GT_INLINE void gt_sam_header_add_comment(gt_sam_headers* const sam_headers,gt_string* const comment) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  GT_STRING_CHECK(comment);
  gt_vector_insert(sam_headers->comments,comment,gt_string*);
}
Ejemplo n.º 7
0
GT_INLINE void gt_sam_header_add_program_record(gt_sam_headers* const sam_headers,gt_string* const program_record) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  GT_STRING_CHECK(program_record);
  gt_vector_insert(sam_headers->program,program_record,gt_string*);
}
Ejemplo n.º 8
0
GT_INLINE void gt_sam_header_add_read_group_record(gt_sam_headers* const sam_headers,gt_string* const read_group_record) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  GT_STRING_CHECK(read_group_record);
  gt_vector_insert(sam_headers->read_group,read_group_record,gt_string*);
}
Ejemplo n.º 9
0
GT_INLINE void gt_sam_header_set_header_record(gt_sam_headers* const sam_headers,gt_string* const header_line) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  GT_STRING_CHECK(header_line);
  gt_string_copy(sam_headers->header,header_line);
}
Ejemplo n.º 10
0
GT_INLINE void gt_sam_header_set_sequence_archive(gt_sam_headers* const sam_headers,gt_sequence_archive* const sequence_archive) {
  GT_SAM_HEADERS_CHECK(sam_headers);
  sam_headers->sequence_archive = sequence_archive;
}