Class: Edlib::Aligner

Inherits:
Object
  • Object
show all
Defined in:
lib/edlib.rb,
ext/edlib/edlibext.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



244
245
246
247
248
249
# File 'ext/edlib/edlibext.c', line 244

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

#additional_equalities=(equalities) ⇒ Object



312
313
314
315
316
317
# File 'ext/edlib/edlibext.c', line 312

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



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
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
# File 'ext/edlib/edlibext.c', line 355

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



319
320
321
322
323
324
325
326
327
328
329
330
331
332
# File 'ext/edlib/edlibext.c', line 319

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



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

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

#k=(k) ⇒ Object



76
77
78
79
80
81
# File 'ext/edlib/edlibext.c', line 76

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

#modeObject



99
100
101
102
103
104
# File 'ext/edlib/edlibext.c', line 99

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

#mode=(mode) ⇒ Object



148
149
150
151
152
153
# File 'ext/edlib/edlibext.c', line 148

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

#taskObject



171
172
173
174
175
176
# File 'ext/edlib/edlibext.c', line 171

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

#task=(task) ⇒ Object



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

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