//********************************************************************************************************************
        //                                             Save
        //********************************************************************************************************************

        #region Save

        //1. Main-Funktion zu speichern***********************************************
        public void Save_AllFiles()
        {
            //1. Average files
            if (GUI.mySettings.Save_Aver_Heat)
            {
                Save_SingleFile(Average_Heat_Compressed, "Average of " + GUI.rthTEC_Rack1.Cycles.ToString(), ".aver.TTAheat");
            }

            if (GUI.mySettings.Save_Aver_Cool)
            {
                Save_SingleFile(Average_Meas_Compressed, "Average of " + GUI.rthTEC_Rack1.Cycles.ToString(), ".aver.TTAcool");
            }

            //2. Single files
            if (GUI.mySettings.Save_Signle_Cool | GUI.mySettings.Save_Single_Heat)
            {
                //Felder für einzelne Listen definieren
                List <TTA_DataPoint>[] all_single_heating_compressed = new List <TTA_DataPoint> [GUI.rthTEC_Rack1.Cycles];
                List <TTA_DataPoint>[] all_single_cooling_compressed = new List <TTA_DataPoint> [GUI.rthTEC_Rack1.Cycles];

                //Daten aus Binary_Raw_Files herauslösen und komprimieren
                for (int i = 1; i <= GUI.rthTEC_Rack1.Cycles; i++)
                {
                    //Raw Daten aus gesamten Feld herauslösen
                    long[] help_heat = new long[Heat_to_Meas[i - 1] - Start_to_Heat[i - 1] + Puffer_Messpunkte];
                    long[] help_meas = new long[Meas_to_End[i - 1] - Heat_to_Meas[i - 1] + Puffer_Messpunkte];

                    //Mit daten befüllen
                    for (long akt_Messpunkt = -Puffer_Messpunkte; akt_Messpunkt < help_heat.Length - Puffer_Messpunkte; akt_Messpunkt++)
                    {
                        help_heat[akt_Messpunkt + Puffer_Messpunkte] = Binary_Raw_Files[i - 1, akt_Messpunkt + Start_to_Heat[i - 1]];
                    }

                    for (long akt_Messpunkt = -Puffer_Messpunkte; akt_Messpunkt < help_meas.Length - Puffer_Messpunkte; akt_Messpunkt++)
                    {
                        help_meas[akt_Messpunkt + Puffer_Messpunkte] += Binary_Raw_Files[i - 1, akt_Messpunkt + Heat_to_Meas[i - 1]];
                    }

                    //Komprimieren
                    all_single_heating_compressed[i - 1] = Compress_Data(help_heat, 1);
                    all_single_cooling_compressed[i - 1] = Compress_Data(help_meas, 1);
                }

                if (GUI.mySettings.Save_Single_Heat)
                {
                    for (int i = 1; i <= GUI.rthTEC_Rack1.Cycles; i++)
                    {
                        Save_SingleFile(all_single_heating_compressed[i - 1],
                                        "Cycle " + i.ToString() + "/" + GUI.rthTEC_Rack1.Cycles.ToString(), "." + i.ToString("0000") + ".TTAheat");
                    }
                }

                if (GUI.mySettings.Save_Signle_Cool)
                {
                    for (int i = 1; i <= GUI.rthTEC_Rack1.Cycles; i++)
                    {
                        Save_SingleFile(all_single_cooling_compressed[i - 1],
                                        "Cycle " + i.ToString() + "/" + GUI.rthTEC_Rack1.Cycles.ToString(), "." + i.ToString("0000") + ".TTAcool");
                    }
                }
            }

            //3. Raw files
            if (GUI.mySettings.Save_Raw)
            {
                for (int i = 1; i <= GUI.rthTEC_Rack1.Cycles; i++)
                {
                    //Daten einer Messung herauslösen
                    short[] help_raw = new short[Binary_Raw_Files.GetLength(1)];
                    for (int j = 0; j < help_raw.Length; j++)
                    {
                        help_raw[j] = Binary_Raw_Files[i - 1, j];
                    }
                    //Speichern
                    Save_SingleFile(help_raw, "Raw_Data of cycle" + i.ToString() + "/" + GUI.rthTEC_Rack1.Cycles.ToString() + GUI.rthTEC_Rack1.Cycles.ToString(),
                                    "." + i.ToString("0000") + ".TTAraw");
                }
            }
        }
        /// <summary>
        /// Sucht die Umschaltpunkte in den Raw-Files in binärer Form
        /// </summary>
        /// <param name="return">true if no error occured; otherwise, false.</param>
        private Boolean Search_for_switching_points()
        {
            //Felder definiern
            Start_to_Heat = new long[MyRack.Cycles];
            Heat_to_Meas  = new long[MyRack.Cycles];
            Meas_to_End   = new long[MyRack.Cycles];

            //Suchkriterien definiern
            decimal schwelle_in_mV = MyDAQ.Trigger_Level_UI * 1000;

            short schwelle_in_Bit = (short)((schwelle_in_mV - MyRack.U_offset) / MyDAQ.Range * (decimal)Math.Pow(2, 15));
            short hysterese       = 3000;

            //Umschaltpunkte finden
            //Jede Messreihe (jeder Zyklus) wird nacheinander durchlaufen, um alle drei Umschaltpunkte zu finden
            for (int akt_Zyklus_Nr = 0; akt_Zyklus_Nr < this.MyRack.Cycles; akt_Zyklus_Nr++)
            {
                //Alle Messpunkte durchlaufen um die Umschaltpunkte zu finden
                long akt_Messpunkt = Puffer_Messpunkte + 1;     //Laufvariable

                //Umschaltpung: OFF --> Heat [Überspringen der Schwellspannung]
                //*******************************************************************************************

                //Try funktion um ein herrauslaufen des Indexes aus dem Feld zu vermeiden
                try
                {
                    while ((long)Binary_Raw_Files[akt_Zyklus_Nr, akt_Messpunkt] - (long)Binary_Raw_Files[akt_Zyklus_Nr, akt_Messpunkt - 1] < hysterese)
                    {
                        akt_Messpunkt++;
                    }
                    //Punkt Übernehmen
                    Start_to_Heat[akt_Zyklus_Nr] = akt_Messpunkt;

                    //long test = (long)Spectrum_raw_files[akt_Zyklus_Nr, akt_Messpunkt] - (long)Spectrum_raw_files[akt_Zyklus_Nr, akt_Messpunkt - 1];

                    //akt_Messpunkt weiterschieben um Einschwingen nicht zu untersuchen (1ms) [N = f * t]
                    akt_Messpunkt += ((long)MyDAQ.Frequency * 1 / 1000);
                }
                catch (IndexOutOfRangeException)
                {
                    MessageBox.Show("Off to Heat not found", "Error");
                    return(false);
                }


                //Umschaltpung: Heat --> Meas [Um Hysterese nach unten]
                //*******************************************************************************************
                try
                {
                    while ((long)Binary_Raw_Files[akt_Zyklus_Nr, akt_Messpunkt] - (long)Binary_Raw_Files[akt_Zyklus_Nr, akt_Messpunkt - 1] > -hysterese)
                    {
                        akt_Messpunkt++;
                    }

                    //Punkt Übernehmen
                    Heat_to_Meas[akt_Zyklus_Nr] = akt_Messpunkt;

                    //akt_Messpunkt weiterschieben um Einschwingen nicht zu untersuchen (1ms) [N = f * t]
                    akt_Messpunkt += ((long)MyDAQ.Frequency * 1 / 1000);
                }
                catch (IndexOutOfRangeException)
                {
                    MessageBox.Show("Heat to Meas not Found", "Error");
                    return(false);
                }


                //Umschaltpung: Meas --> Off [Überspringen der Schwellspannung]
                //*******************************************************************************************
                try
                {
                    while (akt_Messpunkt <Binary_Raw_Files.GetLength(1) - 1 &
                                          (long)Binary_Raw_Files[akt_Zyklus_Nr, akt_Messpunkt] - (long)Binary_Raw_Files[akt_Zyklus_Nr, akt_Messpunkt - 1]> -hysterese)
                    {
                        akt_Messpunkt++;
                    }
                    //Punkt Übernehmen
                    Meas_to_End[akt_Zyklus_Nr] = akt_Messpunkt;
                    var test = (long)Binary_Raw_Files[akt_Zyklus_Nr, akt_Messpunkt];
                }
                catch (IndexOutOfRangeException)
                {
                    Meas_to_End[akt_Zyklus_Nr] = Binary_Raw_Files.GetLength(1) - 1;
                    MessageBox.Show("Meas to Off not Found", "Error");
                    return(false);
                }
            }
            return(true);
        }