private static void Main(string[] args) { var @out = Console.Out; //var @out = new StreamWriter("output.json"); var error = Console.Error; if (args.Length != 3) { error.WriteLine("Invalid arguments parameters"); Environment.Exit(-1); } var fileName = args[0]; var path = args[1]; var value = args[2]; var source = JArray.Parse(File.ReadAllText(path)); var dictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(value); var source2 = from c in source where c["Tag"] != null select new TagInfo { Accession = c["Accession"].ToObject<string>(), Tag = c["Tag"].ToObject<string>(), BeginIndex = c["LocationBegin"].ToObject<int>(), EndIndex = c["LocationEnd"].ToObject<int>() }; var source3 = (from c in source2 orderby c.Accession, c.BeginIndex group c by c.Accession into g select g).ToList(); var uniprot = Biosek.Formats.UniProt.uniprot.LoadFromFile(fileName); var workspace = new Workspace(); foreach (var site in dictionary) { var list = (from accession in source3 let proteinsInAccession = accession.ToList() from index in Enumerable.Range(1, proteinsInAccession.Count - 1) let proteinA = proteinsInAccession[index - 1] let proteinB = proteinsInAccession[index] where proteinA.EndIndex == proteinB.BeginIndex - 1 && string.Concat(proteinA.Tag, "-", proteinB.Tag) == site.Key select Tuple.Create(proteinA, proteinB)).ToList(); error.WriteLine("Found {0} cleavage sites for {1}", list.Count, site.Key); if (site.Value is JArray) { foreach (var current in site.Value as JArray) { var windowString = current.ToObject<string>(); Sample(site.Key, uniprot, list, windowString, workspace); } } else { Sample(site.Key, uniprot, list, site.Value as string, workspace); } } var jsonSerializer = new JsonSerializer(); var value2 = from c in workspace.Dataset select new { tag = c.Class, positives = from d in c.Positives.Entries select new { i = d.Begin, c = d.Samples }, negatives = from d in c.Negatives.Entries select new { i = d.Begin, c = d.Samples } }; //jsonSerializer.Formatting = Formatting.Indented; jsonSerializer.Serialize(@out, new { buffer = workspace.ReadBuffer(0, workspace.BufferLength), samples = value2 }); @out.Close(); }