// Cleanup
 internal void Flush()
 {
     if (spkOut != null) { spkOut.flush(); spkOut = null; }
     if (spkOutRaw != null) { spkOutRaw.flush(); spkOutRaw = null; }
     if (spkOutSalpa != null) { spkOutSalpa.flush(); spkOutSalpa = null; }
     if (rawOut != null) { rawOut.flush(); rawOut = null; }
     if (salpaOut != null) { salpaOut.flush(); salpaOut = null; }
     if (spkFiltOut != null) { spkFiltOut.flush(); spkFiltOut = null; }
     if (lfpOut != null) { lfpOut.flush(); lfpOut = null; };
     if (stimOut != null) { stimOut.flush(); stimOut = null; }
     if (auxAnalogOut != null) { auxAnalogOut.flush(); auxAnalogOut = null; };
     if (auxDigitalOut != null) { auxDigitalOut.flush(); auxDigitalOut = null; }
 }
        // For full sampled streams
        internal void Setup(string dataType, Task dataTask)
        {
            //Create the nessesary file writers
            switch (dataType)
            {
                case "raw":
                    // Check if we need to create this stream
                    if (recordRaw)
                    {
                        if (numElectrodes == 64 && Properties.Settings.Default.ChannelMapping == "invitro")
                            rawOut = new FileOutputRemapped(fid, numElectrodes,
                                dataTask.Timing.SampleClockRate, 1, dataTask,
                                "." + dataType, Properties.Settings.Default.PreAmpGain);
                        else
                            rawOut = new FileOutput(fid, numElectrodes,
                                dataTask.Timing.SampleClockRate, 1, dataTask,
                                "." + dataType, Properties.Settings.Default.PreAmpGain);
                    }
                    break;
                case "salpa":
                    // Check if we need to create this stream
                    if (recordSALPA)
                    {
                        if (numElectrodes == 64 && Properties.Settings.Default.ChannelMapping == "invitro")
                            salpaOut = new FileOutputRemapped(fid, numElectrodes,
                                dataTask.Timing.SampleClockRate, 1, dataTask,
                                "." + dataType, Properties.Settings.Default.PreAmpGain);
                        else
                            salpaOut = new FileOutput(fid, numElectrodes,
                                dataTask.Timing.SampleClockRate, 1, dataTask,
                                "." + dataType, Properties.Settings.Default.PreAmpGain);
                    }
                    break;
                case "spkflt":
                    // Check if we need to create this stream
                    if (recordSpikeFilt)
                    {
                        if (numElectrodes == 64 && Properties.Settings.Default.ChannelMapping == "invitro")
                            spkFiltOut = new FileOutputRemapped(fid, numElectrodes,
                                dataTask.Timing.SampleClockRate, 1, dataTask,
                                "." + dataType, Properties.Settings.Default.PreAmpGain);
                        else
                            spkFiltOut = new FileOutput(fid, numElectrodes,
                                dataTask.Timing.SampleClockRate, 1, dataTask,
                                "." + dataType, Properties.Settings.Default.PreAmpGain);
                    }
                    break;
                case "stim":
                    // Check if we need to create this stream
                    if (recordStim)
                    {
                        stimOut = new StimFileOutput(fid, dataTask.Timing.SampleClockRate,
                            "." + dataType);
                    }
                    break;

                case "aux":
                    // Check if we need to create this stream
                    if (recordAuxAnalog)
                    {
                        auxAnalogOut = new FileOutput(fid, dataTask.AIChannels.Count,
                            dataTask.Timing.SampleClockRate, 0, dataTask,
                            "." + dataType, 1);
                    }
                    break;

                case "dig":
                    // Check if we need to create this stream
                    if (recordAuxDig)
                    {
                        auxDigitalOut = new DigFileOutput(fid,dataTask.Timing.SampleClockRate,
                            "." + dataType);
                    }
                    break;

                default:
                    Console.WriteLine("Unknown data type specified during RecordingSetup.Setup()");
                    break;
            }
        }