Beispiel #1
0
 public BandSetting this[BAND band]
 {
     get
     {
         DataRow row = this.Rows.Find(Bands.GetStringValue(band));
         if (row != null)
         {
             BandSetting setting = new BandSetting();
             try
             {
                 // fill in the values from the bandsettings table
                 setting.K_Factor        = (double)row["K-FACTOR"];
                 setting.F1_Clearance    = (double)row["F1-CLEARANCE"];
                 setting.GroundClearance = (double)row["GROUNDCLEARANCE"];
                 setting.MaxDistance     = (double)row["MAXDISTANCE"];
                 setting.MaxSquint       = (double)row["MAXSQUINT"];
                 setting.MaxElevation    = (double)row["MAXELEVATION"];
             }
             catch
             {
             }
             return(setting);
         }
         else
         {
             BandSetting setting = new BandSetting();
             return(setting);
         }
     }
 }
Beispiel #2
0
 public QRVDesignator(string call, string loc, BAND band, double antennaheight, double antennagain, double power, DateTime lastupdated) : this()
 {
     Call          = call.ToUpper().Trim();
     Loc           = loc.ToUpper().Trim().Substring(0, 6);
     Band          = band;
     AntennaHeight = antennaheight;
     AntennaGain   = antennagain;
     Power         = power;
     LastUpdated   = lastupdated;
 }
Beispiel #3
0
        public static string GetStringValue(BAND band)
        {
            string    output = null;
            FieldInfo fi     = typeof(BAND).GetField(band.ToString());

            StringCustomAttribute[] attrs = fi.GetCustomAttributes(typeof(StringCustomAttribute), false) as StringCustomAttribute[];
            if (attrs.Length > 0)
            {
                output = attrs[0].Value;
            }
            return(output);
        }
Beispiel #4
0
        public static BAND Previous(BAND band)
        {
            BAND[] bands = Bands.GetValuesExceptNoneAndAll();
            int    i     = Array.IndexOf(bands, band);

            if (i < 1)
            {
                i = 1;
            }
            else if (i > bands.Length - 1)
            {
                i = bands.Length - 1;
            }
            return(bands[i - 1]);
        }
Beispiel #5
0
        public static BAND Next(BAND band)
        {
            BAND[] bands = Bands.GetValuesExceptNoneAndAll();
            int    i     = Array.IndexOf(bands, band);

            if (i < 0)
            {
                i = 0;
            }
            else if (i > bands.Length - 2)
            {
                i = bands.Length - 2;
            }
            return(bands[i + 1]);
        }
Beispiel #6
0
        public static BAND[] GetValuesExceptNoneAndAll()
        {
            BAND[] bands = (BAND[])Enum.GetValues(typeof(BAND));
            BAND[] bandsexceptnoneandall = new BAND[bands.Length - 2];
            int    i = 0;

            foreach (BAND band in bands)
            {
                if ((band != BAND.BNONE) && (band != BAND.BALL))
                {
                    bandsexceptnoneandall[i] = band;
                    i++;
                }
            }
            return(bandsexceptnoneandall);
        }
Beispiel #7
0
        private string DeliverElevationPath(string paramstr)
        {
            string json = "";
            // set default values
            string mycallstr = "";
            string mylocstr  = "";
            string dxcallstr = "";
            string dxlocstr  = "";
            BAND   band      = Properties.Settings.Default.Band;

            // get parameters
            try
            {
                if (paramstr.Contains("?"))
                {
                    // OK, we have parameters --> cut them out and make all uppercase
                    paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper();
                    var pars = System.Web.HttpUtility.ParseQueryString(paramstr);
                    mycallstr = pars.Get("MYCALL");
                    mylocstr  = pars.Get("MYLOC");
                    dxcallstr = pars.Get("DXCALL");
                    dxlocstr  = pars.Get("DXLOC");
                }
            }
            catch (Exception ex)
            {
                // return error
                return("Error while parsing parameters!");
            }
            // check parameters
            if (!Callsign.Check(mycallstr))
            {
                return("Error: " + mycallstr + " is not a valid callsign!");
            }
            if (!Callsign.Check(dxcallstr))
            {
                return("Error: " + dxcallstr + " is not a valid callsign!");
            }
            if (!String.IsNullOrEmpty(mylocstr) && !MaidenheadLocator.Check(mylocstr))
            {
                return("Error: " + mylocstr + " is not a valid Maidenhead locator!");
            }
            if (!String.IsNullOrEmpty(dxlocstr) && !MaidenheadLocator.Check(dxlocstr))
            {
                return("Error: " + dxlocstr + " is not a valid Maidenhead locator!");
            }
            // search call in station database, return empty string if not found
            LocationDesignator myloc = LocationFind(mycallstr, mylocstr);

            if (myloc == null)
            {
                return("Error: MyLocation not found in database!");
            }
            LocationDesignator dxloc = LocationFind(dxcallstr, dxlocstr);

            if (dxloc == null)
            {
                return("Error: DXLocation not found in database!");
            }

            // get qrv info or create default
            QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, band);

            // set qrv defaults if zero
            if (myqrv.AntennaHeight == 0)
            {
                myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (myqrv.AntennaGain == 0)
            {
                myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (myqrv.Power == 0)
            {
                myqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // get qrv info or create default
            QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, band);

            // set qrv defaults if zero
            if (dxqrv.AntennaHeight == 0)
            {
                dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (dxqrv.AntennaGain == 0)
            {
                dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (dxqrv.Power == 0)
            {
                dxqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // get or calculate elevation path
            ElevationPathDesignator epath = ElevationData.Database.ElevationPathFindOrCreateFromLatLon(
                this,
                myloc.Lat,
                myloc.Lon,
                dxloc.Lat,
                dxloc.Lon,
                ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel),
                Properties.Settings.Default.ElevationModel);

            if (epath == null)
            {
                return(json);
            }
            // add additional info to ppath
            epath.Location1 = myloc;
            epath.Location2 = dxloc;
            epath.QRV1      = myqrv;
            epath.QRV2      = dxqrv;
            // convert path to json
            json = epath.ToJSON();
            return(json);
        }
Beispiel #8
0
        private string DeliverQRV(string paramstr)
        {
            string json = "";
            // set default values
            string callstr = "";
            string locstr  = "";
            string bandstr = "";
            BAND   band    = Properties.Settings.Default.Band;

            // get parameters
            try
            {
                if (paramstr.Contains("?"))
                {
                    // OK, we have parameters --> cut them out and make all uppercase
                    paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper();
                    var pars = System.Web.HttpUtility.ParseQueryString(paramstr);
                    callstr = pars.Get("CALL");
                    locstr  = pars.Get("LOC");
                    bandstr = pars.Get("BAND");
                }
            }
            catch (Exception ex)
            {
                // return error
                return("Error while parsing parameters!");
            }
            // check parameters
            if (!Callsign.Check(callstr))
            {
                return("Error: " + callstr + " is not a valid callsign!");
            }
            if (!MaidenheadLocator.Check(locstr))
            {
                return("Error: " + locstr + " is not a valid Maidenhead locator!");
            }
            // set band to currently selected if empty
            if (string.IsNullOrEmpty(bandstr))
            {
                band = Properties.Settings.Default.Band;
            }
            else
            {
                band = Bands.ParseStringValue(bandstr);
            }
            if (band == BAND.BNONE)
            {
                return("Error: " + bandstr + " is not a valid band value!");
            }
            // search call in station database, return empty string if not found
            if (band != BAND.BALL)
            {
                QRVDesignator qrv = StationData.Database.QRVFind(callstr, locstr, band);
                if (qrv == null)
                {
                    return("Error: QRV info not found in database!");
                }
                json = qrv.ToJSON();
                return(json);
            }
            List <QRVDesignator> qrvs = StationData.Database.QRVFind(callstr, locstr);

            if ((qrvs == null) || (qrvs.Count() == 0))
            {
                return("Error: QRV info not found in database!");
            }
            JsonSerializerSettings settings = new JsonSerializerSettings();

            settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
            settings.FloatFormatHandling  = FloatFormatHandling.String;
            settings.Formatting           = Newtonsoft.Json.Formatting.Indented;
            json = JsonConvert.SerializeObject(qrvs, settings);
            return(json);
        }
Beispiel #9
0
        private void CalculateHorizons()
        {
            List <LocationDesignator> lds = StationData.Database.LocationGetAll();

            foreach (LocationDesignator ld in lds)
            {
                Stopwatch st = new Stopwatch();
                try
                {
                    //                short max = ElevationModel.Database.ElevationTilesMaxElevation(ELEVATIONMODEL.SRTM1, Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon);
                    short          max            = 4797;
                    ELEVATIONMODEL model          = ELEVATIONMODEL.SRTM1;
                    BAND           band           = BAND.B1_2G;
                    short          antenna_height = 40;
                    short          h1             = (short)(ElevationData.Database[ld.Lat, ld.Lon, model] + antenna_height);
                    double         dist           = 500.0;
                    double         stepwidth      = ElevationData.Database.GetDefaultStepWidth(model);
                    int            count          = (int)(dist / stepwidth / 1000.0);
                    HorizonPoint   hp             = new HorizonPoint();
                    st.Start();
                    List <HorizonPoint>[] l = new List <HorizonPoint> [360];
                    for (int j = 0; j < 360; j++)
                    {
                        Say("Calculation horizon of " + ld.Call + ": " + j + " of 360...");
                        l[j] = new List <HorizonPoint>();
                        ElevationPathDesignator path = new ElevationPathDesignator();
                        path = ElevationData.Database.ElevationPathCreateFromBearing(this, ld.Lat, ld.Lon, j, dist, stepwidth, model);
                        short[] elv = path.Path;
                        // iterate through frequencies
                        foreach (int f in Enum.GetValues(typeof(BAND)))
                        {
                            double f1_clearance = 0.6;
                            if (f <= 144)
                            {
                                f1_clearance = 0.2;
                            }
                            else if (f <= 432)
                            {
                                f1_clearance = 0.4;
                            }
                            hp = PropagationHorizonDesignator.EpsilonMaxFromPath(h1, ref elv, dist, stepwidth, f / 1000.0, f1_clearance, max, LatLon.Earth.Radius * 1.33);
                            l[j].Add(hp);
                        }
                        hp = l[j].ElementAt(0);
                        Application.DoEvents();
                    }
                    st.Stop();
                    using (StreamWriter sw = new StreamWriter("Horizon.csv"))
                    {
                        sw.WriteLine("bearing[deg];eps_50M[deg];eps_70M[deg];eps[144M[deg];eps_432M[deg];eps_1.2G[deg];eps_2.3G[deg];eps_3.4G[deg];eps_5.7G[deg];eps_10G[deg];eps_24G[deg];eps_47G[deg];eps_76G[deg]");
                        for (int j = 0; j < l.Length; j++)
                        {
                            sw.Write(j + ";");
                            for (int k = 0; k < l[0].Count; k++)
                            {
                                sw.Write((l[j].ElementAt(k).Epsmin / Math.PI * 180.0).ToString("F8"));
                                if (k < l[0].Count - 1)
                                {
                                    sw.Write(";");
                                }
                            }

                            sw.WriteLine();
                        }
                    }
                }
                catch (Exception ex)
                {
                }
            }
        }
Beispiel #10
0
 public static string GetName(BAND band)
 {
     return(Enum.GetName(typeof(BAND), band));
 }
Beispiel #11
0
 public QRVDesignator(string call, string loc, BAND band) : this(call, loc, band, 0, 0, 0)
 {
 }
Beispiel #12
0
 public static double ToMHz(BAND band)
 {
     return((int)band);
 }
Beispiel #13
0
 public static double To100Hz(BAND band)
 {
     return((int)band * 10000.0);
 }
Beispiel #14
0
 public QRVDesignator(string call, string loc, BAND band, double antennaheight, double antennagain, double power) : this(call, loc, band, antennaheight, antennagain, power, DateTime.UtcNow)
 {
 }
Beispiel #15
0
        private string DeliverPropagationPath(string paramstr)
        {
            string json = "";
            // set default values
            string mycallstr = "";
            string mylocstr  = "";
            string dxcallstr = "";
            string dxlocstr  = "";
            string bandstr   = "";
            BAND   band      = Properties.Settings.Default.Band;

            // get parameters
            try
            {
                if (paramstr.Contains("?"))
                {
                    // OK, we have parameters --> cut them out and make all uppercase
                    paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper();
                    var pars = System.Web.HttpUtility.ParseQueryString(paramstr);
                    mycallstr = pars.Get("MYCALL");
                    mylocstr  = pars.Get("MYLOC");
                    dxcallstr = pars.Get("DXCALL");
                    dxlocstr  = pars.Get("DXLOC");
                    bandstr   = pars.Get("BAND");
                }
            }
            catch (Exception ex)
            {
                // return error
                return("Error while parsing parameters!");
            }
            // check parameters
            if (!Callsign.Check(mycallstr))
            {
                return("Error: " + mycallstr + " is not a valid callsign!");
            }
            if (!Callsign.Check(dxcallstr))
            {
                return("Error: " + dxcallstr + " is not a valid callsign!");
            }
            if (!String.IsNullOrEmpty(mylocstr) && !MaidenheadLocator.Check(mylocstr))
            {
                return("Error: " + mylocstr + " is not a valid Maidenhead locator!");
            }
            if (!String.IsNullOrEmpty(dxlocstr) && !MaidenheadLocator.Check(dxlocstr))
            {
                return("Error: " + dxlocstr + " is not a valid Maidenhead locator!");
            }
            // set band to currently selected if empty
            if (string.IsNullOrEmpty(bandstr))
            {
                band = Properties.Settings.Default.Band;
            }
            else
            {
                band = Bands.ParseStringValue(bandstr);
            }
            if (band == BAND.BNONE)
            {
                return("Error: " + bandstr + " is not a valid band value!");
            }
            // search call in station database, return empty string if not found
            LocationDesignator myloc = LocationFind(mycallstr, mylocstr);

            if (myloc == null)
            {
                return("Error: MyLocation not found in database!");
            }
            LocationDesignator dxloc = LocationFind(dxcallstr, dxlocstr);

            if (dxloc == null)
            {
                return("Error: DXLocation not found in database!");
            }

            // get qrv info or create default
            QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, band);

            // set qrv defaults if zero
            if (myqrv.AntennaHeight == 0)
            {
                myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (myqrv.AntennaGain == 0)
            {
                myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (myqrv.Power == 0)
            {
                myqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // get qrv info or create default
            QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, band);

            // set qrv defaults if zero
            if (dxqrv.AntennaHeight == 0)
            {
                dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (dxqrv.AntennaGain == 0)
            {
                dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (dxqrv.Power == 0)
            {
                dxqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // find local obstruction, if any
            LocalObstructionDesignator o = ElevationData.Database.LocalObstructionFind(myloc.Lat, myloc.Lon, Properties.Settings.Default.ElevationModel);
            double mybearing             = LatLon.Bearing(myloc.Lat, myloc.Lon, dxloc.Lat, dxloc.Lon);
            double myobstr = (o != null) ? o.GetObstruction(myqrv.AntennaHeight, mybearing) : double.MinValue;

            // get or calculate propagation path
            PropagationPathDesignator ppath = PropagationData.Database.PropagationPathFindOrCreateFromLatLon(
                this,
                myloc.Lat,
                myloc.Lon,
                GetElevation(myloc.Lat, myloc.Lon) + myqrv.AntennaHeight,
                dxloc.Lat,
                dxloc.Lon,
                GetElevation(dxloc.Lat, dxloc.Lon) + dxqrv.AntennaHeight,
                Bands.ToGHz(band),
                LatLon.Earth.Radius * Properties.Settings.Default.Path_Band_Settings[band].K_Factor,
                Properties.Settings.Default.Path_Band_Settings[band].F1_Clearance,
                ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel),
                Properties.Settings.Default.ElevationModel,
                myobstr);

            if (ppath == null)
            {
                return(json);
            }
            // add additional info to ppath
            ppath.Location1 = myloc;
            ppath.Location2 = dxloc;
            ppath.QRV1      = myqrv;
            ppath.QRV2      = dxqrv;
            // convert path to json
            json = ppath.ToJSON();
            return(json);
        }
Beispiel #16
0
        private string DeliverNearestPlanes(string paramstr, List <PlaneInfo> allplanes)
        {
            string json = "";
            // set default values
            string mycallstr = "";
            string mylocstr  = "";
            string dxcallstr = "";
            string dxlocstr  = "";
            string bandstr   = "";
            BAND   band      = Properties.Settings.Default.Band;

            // get parameters
            try
            {
                if (paramstr.Contains("?"))
                {
                    // OK, we have parameters --> cut them out and make all uppercase
                    paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper();
                    var pars = System.Web.HttpUtility.ParseQueryString(paramstr);
                    mycallstr = pars.Get("MYCALL");
                    mylocstr  = pars.Get("MYLOC");
                    dxcallstr = pars.Get("DXCALL");
                    dxlocstr  = pars.Get("DXLOC");
                    bandstr   = pars.Get("BAND");
                }
            }
            catch (Exception ex)
            {
                // return error
                return("Error while parsing parameters!");
            }
            // check parameters
            if (!Callsign.Check(mycallstr))
            {
                return("Error: " + mycallstr + " is not a valid callsign!");
            }
            if (!Callsign.Check(dxcallstr))
            {
                return("Error: " + dxcallstr + " is not a valid callsign!");
            }
            if (!String.IsNullOrEmpty(mylocstr) && !MaidenheadLocator.Check(mylocstr))
            {
                return("Error: " + mylocstr + " is not a valid Maidenhead locator!");
            }
            if (!String.IsNullOrEmpty(dxlocstr) && !MaidenheadLocator.Check(dxlocstr))
            {
                return("Error: " + dxlocstr + " is not a valid Maidenhead locator!");
            }
            // set band to currently selected if empty
            if (string.IsNullOrEmpty(bandstr))
            {
                band = Properties.Settings.Default.Band;
            }
            else
            {
                band = Bands.ParseStringValue(bandstr);
            }
            if (band == BAND.BNONE)
            {
                return("Error: " + bandstr + " is not a valid band value!");
            }
            // search call in station database, return empty string if not found
            LocationDesignator myloc = LocationFind(mycallstr, mylocstr);

            if (myloc == null)
            {
                return("Error: MyLocation not found in database!");
            }
            LocationDesignator dxloc = LocationFind(dxcallstr, dxlocstr);

            if (dxloc == null)
            {
                return("Error: DXLocation not found in database!");
            }

            // get qrv info or create default
            QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, band);

            // set qrv defaults if zero
            if (myqrv.AntennaHeight == 0)
            {
                myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (myqrv.AntennaGain == 0)
            {
                myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (myqrv.Power == 0)
            {
                myqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // get qrv info or create default
            QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, band);

            // set qrv defaults if zero
            if (dxqrv.AntennaHeight == 0)
            {
                dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (dxqrv.AntennaGain == 0)
            {
                dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (dxqrv.Power == 0)
            {
                dxqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // find local obstruction, if any
            LocalObstructionDesignator o = ElevationData.Database.LocalObstructionFind(myloc.Lat, myloc.Lon, Properties.Settings.Default.ElevationModel);
            double mybearing             = LatLon.Bearing(myloc.Lat, myloc.Lon, dxloc.Lat, dxloc.Lon);
            double myobstr = (o != null) ? o.GetObstruction(myqrv.AntennaHeight, mybearing) : double.MinValue;

            // get or calculate propagation path
            PropagationPathDesignator ppath = PropagationData.Database.PropagationPathFindOrCreateFromLatLon(
                this,
                myloc.Lat,
                myloc.Lon,
                GetElevation(myloc.Lat, myloc.Lon) + myqrv.AntennaHeight,
                dxloc.Lat,
                dxloc.Lon,
                GetElevation(dxloc.Lat, dxloc.Lon) + dxqrv.AntennaHeight,
                Bands.ToGHz(band),
                LatLon.Earth.Radius * Properties.Settings.Default.Path_Band_Settings[band].K_Factor,
                Properties.Settings.Default.Path_Band_Settings[band].F1_Clearance,
                ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel),
                Properties.Settings.Default.ElevationModel,
                myobstr);

            if (ppath == null)
            {
                return(json);
            }
            // add additional info to ppath
            ppath.Location1 = myloc;
            ppath.Location2 = dxloc;
            ppath.QRV1      = myqrv;
            ppath.QRV2      = dxqrv;

            /*
             * // estimate positions according to time
             * DateTime time = DateTime.UtcNow;
             * foreach(PlaneInfo plane in allplanes.Planes)
             * {
             *  // change speed to km/h
             *  double speed = plane.Speed_kmh;
             *  // calculate distance after timespan
             *  double dist = speed * (time - allplanes.At).TotalHours;
             *  LatLon.GPoint newpos = LatLon.DestinationPoint(plane.Lat, plane.Lon, plane.Track, dist);
             *  plane.Lat = newpos.Lat;
             *  plane.Lon = newpos.Lon;
             *  plane.Time = time;
             * }
             */
            // get nearest planes
            List <PlaneInfo> nearestplanes = AircraftData.Database.GetNearestPlanes(DateTime.UtcNow, ppath, allplanes, Properties.Settings.Default.Planes_Filter_Max_Circumcircle, Properties.Settings.Default.Path_Band_Settings[band].MaxDistance, Properties.Settings.Default.Planes_MaxAlt);
            // convert nearestplanes to json
            JsonSerializerSettings settings = new JsonSerializerSettings();

            settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
            settings.FloatFormatHandling  = FloatFormatHandling.String;
            settings.Formatting           = Newtonsoft.Json.Formatting.Indented;
            json = JsonConvert.SerializeObject(nearestplanes, settings);
            return(json);
        }
Beispiel #17
0
 public static double ToGHz(BAND band)
 {
     return((int)band / 1000.0);
 }