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



258
259
260
261
262
263
# File 'ext/edlib/edlibext.c', line 258

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

#additional_equalities=(equalities) ⇒ Object



327
328
329
330
331
332
333
# File 'ext/edlib/edlibext.c', line 327

static VALUE
aligner_set_additional_equalities(VALUE self, VALUE equalities)
{
	EdlibAlignConfig *config = aligner_get_config(self);
	EdlibEqualityPair *eqpairs = aligner_get_equalityPairs(self);
	return set_additional_equalities(config, eqpairs, equalities);
}

#align(query, target) ⇒ Object



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
431
432
433
434
435
436
437
438
439
440
441
# File 'ext/edlib/edlibext.c', line 372

static VALUE
aligner_align(VALUE self, VALUE query, VALUE target)
{
	EdlibAlignConfig *config = aligner_get_config(self);
	if (!config)
	{
		rb_raise(rb_eRuntimeError, "config is NULL");
	}

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

	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



335
336
337
338
339
340
341
342
343
344
345
346
347
348
# File 'ext/edlib/edlibext.c', line 335

static VALUE
aligner_config_hash(VALUE self)
{
	EdlibAlignConfig *config = aligner_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



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

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

#k=(k) ⇒ Object



90
91
92
93
94
95
# File 'ext/edlib/edlibext.c', line 90

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

#modeObject



113
114
115
116
117
118
# File 'ext/edlib/edlibext.c', line 113

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

#mode=(mode) ⇒ Object



162
163
164
165
166
167
# File 'ext/edlib/edlibext.c', line 162

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

#taskObject



185
186
187
188
189
190
# File 'ext/edlib/edlibext.c', line 185

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

#task=(task) ⇒ Object



234
235
236
237
238
239
# File 'ext/edlib/edlibext.c', line 234

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