aboutsummaryrefslogtreecommitdiffstats
path: root/SNP.sc
blob: da297da3ba3f658baf08523c9fc41681af1d59dc (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);
    });
  }
}