/// <summary>
            /// Comparator helper
            /// </summary>
            /// <param name="o"></param>
            /// <returns></returns>
            public int CompareTo(object o)
            {
                ReliabilityIndex a = this;
                ReliabilityIndex b = (ReliabilityIndex)o;

                return(a.Session.CompareTo(b.Session));
            }
        /// <summary>
        /// Calculate reli
        /// </summary>
        public void CalculateReliability()
        {
            if (AllReliabilityIndices.Count < 1)
            {
                return;
            }

            XSSFWorkbook hssfworkbook = new XSSFWorkbook();
            ISheet       page         = hssfworkbook.CreateSheet("Reliability");

            ReliabilityIndex mBase = AllReliabilityIndices[0];

            IRow currRow = page.CreateRow(0);

            currRow.CreateCell(0).SetCellValue("Name:");
            currRow.CreateCell(1).SetCellValue(mBase.PatientName);

            currRow = page.CreateRow(1);
            currRow.CreateCell(0).SetCellValue("Evaluation:");
            currRow.CreateCell(1).SetCellValue(mBase.Evaluation);

            //Skip row

            currRow = page.CreateRow(3);
            currRow.CreateCell(0).SetCellValue("Session:");
            currRow.CreateCell(1).SetCellValue("Date:");
            currRow.CreateCell(2).SetCellValue("Condition");
            currRow.CreateCell(3).SetCellValue("Has Reli?");
            currRow.CreateCell(4).SetCellValue("Primary");
            currRow.CreateCell(5).SetCellValue("Reliability");

            int            currentRowNumber = 5;
            string         temp             = string.Empty;
            FileIndexClass mMain;

            IRow keyTitles = page.GetRow(3);

            page.CreateRow(4);
            IRow reliTitles = page.CreateRow(5);

            bool firstIndex = true;
            int  rowSpacer  = 6;

            foreach (ReliabilityIndex index in AllReliabilityIndices)
            {
                if (firstIndex)
                {
                    mMain     = mPrimaryList.Where(f => f.SessionNumber == index.Session).FirstOrDefault();
                    rowSpacer = 6;

                    List <string> keyList = new List <string>(mMain.FrequencyValues.Keys);

                    for (int fCount = 0; fCount < keyList.Count; fCount++)
                    {
                        currRow = page.CreateRow(4);
                        keyTitles.CreateCell(rowSpacer).SetCellValue(keyList[fCount]);

                        rowSpacer = rowSpacer + 6;
                    }

                    List <string> dKeyList = new List <string>(mMain.DurationValues.Keys);

                    for (int dCount = 0; dCount < dKeyList.Count; dCount++)
                    {
                        currRow = page.CreateRow(4);
                        keyTitles.CreateCell(rowSpacer).SetCellValue(dKeyList[dCount]);

                        rowSpacer = rowSpacer + 6;
                    }

                    firstIndex = false;
                }

                if (index.IsSelected)
                {
                    currRow = page.CreateRow(currentRowNumber);
                    currRow.CreateCell(0).SetCellValue(index.Session);
                    currRow.CreateCell(1).SetCellValue(index.DateCollected);
                    currRow.CreateCell(2).SetCellValue(index.Condition);
                    currRow.CreateCell(3).SetCellValue(index.HasReli ? "yes" : "no");
                    currRow.CreateCell(4).SetCellValue(index.DataCollector);
                    currRow.CreateCell(5).SetCellValue(index.ReliCollector);

                    if (index.HasReli)
                    {
                        mMain = mPrimaryList.Where(f => f.SessionNumber == index.Session).FirstOrDefault();

                        rowSpacer = 6;

                        List <string> fKeyList = new List <string>(mMain.FrequencyValues.Keys);

                        for (int fCount = 0; fCount < fKeyList.Count; fCount++)
                        {
                            if (index.FrequencyValues.ContainsKey(fKeyList[fCount]) && index.ReliFrequencyValues.ContainsKey(fKeyList[fCount]))
                            {
                                int[] mFreqHolderP = index.FrequencyValues[fKeyList[fCount]];
                                int[] mFreqHolderR = index.ReliFrequencyValues[fKeyList[fCount]];

                                currRow.CreateCell(rowSpacer).SetCellValue(getFreqEIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 1).SetCellValue(getFreqPIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 2).SetCellValue(getFreqTIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 3).SetCellValue(getFreqOIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 4).SetCellValue(getFreqNIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 5).SetCellValue(getFreqPMA(mFreqHolderP, mFreqHolderR));

                                page.GetRow(4).CreateCell(rowSpacer).SetCellValue("EIA");
                                page.GetRow(4).CreateCell(rowSpacer + 1).SetCellValue("PIA");
                                page.GetRow(4).CreateCell(rowSpacer + 2).SetCellValue("TIA");
                                page.GetRow(4).CreateCell(rowSpacer + 3).SetCellValue("OIA");
                                page.GetRow(4).CreateCell(rowSpacer + 4).SetCellValue("NIA");
                                page.GetRow(4).CreateCell(rowSpacer + 5).SetCellValue("PMA");

                                rowSpacer = rowSpacer + 6;
                            }
                        }

                        List <string> dKeyList = new List <string>(mMain.DurationValues.Keys);

                        for (int dCount = 0; dCount < dKeyList.Count; dCount++)
                        {
                            if (index.DurationValues.ContainsKey(dKeyList[dCount]) && index.ReliDurationValues.ContainsKey(dKeyList[dCount]))
                            {
                                double[] mFreqHolderP = index.DurationValues[dKeyList[dCount]];
                                double[] mFreqHolderR = index.ReliDurationValues[dKeyList[dCount]];

                                currRow.CreateCell(rowSpacer).SetCellValue(getDurationEIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 1).SetCellValue(getDurationPIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 2).SetCellValue(getDurationTIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 3).SetCellValue(getDurationOIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 4).SetCellValue(getDurationNIA(mFreqHolderP, mFreqHolderR));
                                currRow.CreateCell(rowSpacer + 5).SetCellValue(getDurationPMA(mFreqHolderP, mFreqHolderR));

                                page.GetRow(4).CreateCell(rowSpacer).SetCellValue("EIA");
                                page.GetRow(4).CreateCell(rowSpacer + 1).SetCellValue("PIA");
                                page.GetRow(4).CreateCell(rowSpacer + 2).SetCellValue("TIA");
                                page.GetRow(4).CreateCell(rowSpacer + 3).SetCellValue("OIA");
                                page.GetRow(4).CreateCell(rowSpacer + 4).SetCellValue("NIA");
                                page.GetRow(4).CreateCell(rowSpacer + 5).SetCellValue("PMA");
                            }

                            rowSpacer = rowSpacer + 6;
                        }
                    }

                    currentRowNumber = currentRowNumber + 1;
                }
            }

            page.AutoSizeColumn(0);
            page.AutoSizeColumn(1);
            page.AutoSizeColumn(2);

            SaveFileDialog dlg = new SaveFileDialog();

            dlg.FileName   = "Reliabilty-Output";         // Default file name
            dlg.DefaultExt = ".xlsx";                     // Default file extension
            dlg.Filter     = "Excel File (.xlsx)|*.xlsx"; // Filter files by extension


            // Show save file dialog box
            Nullable <bool> result = dlg.ShowDialog();

            // Process save file dialog box results
            if (result == true)
            {
                string filename = dlg.FileName;
                try
                {
                    using (FileStream file = new FileStream(filename, FileMode.Create))
                    {
                        hssfworkbook.Write(file);
                    }
                }
                catch (IOException e)
                {
                    Console.WriteLine(e.ToString());
                }
            }
        }