/// <summary> /// Deserialize CanvasBin object in multiple threads /// </summary> /// <param name="inputFile">inputFile with per-chromosome CanvasBin objects.</param> /// <param name="possibleAlignments">Stores which alignments are possible (perfect and unique).</param> /// <param name="observedAlignments">Stores observed alignments from a sample.</param> /// <param name="fragmentLengths">Stores fragment length in byte format.</param> public static void DeserializeCanvasData(string inputFile, Dictionary <string, BitArray> possibleAlignments, Dictionary <string, HitArray> observedAlignments, Dictionary <string, Int16[]> fragmentLengths, Object semaphore, CanvasCoverageMode coverageMode) { IntermediateData data = null; using (FileStream stream = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { Stopwatch watch = new Stopwatch(); watch.Start(); data = ProtoBuf.Serializer.Deserialize <IntermediateData>(stream); watch.Stop(); Console.WriteLine("File: {0}", inputFile); Console.WriteLine("Time elapsed: {0}", watch.Elapsed); } Dictionary <string, BitArray> tempPossibleAlignments; Dictionary <string, HitArray> tempObservedAlignments; Dictionary <string, Int16[]> tempFragmentLengths; data.GetData(out tempPossibleAlignments, out tempObservedAlignments, out tempFragmentLengths); lock (semaphore) { foreach (KeyValuePair <string, BitArray> kvp in tempPossibleAlignments) { possibleAlignments.Add(kvp.Key, kvp.Value); } foreach (KeyValuePair <string, HitArray> kvp in tempObservedAlignments) { observedAlignments.Add(kvp.Key, kvp.Value); } if (coverageMode == CanvasCoverageMode.GCContentWeighted) { foreach (KeyValuePair <string, Int16[]> kvp in tempFragmentLengths) { fragmentLengths.Add(kvp.Key, kvp.Value); } } } }