private void WriteProteinsPerMinute(List<Peptide> allPeptides, List<Protein> proteins, string outputDirectory)
{
string fileName = Path.Combine(outputDirectory, "proteins_per_minute.csv");
Log("Writing file " + fileName);
double maxPeptides = allPeptides.Count;
List<ProteinGroup> groups = null;
using (StreamWriter writer = new StreamWriter(fileName))
{
writer.WriteLine("Time (min),Unique Peptides,Protein Groups");
double i = 0;
while(i < 1000)
{
HashSet<Peptide> currentPeptides = new HashSet<Peptide>(allPeptides.Where(pep => pep.PSMs.Any(psm => psm.RetentionTime <= i)));
List<Protein> currentProteins = new List<Protein>();
foreach (Peptide peptide in allPeptides)
{
peptide.ProteinGroups.Clear();
}
if (currentPeptides.Count > 0)
{
foreach (Protein protein in proteins)
{
Protein protein2 = null;
bool first = true;
foreach (Peptide peptide in protein.Peptides)
{
if (currentPeptides.Contains(peptide))
{
if (first)
{
protein2 = new Protein(protein.Description, protein.Sequence);
currentProteins.Add(protein2);
first = false;
}
protein2.AddPeptide(peptide);
}
}
}
}
groups = GroupProteins(currentProteins, false);
int fdrGroups = groups.Count(g => g.PassesFDR);
writer.WriteLine(i + "," + currentPeptides.Count + "," + fdrGroups);
ProgressUpdate(currentPeptides.Count / maxPeptides);
if (currentPeptides.Count >= maxPeptides)
break;
i++;
}
}
return;
}