/// <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); }
/// <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); }
/// <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)); }