VieSched++
VieVS VLBI Scheduling Software
VieVS::AbstractCableWrap Class Referenceabstract

representation of an VLBI cable wrap More...

#include <AbstractCableWrap.h>

Inheritance diagram for VieVS::AbstractCableWrap:
Collaboration diagram for VieVS::AbstractCableWrap:

Public Types

enum  CableWrapFlag { CableWrapFlag::ccw, CableWrapFlag::n, CableWrapFlag::cw }
 enum to distinguish cable wraps More...
 

Public Member Functions

 AbstractCableWrap (double axis1_low_deg, double axis1_up_deg, double axis2_low_deg, double axis2_up_deg)
 constructor More...
 
void setMinimumOffsets (double axis1_low_offset, double axis1_up_offset, double axis2_low_offset, double axis2_up_offset) noexcept
 sets safety margins for axis limits More...
 
double getNLow () const
 getter for lower neutral cable wrap limit in radians More...
 
double getNUp () const
 getter for upper neutral cable wrap limit in radians More...
 
double getCLow () const
 getter for lower clock wise cable wrap limit in radians More...
 
double getCUp () const
 getter for upper clock wise cable wrap limit in radians More...
 
double getWLow () const
 getter for lower counter clock wise cable wrap limit in radians More...
 
double getWUp () const
 getter for upper counter clock wise cable wrap limit in radians More...
 
std::pair< double, double > getLimits (char section) const
 getter for limits of cable wrap section in radians More...
 
virtual bool anglesInside (const PointingVector &p) const noexcept=0
 checks if this pointing vectors azimuth and elevation are inside the axis limits More...
 
virtual void unwrapAzNearAz (PointingVector &new_pointingVector, double az_old) const noexcept=0
 unwraps the current azimuth of pointing vector More...
 
void calcUnwrappedAz (const PointingVector &old_pointingVector, PointingVector &new_pointingVector) const noexcept
 unwraps the current azimuth of pointing vector More...
 
virtual bool unwrapAzInSection (PointingVector &pv, char section) const noexcept=0
 unwraps the current azimuth of pointing vector in specific cable wrap section More...
 
CableWrapFlag cableWrapFlag (const PointingVector &pointingVector) const noexcept
 cable wrap section based on unwrapped azimuth from pointing vector More...
 
virtual CableWrapFlag cableWrapFlag (double unaz) const noexcept=0
 cable wrap section based on unwrapped azimuth More...
 
virtual std::pair< std::string, std::string > getMotions () const noexcept=0
 antenna motion names in .vex format More...
 
virtual std::string vexPointingSectors () const noexcept=0
 cable wrap sections in .vex format More...
 
double getAxis2Low () const
 getter for lowest possible value of 2nd axis More...
 
double getAxis2Up () const
 getter for highest possible value of 2nd axis More...
 
- Public Member Functions inherited from VieVS::VieVS_Object
 VieVS_Object (unsigned long id)
 constructor More...
 
const unsigned long getId () const
 get object id More...
 
bool hasValidId () const
 check if id is valid More...
 
bool hasId (unsigned long id) const
 check if object has specific id More...
 
void setId (unsigned long id)
 set object id More...
 
std::string printId () const
 object id string More...
 

Protected Types

enum  Axis { Axis::axis1, Axis::axis2 }
 enum to distinguish antenna axis More...
 

Protected Member Functions

bool axisInsideCableWrap (double ax1, double ax2) const noexcept
 checks if axis values are inside of possible value range More...
 
std::string pointingSector (const std::string &motion1, const std::string &motion2, char section) const noexcept
 pointing sector in vex format for one axis More...
 
double minLow (Axis axis) const
 getter for lowest possible value for this antenna axis More...
 
double maxUp (Axis axis) const
 getter for uppermost possible value for this antenna axis More...
 

Private Attributes

double axis1Low_
 lower limit of first axis in radians More...
 
double axis1Up_
 upper limit of first axis in radians More...
 
double axis2Low_
 lower limit of second axis in radians More...
 
double axis2Up_
 upper limit of second axis in radians More...
 
double axis1LowOffset_ = 0
 safety margin for lower limit for first axis in radians More...
 
double axis1UpOffset_ = 0
 safety margin for upper limit for first axis in radians More...
 
double axis2LowOffset_ = 0
 safety margin for lower limit for second axis in radians More...
 
double axis2UpOffset_ = 0
 safety margin for upper limit for second axis in radians More...
 
double nLow_
 lower limit for neutral cable wrap range More...
 
double nUp_
 upper limit for neutral cable wrap range More...
 
double cLow_
 lower limit for clockwise cable wrap range More...
 
double cUp_
 upper limit for clockwise cable wrap range More...
 
double wLow_
 lower limit for counter clockwise cable wrap range More...
 
double wUp_
 upper limit for counter clockwise cable wrap range More...
 

Static Private Attributes

static unsigned long nextId = 0
 next id for this object type More...
 

Detailed Description

representation of an VLBI cable wrap

Author
Matthias Schartner
Date
27.06.2017

This class serves as the base class for all cable wrap implementations.

Member Enumeration Documentation

enum VieVS::AbstractCableWrap::Axis
strongprotected

enum to distinguish antenna axis

Author
Matthias Schartner
Enumerator
axis1 

first antenna axis

axis2 

second antenna axis

enum to distinguish cable wraps

Author
Matthias Schartner
Enumerator
ccw 

counter clock wise

neutral

cw 

clock wise

Constructor & Destructor Documentation

AbstractCableWrap::AbstractCableWrap ( double  axis1_low_deg,
double  axis1_up_deg,
double  axis2_low_deg,
double  axis2_up_deg 
)

constructor

Author
Matthias Schartner
Parameters
axis1_low_deglower limit for first axis in degrees
axis1_up_degupper limit for first axis in degrees
axis2_low_deglower limit for second axis in degrees
axis2_up_degupper limit for second axis in degrees

Member Function Documentation

virtual bool VieVS::AbstractCableWrap::anglesInside ( const PointingVector p) const
pure virtualnoexcept

checks if this pointing vectors azimuth and elevation are inside the axis limits

Author
Matthias Schartner
Parameters
ppointing vector which should be tested
Returns
true if inside, otherwise false

Implemented in VieVS::CableWrap_AzEl, VieVS::CableWrap_HaDc, and VieVS::CableWrap_XYew.

Here is the caller graph for this function:

bool AbstractCableWrap::axisInsideCableWrap ( double  ax1,
double  ax2 
) const
protectednoexcept

checks if axis values are inside of possible value range

Author
Matthias Schartner

checks if value ax1 is inside the allowed first axis range and if value ax2 is inside the allowed second axis range. basically checks if target at postion (ax1, ax2) can be observed.

Parameters
ax1value for first axis
ax2value for second axis
Returns
all cable wrap sections in .vex format

Here is the caller graph for this function:

CableWrapFlag VieVS::AbstractCableWrap::cableWrapFlag ( const PointingVector pointingVector) const
inlinenoexcept

cable wrap section based on unwrapped azimuth from pointing vector

Author
Matthias Schartner
Parameters
pointingVectorpointing vector whose azimuth is taken for calculation
Returns
cable wrap section

Here is the call graph for this function:

Here is the caller graph for this function:

virtual CableWrapFlag VieVS::AbstractCableWrap::cableWrapFlag ( double  unaz) const
pure virtualnoexcept

cable wrap section based on unwrapped azimuth

Author
Matthias Schartner
Parameters
unazunwrapped azimuth in radians
Returns
cable wrap section

Implemented in VieVS::CableWrap_AzEl, VieVS::CableWrap_HaDc, and VieVS::CableWrap_XYew.

void AbstractCableWrap::calcUnwrappedAz ( const PointingVector old_pointingVector,
PointingVector new_pointingVector 
) const
noexcept

unwraps the current azimuth of pointing vector

Author
Matthias Schartner

The azimuth of one pointing vector is first calculated in the range between [-pi,pi]. This function adds an factor of 2*pi so that the azimuth is inside the axis limits. If there are possible ambiguities, for example if the azimuth axis range is bigger than 360 degrees, the value, which is closest to the old pointing vector is used.

Parameters
old_pointingVectorclosest target antenna pointing vector
new_pointingVectorpointing vector whose azimuth should be unwrapped

Here is the call graph for this function:

Here is the caller graph for this function:

double VieVS::AbstractCableWrap::getAxis2Low ( ) const
inline

getter for lowest possible value of 2nd axis

Author
Matthias Schartner
Returns
lowest possible value of 2nd axis
double VieVS::AbstractCableWrap::getAxis2Up ( ) const
inline

getter for highest possible value of 2nd axis

Author
Matthias Schartner
Returns
highest possible value of 2nd axis
double VieVS::AbstractCableWrap::getCLow ( ) const
inline

getter for lower clock wise cable wrap limit in radians

Author
Matthias Schartner
Returns
lower clock wise cable wrap limit in radians

Here is the caller graph for this function:

double VieVS::AbstractCableWrap::getCUp ( ) const
inline

getter for upper clock wise cable wrap limit in radians

Author
Matthias Schartner
Returns
upper clock wise cable wrap limit in radians

Here is the caller graph for this function:

pair< double, double > AbstractCableWrap::getLimits ( char  section) const

getter for limits of cable wrap section in radians

Author
Matthias Schartner

This function takes cable wrap section in sked format.

  • 'C': clock wise
  • '-': neutral
  • 'W': counter clock wise
Parameters
sectioncable wrap section in sked format
Returns
pair with lower and upper limit for cable wrap section in radians

Here is the caller graph for this function:

virtual std::pair<std::string, std::string> VieVS::AbstractCableWrap::getMotions ( ) const
pure virtualnoexcept

antenna motion names in .vex format

Author
Matthias Schartner
Returns
antenna motion name for first and second axis (e.g.: {"az", "el"})

Implemented in VieVS::CableWrap_AzEl, VieVS::CableWrap_HaDc, and VieVS::CableWrap_XYew.

Here is the caller graph for this function:

double VieVS::AbstractCableWrap::getNLow ( ) const
inline

getter for lower neutral cable wrap limit in radians

Author
Matthias Schartner
Returns
lower neutral cable wrap limit in radians

Here is the caller graph for this function:

double VieVS::AbstractCableWrap::getNUp ( ) const
inline

getter for upper neutral cable wrap limit in radians

Author
Matthias Schartner
Returns
upper neutral cable wrap limit in radians

Here is the caller graph for this function:

double VieVS::AbstractCableWrap::getWLow ( ) const
inline

getter for lower counter clock wise cable wrap limit in radians

Author
Matthias Schartner
Returns
lower counter clock wise cable wrap limit in radians

Here is the caller graph for this function:

double VieVS::AbstractCableWrap::getWUp ( ) const
inline

getter for upper counter clock wise cable wrap limit in radians

Author
Matthias Schartner
Returns
upper counter clock wise cable wrap limit in radians

Here is the call graph for this function:

Here is the caller graph for this function:

double AbstractCableWrap::maxUp ( AbstractCableWrap::Axis  axis) const
protected

getter for uppermost possible value for this antenna axis

Author
Matthias Schartner
Parameters
axisantenna axis
Returns
uppermost possible value for this antenna axis in radians

Here is the caller graph for this function:

double AbstractCableWrap::minLow ( AbstractCableWrap::Axis  axis) const
protected

getter for lowest possible value for this antenna axis

Author
Matthias Schartner
Parameters
axisantenna axis
Returns
lowest possible value for this antenna axis in radians

Here is the caller graph for this function:

std::string AbstractCableWrap::pointingSector ( const std::string &  motion1,
const std::string &  motion2,
char  section 
) const
protectednoexcept

pointing sector in vex format for one axis

Author
Matthias Schartner

This function takes cable wrap section in sked format.

  • 'C': clock wise
  • '-': neutral
  • 'W': counter clock wise
Parameters
motion1motion type name for first axis (e.g.: "az")
motion2motion type name for second axis (e.g.: "el")
sectionsection name in sked format
Returns
pointing sector string in vex format for one axis

Here is the caller graph for this function:

void AbstractCableWrap::setMinimumOffsets ( double  axis1_low_offset,
double  axis1_up_offset,
double  axis2_low_offset,
double  axis2_up_offset 
)
noexcept

sets safety margins for axis limits

Parameters
axis1_low_offsetsafety margin for lower limit for first axis in degrees
axis1_up_offsetsafety margin for upper limit for first axis in degrees
axis2_low_offsetsafety margin for lower limit for second axis in degrees
axis2_up_offsetsafety margin for upper limit for second axis in degrees
virtual bool VieVS::AbstractCableWrap::unwrapAzInSection ( PointingVector pv,
char  section 
) const
pure virtualnoexcept

unwraps the current azimuth of pointing vector in specific cable wrap section

Author
Matthias Schartner

The azimuth of one pointing vector is first calculated in the range between [-pi,pi]. This function adds an factor of 2*pi so that the azimuth is inside the cable wrap section limits.

This function takes cable wrap section in sked format.

  • 'C': clock wise
  • '-': neutral
  • 'W': counter clock wise
Parameters
pvpointing vector whose azimuth should be unwrapped
sectioncable wrap section in sked format
Returns
true if unwrapping was possible, otherwise false

Implemented in VieVS::CableWrap_AzEl, VieVS::CableWrap_HaDc, and VieVS::CableWrap_XYew.

Here is the caller graph for this function:

virtual void VieVS::AbstractCableWrap::unwrapAzNearAz ( PointingVector new_pointingVector,
double  az_old 
) const
pure virtualnoexcept

unwraps the current azimuth of pointing vector

Author
Matthias Schartner

The azimuth of one pointing vector is first calculated in the range between [-pi,pi]. This function adds an factor of 2*pi so that the azimuth is inside the axis limits. If there are possible ambiguities, for example if the azimuth axis range is bigger than 360 degrees, the value, which is closest to the second input parameter value (az_old) is used.

Parameters
new_pointingVectorpointing vector whose azimuth should be unwrapped
az_oldclosest target antenna azimuth in radians

Implemented in VieVS::CableWrap_AzEl, VieVS::CableWrap_HaDc, and VieVS::CableWrap_XYew.

Here is the caller graph for this function:

virtual std::string VieVS::AbstractCableWrap::vexPointingSectors ( ) const
pure virtualnoexcept

cable wrap sections in .vex format

Author
Matthias Schartner
Returns
all cable wrap sections in .vex format

Implemented in VieVS::CableWrap_AzEl, VieVS::CableWrap_HaDc, and VieVS::CableWrap_XYew.

Here is the caller graph for this function:

Member Data Documentation

double VieVS::AbstractCableWrap::axis1Low_
private

lower limit of first axis in radians

double VieVS::AbstractCableWrap::axis1LowOffset_ = 0
private

safety margin for lower limit for first axis in radians

double VieVS::AbstractCableWrap::axis1Up_
private

upper limit of first axis in radians

double VieVS::AbstractCableWrap::axis1UpOffset_ = 0
private

safety margin for upper limit for first axis in radians

double VieVS::AbstractCableWrap::axis2Low_
private

lower limit of second axis in radians

double VieVS::AbstractCableWrap::axis2LowOffset_ = 0
private

safety margin for lower limit for second axis in radians

double VieVS::AbstractCableWrap::axis2Up_
private

upper limit of second axis in radians

double VieVS::AbstractCableWrap::axis2UpOffset_ = 0
private

safety margin for upper limit for second axis in radians

double VieVS::AbstractCableWrap::cLow_
private

lower limit for clockwise cable wrap range

double VieVS::AbstractCableWrap::cUp_
private

upper limit for clockwise cable wrap range

unsigned long AbstractCableWrap::nextId = 0
staticprivate

next id for this object type

double VieVS::AbstractCableWrap::nLow_
private

lower limit for neutral cable wrap range

double VieVS::AbstractCableWrap::nUp_
private

upper limit for neutral cable wrap range

double VieVS::AbstractCableWrap::wLow_
private

lower limit for counter clockwise cable wrap range

double VieVS::AbstractCableWrap::wUp_
private

upper limit for counter clockwise cable wrap range


The documentation for this class was generated from the following files: