public DepthCounter(IDoubleStatistic[] statisticsToCollect = null, bool optimizeDepth = false) { stats = new StatisticsCollector <CallGraphEdge>( Utils.MethodParametersNames(this, "StatisticsRecord"), statisticsToCollect ?? StatisticsCollector <CallGraphEdge> .DefaultStatistics() ); operationCallStack = new Stack <OperationCallRecord>(); OperationCallRecord opRec = new OperationCallRecord(); opRec.OperationName = CallGraphEdge.CallGraphRootHashed; operationCallStack.Push(opRec); this.optimizeDepth = optimizeDepth; if (optimizeDepth) { qubitStartTimes = new SortedQubitPool(); qubitEndTimes = new SortedQubitPool(); } else { qubitAvailabilityTime = new QubitAvailabilityTimeTracker( initialCapacity: 128, // Reasonable number to preallocate. defaultAvailabilityTime: 0.0); } }