private Dictionary<string, ExperimentGroup> GroupExperiments(IEnumerable<CsvFile> csvFiles, bool useQuant)
{
Dictionary<string, ExperimentGroup> uniqueNames = new Dictionary<string, ExperimentGroup>();
foreach (CsvFile file in csvFiles)
{
ExperimentGroup experiment;
if (string.IsNullOrEmpty(file.ExperimentName))
{
file.ExperimentName = "";
}
if(uniqueNames.TryGetValue(file.ExperimentName, out experiment))
{
experiment.CsvFiles.Add(file);
}
else
{
experiment = new ExperimentGroup(file.ExperimentName);
experiment.CsvFiles.Add(file);
uniqueNames.Add(file.ExperimentName, experiment);
using (CsvReader reader = new CsvReader(new StreamReader(file.FilePath), true))
{
// write the header only once to the two outputs
string[] headers = reader.GetFieldHeaders();
experiment.Header = string.Join(",", headers);
if (!useQuant) continue;
int headerCount = headers.Length;
experiment.TQStart = -1;
experiment.TQStop = headerCount - 2;
for (int i = 0; i < headerCount; i++)
{
string header = headers[i];
if (!header.Contains("NL)"))
continue;
experiment.TQStart = i;
break;
}
if (experiment.TQStart < 0)
{
Log("[WARNING] No quantification data found in {0} for experiment {1}", file, experiment.Name);
experiment.UseQuant = false;
break;
}
experiment.UseQuant = true;
// Get the experimental Quant headers
StringBuilder sb = new StringBuilder();
for (int i = experiment.TQStart; i <= experiment.TQStop; i++)
{
sb.Append(headers[i]);
sb.Append(',');
}
sb.Remove(sb.Length - 1, 1);
experiment.QuantHeader = sb.ToString();
}
}
}
return uniqueNames;
//Dictionary<char, ExperimentGroup> expgroups = new Dictionary<char, ExperimentGroup>();
//foreach (CsvFile csvfile in csvFiles)
//{
// ExperimentGroup exp;
// if (expgroups.TryGetValue(csvfile.ExperimentGroup, out exp))
// {
// exp.CsvFiles.Add(csvfile);
// }
// else
// {
// exp = new ExperimentGroup(csvfile.ExperimentGroup, csvfile.ExperimentName);
// exp.CsvFiles.Add(csvfile);
// expgroups.Add(csvfile.ExperimentGroup, exp);
// using (CsvReader reader = new CsvReader(new StreamReader(csvfile.FilePath), true))
// {
// // write the header only once to the two outputs
// string[] headers = reader.GetFieldHeaders();
// exp.Header = string.Join(",", headers);
// if (!useQuant) continue;
// int headerCount = headers.Length;
// exp.TQStart = -1;
// exp.TQStop = headerCount - 2;
// for (int i = 0; i < headerCount; i++)
// {
// string header = headers[i];
// if (!header.Contains("NL)"))
// continue;
// exp.TQStart = i;
// break;
// }
// if (exp.TQStart < 0)
// {
// Log("[WARNING] No quantification data found in {0} for experiment {1}", csvfile, exp.Name);
// exp.UseQuant = false;
// break;
// }
// exp.UseQuant = true;
// // Get the experimental Quant headers
// StringBuilder sb = new StringBuilder();
// for (int i = exp.TQStart; i <= exp.TQStop; i++)
// {
// sb.Append(headers[i]);
// sb.Append(',');
// }
// sb.Remove(sb.Length - 1, 1);
// exp.QuantHeader = sb.ToString();
// }
// }
//}
//return expgroups;
}