public void TransmitData(List <ScienceData> dataQueue, Callback callback)
        {
            Log.Debug("ALERT:MagicTransmitter: received {0} ScienceData entries", dataQueue.Count);
            Log.Debug(callback == null ? "ALERT: with no callback" : "ALERT:With callback");
            List <IScienceDataTransmitter> list = new List <IScienceDataTransmitter>();

            foreach (KeyValuePair <IScienceDataTransmitter, KeyValuePair <List <ScienceData>, Callback> > current in realTransmitters)
            {
                list.Add(current.Key);
            }
            if (list.Any())
            {
                list = (from potential in list
                        orderby ScienceUtil.GetTransmitterScore(potential)
                        select potential).ToList();
                QueueTransmission(dataQueue, list.First(), callback);
                return;
            }
            Log.Debug("[ScienceAlert]:MagicDataTransmitter: Did not find any real transmitters");
        }
        /// <summary>
        /// Locate a suitable transmitter and queue this data up for it
        /// </summary>
        /// <param name="data"></param>
        void IScienceDataTransmitter.TransmitData(ScienceDataList data)
        {
            Log.Debug("MagicTransmitter: received {0} ScienceData entries", data.Count);

            // locate the best actual transmitter to send this data through
            // lower scores seem to be better
            var potentials = new List <IScienceDataTransmitter>();

            foreach (var kvp in realTransmitters)
            {
                potentials.Add(kvp.Key);
            }

            if (potentials.Count > 0)
            {
                potentials = potentials.OrderBy(potential => ScienceUtil.GetTransmitterScore(potential)).ToList();

                QueueTransmission(data, potentials.First());
            }
            else
            {
                Log.Error("MagicDataTransmitter: Did not find any real transmitters");
            }
        }