Пример #1
0
        /// <summary>
        /// Get the species observation count from web service
        /// </summary>
        /// <returns>No of observations that matches my settings.</returns>
        private TimeStepSpeciesObservationCountList GetSpeciesObservationCountFromWebService(IUserContext userContext, int periodicityId)
        {
            var searchCriteriaManager = new SpeciesObservationSearchCriteriaManager(userContext);
            SpeciesObservationSearchCriteria searchCriteria = searchCriteriaManager.CreateSearchCriteria(MySettings);

            if (userContext.CurrentRole.IsNull() && userContext.CurrentRoles.Count > 0)
            {
                userContext.CurrentRole = userContext.CurrentRoles[0];
            }

            var displayCoordinateSystem = MySettings.Presentation.Map.DisplayCoordinateSystem;

            //TODO: undersök om detta kan tas bort. Fråga Agneta varför Id istället för de faktiska enum
            Periodicity timeStepType = Periodicity.Yearly;

            foreach (Periodicity value in Enum.GetValues(typeof(Periodicity)))
            {
                if ((int)value == periodicityId)
                {
                    timeStepType = value;
                    break;
                }
            }

            TimeStepSpeciesObservationCountList speciesObservationCount = CoreData.AnalysisManager.GetTimeSpeciesObservationCounts(userContext, searchCriteria, timeStepType, displayCoordinateSystem);

            return(speciesObservationCount);
        }
Пример #2
0
        /// <summary>
        /// Get diagram result.
        /// </summary>
        /// <returns></returns>
        public List <KeyValuePair <string, string> > GetDiagramResult(int periodicityId)
        {
            Dictionary <string, string> observationCountData = new Dictionary <string, string>();

            //Todo Update when temporal filter is connected to diagram result sprint 13
            if (true) //MySettings.Filter.Temporal.IsActive)
            {
                TimeStepSpeciesObservationCountList count = GetSpeciesObservationCountFromWebService(UserContext, periodicityId);
                foreach (TimeStepSpeciesObservationCount timeStep in count)
                {
                    observationCountData.Add(timeStep.Name, Convert.ToString(timeStep.ObservationCount));

                    /*
                     * string date = timeStep.Name;
                     * if (periodicityId == (int)Periodicity.DayOfTheYear)
                     * {
                     *  if (timeStep.Date != null)
                     *  {
                     *       date = ((DateTime)timeStep.Date).ToShortDateString();
                     *  }
                     * }
                     * if (periodicityId == (int)Periodicity.Monthly)
                     * {
                     *  if (timeStep.Date != null)
                     *  {
                     *      date = ((DateTime)timeStep.Date).ToShortDateString();
                     *      if (SessionHandler.Language == "sv-SE")
                     *      {
                     *          date = date.Substring(0, 7);
                     *      }
                     *      else
                     *      {
                     *          date = date.Substring(3, 7);
                     *      }
                     *  }
                     * }
                     *
                     *
                     * observationCountData.Add(date, Convert.ToString(timeStep.ObservationCount));
                     *  * */
                }
            }

            List <KeyValuePair <string, string> > result = observationCountData.ToList();

            return(result);
        }
Пример #3
0
        /// <summary>
        /// Not used since option is required..
        /// </summary>
        /// <returns></returns>
        public List <KeyValuePair <string, string> > CalculateResult()
        {
            Dictionary <string, string> observationCountData = new Dictionary <string, string>();

            //Todo Update when temporal filter is connected to diagram result sprint 13
            if (true) //MySettings.Filter.Temporal.IsActive)
            {
                TimeStepSpeciesObservationCountList countList = GetSpeciesObservationCountFromWebService(UserContext, 0);
                foreach (ITimeStepSpeciesObservationCount timeStep in countList)
                {
                    observationCountData.Add(timeStep.Name, Convert.ToString(timeStep.ObservationCount));
                }
            }

            List <KeyValuePair <string, string> > result = observationCountData.ToList();

            return(result);
        }
        /// <summary>
        /// Gets the abundance index data results.
        /// </summary>
        /// <param name="periodicityId">The periodicity id.</param>
        /// <returns></returns>
        public Dictionary <TaxonViewModel, List <AbundanceIndexData> > GetAbundanceIndexDataResults(int periodicityId)
        {
            if (MySettings.Filter.Taxa.TaxonIds.Count == 0)
            {
                return(null); // todo  - throw Exception?
            }

            TaxonList             taxa      = CoreData.TaxonManager.GetTaxa(UserContext, MySettings.Filter.Taxa.TaxonIds.ToList());
            List <TaxonViewModel> taxonList = taxa.GetGenericList().ToTaxonViewModelList();

            Dictionary <TaxonViewModel, List <AbundanceIndexData> > dicResults   = new Dictionary <TaxonViewModel, List <AbundanceIndexData> >();
            TimeStepSpeciesObservationCountList allSelectedSpeciesTimeSeriesData = GetSpeciesObservationCountFromWebService(UserContext, periodicityId, MySettings.Filter.Taxa.TaxonIds.ToList());

            foreach (TaxonViewModel taxonViewModel in taxonList)
            {
                List <AbundanceIndexData> abundanceIndexDatas = CalculateAbundanceIndex(periodicityId, taxonViewModel.TaxonId, allSelectedSpeciesTimeSeriesData);
                dicResults.Add(taxonViewModel, abundanceIndexDatas);
            }
            return(dicResults);
        }
        /// <summary>
        /// Calculates the abundance index over a selected period of time for a specific taxon.
        /// </summary>
        /// <param name="periodicityId">The time period id.</param>
        /// <param name="taxonId">The taxon id.</param>
        /// <param name="allSelectedSpeciesTimeSeriesData">Calculated time series data for all selected taxa.</param>
        /// <returns>A list of values representing the abundance index.</returns>
        public List <AbundanceIndexData> CalculateAbundanceIndex(int periodicityId, int taxonId, TimeStepSpeciesObservationCountList allSelectedSpeciesTimeSeriesData)
        {
            List <AbundanceIndexData>           abundanceIndexList          = new List <AbundanceIndexData>();
            TimeStepSpeciesObservationCountList singleSpeciesTimeSeriesData = GetSpeciesObservationCountFromWebService(UserContext, periodicityId, taxonId);
            //TimeStepSpeciesObservationCountList allSelectedSpeciesTimeSeriesData = GetSpeciesObservationCountFromWebService(UserContext, periodicityId, MySettings.Filter.Taxa.TaxonIds.ToList());
            long   singleSpeciesTotalSum      = singleSpeciesTimeSeriesData.Sum(t => t.ObservationCount);
            long   allSelectedSpeciesTotalSum = allSelectedSpeciesTimeSeriesData.Sum(t => t.ObservationCount);
            double divisor = (double)singleSpeciesTotalSum / (allSelectedSpeciesTotalSum - singleSpeciesTotalSum);

            foreach (ITimeStepSpeciesObservationCount timeStepSpeciesObservationCount in allSelectedSpeciesTimeSeriesData)
            {
                double singleSpeciesPeriodObservationCount = 0.0;

                // Find the current timeStep value.
                foreach (TimeStepSpeciesObservationCount timeStep in singleSpeciesTimeSeriesData)
                {
                    if (timeStep.Name == timeStepSpeciesObservationCount.Name)
                    {
                        singleSpeciesPeriodObservationCount = timeStep.ObservationCount;
                        break;
                    }
                }

                double dividend    = singleSpeciesPeriodObservationCount / (timeStepSpeciesObservationCount.ObservationCount - singleSpeciesPeriodObservationCount);
                double logArgument = dividend / divisor;
                double value       = Math.Log10(logArgument);

                AbundanceIndexData abundanceIndexData = new AbundanceIndexData();
                abundanceIndexData.TaxonId  = taxonId;
                abundanceIndexData.TimeStep = timeStepSpeciesObservationCount.Name;
                if (!double.IsNaN(value) && !double.IsInfinity(value))
                {
                    abundanceIndexData.AbundanceIndex = value;
                }
                abundanceIndexData.Count      = (int)singleSpeciesPeriodObservationCount;
                abundanceIndexData.TotalCount = (int)timeStepSpeciesObservationCount.ObservationCount;
                abundanceIndexList.Add(abundanceIndexData);
            }
            return(abundanceIndexList);
        }
        /// <summary>
        /// Calculates the abundance index over a selected period of time for a specific taxon.
        /// </summary>
        /// <param name="periodicityId">The time period id.</param>
        /// <param name="taxonId">The taxon id.</param>
        /// <returns>A list of values representing the abundance index.</returns>
        public List <KeyValuePair <string, string> > GetAbundanceIndexDiagramResult(int periodicityId, int taxonId)
        {
            Dictionary <string, string> observationCountData = new Dictionary <string, string>();

            // Todo Update when temporal filter is connected to diagram result sprint 13
            if (true) // MySettings.Filter.Temporal.IsActive)
            {
                TimeStepSpeciesObservationCountList sumSpeciesPeriod = GetSpeciesObservationCountFromWebService(UserContext, periodicityId, taxonId);
                TimeStepSpeciesObservationCountList sumPeriod        = GetSpeciesObservationCountFromWebService(UserContext, periodicityId, MySettings.Filter.Taxa.TaxonIds.ToList());
                long   sumSpeciesTotal = sumSpeciesPeriod.Sum(t => t.ObservationCount);
                long   sumTotal        = sumPeriod.Sum(t => t.ObservationCount);
                double divisor         = (double)sumSpeciesTotal / (sumTotal - sumSpeciesTotal);

                for (int i = 0; i < sumPeriod.Count; ++i)
                {
                    double sumSpeciesPeriodObservationCount = 0.0;

                    foreach (TimeStepSpeciesObservationCount timeStep in sumSpeciesPeriod)
                    {
                        if (timeStep.Name == sumPeriod[i].Name)
                        {
                            sumSpeciesPeriodObservationCount = timeStep.ObservationCount;
                            break;
                        }
                    }

                    double dividend    = sumSpeciesPeriodObservationCount / (sumPeriod[i].ObservationCount - sumSpeciesPeriodObservationCount);
                    double logArgument = dividend / divisor;
                    double value       = Math.Log10(logArgument);

                    observationCountData.Add(sumPeriod[i].Name, !double.IsNaN(value) && !double.IsInfinity(value) ? Convert.ToString(value) : string.Empty);
                }
            }

            List <KeyValuePair <string, string> > result = observationCountData.ToList();

            return(result);
        }
        /// <summary>
        /// Calculates the abundance index over a selected period of time for a specific taxon.
        /// </summary>
        /// <param name="periodicityId">The time period id.</param>
        /// <param name="taxonId">The taxon id.</param>
        /// <returns>A list of values representing the abundance index.</returns>
        public List <AbundanceIndexData> CalculateAbundanceIndex(int periodicityId, int taxonId)
        {
            TimeStepSpeciesObservationCountList allSelectedSpeciesTimeSeriesData = GetSpeciesObservationCountFromWebService(UserContext, periodicityId, MySettings.Filter.Taxa.TaxonIds.ToList());

            return(CalculateAbundanceIndex(periodicityId, taxonId, allSelectedSpeciesTimeSeriesData));
        }