private void fileInit(string _filename)
        {
            try
            {
                using (CsvFileReader myFileReader = new CsvFileReader(_filename))
                {
                    CorrDataFileName = _filename;

                    // seperate out pure filename
                    string[] split = _filename.Split(new char[] { '\\' });
                    split = split[split.Length - 1].Split(new char[] { '.' });
                    FrameImgFolderPath = ParrentFolderPath + '\\' + split[0];
                    if (!System.IO.Directory.Exists(FrameImgFolderPath))
                    {
                        System.IO.Directory.CreateDirectory(FrameImgFolderPath);
                    }

                    // read file
                    CorrData myCorrData;
                    myFileReader.ReadCorrData(out myCorrData);
                    int newFrameStart = 0;
                    DateTime newFrameStartTime = myCorrData.datatime;
                    double lastAngle = myCorrData.angle;
                    myFileReader.ReadCorrData(out myCorrData);
                    bool movingRight = (myCorrData.angle > lastAngle) ? true : false;
                    lastAngle = myCorrData.angle;
                    DateTime lastTime = myCorrData.datatime;

                    normalizeConstant = myCorrData.distance[myCorrData.distance.Length - 1] - 15.0;

                    int dataNumber = 2;

                    while (myFileReader.ReadCorrData(out myCorrData))
                    {
                        dataNumber++;

                        if (movingRight ^ (myCorrData.angle > lastAngle))
                        {
                            movingRight = !movingRight;
                            IntervalList.AddLast(
                                new MyInterval(newFrameStart, dataNumber - 2,
                                newFrameStartTime, lastTime,
                                FrameImgFolderPath + '\\' + (IntervalList.Count + 1).ToString()));

                            newFrameStart = dataNumber - 1;
                            newFrameStartTime = myCorrData.datatime;
                        }
                        lastAngle = myCorrData.angle;
                        lastTime = myCorrData.datatime;
                    }

                    if (newFrameStart < dataNumber - 1)
                        IntervalList.AddLast(
                            new MyInterval(newFrameStart, dataNumber - 1,
                            newFrameStartTime, lastTime,
                            FrameImgFolderPath + '\\' + (IntervalList.Count + 1).ToString()));

                    
                    CurrentInterval = IntervalList.First;
                }
            }
            catch (IOException)
            {
                CorrDataFileName = null;
                FrameImgFolderPath = null;
                IntervalList.Clear();
                CurrentInterval = null;
                throw;
            }
        }
        void createAndSaveFrameImg()
        {
            try
            {
                using (CsvFileReader myFileReader = new CsvFileReader(CorrDataFileName))
                {
                    for (int i = 0; i < CurrentInterval.Value.start - 1; i++)
                    {
                        myFileReader.ReadLine();
                        myFileReader.ReadLine();
                    }

                    Bitmap myBitmap = new Bitmap(ImWidth, ImHeight);

                    for (int i = CurrentInterval.Value.start; i <= CurrentInterval.Value.end; i++)
                    {
                        CorrData myCorrData;                        
                        myFileReader.ReadCorrData(out myCorrData);
                        for (int j = 0; j < myCorrData.Corrout_abs.Length && j < myCorrData.distance.Length; j++)
                        {
                            double theta = myCorrData.angle / 360.0 * 2 * Math.PI;
                            double r = ImHeight * (myCorrData.distance[j] - 15.0) / normalizeConstant; // subtract local leakage offset and normalize to image size

                            if (r < 0)
                            {
                                continue;
                            }

                            Int32 nx = clipIndex(r * Math.Sin(theta) + 0.5 * ImWidth, ImWidth - 1);
                            Int32 ny = clipIndex(ImHeight - r * Math.Cos(theta), ImHeight - 1);
                            int intensity = (int)(255.0 * myCorrData.Corrout_abs[j]);
                            myBitmap.SetPixel(nx, ny, Color.FromArgb(intensity, intensity, intensity));
                        }
                    }

                    myBitmap.Save(CurrentInterval.Value.imgFileName,ImageFormat.Bmp);
                }
            }
            catch (IOException)
            {
                throw;
            }
        }