Exemplo n.º 1
0
        public static List <PstTagList> PstTagInfoList(List <List <PstTagsDto> > LadderList, SearchParametersDto parameters)
        {
            string psttags;
            int    psttaglength;
            double PstTagErrorSum;
            double pstintensity;
            double rootmeansquareerror;


            var psttaginfolist = new List <Psts>();

            for (int indexouterLadderList = 0; indexouterLadderList <= LadderList.Count - 1; indexouterLadderList++)
            {
                psttaglength   = LadderList[indexouterLadderList].Count;
                psttags        = "";
                PstTagErrorSum = 0;
                pstintensity   = 0;

                for (int indexinnerLadderList = 0; indexinnerLadderList <= LadderList[indexouterLadderList].Count - 1; indexinnerLadderList++)
                {
                    psttags = psttags + LadderList[indexouterLadderList][indexinnerLadderList].AminoAcidSymbol;

                    PstTagErrorSum = PstTagErrorSum + Math.Pow(LadderList[indexouterLadderList][indexinnerLadderList].TagError, 2);
                    pstintensity   = pstintensity + LadderList[indexouterLadderList][indexinnerLadderList].averageIntensity; //averageIntensity= mean intensity of 2 peaks(home peak and hop peak)
                }
                rootmeansquareerror = (Math.Pow(PstTagErrorSum, .5) / psttaglength) * 10;
                pstintensity        = pstintensity / psttaglength;                                      ///Panga Modlsdajl
                var psttaginfo = new Psts(psttaglength, psttags, PstTagErrorSum, rootmeansquareerror, pstintensity);

                psttaginfolist.Add(psttaginfo);
            }

            //Finding the Unique PSTs: Remove all other redundant PSTs but keep only one having lowest Root Mean Square Error(RMSE)
            //If 2 or more Tags are same then also keep just one

            var uniquepst            = psttaginfolist.Select(test => test.psttags).Distinct().ToList();
            var UniquePstTagInfoList = new List <Psts>();                                         //This will store data about Unique Pst Tag Information    ////////IF POSSIBLE ASSIGN THE SIZE OF "uniquepst.Count"

            for (int indexuniquepst = 0; indexuniquepst <= uniquepst.Count - 1; indexuniquepst++) // This loop will run on the Unique(distinct) PSTTAGS
            {
                var uniquepsttag = uniquepst[indexuniquepst];                                     //Each Unique(distinct) PSTTAG will be taken for selecting all corresponding data against this PSTTAG

                var UniquePstTagMinError = (from c in psttaginfolist
                                            group c by c.psttags into g
                                            where g.Key == uniquepsttag
                                            select new { psttags = g.Key, MinPstTagErrorSum = g.Select(m => m.PstTagErrorSum).Min() }).ToList(); // PSTTAG SELECTED; Select That list's Row which have Minimum "PST TAG ERROR SUM"

                for (int indexpsttaginfolist = 0; indexpsttaginfolist <= psttaginfolist.Count - 1; indexpsttaginfolist++)
                {
                    if (psttaginfolist[indexpsttaginfolist].psttags == uniquepsttag && psttaginfolist[indexpsttaginfolist].PstTagErrorSum == UniquePstTagMinError[0].MinPstTagErrorSum)
                    {
                        var temporaryData = psttaginfolist[indexpsttaginfolist];
                        UniquePstTagInfoList.Add(psttaginfolist[indexpsttaginfolist]);
                        break;  //If 2 or more Tags are same then, keep just one AND BREAK THE LOOP...
                    }
                }
            }


            //Filter tags according to fulltag error threshold
            var FilteredTagList = new List <Psts>();
            List <PstTagList> FinalPstTagList = new List <PstTagList>();

            for (int indexUniquePstTagInfoList = 0; indexUniquePstTagInfoList <= UniquePstTagInfoList.Count - 1; indexUniquePstTagInfoList++)
            {
                // Filtering tags According to PST Tolerance & Scoring Tag Length
                if (UniquePstTagInfoList[indexUniquePstTagInfoList].rootmeansquareerror <= parameters.PSTTolerance)
                {
                    var ScoreError = Math.Exp(-2 * UniquePstTagInfoList[indexUniquePstTagInfoList].rootmeansquareerror);

                    double ScoreForLength  = Math.Pow(UniquePstTagInfoList[indexUniquePstTagInfoList].psttaglength, 2);
                    double PstTagFrequency = UniquePstTagInfoList[indexUniquePstTagInfoList].PstTagIntensity * ScoreForLength;

                    var tempList = new PstTagList(UniquePstTagInfoList[indexUniquePstTagInfoList].psttaglength, UniquePstTagInfoList[indexUniquePstTagInfoList].psttags, ScoreError, PstTagFrequency);
                    FinalPstTagList.Add(tempList);
                }
            }
            return(FinalPstTagList);
        }
Exemplo n.º 2
0
        public static List <PstTagList> AccomodateIsoforms(List <PstTagList> FinalPstTagList, SearchParametersDto parameters)
        {
            char[]            ResidueForReplacement = { 'L', 'D', 'N', 'E', 'Q' };
            string            newResidue;
            List <PstTagList> NewAccomodatedPstTagList = new List <PstTagList>();

            for (int indexFinalPstTagList = 0; indexFinalPstTagList <= FinalPstTagList.Count - 1; indexFinalPstTagList++)   //Pura Chlana ha islya...
            {
                List <PstTagList> RowofFinalPstTagList = new List <PstTagList>();
                RowofFinalPstTagList.Add(FinalPstTagList[indexFinalPstTagList]);



                for (int indexResidueAA = 0; indexResidueAA <= ResidueForReplacement.Length - 1; indexResidueAA++)                //ResidueForReplacement wise Chlana ha islya
                {
                    char   OldResidue          = ResidueForReplacement[indexResidueAA];
                    string BeforeAccomodatePst = RowofFinalPstTagList[0].PstTags;

                    if (BeforeAccomodatePst.Contains(OldResidue))
                    {
                        newResidue = " ";

                        if (OldResidue == 'L')//Here I think Switch Case will be more better....!!!!
                        {
                            newResidue = "I";
                        }
                        else if (OldResidue == 'D')
                        {
                            newResidue = "B";
                        }
                        else if (OldResidue == 'N')
                        {
                            newResidue = "B";
                        }
                        else if (OldResidue == 'E')
                        {
                            newResidue = "Z";
                        }
                        else if (OldResidue == 'Q' && parameters.HopThreshhold <= 1.5)
                        {
                            newResidue = "Z";
                        }
                        else if (OldResidue == 'Q' && parameters.HopThreshhold > 1.5)
                        {
                            newResidue = "K";
                        }


                        for (int iter = 0; iter <= BeforeAccomodatePst.Length - 1; iter++)
                        {
                            if (BeforeAccomodatePst[iter] == OldResidue)
                            {
                                var ResidueRemoved  = BeforeAccomodatePst.Remove(iter, 1);
                                var ResidueInserted = ResidueRemoved.Insert(iter, newResidue);

                                var AccomodatedPstTag = ResidueInserted;
                                var tempD             = new PstTagList(FinalPstTagList[indexFinalPstTagList].PstTagLength, AccomodatedPstTag, FinalPstTagList[indexFinalPstTagList].PstErrorScore, FinalPstTagList[indexFinalPstTagList].PstFrequency);

                                NewAccomodatedPstTagList.Add(tempD);
                                BeforeAccomodatePst = AccomodatedPstTag;// Just for using same PST Tag for further Accommodation.......
                            }
                        }
                    }
                }
            }
            FinalPstTagList.AddRange(NewAccomodatedPstTagList);
            return(FinalPstTagList);
        }