public List <PstTagList> GeneratePeptideSequenceTags(SearchParametersDto parameters, MsPeaksDto peakData) { //Converting Peak List Data into 2D List var peakDatalist = new List <peakData2Dlist>(); //Making a 2D list(peakDatalist) in which Mass & Intensity includes {{FARHAN!! ITS NOT AN EFFICIENT WAY}} NOt NEEDED THIS IF ONCE MsPeaksDto.cs is modified for (int row = 0; row <= peakData.Mass.Count - 1; row++) { var dataforpeakDatalist = new peakData2Dlist(peakData.Mass[row], peakData.Intensity[row]); peakDatalist.Add(dataforpeakDatalist); } var peakDatalistsort = peakDatalist.OrderBy(n => n.Mass).ToArray(); double[] MassPeakData = peakDatalistsort.Select(n => n.Mass).ToArray(); double[] IntensityPeakData = peakDatalistsort.Select(n => n.Intensity).ToArray(); var pstList = new List <NewPstTagsDtoGpu>(); GeneratePstGpu(MassPeakData, pstList, parameters.HopThreshhold, IntensityPeakData); //if (IsFilterPstByLength(parameters)) // pstList = pstList.Where(t => t.AminoAcidTag.Length >= parameters.MinimumPstLength && t.AminoAcidTag.Length <= parameters.MaximumPstLength).ToList(); //FilterTagsWithMultipleOccurences(pstList); ////////////var PstTagListGpu = AccomodateIsoforms(pstList, parameters); //AccomodateIsoforms(pstList); //return pstList; var pstList2 = new List <PstTagList>(); return(pstList2); }
// Extracts a list Peptide Sequence Tags from the MS/MS peaklist public List <PstTagList> GeneratePeptideSequenceTags(SearchParametersDto parameters, MsPeaksDto peakData) { List <PstTagList> PstTagCPU = new List <PstTagList>(); //////// ************* FARHAN!!! WHAT IF THERE WILL BE NO PST TAGS FOUND THEN, WHAT COULD HAPPENED...????? //////// ************* FARHAN!!! WHAT IF THERE WILL BE NO PST TAGS FOUND THEN, WHAT COULD HAPPENED...????? //////// ************* FARHAN!!! WHAT IF THERE WILL BE NO PST TAGS FOUND THEN, WHAT COULD HAPPENED...????? //Making a 2D list(peakDatalist) in which Mass & Intensity includes var peakDatalist = new List <peakData2Dlist>(); for (int row = 0; row <= peakData.Mass.Count - 1; row++) { var dataforpeakDatalist = new peakData2Dlist(peakData.Mass[row], peakData.Intensity[row]); peakDatalist.Add(dataforpeakDatalist); } //Sort the peakDatalist with respect to the Mass in ascending order var peakDatalistsort = peakDatalist.OrderBy(n => n.Mass).ToList(); var singleLengthPstTagList = GenerateSingleLengthPstList(parameters, peakDatalistsort); // This method will extract Single Length PST Tags var multipleLenghtTagList = GenerateMultipleLenghtPstList(parameters, singleLengthPstTagList); // This method will extract Multiple Length PST Tags //var pstTagsdata = multipleLenghtTagList; // Multiple Tags //////// ************* FARHAN!!! WHAT IF THERE WILL BE NO PST TAGS FOUND THEN, WHAT COULD HAPPENED...????? if (multipleLenghtTagList.Count != 0) // Here filtering out tags according to MIN & MAX threshold of PST lengths... { List <List <PstTagsDto> > TrimPstTagsList = PSTCpuGpuCombineMethod.TrimPstTags(multipleLenghtTagList, parameters); // Break the larger Tags into all possible smaller tags &&& Filtering the Tags according to Minimum-Maximum Range Length of PST var FinalPstTagList = PSTCpuGpuCombineMethod.PstTagInfoList(TrimPstTagsList, parameters); //Calculating PST Tag Error, PST intensity, & Root Mean Square Error etc. && 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 if (FinalPstTagList.Count != 0) { //var AccoFinalPstTagList = AccomodateIsoforms(FinalPstTagList, parameters); // Its Accomodated Isoforms also, considered... COMMENT ME MORE List <PstTagList> PstTags = PSTCpuGpuCombineMethod.AccomodateIsoforms(FinalPstTagList, parameters); PstTagCPU = PstTags; } } return(PstTagCPU); }
public void TuneWholeProteinMass(MsPeaksDto peakData, double molTolerance) { //Making a 2D list(peakDatalist) in which Mass & Intensity includes var peakDatalist = new List<peakData2Dlist>(); for (int row = 0; row <= peakData.Mass.Count - 1; row++) { var dataforpeakDatalist = new peakData2Dlist(peakData.Mass[row], peakData.Intensity[row]); peakDatalist.Add(dataforpeakDatalist); } //Sort the peakDatalist with respect to the Mass in ascending order var peakDatalistsort = peakDatalist.OrderBy(n => n.Mass).ToList(); //FIGURE 5: STEP 2:::: SUMMATIONS FOR EACH M/Z I,J IN MS2 DATA [REF: SPCTRUM PAPER] //Description::: Calculate Peak Sums and shortlist those falling within user specified tolerance. var summationMassandaverageintensity = new List<peakData2Dlist>(); for (int i = 0; i <= peakDatalistsort.Count - 2; i++) //i starts from 0 so that's why "peakDatalistsort.Count - 1" and according to Formula "n-1" gives peakDatalistsort.Count - 2 { for (int j = i + 1; j <= peakDatalistsort.Count - 1; j++)//j starts from 0 so that's why peakDatalistsort.Count - 1 and according to Formula just "n" { double cpusummationMassData = peakDatalistsort[i].Mass + peakDatalistsort[j].Mass; //Making Tuple sums of MS2 masses if (peakData.WholeProteinMolecularWeight - molTolerance <= cpusummationMassData && cpusummationMassData <= peakData.WholeProteinMolecularWeight + molTolerance)//Masses & Intensities filter out due to the selected RANGE OF INTACT MASS +/- PROTEIN MASS TOLERANCE { double cpuaverageIntensityData = (peakDatalistsort[i].Intensity + peakDatalistsort[j].Intensity) / 2; var dataforsummationMassandaverageintensity = new peakData2Dlist(cpusummationMassData, cpuaverageIntensityData); summationMassandaverageintensity.Add(dataforsummationMassandaverageintensity); //Making 2D list for Mass & Intensity } } } //FIGURE 5: STEP 3 Running window have size of Proton (and starts from smallest mass of FIGURE 5: STEP 2 list) [REF: SPCTRUM PAPER] double windowposition = summationMassandaverageintensity[0].Mass; //Smallest mass selected from Tuple Sums for creating a window positon const double proton = 1.00727647; //Mass of proton var windowcapturedelementsold = new List<peakData2Dlist>(); var oldindex = new List<int>(); //CHANGE MY NAME... var count = new List<int>(); //CHANGE MY NAME... double olddiff = 1, newdiff = 0; //Add here SliderValue(BELOW) double SliderValue = 0.5699; //HARD CODE NOW FOR WORKING WILL ADD THIS FEATURE INTO THE FRONTEND FOR USER DEFINED #FutureWork3b(CPU) int summationMassandaverageintensityindex = summationMassandaverageintensity.Count - 1; while (windowposition < summationMassandaverageintensity[summationMassandaverageintensityindex].Mass) { var newindex = new List<int>(); //CHANGE MY NAME... var windowcapturedelementsnew = new List<peakData2Dlist>(); for (int i = 0; i <= summationMassandaverageintensityindex; i++) { if (windowposition <= summationMassandaverageintensity[i].Mass && summationMassandaverageintensity[i].Mass < windowposition + proton)//#DISCUSSION { var dataforwindowcapturedelementsnew = new peakData2Dlist(summationMassandaverageintensity[i].Mass, summationMassandaverageintensity[i].Intensity); windowcapturedelementsnew.Add(dataforwindowcapturedelementsnew); newindex.Add(i); } else if (summationMassandaverageintensity[i].Mass >= windowposition + proton) { break; } } count.Add(windowcapturedelementsnew.Count); int a = oldindex.Count;//count.Count;///DEL ME AFTER TESTING!!! :) if (windowcapturedelementsnew.Count > windowcapturedelementsold.Count) { windowcapturedelementsold = windowcapturedelementsnew; oldindex = newindex; } else if (windowcapturedelementsnew.Count == windowcapturedelementsold.Count) { olddiff = Math.Abs((windowcapturedelementsold[windowcapturedelementsold.Count - 1].Mass) - peakData.WholeProteinMolecularWeight); newdiff = Math.Abs((windowcapturedelementsnew[windowcapturedelementsnew.Count -1].Mass) - peakData.WholeProteinMolecularWeight); if (olddiff >= newdiff) { windowcapturedelementsold = windowcapturedelementsnew; oldindex = newindex; } } windowposition = windowposition + SliderValue; } //FIGURE 5: STEP 5:::: Applying formula [REF: SPCTRUM PAPER] double[] dataforsumoftunedmassesandintensities = new double[windowcapturedelementsold.Count];//Its tunedmassnominator according to SPECTRUM's formula for TunedMass double sumoftunedmassesandintensities = 0; double sumoftunedintensities = 0; for (int i = 0; i <= windowcapturedelementsold.Count - 1; i++) { dataforsumoftunedmassesandintensities[i] = windowcapturedelementsold[i].Mass * windowcapturedelementsold[i].Intensity; sumoftunedmassesandintensities = sumoftunedmassesandintensities + dataforsumoftunedmassesandintensities[i]; //Actually, ""intensities are not tuned"" (there isn't any terminology in OUR Mass Tuner Algorithm) according to the algorithm but just for the sake of UNDERSTANDING variable names are "dataforsumoftunedintensities" & "sumoftunedintensities". sumoftunedintensities = sumoftunedintensities + windowcapturedelementsold[i].Intensity;//Its tunedmassdenominator according to SPECTRUM's formula for TunedMass } peakData.WholeProteinMolecularWeight = sumoftunedmassesandintensities / sumoftunedintensities;// NOW, Tuned Mass will be consider as Intact Mass(WholeProteinMolecularWeight) }