public class SphericalTabularMonostaticCrossSectionScatteringCoefficient extends ScatteringCoefficient
ScatteringCoefficient
which is represented by monostatic tabular cross section values provided in a spherical coordinate system. Each cross section value is a 2x2 complex polarization scattering matrix. The 2x2 radar
cross section scattering matrix may be specified for linear or circular polarization.
The 2x2 complex scattering matrix cross section value is evaluated by first computing the monostatic direction vector, which is the bisection of the incident and reflected unit vectors. Then from the monostatic direction, the cone angle and clock angle are computed in the spherical coordinate system. The cross section value is the obtained by interpolating the cross section table data using the computed cone and clock angles.
Modifier and Type | Class and Description |
---|---|
static class |
SphericalTabularMonostaticCrossSectionScatteringCoefficient.CrossSectionScatteringMatrixSphericalTable
Type which represents the 2x2 complex scattering matrix cross section value table data.
|
static class |
SphericalTabularMonostaticCrossSectionScatteringCoefficient.PolarizationScatteringBasis
The scattering basis associated with the 2x2 complex scattering matrix cross section values.
|
Modifier | Constructor and Description |
---|---|
|
SphericalTabularMonostaticCrossSectionScatteringCoefficient(double[] coneAngles,
ComplexCrossSectionScatteringCoefficient[] crossSectionValues)
Initializes an instance given an array of cone angles, in radians, and an array of monostatic cross section values represented as a complex 2x2 scattering matrix.
|
|
SphericalTabularMonostaticCrossSectionScatteringCoefficient(double[] coneAngles,
double[] crossSectionValues)
Initializes an instance given an array of cone angles, in radians, and an array of monostatic cross section values, in meters
squared.
|
|
SphericalTabularMonostaticCrossSectionScatteringCoefficient(double[] clockAngles,
double[] coneAngles,
ComplexCrossSectionScatteringCoefficient[][] crossSectionValues)
Initializes an instance given an array of clock angles, an array of cone angles, and a two-dimensional array of
monostatic cross section values represented as a complex 2x2 scattering matrix.
|
|
SphericalTabularMonostaticCrossSectionScatteringCoefficient(double[] clockAngles,
double[] coneAngles,
double[][] crossSectionValues)
Initializes an instance given an array of clock angles, an array of cone angles, and a two-dimensional array of
monostatic cross section values, in meters squared.
|
|
SphericalTabularMonostaticCrossSectionScatteringCoefficient(SphericalTabularMonostaticCrossSectionScatteringCoefficient.CrossSectionScatteringMatrixSphericalTable crossSectionScatteringMatrixTable)
Initializes a new instance.
|
protected |
SphericalTabularMonostaticCrossSectionScatteringCoefficient(SphericalTabularMonostaticCrossSectionScatteringCoefficient existingInstance,
CopyContext context)
Initializes a new instance as a copy of an existing instance.
|
Modifier and Type | Method and Description |
---|---|
Signal |
applyScatteringCoefficient(UnitCartesian incidentDirection,
UnitCartesian reflectedDirection,
UnitQuaternion sourceToSinkRotation,
Signal inputSignal)
Applies the scattering coefficient to the input signal.
|
SignalCollection |
applyScatteringCoefficient(UnitCartesian incidentDirection,
UnitCartesian reflectedDirection,
UnitQuaternion sourceToSinkRotation,
Signal primaryPolarizationInputSignal,
Signal orthogonalPolarizationInputSignal)
Applies the scattering coefficient to the input signals.
|
protected boolean |
checkForSameDefinition(ScatteringCoefficient other)
Checks to determine if another instance has the same definition as this instance and
returns
true if it does. |
protected boolean |
checkForSameDefinition(SphericalTabularMonostaticCrossSectionScatteringCoefficient other)
Checks to determine if another instance has the same definition as this instance and
returns
true if it does. |
Object |
clone(CopyContext context)
Clones this object using the specified context.
|
protected int |
computeCurrentDefinitionHashCode()
Computes a hash code based on the current properties of this object.
|
protected ComplexCrossSectionScatteringCoefficient |
computeScatteringCoefficient(Spherical monoStaticDirection)
Computes the scattering coefficient in the supplied monostatic direction.
|
protected ComplexCrossSectionScatteringCoefficient |
computeScatteringCoefficient(UnitCartesian monoStaticDirection)
Computes the scattering coefficient in the supplied monostatic direction.
|
void |
enumerateDependencies(DependencyEnumerator enumerator)
Enumerates the dependencies of this object by calling
DependencyEnumerator#enumerate(T) for each object that this object directly depends upon. |
double |
get(int clockAngleIndex,
int coneAngleIndex)
Gets the cross section value, in meters squared, at the given clock and cone angle indices.
|
List<Double> |
getClockAngles()
Gets the clock angles.
|
List<Double> |
getConeAngles()
Gets the cone angles.
|
boolean |
getIsSymmetrical()
Gets a value indicating whether or not the pattern is symmetrical.
|
checkForSameDefinition, toScatteringCoefficient
areSameDefinition, areSameDefinition, areSameDefinition, areSameDefinition, areSameDefinition, collectionItemsAreSameDefinition, collectionItemsAreSameDefinition, collectionItemsAreSameDefinition, dictionaryItemsAreSameDefinition, freeze, freezeAggregatedObjects, getCollectionHashCode, getCollectionHashCode, getCollectionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDefinitionHashCode, getDictionaryHashCode, getIsFrozen, isSameDefinition, throwIfFrozen
public SphericalTabularMonostaticCrossSectionScatteringCoefficient(@Nonnull SphericalTabularMonostaticCrossSectionScatteringCoefficient.CrossSectionScatteringMatrixSphericalTable crossSectionScatteringMatrixTable)
crossSectionScatteringMatrixTable
- The 2x2 complex scattering matrix cross section table data.ArgumentNullException
- Thrown if the crossSectionScatteringMatrixTable
argument is null.public SphericalTabularMonostaticCrossSectionScatteringCoefficient(double[] coneAngles, double[] crossSectionValues)
The polarization scattering basis defaults to
coneAngles
- An array of cone angles. The cone angle is defined as the zenith angle from the positive z-axis to the point.crossSectionValues
- An array of cross section values in meters squared.ArgumentNullException
- Thrown if either the coneAngles
or crossSectionValues
arguments are null.ArgumentException
- Thrown if the coneAngles
array argument length is less than or equal to 1. Thrown if the coneAngles
array argument
and crossSectionValues
array argument do not have the same length.
Thrown if there is less than 1 unique cone angle value in the coneAngles
array argument.public SphericalTabularMonostaticCrossSectionScatteringCoefficient(double[] coneAngles, ComplexCrossSectionScatteringCoefficient[] crossSectionValues)
The polarization scattering basis defaults to
coneAngles
- An array of cone angles. The cone angle is defined as the zenith angle from the positive z-axis to the point.crossSectionValues
- An array of cross section values represented as a complex 2x2 scattering matrix.ArgumentNullException
- Thrown if either the coneAngles
or crossSectionValues
arguments are null.ArgumentException
- Thrown if the coneAngles
array argument length is less than or equal to 1. Thrown if the coneAngles
array argument
and crossSectionValues
array argument do not have the same length.
Thrown if there is less than 1 unique cone angle value in the coneAngles
array argument.public SphericalTabularMonostaticCrossSectionScatteringCoefficient(double[] clockAngles, double[] coneAngles, double[][] crossSectionValues)
The polarization scattering basis defaults to
clockAngles
- An array of clock angles. Clock angle is defined as the azimuth angle from the positive x-axis to the orthogonal
projection of the point in the x-y plane.coneAngles
- An array of cone angles. Cone angle is defined as the zenith angle from the positive z-axis to the point.crossSectionValues
- A two-dimensional array of cross section values, in meters squared.ArgumentNullException
- Thrown if clockAngles
, coneAngles
, or crossSectionValues
is null
.ArgumentException
- Thrown in the following cases:
clockAngles
or coneAngles
array arguments length is less than or equal to 1.clockAngles
array argument length is not equal to the first dimension of the crossSectionValues
two-dimensional array.coneAngles
array argument length is not equal to the second dimension of the crossSectionValues
two-dimensional arrayclockAngles
.coneAngles
.public SphericalTabularMonostaticCrossSectionScatteringCoefficient(double[] clockAngles, double[] coneAngles, ComplexCrossSectionScatteringCoefficient[][] crossSectionValues)
The polarization scattering basis defaults to
clockAngles
- An array of clock angles. Clock angle is defined as the azimuth angle from the positive x-axis to the orthogonal
projection of the point in the x-y plane.coneAngles
- An array of cone angles. Cone angle is defined as the zenith angle from the positive z-axis to the point.crossSectionValues
- A two-dimensional array of cross section values represented as a complex 2x2 scattering matrix.ArgumentNullException
- Thrown if clockAngles
, coneAngles
, or crossSectionValues
is null
.ArgumentException
- Thrown in the following cases:
clockAngles
or coneAngles
array arguments length is less than or equal to 1.clockAngles
array argument length is not equal to the first dimension of the crossSectionValues
two-dimensional array.coneAngles
array argument length is not equal to the second dimension of the crossSectionValues
two-dimensional arrayclockAngles
.coneAngles
.protected SphericalTabularMonostaticCrossSectionScatteringCoefficient(@Nonnull SphericalTabularMonostaticCrossSectionScatteringCoefficient existingInstance, @Nonnull CopyContext context)
See ICloneWithContext.clone(CopyContext)
for more information about how to implement this constructor
in a derived class.
existingInstance
- The existing instance to copy.context
- A CopyContext
that controls the depth of the copy.ArgumentNullException
- Thrown when existingInstance
or context
is null
.public Object clone(CopyContext context)
This method should be implemented to call a copy constructor on the class of the
object being cloned. The copy constructor should take the CopyContext
as a parameter
in addition to the existing instance to copy. The copy constructor should first call
CopyContext.addObjectMapping(T, T)
to identify the newly constructed instance
as a copy of the existing instance. It should then copy all fields, using
CopyContext.updateReference(T)
to copy any reference fields.
A typical implementation of ICloneWithContext
:
public static class MyClass implements ICloneWithContext {
public MyClass(MyClass existingInstance, CopyContext context) {
context.addObjectMapping(existingInstance, this);
someReference = context.updateReference(existingInstance.someReference);
}
@Override
public final Object clone(CopyContext context) {
return new MyClass(this, context);
}
private Object someReference;
}
In general, all fields that are reference types should be copied with a call to
CopyContext.updateReference(T)
. There are a couple of exceptions:
If one of these exceptions applies, the CopyContext
should be given an opportunity
to update the reference before the reference is copied explicitly. Use
CopyContext.updateReference(T)
to update the reference. If CopyContext.updateReference(T)
returns
the original object, indicating that the context does not have a replacement registered,
then copy the object manually by invoking a Clone method, a copy constructor, or by manually
constructing a new instance and copying the values.
alwaysCopy = context.updateReference(existingInstance.alwaysCopy);
if (existingInstance.alwaysCopy != null && alwaysCopy == existingInstance.alwaysCopy) {
alwaysCopy = (AlwaysCopy) existingInstance.alwaysCopy.clone(context);
}
If you are implementing an evaluator (a class that implements IEvaluator
), the
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
method shares some responsibilities with the
copy context constructor. Code duplication can be avoided by doing the following:
CopyContext.updateReference(T)
. You should still call CopyContext.updateReference(T)
on any references to
non-evaluators.
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
as the last line in the constructor and pass it the
same CopyContext
passed to the constructor.
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
as normal. See the reference documentation for
IEvaluator.updateEvaluatorReferences(agi.foundation.infrastructure.CopyContext)
for more information on implementing that method.
public MyClass(MyClass existingInstance, CopyContext context) {
super(existingInstance, context);
someReference = context.updateReference(existingInstance.someReference);
evaluatorReference = existingInstance.evaluatorReference;
updateEvaluatorReferences(context);
}
@Override
public void updateEvaluatorReferences(CopyContext context) {
evaluatorReference = context.updateReference(evaluatorReference);
}
@Override
public Object clone(CopyContext context) {
return new MyClass(this, context);
}
private Object someReference;
private IEvaluator evaluatorReference;
clone
in interface ICloneWithContext
clone
in class DefinitionalObject
context
- The context to use to perform the copy.protected final boolean checkForSameDefinition(ScatteringCoefficient other)
true
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 false
for all derived-class instances.
Derived classes should check the type of other
to preserve the symmetric nature of IEquatableDefinition.isSameDefinition(java.lang.Object)
.checkForSameDefinition
in class ScatteringCoefficient
other
- The other instance to compare to this one.true
if the two objects are defined equivalently; otherwise false
.protected boolean checkForSameDefinition(SphericalTabularMonostaticCrossSectionScatteringCoefficient other)
true
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 false
for all derived-class instances.
Derived classes should check the type of other
to preserve the symmetric nature of IEquatableDefinition.isSameDefinition(java.lang.Object)
.other
- The other instance to compare to this one.true
if the two objects are defined equivalently; otherwise false
.protected int computeCurrentDefinitionHashCode()
SphericalTabularMonostaticCrossSectionScatteringCoefficient.checkForSameDefinition(agi.foundation.communications.ScatteringCoefficient)
method.computeCurrentDefinitionHashCode
in class ScatteringCoefficient
public void enumerateDependencies(DependencyEnumerator enumerator)
DependencyEnumerator#enumerate(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.enumerateDependencies
in interface IEnumerateDependencies
enumerateDependencies
in class DefinitionalObject
enumerator
- The enumerator that is informed of the dependencies of this object.public final double get(int clockAngleIndex, int coneAngleIndex)
clockAngleIndex
- The desired clock angle index.coneAngleIndex
- the desired cone angle index.public final boolean getIsSymmetrical()
@Nonnull protected ComplexCrossSectionScatteringCoefficient computeScatteringCoefficient(@Nonnull UnitCartesian monoStaticDirection)
monoStaticDirection
- The monostatic direction used to compute the scattering coefficient.@Nonnull protected final ComplexCrossSectionScatteringCoefficient computeScatteringCoefficient(@Nonnull Spherical monoStaticDirection)
monoStaticDirection
- The monostatic direction used to compute the scattering coefficient.public Signal applyScatteringCoefficient(@Nonnull UnitCartesian incidentDirection, @Nonnull UnitCartesian reflectedDirection, @Nonnull UnitQuaternion sourceToSinkRotation, Signal inputSignal)
applyScatteringCoefficient
in class ScatteringCoefficient
incidentDirection
- The incident direction.reflectedDirection
- The reflected direction.sourceToSinkRotation
- The unit quaternion which represents the rotation from the source axes to the sink axes.inputSignal
- The input signal to be modified by the scattering coefficient.public SignalCollection applyScatteringCoefficient(@Nonnull UnitCartesian incidentDirection, @Nonnull UnitCartesian reflectedDirection, @Nonnull UnitQuaternion sourceToSinkRotation, Signal primaryPolarizationInputSignal, Signal orthogonalPolarizationInputSignal)
applyScatteringCoefficient
in class ScatteringCoefficient
incidentDirection
- The incident direction.reflectedDirection
- The reflected direction.sourceToSinkRotation
- The unit quaternion which represents the rotation from the source axes to the sink axes.primaryPolarizationInputSignal
- The input signals from the primary polarization channel to be modified by the scattering coefficient.orthogonalPolarizationInputSignal
- The input signals from the orthogonal polarization channel to be modified by the scattering coefficient.