public void loadCharts()
    {
        //var canvas = GetComponentInParent<Canvas>();
        //LayoutElement layoutElementPrefab = pieChart.GetComponent<LayoutElement>();

        pieChartSlider = canvas.GetComponentInChildren <PieChartSlider>();
        //pieChartSlider.controllerDelegate = this;

        string dataPath = Kaimin.Common.Utility.GsDataPath();

        filePaths = Kaimin.Common.Utility.GetAllFiles(dataPath, "*.csv");

        SetMaxFilePosition(); //Recalculate MAX_FILE_POSITION
        SetMinFilePosition(); //Recalculate MIN_FILE_POSITION

        int pieIndex = 0;

        if (MIN_FILE_POSITION >= 0 && MAX_FILE_POSITION >= 0)
        {
            pieChartSlider.pieCharts.Add(pieChart);                     //Add Min
            pieChartSlider.filePaths.Add(filePaths[MIN_FILE_POSITION]); //Add Min
            for (int i = MIN_FILE_POSITION + 1; i <= MAX_FILE_POSITION; i++)
            {
                pieIndex++;
                pieChartSlider.PushPieChartItemData(filePaths[i]);
                pieChartSlider.PushPieChartItemLayout(Instantiate(pieChart), pieIndex);
            }

            pieChartSlider.MoveToIndex(pieIndex);
            this.UpdatePieChart(pieChartSlider, pieIndex);
        }
        else
        {
            //No data
        }
    }
    public void UpdatePieChart(PieChartSlider slider, int pieIndex, bool isToNext = false)
    {
        ChartInfo chartInfo = null;

        try
        {
            String           filePath        = slider.filePaths[pieIndex];
            PieChart         pieChart        = slider.pieCharts[pieIndex];
            List <SleepData> sleepDatas      = CSVSleepDataReader.GetSleepDatas(filePath);      //睡眠データのリスト
            SleepHeaderData  sleepHeaderData = CSVSleepDataReader.GetSleepHeaderData(filePath); //睡眠データのヘッダーデータ

            if (sleepHeaderData != null && sleepDatas != null && sleepDatas.Count > 0)
            {
                selectedPieIndex = pieIndex;

                DateTime startTime = sleepHeaderData.DateTime;
                DateTime endTime   = sleepDatas.Select(data => data.GetDateTime()).Last();

                UserDataManager.Scene.SaveGraphDate(sleepHeaderData.DateTime); //Used to move to graph when call OnToGraphButtonTap()

                //Step1: Update SleepTime
                int             sleepTimeSec = Graph.Time.GetDateDifferencePerSecond(startTime, endTime);
                System.TimeSpan ts           = new System.TimeSpan(hours: 0, minutes: 0, seconds: sleepTimeSec);
                int             hourWithDay  = 24 * ts.Days + ts.Hours; // 24時間超えた場合の時間を考慮
                string          sleepTime    = string.Format("{0:00}:{1:00}", hourWithDay, ts.Minutes);
                pieChart.sleepTimeText.text = sleepTime;

                DateTime fileDateTime = Kaimin.Common.Utility.TransFilePathToDate(filePath);
                DateTime realDateTime = CSVManager.getRealDateTime(fileDateTime);
                pieChart.sleepDateText.text = CSVManager.isInvalidDate(realDateTime) ? "-" : CSVManager.getJpDateString(realDateTime);

                //Step2: Show pie chart
                chartInfo = CSVManager.convertSleepDataToChartInfo(sleepDatas);
                if (chartInfo != null)
                {
                    double p1 = System.Math.Round((double)(chartInfo.pKaiMin * 100), 1);
                    double p2 = System.Math.Round((double)(chartInfo.pIbiki * 100), 1);
                    double p3 = System.Math.Round((double)(chartInfo.pMukokyu * 100), 1);
                    double p4 = 100 - p1 - p2 - p3;
                    p4 = p4 < 0.1 ? 0 : System.Math.Round(p4, 1);

                    //p1 = 5; p2 = 6; p3 = 7; p4 = 82;
                    //p1 = 95; p2 = 3; p3 = 2; p4 = 0;
                    double[] pieValues = new double[4] {
                        p1, p2, p3, p4
                    };                                                     //Percents of pKaiMin, Ibiki, Mukokyu, Fumei
                    string[] pieLabels = new string[4] {
                        "快眠", "いびき", "呼吸レス", "不明"
                    };
                    Utility.makePieChart(pieChart, pieValues, pieLabels, pieColors);
                }

                //Step 3: Change color of CircleOuter by sleepLevel (睡眠レベルによって色を変える)
                int    apneaCount     = sleepHeaderData.ApneaDetectionCount;
                double sleepTimeTotal = endTime.Subtract(startTime).TotalSeconds;
                //無呼吸平均回数(時)
                double apneaAverageCount = sleepTimeTotal == 0 ? 0 : (double)(apneaCount * 3600) / sleepTimeTotal; // 0除算を回避
                apneaAverageCount = Math.Truncate(apneaAverageCount * 10) / 10.0;                                  // 小数点第2位以下を切り捨て

                int sleepLevel = Utility.getSleepLevel(apneaAverageCount, chartInfo.pIbiki, sleepTimeTotal);

                String[] levelColors = new String[5] {
                    "#ff0000", "#ff6600", "#ffff4d", "#72ef36", "#0063dc"
                };
                pieChart.circleOuter.GetComponent <Image>().color = Utility.convertHexToColor(levelColors[sleepLevel - 1]);
            }
        }
        catch (System.Exception e)
        {
        }

        if (chartInfo == null) //Invalid Data
        {
            Utility.makePieChartEmpty(pieChart);

            slider.RemoveLayoutElement(pieIndex);

            if (isToNext)
            {
                if (pieIndex < slider.filePaths.Count - 1)
                {
                    slider.MoveToIndex(pieIndex + 1);
                    this.UpdatePieChart(slider, pieIndex + 1);
                }
            }
            else
            {
                if (pieIndex > 0)
                {
                    slider.MoveToIndex(pieIndex - 1);
                    this.UpdatePieChart(slider, pieIndex - 1);
                }
            }
        }
    }