public static NexteraManifest GetUpdatedNexteraManifestsWithNewRegions(NexteraManifest manifest, List<RegionStatistics> regionStats) { NexteraManifest nexteraManifestsWithNewRegions = new NexteraManifest(manifest); // create a dictionary for new regions Dictionary<string, RegionStatistics> regionStatsLookup = new Dictionary<string, RegionStatistics>(); foreach (RegionStatistics regionStat in regionStats) { regionStatsLookup.Add(regionStat.RegionName, regionStat); } //update the regions if (nexteraManifestsWithNewRegions.Regions != null && nexteraManifestsWithNewRegions.Regions.Count > 0) { var newRegions = new List<NexteraManifest.ManifestRegion>(); foreach (NexteraManifest.ManifestRegion region in nexteraManifestsWithNewRegions.Regions) { NexteraManifest.ManifestRegion tmpRegion = new NexteraManifest.ManifestRegion(region); if (!regionStatsLookup.ContainsKey(region.Name)) continue; tmpRegion.Start = regionStatsLookup[region.Name].StartPosition; tmpRegion.End = regionStatsLookup[region.Name].EndPosition; newRegions.Add(tmpRegion); } nexteraManifestsWithNewRegions.Regions = newRegions; } return nexteraManifestsWithNewRegions; }
public static void WriteNexteraManifests(NexteraManifest manifest, TextWriter writer) { writer.WriteLine("#{0}: {1}", "Manifest Type", "Regions"); writer.WriteLine("#{0}: {1}", "Target Region Count", manifest.Regions.Count); writer.WriteLine("#{0}: {1}", "Date", DateTime.Now.ToShortDateString()); writer.WriteLine("[Header]"); //writer.WriteLine("Manifest Version\t1.0"); if (!string.IsNullOrEmpty(manifest.GenomeName)) { writer.WriteLine("ReferenceGenome\t" + manifest.GenomeName); } writer.WriteLine("[Regions]"); List<string> headers = new List<string>(); if (manifest.ColumnNames != null && manifest.ColumnNames.Length > 0) { foreach (int columnNumber in manifest.ColumnNumbers) { if (columnNumber >= 0 && columnNumber < manifest.ColumnNames.Length) { headers.Add(manifest.ColumnNames[columnNumber]); } } writer.WriteLine(string.Join("\t", headers.ToArray())); } if (manifest.Regions != null && manifest.Regions.Count > 0) { foreach (NexteraManifest.ManifestRegion region in manifest.Regions) { NexteraManifest.ManifestRegion tmpRegion = new NexteraManifest.ManifestRegion(region); List<string> line = new List<string>(); foreach (string header in headers) { switch (header.ToLowerInvariant()) { case "name": line.Add(tmpRegion.Name); break; case "chromosome": line.Add(tmpRegion.Chromosome); break; case "start": case "amplicon start": line.Add(tmpRegion.Start.ToString()); break; case "end": case "amplicon end": line.Add(tmpRegion.End.ToString()); break; case "startprobelength": case "upstream probe length": line.Add(tmpRegion.StartProbeLength.ToString()); break; case "endprobelength": case "downstream probe length": line.Add(tmpRegion.EndProbeLength.ToString()); break; case "groupname": case "group name": case "group": case "ip group": line.Add(tmpRegion.GroupName); break; } } writer.WriteLine(string.Join("\t", line.ToArray())); } } }