Exemplo n.º 1
0
        static JToken Concat(IEnumerable <JToken> oprands, Evaluator eval)
        {
            var os = oprands.ToList();

            if (os.Count == 0)
            {
                throw new ExpressionException("base64 function takes at least 1 oprand");
            }
            if (os[0].Type == JTokenType.String)
            {
                var sb = new StringBuilder();
                foreach (var o in os)
                {
                    sb.Append(o);
                }
                return(sb.ToString());
            }
            else
            {
                var ret = new JArray();
                foreach (var o in os)
                {
                    ret.Concat(o.ToArray());
                }
                return(ret);
            }
        }
Exemplo n.º 2
0
        public static CalcResult calcGenotype(string code,
                                              string sn,
                                              string tableRegion     = null,
                                              string tableName       = null,
                                              string bucketRegion    = null,
                                              string bucketName      = null,
                                              string bucketRegionBIM = null,
                                              string bucketNameBIM   = null,
                                              Plink.Plink plink      = null)
        {
            var    preference = new Preference().preference;
            JArray metas      = new JArray();
            string stage      = String.Format("{0}-{1}-{2}", code, "genotype", "calculation");

            ProgressWriter.writer(sn: sn, stage: stage, status: "start").Wait();

            foreach (var meta in readDynamoTable(tableRegion: tableRegion ?? preference["Dynamo"]["MetaGenotype"]["Region"].ToString(),
                                                 tableName: tableName ?? preference["Dynamo"]["MetaGenotype"]["Name"].ToString(),
                                                 hashKey: code,
                                                 queryFilter: new QueryFilter()).Select(x => JObject.Parse(x.ToJson())))
            {
                metas.Add(meta);
            }

            List <string> snpnames = metas.Select(meta => meta["var"].ToString()).ToList();

            plink = plink ?? readPlinkS3(bucketRegion: bucketRegion ?? preference["S3"]["Plink"]["Region"].ToString(),
                                         bucketName: bucketName ?? preference["S3"]["Plink"]["Name"].ToString(),
                                         keyFAM: sn + ".fam",
                                         keyBED: sn + ".bed",
                                         keyBIMFile: sn + "_bim.txt",
                                         bucketRegionBIM: bucketRegionBIM ?? preference["S3"]["BPM"]["Region"].ToString(),
                                         bucketNameBIM: bucketNameBIM ?? preference["S3"]["BPM"]["Name"].ToString());

            var genotype = plink.checkRepeat(snpnames: snpnames).AsParallel().Select(x => x[0]).ToArray();
            var alleles  = plink.getAlleles(snpnames: snpnames);

            float result = 0;

            for (int metaIdx = 0; metaIdx < metas.Count; ++metaIdx)
            {
                var meta = metas[metaIdx];
                if (genotype[metaIdx] != 0)
                {
                    if (meta["meta"]["Eff"].ToString() == alleles[metaIdx][1])
                    {
                        result += (genotype[metaIdx] - 1) * Convert.ToSingle(meta["meta"]["beta"].ToString());
                    }
                    else if (meta["meta"]["Eff"].ToString() == alleles[metaIdx][0])
                    {
                        result += (3 - genotype[metaIdx]) * Convert.ToSingle(meta["meta"]["beta"].ToString());
                    }
                }
            }

            metas = new JArray(metas.Where((meta, metaIdx) => genotype[metaIdx] != 0));

            metas = new JArray(metas.Concat(metas));

            ProgressWriter.writer(sn: sn, stage: stage, status: "end").Wait();

            return(new CalcResult(result, metas));
        }