Click or drag to resize

AccessComputation Class

Computes Access, or inter-visibility, between two objects.
Inheritance Hierarchy

Namespace:  AGI.Foundation.Access
Assembly:  AGI.Foundation.Core (in AGI.Foundation.Core.dll) Version: 24.3.420.0 (24.3.420.0)
Syntax
public class AccessComputation : DefinitionalObject

The AccessComputation type exposes the following members.

Constructors
  NameDescription
Public methodAccessComputation
Initializes a new instance.
Protected methodAccessComputation(AccessComputation, CopyContext)
Initializes a new instance as a copy of an existing instance.
Top
Properties
  NameDescription
Public propertyCalculateCompleteIntervalsPerConstraint
Gets or sets a value indicating whether satisfaction intervals are computed for each constraint in the Access computation. If this value is set to true, ConstraintResults will contain an entry for each constraint, and SatisfactionIntervals will be filled with the intervals over which the constraint was satisfied. If this value is set to false, ConstraintResults will be null. The value of this property will not affect OverallSatisfactionIntervals. Generally, setting this property to false will result in much better performance.
Public propertyDebuggingLogger
Gets or sets a logger to which debugging information will be written.
Public propertyEventTimes
Gets or sets the manner in which event times are to be reported.
Public propertyInertialFrameForLightTravel
Gets or sets the inertial reference frame in which light travel is modeled.
Public propertyIsFrozen
Gets a value indicating whether this object is frozen. A frozen object cannot be modified and an ObjectFrozenException will be thrown if an attempt is made to do so.
(Inherited from DefinitionalObject.)
Public propertyLightTravelTimeConvergenceTolerance
Gets or sets the convergence tolerance used in determining the light travel time.
Public propertyModel
Gets or sets which effects are to be consider in modeling the signal path and observation.
Public propertyOverrideConstraintSampling
Gets or sets a value indicating whether the sampling parameters specified by Sampling should be applied to all constraints, overriding the sampling parameters specified by the constraints themselves. By default, this value is .
Public propertyReceiver
Gets or sets the IServiceProvider for the object that is receiving the signal for purposes of the Access computation.
Public propertyReceiverConstraints
Gets a list of constraints that are applied to the Receiver.
Public propertyReceiverVelocityVectorForAberration
Gets or sets the velocity vector used in modeling the affect of aberration on the observed signal at the location of the receiver.
Public propertySampling
Gets an instance describing how all constraints are to be sampled as part of this AccessComputation if OverrideConstraintSampling is . If OverrideConstraintSampling is , this property is ignored.
Public propertyTransmitter
Gets or sets the IServiceProvider for the object that is transmitting the signal for purposes of the Access computation.
Public propertyTransmitterConstraints
Gets a list of constraints that are applied to the Transmitter.
Public propertyTransmitterVelocityVectorForAberration
Gets or sets the velocity vector used in modeling the affect of aberration on the observed signal at the location of the transmitter.
Top
Methods
  NameDescription
Protected methodCheckForSameDefinition(AccessComputation)
Checks to determine if another instance has the same definition as this instance and returns if it does. Derived classes MUST override this method and check all new fields introduced by the derived class for definitional equivalence. It is NOT necessary to check base class fields because the base class will already have done that. When overriding this method, you should NOT call the base implementation because it will return for all derived-class instances. Derived classes should check the type of other to preserve the symmetric nature of IsSameDefinition(Object).
Protected methodCheckForSameDefinition(DefinitionalObject)
Checks to determine if another instance has the same definition as this instance and returns if it does. Derived classes MUST override this method and check all new fields introduced by the derived class for definitional equivalence. It is NOT necessary to check base class fields because the base class will already have done that. When overriding this method, you should NOT call the base implementation because it will return for all derived-class instances. Derived classes should check the type of other to preserve the symmetric nature of IsSameDefinition(Object).
(Overrides DefinitionalObjectCheckForSameDefinition(DefinitionalObject).)
Public methodClone
Clones this object using the specified context.
(Overrides DefinitionalObjectClone(CopyContext).)
Protected methodComputeCurrentDefinitionHashCode
Computes a hash code based on the current properties of this object. Derived classes MUST override this method and compute a hash code that combines: a unique hash code seed, the base implementation result, and the hash codes of all new fields introduced by the derived class which are used in the CheckForSameDefinition(DefinitionalObject) method.
(Overrides DefinitionalObjectComputeCurrentDefinitionHashCode.)
Public methodComputeIntervals(TimeIntervalCollection)
Finds the intervals during which all constraints are satisfied.
Public methodComputeIntervals(JulianDate, JulianDate)
Finds the intervals during which all constraints are satisfied.
Public methodComputeIntervals(TimeIntervalCollection, ITrackCalculationProgress)
Finds the intervals during which all constraints are satisfied.
Public methodComputeIntervals(JulianDate, JulianDate, ITrackCalculationProgress)
Finds the intervals during which all constraints are satisfied.
Public methodCreateQuery
Creates an AccessQuery from this computation.
Public methodEnumerateDependencies
Enumerates the dependencies of this object by calling EnumerateT(T) for each object that this object directly depends upon. Derived classes which contain additional dependencies MUST override this method, call the base implementation, and enumerate dependencies introduced by the derived class.
(Overrides DefinitionalObjectEnumerateDependencies(DependencyEnumerator).)
Public methodEquals
Determines whether the specified object is equal to the current object.
(Inherited from Object.)
Protected methodFinalize
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
(Inherited from Object.)
Public methodFreeze
Freezes this object. Further attempts to modify it will result in an ObjectFrozenException.
(Inherited from DefinitionalObject.)
Protected methodFreezeAggregatedObjects
Called by Freeze to also freeze any objects that are considered to be a part of this object. Derived classes which contain additional aggregated objects MUST override this method, call the base implementation, and freeze aggregated objects introduced by the derived class. The objects that need to be frozen in this method are frequently created in this object's constructor and are not settable via properties.
(Overrides DefinitionalObjectFreezeAggregatedObjects.)
Public methodGetDefinitionHashCode
Gets a hash code representing the definition of this object.
(Inherited from DefinitionalObject.)
Public methodGetEvaluator
Gets an evaluator that can be used to determine whether Access is available for individual Julian dates.
Public methodGetEvaluator(EvaluatorGroup)
Gets an evaluator that can be used to determine whether Access is available for individual Julian dates.
Public methodGetHashCode
Serves as the default hash function.
(Inherited from Object.)
Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Public methodIsSameDefinition
Determines if this object has the same definition as another object.
(Inherited from DefinitionalObject.)
Protected methodMemberwiseClone
Creates a shallow copy of the current Object.
(Inherited from Object.)
Protected methodThrowIfFrozen
Throws ObjectFrozenException if this object IsFrozen. This method should be called from any method or property that modifies this object.
(Inherited from DefinitionalObject.)
Public methodToString
Returns a string that represents the current object.
(Inherited from Object.)
Top
Remarks

Though AccessComputation has its use cases we recommend using constraints directly as AccessQueries rather than attaching them to AccessComputations. AccessQueries have much more flexibility in the sorts of networks that they can represent. Most notably AccessComputations are limited to calculating Access for a single pair of Platforms.

When talking about whether one object can "access" another object, we are typically talking about inter-visibility. When can my satellite see my facility? Determining when a satellite can see a facility might involve checking any number of requirements, depending on the specific problem being solved. For starters, you would likely want to require that the surface of the Earth not lie between the satellite and the facility. This might involve the use of an idealized, spheroidal model of the Earth. Or it might involve checking for actual terrain obstructing the line of sight. Next, you may want to model a specific sensor on the satellite in order to further restrict what it is able to see. All of these things are AccessConstraints.

An AccessComputation without any constraints will report that Access is always available. Each constraint that is added to the computation further restricts Access availability. Conceptually, the overall intervals when Access is available are the intersection of the intervals when each constraint is satisfied. In actuality, AccessComputation attempts to work faster by not evaluating intervals for a constraint if those intervals have already been eliminated by a previous constraint. AccessComputation will also evaluate the least computationally expensive constraints first in the hope that significant chunks of time will be eliminated from consideration before the more expensive constraints must be evaluated.

The Transmitter and Receiver are the two objects involved in the Access computation. The names "Transmitter" and "Receiver" serve only to distinguish the two objects. AccessComputation itself does not treat the two objects any differently. Specific AccessConstraints, however, may impart additional meaning to one or both of these roles. When this is the case, the documentation for the AccessConstraint should make it clear.

The only requirement of the two objects is that they implement IServiceProvider. Constraints will require additional capabilities from the object and they will obtain the additional capabilities through the IServiceProvider interface. The documentation for each constraint will describe the service interfaces that are required by the constraint. Consider using Platform to represent your objects involved in Access computations.

Internally, AccessComputation uses TimeIntervalFinder and JulianDateFunctionExplorer to evaluate the constraints.

Note that AccessComputation will create links based on the light time delay settings, but will not add any extensions to the links themselves. So, if a constraint (e.g. CommunicationLinkConstraint) requires additional information on the link, AccessComputation will not work. For these cases, use the constraints as AccessQuery objects and specify the links explicitly. For more information, see the documentation overview on using AccessQuery.

See Also