Class: Edlib::Aligner

Inherits:
Object
  • Object
show all
Defined in:
lib/edlib.rb,
ext/edlib/edlib.c

Instance Method Summary collapse

Constructor Details

#initialize(k: -1,, mode: 'NW', task: 'DISTANCE', additional_equalities: nil) ⇒ Aligner

Returns a new instance of Aligner.



5
6
7
8
9
10
11
# File 'lib/edlib.rb', line 5

def initialize(k:-1, mode: 'NW', task: 'DISTANCE', additional_equalities: nil)
  mode = mode.to_s if mode.is_a? Symbol
  task = task.to_s if task.is_a? Symbol
  mode = mode.upcase if mode.is_a? String
  task = task.upcase if task.is_a? String
  initialize_raw(k, mode, task, additional_equalities)
end

Instance Method Details

#additional_equalitiesObject



220
221
222
223
224
225
# File 'ext/edlib/edlib.c', line 220

static VALUE
aligner_get_additional_equalities(VALUE self)
{
  EdlibAlignConfig *config = get_config(self);
  return get_additional_equalities(config);
}

#additional_equalities=(equalities) ⇒ Object



264
265
266
267
268
269
# File 'ext/edlib/edlib.c', line 264

static VALUE
aligner_set_additional_equalities(VALUE self, VALUE equalities)
{
  EdlibAlignConfig *config = get_config(self);
  return set_additional_equalities(config, equalities);
}

#align(query, target) ⇒ Object



307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
# File 'ext/edlib/edlib.c', line 307

static VALUE
aligner_align(VALUE self, VALUE query, VALUE target)
{
  EdlibAlignConfig *config = get_config(self);
  if (!config)
  {
    rb_raise(rb_eRuntimeError, "config is NULL");
  }
  EdlibAlignConfig cfg = edlibNewAlignConfig(
    config->k,
    config->mode,
    config->task,
    config->additionalEqualities,
    config->additionalEqualitiesLength);

  EdlibAlignResult result = edlibAlign(
    StringValueCStr(query),
    RSTRING_LEN(query),
    StringValueCStr(target),
    RSTRING_LEN(target),
    cfg);

  if (result.status != 0)
  {
    rb_raise(rb_eRuntimeError, "edlibAlign failed");
  }

  VALUE edit_distance = INT2NUM(result.editDistance);
  VALUE alphabet_length = INT2NUM(result.alphabetLength);
  VALUE locations = rb_ary_new();
  VALUE alignment = rb_ary_new();
  VALUE cigar;

  int *el = result.endLocations;
  int *sl = result.startLocations;
  for (int i = 0; i < result.numLocations; i++)
  {
    VALUE ary = rb_ary_new();
    if (sl)
    {
      rb_ary_push(ary, INT2NUM(sl[i]));
    }
    else
    {
      rb_ary_push(ary, Qnil);
    }
    if (el)
    {
      rb_ary_push(ary, INT2NUM(el[i]));
    }
    else
    {
      rb_ary_push(ary, Qnil);
    }
    rb_ary_push(locations, ary);
  }

  for (int i = 0; i < result.alignmentLength; i++)
  {
    rb_ary_push(alignment, UINT2NUM(result.alignment[i]));
  }

  char *ccigar = edlibAlignmentToCigar(result.alignment, result.alignmentLength, 1); // EDLIB_CIGAR_EXTENDED
  cigar = rb_str_new2(ccigar);

  VALUE hash = rb_hash_new();
  rb_hash_aset(hash, ID2SYM(rb_intern("edit_distance")), edit_distance);
  rb_hash_aset(hash, ID2SYM(rb_intern("alphabet_length")), alphabet_length);
  rb_hash_aset(hash, ID2SYM(rb_intern("locations")), locations);
  rb_hash_aset(hash, ID2SYM(rb_intern("alignment")), alignment);
  rb_hash_aset(hash, ID2SYM(rb_intern("cigar")), cigar);

  edlibFreeAlignResult(result);

  return hash;
}

#configObject



271
272
273
274
275
276
277
278
279
280
281
282
283
284
# File 'ext/edlib/edlib.c', line 271

static VALUE
aligner_config_hash(VALUE self)
{
  EdlibAlignConfig *config = get_config(self);

  VALUE hash = rb_hash_new();

  rb_hash_aset(hash, ID2SYM(rb_intern("k")), get_k(config));
  rb_hash_aset(hash, ID2SYM(rb_intern("mode")), get_mode(config));
  rb_hash_aset(hash, ID2SYM(rb_intern("task")), get_task(config));
  rb_hash_aset(hash, ID2SYM(rb_intern("additional_equalities")), get_additional_equalities(config));

  return hash;
}

#kObject



48
49
50
51
52
53
# File 'ext/edlib/edlib.c', line 48

static VALUE
aligner_get_k(VALUE self)
{
  EdlibAlignConfig *config = get_config(self);
  return get_k(config);
}

#k=(k) ⇒ Object



62
63
64
65
66
67
# File 'ext/edlib/edlib.c', line 62

static VALUE
aligner_set_k(VALUE self, VALUE k)
{
  EdlibAlignConfig *config = get_config(self);
  return set_k(config, k);
}

#modeObject



85
86
87
88
89
90
# File 'ext/edlib/edlib.c', line 85

static VALUE
aligner_get_mode(VALUE self)
{
  EdlibAlignConfig *config = get_config(self);
  return get_mode(config);
}

#mode=(mode) ⇒ Object



129
130
131
132
133
134
# File 'ext/edlib/edlib.c', line 129

static VALUE
aligner_set_mode(VALUE self, VALUE mode)
{
  EdlibAlignConfig *config = get_config(self);
  return set_mode(config, mode);
}

#taskObject



152
153
154
155
156
157
# File 'ext/edlib/edlib.c', line 152

static VALUE
aligner_get_task(VALUE self)
{
  EdlibAlignConfig *config = get_config(self);
  return get_task(config);
}

#task=(task) ⇒ Object



196
197
198
199
200
201
# File 'ext/edlib/edlib.c', line 196

static VALUE
aligner_set_task(VALUE self, VALUE task)
{
  EdlibAlignConfig *config = get_config(self);
  return set_task(config, task);
}