/// <summary>
        /// Writes a full Second of Data from
        /// </summary>
        /// <param name="forceIndexGen"></param>
        public void WriteSecond(List <ITimeSeriesValue> data, bool forceIndexGen = false)
        {
            if (data.Count == 0)
            {
                return;
            }

            string year   = data.FirstOrDefault()?.Timestamp.ToString("yyyy");
            string month  = data.FirstOrDefault()?.Timestamp.ToString("MM");
            string day    = data.FirstOrDefault()?.Timestamp.ToString("dd");
            string hour   = data.FirstOrDefault()?.Timestamp.ToString("HH");
            string minute = data.FirstOrDefault()?.Timestamp.ToString("mm");
            string second = data.FirstOrDefault()?.Timestamp.ToString("ss");

            double min = data.Min(pt => pt.Value);
            double max = data.Max(pt => pt.Value);
            double avg = data.Average(pt => pt.Value);

            m_activeSummary[NLevels].Max        = max;
            m_activeSummary[NLevels].Min        = min;
            m_activeSummary[NLevels].N          = data.Count;
            m_activeSummary[NLevels].Sum        = data.Sum(pt => pt.Value);
            m_activeSummary[NLevels].SquaredSum = data.Sum(pt => pt.Value * pt.Value);
            m_activeSummary[NLevels].Tmax       = new DateTime(data.Max(item => item.Timestamp), DateTimeKind.Utc);
            m_activeSummary[NLevels].Tmin       = new DateTime(data.Min(item => item.Timestamp), DateTimeKind.Utc);

            GenerateIndex(5);

            if (string.IsNullOrEmpty(m_activeFolder[0]))
            {
                m_activeFolder[0] = year;
            }

            if (string.IsNullOrEmpty(m_activeFolder[1]))
            {
                m_activeFolder[1] = month;
            }

            if (string.IsNullOrEmpty(m_activeFolder[2]))
            {
                m_activeFolder[2] = day;
            }

            if (string.IsNullOrEmpty(m_activeFolder[3]))
            {
                m_activeFolder[3] = hour;
            }

            if (string.IsNullOrEmpty(m_activeFolder[4]))
            {
                m_activeFolder[4] = minute;
            }

            if (minute != m_activeFolder[4] || forceIndexGen)
            {
                GenerateIndex(4);
            }
            if (hour != m_activeFolder[3] || forceIndexGen)
            {
                GenerateIndex(3);
            }
            if (day != m_activeFolder[2] || forceIndexGen)
            {
                GenerateIndex(2);
            }
            if (month != m_activeFolder[1] || forceIndexGen)
            {
                GenerateIndex(1);
            }
            if (year != m_activeFolder[0] || forceIndexGen)
            {
                GenerateIndex(0);
            }

            m_activeFolder[0] = year;
            m_activeFolder[1] = month;
            m_activeFolder[2] = day;
            m_activeFolder[3] = hour;
            m_activeFolder[4] = minute;

            int nSize = GraphPoint.NSize + (8 + 8) * data.Count;

            byte[] rawData = new byte[nSize];

            // File format version 1 is GraphPoint -> Data (Ticks -> Value)
            GraphPoint fileSummary = new GraphPoint();

            fileSummary.N          = data.Count();
            fileSummary.Sum        = data.Sum(pt => pt.Value);
            fileSummary.SquaredSum = data.Sum(pt => pt.Value * pt.Value);
            fileSummary.Min        = min;
            fileSummary.Max        = max;
            fileSummary.Tmax       = new DateTime(data.Max(item => item.Timestamp), DateTimeKind.Utc);
            fileSummary.Tmin       = new DateTime(data.Min(item => item.Timestamp), DateTimeKind.Utc);

            fileSummary.ToByte().CopyTo(rawData, 0);


            int j = GraphPoint.NSize;

            for (int i = 0; i < data.Count; i++)
            {
                BitConverter.GetBytes(data[i].Timestamp.Value).CopyTo(rawData, j);
                BitConverter.GetBytes(data[i].Value).CopyTo(rawData, j + 8);
                j = j + 16;
            }

            //Generate Folder if required

            string folder = $"{m_rootFolder}{Path.DirectorySeparatorChar}{string.Join(Path.DirectorySeparatorChar,m_activeFolder)}";

            Directory.CreateDirectory(folder);

            using (BinaryWriter writer = new BinaryWriter(File.OpenWrite($"{folder}{Path.DirectorySeparatorChar}{second}.bin")))
            {  // Writer raw data
                writer.Write(rawData);
                writer.Flush();
                writer.Close();
            }
        }