public int LoadIndex(string FileName)
        {
            this.RawFileName = FileName;

            RawFile = new XRawfile();

            RawFile.Open(FileName);
            RawFile.SetCurrentController(0, 1);

            Spectra = 0;
            RawFile.GetNumSpectra(ref Spectra);

            if( Spectra <= 0)
                return 0;

            int i, lastfull = 0, total = 0;
            double TotalEsi = 0.0;

            ms2index = new int[Spectra+1];
            IndexDir = new int[Spectra+1];
            IndexRev = new int[Spectra+1];
            RawSpectra = new RawData[Spectra+1];
            Buf = new MZData[1000000];

            ESICurrents = new double[Spectra+1];
            TimeStamps = new double[Spectra+1];
            TimeCoefs = new double[Spectra+1];

            string Filter = null;

            LowRT = 0.0;
            HighRT = 0.0;

            for(i = 1; i <= Spectra; i++){

                iLog.RepProgress((int)(100.0*((double)i/(double)Spectra)));

                RawFile.GetFilterForScanNum(i, ref Filter);

                //YL - для спектров ms-only
                if((Filter.IndexOf(" ms ") != -1) && (Filter.IndexOf("FTMS") != -1)) { //is a FULL MS

                    TimeStamps[i] = RawSpectra[lastfull].RT;

                    IndexDir[lastfull] = i;
                    IndexRev[i] = lastfull;

                    lastfull = i;
                    ms2index[i] = lastfull;

                    ++total;

                    RawFile.RTFromScanNum(i, ref RawSpectra[i].RT);
                    TotalRT = RawSpectra[i].RT;

                    TimeStamps[i] = RawSpectra[i].RT - TimeStamps[i];

                    object Labels = null;
                    object Values = null;
                    int ArraySize = 0;
                    double RT = 0.0;

                    RawFile.GetStatusLogForScanNum(i, ref RT, ref Labels, ref Values , ref ArraySize);

                    for (int k = 0 ; k < ArraySize ; k++ ){
                        if ((Labels as Array).GetValue(k).ToString().Contains("Source Current")){
                            ESICurrents[i] = Convert.ToDouble((Values as Array).GetValue(k).ToString());
                            TotalEsi+=ESICurrents[i];
                        }
                    }

                }
                else {
                    ms2index[i] = lastfull;
                }
                Filter = null ;
            }
            IndexDir[lastfull] = -1;
            TotalRT = RawSpectra[lastfull].RT;
            AverageTimeStamp = TotalRT/total;

            //пересчитаем временные коэффициэнты
            for (i = IndexDir[0] ; IndexDir[i] != -1 ; i = IndexDir[i]) {

                TimeCoefs[i] = (TimeStamps[i]+TimeStamps[IndexDir[i]])/(2.0*AverageTimeStamp);

                ESICurrents[i] = ESICurrents[i]/(TotalEsi/(double)total);
            }
            TimeCoefs[i] = 1.0;

            return Spectra;
        }
        public int LoadIndex(string FileName)
        {
            this.RawFileName = FileName;

            RawFile = new XRawfile();

            RawFile.Open(FileName);
            RawFile.SetCurrentController(0, 1);

            Spectra = 0;
            RawFile.GetNumSpectra(ref Spectra);

            if (Spectra <= 0)
            {
                return(0);
            }

            int    i, lastfull = 0, total = 0;
            double TotalEsi = 0.0;

            ms2index   = new int[Spectra + 1];
            IndexDir   = new int[Spectra + 1];
            IndexRev   = new int[Spectra + 1];
            RawSpectra = new RawData[Spectra + 1];
            Buf        = new MZData[1000000];

            ESICurrents = new double[Spectra + 1];
            TimeStamps  = new double[Spectra + 1];
            TimeCoefs   = new double[Spectra + 1];

            string Filter = null;

            LowRT  = 0.0;
            HighRT = 0.0;

            for (i = 1; i <= Spectra; i++)
            {
                iLog.RepProgress((int)(100.0 * ((double)i / (double)Spectra)));

                RawFile.GetFilterForScanNum(i, ref Filter);

                //YL - для спектров ms-only
                if ((Filter.IndexOf(" ms ") != -1) && (Filter.IndexOf("FTMS") != -1))          //is a FULL MS

                {
                    TimeStamps[i] = RawSpectra[lastfull].RT;

                    IndexDir[lastfull] = i;
                    IndexRev[i]        = lastfull;

                    lastfull    = i;
                    ms2index[i] = lastfull;

                    ++total;

                    RawFile.RTFromScanNum(i, ref RawSpectra[i].RT);
                    TotalRT = RawSpectra[i].RT;

                    TimeStamps[i] = RawSpectra[i].RT - TimeStamps[i];

                    object Labels    = null;
                    object Values    = null;
                    int    ArraySize = 0;
                    double RT        = 0.0;

                    RawFile.GetStatusLogForScanNum(i, ref RT, ref Labels, ref Values, ref ArraySize);

                    for (int k = 0; k < ArraySize; k++)
                    {
                        if ((Labels as Array).GetValue(k).ToString().Contains("Source Current"))
                        {
                            ESICurrents[i] = Convert.ToDouble((Values as Array).GetValue(k).ToString());
                            TotalEsi      += ESICurrents[i];
                        }
                    }
                }
                else
                {
                    ms2index[i] = lastfull;
                }
                Filter = null;
            }
            IndexDir[lastfull] = -1;
            TotalRT            = RawSpectra[lastfull].RT;
            AverageTimeStamp   = TotalRT / total;

            //пересчитаем временные коэффициэнты
            for (i = IndexDir[0]; IndexDir[i] != -1; i = IndexDir[i])
            {
                TimeCoefs[i] = (TimeStamps[i] + TimeStamps[IndexDir[i]]) / (2.0 * AverageTimeStamp);

                ESICurrents[i] = ESICurrents[i] / (TotalEsi / (double)total);
            }
            TimeCoefs[i] = 1.0;

            return(Spectra);
        }