public List <MeasurementV2> ToMeasurements(TOA5 toa5)
        {
            List <MeasurementV2> measurements = new List <MeasurementV2>();

            foreach (IObservation obs in toa5.Observations)
            {
                foreach (Variable variable in toa5.Metadata.Variables)
                {
                    // Skip TIMESTAMP and RECORD
                    if (variable.FieldName == "TIMESTAMP" ||
                        variable.FieldName == "RECORD")
                    {
                        continue;
                    }

                    MeasurementV2 measurement =
                        CreateMeasurementFromVariable(
                            variable, obs, toa5.Metadata);

                    if (measurement != null)
                    {
                        measurements.Add(measurement);
                    }
                }
            }

            return(measurements);
        }
Exemplo n.º 2
0
        // TODO: Much of this is copy/pasted from DocumentDbMeasurementV2Transformer, consider move logic to a shared class
        // WARNING: This assumes one physicalQuantity per Measurement -- it returns null Measurement on first PhysicalQuantity with value of null
        private MeasurementV2 CreateMeasurementFromVariable(
            Variable variable,
            T observation,
            Metadata metadata)
        {
            // Look up property based on string, get value
            var value = observation
                        .GetType()
                        .GetProperty(
                variable.FieldName
                .Replace("(", "")
                .Replace(")", ""))
                        .GetValue(observation, null);

            // Ensure value is a number, don't create Measurement on null value (assumes Measurement only has one PhysicalQuantity)
            if (!(value is double? ||
                  value is decimal?||
                  value is int?))
            {
                return(null);
            }

            string measurementName = Map.GetMeasurementName(variable.FieldName);

            // Check if variable is in list to be mapped
            if (String.IsNullOrEmpty(measurementName))
            {
                return(null);
            }

            DateTime?measurementDateTime =
                Map.GetDateTimeMeasurement(observation);

            List <PhysicalQuantityV2> physicalQuantities =
                new List <PhysicalQuantityV2>()
            {
                new PhysicalQuantityV2(
                    (double?)value,
                    variable.Units,
                    DateTime.UtcNow,
                    EtlEventId)
            };

            MeasurementV2 m = new MeasurementV2(
                "Measurement",
                measurementName,
                measurementDateTime,
                physicalQuantities);

            return(m);
        }
Exemplo n.º 3
0
        public List <U> Transform(TidyData tidyData)
        {
            List <U> samples = new List <U>();

            foreach (T observation in tidyData.Observations)
            {
                // Maps class specific data, returns null if not able to map
                U sample = Map.GetSample(observation);

                if (sample == null)
                {
                    continue;
                }

                sample.Type           = DocumentType;
                sample.Project        = Project;
                sample.AreaOfInterest = AreaOfInterest;
                sample.PartitionKey   =
                    $"{sample.Type}_{sample.AreaOfInterest}_{sample.Name}";
                sample.Schema       = Schema;
                sample.Measurements = new List <MeasurementV2>();

                foreach (Variable variable in tidyData.Metadata.Variables)
                {
                    // Create MeasurementV2s
                    // Use a mapper that defines the variables to keep
                    // if(variable in mappers.VariablesToKeep)
                    MeasurementV2 measurement =
                        CreateMeasurementFromVariable(
                            variable,
                            observation,
                            tidyData.Metadata);

                    if (measurement != null)
                    {
                        sample.Measurements.Add(measurement);
                    }
                }

                samples.Add(sample);
            }

            return(samples);
        }
Exemplo n.º 4
0
 public static bool IsMeasurementRoughlyEqual(
     MeasurementV2 first,
     MeasurementV2 second)
 {
     return(first.AreaOfInterest == second.AreaOfInterest &&
            first.Location == second.Location &&
            first.PartitionKey == second.PartitionKey &&
            first.PhysicalQuantities.Count == second.PhysicalQuantities.Count &&
            ArePhysicalQuantityV2RoughlyEqual(first.PhysicalQuantities[0], second.PhysicalQuantities[0]) &&
            first.Project == second.Project &&
            first.Schema == second.Schema &&
            first.TimestepSec == second.TimestepSec &&
            first.Type == second.Type &&
            first._attachments == second._attachments &&
            first._etag == second._etag &&
            first._rid == second._rid &&
            first._self == second._self &&
            first._ts == second._ts);
 }
        private MeasurementV2 CreateMeasurementFromVariable(
            Variable variable,
            IObservation observation,
            Metadata metadata)
        {
            // Look up property based on string, get value
            var value = observation
                        .GetType()
                        .GetProperty(
                variable.FieldName
                .Replace("(", "")
                .Replace(")", ""))
                        .GetValue(observation, null);

            // Ensure value is a number
            if (!(value is double? ||
                  value is decimal?||
                  value is int? ||
                  value is null))
            {
                return(null);
            }

            string name = map.GetMeasurementName(variable.FieldName);

            // Check if variable is in list to be mapped
            if (String.IsNullOrEmpty(name))
            {
                return(null);
            }

            DateTime measurementDateTime =
                new DateTime(observation.TIMESTAMP.Ticks, DateTimeKind.Utc);

            List <PhysicalQuantityV2> physicalQuantities =
                new List <PhysicalQuantityV2>()
            {
                new PhysicalQuantityV2(
                    (double?)value,
                    variable.Units,
                    DateTime.UtcNow,
                    EtlEventId)
            };

            LocationV2 location = new LocationV2("Point",
                                                 map.GetLatFromStation(metadata),
                                                 map.GetLonFromStation(metadata));

            string areaOfInterest = map.GetFieldID(metadata);

            MeasurementV2 m = new MeasurementV2(
                DocumentType,
                name,
                Schema,
                Project,
                areaOfInterest,
                location,
                measurementDateTime,
                physicalQuantities,
                Timestep);

            return(m);
        }