#ifndef CIGAR_H_
#define CIGAR_H_
#include <stdbool.h>
#include "system/mm_allocator.h"
#include "alignment/linear_penalties.h"
#include "alignment/affine_penalties.h"
#include "alignment/affine2p_penalties.h"
typedef struct {
char* operations; int max_operations; int begin_offset; int end_offset; int score; int end_v; int end_h; bool has_misms; uint32_t* cigar_buffer; int cigar_length; } cigar_t;
cigar_t* cigar_new(
const int max_operations);
void cigar_clear(
cigar_t* const cigar);
void cigar_resize(
cigar_t* const cigar,
const int max_operations);
void cigar_free(
cigar_t* const cigar);
bool cigar_is_null(
cigar_t* const cigar);
int cigar_count_matches(
cigar_t* const cigar);
void cigar_append_forward(
cigar_t* const cigar_dst,
cigar_t* const cigar_src);
void cigar_append_reverse(
cigar_t* const cigar_dst,
cigar_t* const cigar_src);
void cigar_append_deletion(
cigar_t* const cigar,
const int length);
void cigar_append_insertion(
cigar_t* const cigar,
const int length);
void cigar_get_CIGAR(
cigar_t* const cigar,
const bool show_mismatches,
uint32_t** const cigar_buffer,
int* const cigar_length);
int cigar_score_edit(
cigar_t* const cigar);
int cigar_score_gap_linear(
cigar_t* const cigar,
linear_penalties_t* const penalties);
int cigar_score_gap_affine(
cigar_t* const cigar,
affine_penalties_t* const penalties);
int cigar_score_gap_affine2p(
cigar_t* const cigar,
affine2p_penalties_t* const penalties);
int cigar_cmp(
cigar_t* const cigar_a,
cigar_t* const cigar_b);
void cigar_copy(
cigar_t* const cigar_dst,
cigar_t* const cigar_src);
void cigar_discover_mismatches(
const char* const pattern,
const int pattern_length,
const char* const text,
const int text_length,
cigar_t* const cigar);
bool cigar_maxtrim_gap_linear(
cigar_t* const cigar,
linear_penalties_t* const penalties);
bool cigar_maxtrim_gap_affine(
cigar_t* const cigar,
affine_penalties_t* const penalties);
bool cigar_maxtrim_gap_affine2p(
cigar_t* const cigar,
affine2p_penalties_t* const penalties);
bool cigar_check_alignment(
FILE* const stream,
const char* const pattern,
const int pattern_length,
const char* const text,
const int text_length,
cigar_t* const cigar,
const bool verbose);
void cigar_print(
FILE* const stream,
cigar_t* const cigar,
const bool print_matches);
int cigar_sprint(
char* const buffer,
cigar_t* const cigar,
const bool print_matches);
void cigar_print_SAM_CIGAR(
FILE* const stream,
cigar_t* const cigar,
const bool show_mismatches);
int cigar_sprint_SAM_CIGAR(
char* const buffer,
cigar_t* const cigar,
const bool show_mismatches);
void cigar_print_pretty(
FILE* const stream,
cigar_t* const cigar,
const char* const pattern,
const int pattern_length,
const char* const text,
const int text_length);
#endif