aboutsummaryrefslogtreecommitdiffstats
path: root/SNP.sc
blob: 5249971af2bc2b217cc5248b1214a328db9d21a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
SNP{//TODO: use vectorial represntations only, strip chromosome (redundant, as stored in SNPDict already), 
	var <chromosome;//chromosome as Symbol
	var <vecChromosome;//corresponding number
	var <id;//rsid of the SNP
	var <position;//position of SNP on own chromosome
	var <base;//base of the SNP (single or pair)
	var <vecBase;//vectorial representation of the base (pair)
	var <>resolver;//the other (two) combination(s) of the position
	var <vecResolver;//vectorial representation of the other combination(s)

	*new{
		arg aChromosome, aPosition = 0, aId, aBase, aResolver;
		^super.new.init(aChromosome, aPosition, aId, aBase, aResolver);
	}

	init{
		arg aChromosome, aPosition, aId, aBase, aResolver;
		chromosome = aChromosome.asSymbol;
		vecChromosome = SNPInfo.convertChromosome(chromosome);
		position = aPosition.asFloat;
		id = aId.asSymbol;
		base = aBase.asSymbol;
		resolver = aResolver.asArray;
		vecBase = SNPInfo.baseToVec(base);
		vecResolver = SNPInfo.baseToVec(resolver);
	}
	
	hasResolver{//check if this SNP has a resolver
		var resolved = true;
		if(resolver.isArray,{
			resolver.do({
				arg item,i;
				if(item==\none,{
					resolved = false
				});
			});
			^resolved;
		},{
			if(resolver!=\none,{
				^true;
			},{
				^false;
			});
		});
	}

	updateResolver{//update a resolver and its vector representation
		arg newResolver;
		if(newResolver!=resolver,{
			resolver = newResolver;
			vecResolver = SNPInfo.baseToVec(resolver);
		});
	}
}