示例#1
0
        private void doTraining(CreatePredictorVM vm, IEnumerable <PDBFile> trainingFiles, IDictionary <string, IDictionary <Residue, bool> > referenceInterface, IDictionary <string, IDictionary <string, ProteinGraph> > graphs)
        {
            var Feature = new AverageHydrophobicityFeature();

            var values = new LinkedList <AgO <double, ResidueNode> >();

            foreach (var trainingFile in trainingFiles)
            {
                var req = new RequestRasa(trainingFile);
                req.RequestInDefaultContext();
                var rasa = req.Rasavalues;
                foreach (var entry in graphs[trainingFile.Name])
                {
                    Feature.Compute(entry.Value);
                    //values.AddRange(entry.Value.Nodes.Select(node => new AgO<double, ResidueNode>(Feature.ValueOf(node.Data.Residue) * rasa[node.Data.Residue], node.D
//)));
                }
            }

            Max = values.Max(v => v.Data1);

            //var intervals = values.DivideByScoreAequidistant(val => val.Data1, vm.DivisionIntervals);
            //var pts = new LinkedList<AgO<double, double>>();
            //for (int i = 0; i < intervals.Length; i++)
            //{
            //    var interval = intervals[i];
            //    var pt = new AgO<double, double>();
            //    pt.Data1 = ((double)i + 1) / intervals.Length;
            //    var iface = (interval.Sum(val => referenceInterface[val.Data2.Residue.PDB.Name][val.Data2.Residue] ? 1.0 : 0.0));
            //    pt.Data2 = iface / interval.Count();
            //    pts.Add(pt);
            //}
            //ValueFunction = new StepFunction(pts);
        }
示例#2
0
        private void OnRequest(RequestRasa obj)
        {
            if (buffer.ContainsKey(obj.File))
            {
                obj.Rasavalues = new Dictionary <Residue, double>(buffer[obj.File]);
            }
            else
            {
                foreach (var chain in obj.File.Chains)
                {
                    var rasaFile = Directory.GetFiles(RasaFiles).FirstOrDefault(file => file.Contains(obj.File.Name + "_" + chain.Name));
                    if (rasaFile == null)
                    {
                        var temp = " -jar protein-pdb-asa.jar -pdbfile "
                                   + PDBFiles + obj.File.Name + "_" + chain.Name + ".txt" + " -pdb " + obj.File.Name + " -chain " + chain.Name + " -rasafile "
                                   + RasaFiles + obj.File.Name + "_" + chain.Name + ".rasa";
                        //compute Rasa:
                        var processInfo = new ProcessStartInfo("java", temp)
                        {
                            CreateNoWindow  = true,
                            UseShellExecute = false
                        };
                        Process proc;

                        if ((proc = Process.Start(processInfo)) == null)
                        {
                            throw new InvalidOperationException("??");
                        }

                        proc.WaitForExit();
                        int exitCode = proc.ExitCode;
                        proc.Close();
                    }
                    //else
                    {
                        rasaFile = rasaFile ?? Directory.GetFiles(RasaFiles).FirstOrDefault(file => file.Contains(obj.File.Name + "_" + chain.Name));
                        using (var reader = new StreamReader(rasaFile))
                        {
                            string line = "";
                            while ((line = reader.ReadLine()) != null)
                            {
                                var words   = Regex.Split(line, "\\s");
                                var nodeid  = words[0].Substring(7);
                                var rasa    = Math.Min(1.0, double.Parse(words[3], CultureInfo.InvariantCulture));
                                var residue = chain.Residues.First(res => res.Id.Equals(nodeid));
                                obj.Rasavalues.Add(residue, rasa);
                            }
                        }
                    }
                }
                buffer.Add(obj.File, new Dictionary <Residue, double>(obj.Rasavalues));
            }
        }
示例#3
0
        private Dictionary <string, Dictionary <Residue, bool> > doPrediction(PDBFile file, IDictionary <string, ProteinGraph> graphs)
        {
            var dict    = new Dictionary <string, Dictionary <Residue, bool> >();
            var Feature = new AverageHydrophobicityFeature();
            var req     = new RequestRasa(file);

            req.RequestInDefaultContext();
            var rasa = req.Rasavalues;

            //Threshold = 0.5;
            //foreach (var graph in graphs)
            //{
            //    Feature.Compute(graph.Value);
            //    var valdict = new Dictionary<ResidueNode, double[]>();
            //    var edgeScores = new double[2, 2] { { 1.2, 0.6 }, { 0.6, 1.0 } };
            //    foreach (var node in graph.Value.Nodes)
            //    {
            //        var val = (Feature.ValueOf(node.Data.Residue) * rasa[node.Data.Residue]) / Max;
            //        valdict.Add(node, new double[2] { val, 1 - val });
            //    }
            //    var edgedict = new Dictionary<SimpleEdge<ResidueNode>, double[,]>();
            //    foreach (var edge in graph.Value.Edges)
            //    {
            //        edgedict.Add(edge, edgeScores);
            //    }

            //    var predDict = new Dictionary<Residue, bool>();
            //    dict.Add(graph.Key, predDict);

            //    var crfGraph = graph.Value.CreateGraph(valdict, edgedict);

            //    //var options = new MarginalizeByResamplingOptions(2, 200);
            //    //foreach (var node in crfNodes)
            //    //{
            //    //    var probs = MarginalizeByResampling.Do(crfNodes, node, options);

            //    //    predDict.Add(graph.Value.Nodes.First(nd => nd.Residue.Id.Equals(node.Id)).Residue, probs[0] >= Threshold);
            //    //}
            //    var result = SimpleSampling.Do(crfGraph, 2000);

            //    foreach (var node in crfGraph.Nodes)
            //    {
            //        var score1 = result[new Assign() { Node = node, Label = 0 }];
            //        var score2 = result[new Assign() { Node = node, Label = 1 }];
            //        var prob = score2 / (score1 + score2);
            //        predDict.Add(graph.Value.Nodes.First(nd => nd.Data.Residue.Id.Equals(node.Data.Id)).Residue, prob >= Threshold);
            //    }

            //}
            return(dict);
        }
示例#4
0
        private void OnProvidePDBInfo(ProvidePDBInfo obj)
        {
            var options = obj.Options;
            var pdbId   = options.PDBId;

            var pdbinfo = default(PDBInfo);
            var req     = new GetPDBs(pdbId.ToIEnumerable());

            req.RequestInDefaultContext();
            var file = req.Files.FirstOrDefault();

            if (req.Files.NotNullOrEmpty())
            {
                pdbinfo = new PDBInfo(file);
            }

            if (options.ComputeRasa)
            {
                var reqR = new RequestRasa(file);
                reqR.RequestInDefaultContext();
                var rasa = reqR.Rasavalues;
            }

            if (options.ComputeInterface)
            {
                var request = new RequestInterface(pdbinfo.PDBFile.ToIEnumerable(), options.InterfaceDefDistance, options.InterfaceUseVanDerWaalsRadii);
                request.RequestInDefaultContext();
                pdbinfo.Interface.Clear();
                foreach (var residue in pdbinfo.PDBFile.Residues)
                {
                    pdbinfo.Interface.Add(residue, request.Interface[pdbinfo.PDBFile.Name][residue]);
                }
            }

            if (options.ComputeGraph)
            {
                pdbinfo.Graphs = CreateProteinGraph.Do(pdbinfo.PDBFile, options.GraphNeighbourDistance, options.GraphNodeCenterDef);

                if (!(pdbinfo.Interface.Count == 0))
                {
                    foreach (var pgraph in pdbinfo.Graphs)
                    {
                        pgraph.Value.Nodes.Where(n => pdbinfo.Interface[n.Data.Residue]).Each((node) => node.Data.IsRefInterface = true);
                    }
                }
            }

            obj.PDBInfo = pdbinfo;
        }
示例#5
0
        private void doTraining(CreatePredictorVM vm, IEnumerable <PDBFile> trainingFiles, IDictionary <string, IDictionary <Residue, bool> > referenceInterface, IDictionary <string, IDictionary <string, ProteinGraph> > graphs)
        {
            var Feature = new AverageHydrophobicityFeature();

            var values = new LinkedList <AgO <double, ResidueNode> >();

            foreach (var trainingFile in trainingFiles)
            {
                var req = new RequestRasa(trainingFile);
                req.RequestInDefaultContext();
                var rasa = req.Rasavalues;
                foreach (var entry in graphs[trainingFile.Name])
                {
                    Feature.Compute(entry.Value);
                    //values.AddRange(entry.Value.Nodes.Select(node => new AgO<double, ResidueNode>(Feature.ValueOf(node.Data.Residue) * rasa[node.Data.Residue], node)));
                }
            }

            Max = values.Max(v => v.Data1);
        }
示例#6
0
        private Dictionary <string, Dictionary <Residue, bool> > doPrediction(PDBFile file, IDictionary <string, ProteinGraph> graphs)
        {
            var dict    = new Dictionary <string, Dictionary <Residue, bool> >();
            var Feature = new AverageHydrophobicityFeature();
            var req     = new RequestRasa(file);

            req.RequestInDefaultContext();
            var rasa = req.Rasavalues;

            foreach (var graph in graphs)
            {
                Feature.Compute(graph.Value);

                var predDict = new Dictionary <Residue, bool>();
                dict.Add(graph.Key, predDict);

                foreach (var node in graph.Value.Nodes)
                {
                    predDict.Add(node.Data.Residue, (Feature.ValueOf(node.Data.Residue) * rasa[node.Data.Residue]) / Max >= Threshold);
                }
            }
            return(dict);
        }