My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
Pointing.h
Go to the documentation of this file.
1 #ifndef POINTING_H
2 #define POINTING_H
3 
12 // Needed for SRC_LEN
13 
14 #include "gcp/control/code/unix/libunix_src/specific/specificregs.h"
15 
16 #include "gcp/util/common/Axis.h"
17 #include "gcp/util/common/RegDate.h"
18 
19 #include "gcp/antenna/control/specific/TrackerMsg.h"
20 #include "gcp/antenna/control/specific/Encoder.h"
21 #include "gcp/antenna/control/specific/PmacAxis.h"
22 #include "gcp/antenna/control/specific/Position.h"
23 #include "gcp/antenna/control/specific/SpecificShare.h"
24 
25 namespace gcp {
26  namespace antenna {
27  namespace control {
28 
29 
30  class Tracker;
31 
35  class Pointing {
36 
37  public:
38 
42  enum PositionType {
43  MOUNT_ANGLES,
44  MOUNT_RATES,
45  TOPOCENTRIC,
46  GEOCENTRIC
47  };
48 
52  Pointing();
53 
57  void reset();
58 
59  // Methods to set up pointing in preparation for various moves
60 
64  void setupForHalt(SpecificShare* share);
65 
69  void setupForReboot(SpecificShare* share);
70 
74  void setupForSlew(SpecificShare* share, TrackerMsg* msg);
75 
79  void setupForTrack();
80 
81  // Member modification methods
82 
86  void setTime(double utc);
87 
91  void setTime(int mjd, int sec);
92 
96  void setSrcName(char* name);
97  unsigned char* getSrcName();
98 
102  void setScanName(char* name);
103  unsigned char* getScanName();
104 
108  void setAxes(gcp::util::Axis::Type axes);
109 
113  void setRa(double ra);
114 
118  void setDec(double dec);
119 
123  void setDist(double dist);
124 
128  void setRefraction(double refraction);
129 
130  // Member access methods
131 
136 
142 
146  double getUtc();
148 
152  double getRefraction();
153 
157  void convertMountToEncoder(Encoder* encoder,
158  PmacAxis* axis,
159  int current);
160  void convertMountToEncoder(Encoder* encoder,
161  PmacAxis* axis,
162  double current);
169 
173  void setAngles(double az, double el, double pa);
174 
178  void setRates(double az, double el, double pa);
179 
183  void computeGeocentricPosition(double lst, PointingCorrections* f);
184 
188  void packUtc(unsigned* u_elements);
189 
195  void packSourceName(unsigned* u_elements, int nel);
196 
200  void packScanName(unsigned* u_elements, int nel);
201 
205  void packEquatGeoc(signed* s_elements);
206 
210  void packHorizGeoc(signed* s_elements);
211 
215  void packHorizTopo(signed* s_elements);
216 
220  void packHorizMount(signed* s_elements);
221  void packHorizMount(double* array);
222 
226  bool isCenter() {
227  return isCenter_;
228  }
229 
230  void resetAngles();
231 
232  private:
233 
234  friend class Tracker;
235 
239  double wrapPi(double angle);
240 
244  double wrap2pi(double angle);
245 
249  char srcName_[SRC_LEN];
250 
254  char scanName_[SCAN_LEN];
255 
259  bool isCenter_;
260 
264  int mjd_, sec_;
265 
269  double ra_,dec_;
270 
274  double dist_;
275 
279  double refraction_;
280 
284  gcp::antenna::control::Position geocentric_;
285 
289  gcp::antenna::control::Position topocentric_;
290 
294  gcp::antenna::control::Position mountAngles_;
295  gcp::antenna::control::Position saveAngles_;
296 
300  gcp::antenna::control::Position mountRates_;
301 
302  gcp::util::Axis::Type axes_; // The set of axes to drive,
303  // expressed as a bitwise
304  // union of Axis enumerators.
305  }; // End class Pointing
306 
307  }; // End namespace control
308  }; // End namespace antenna
309 } // End namespace gcp
310 
311 #endif // End #ifndef
void packHorizGeoc(signed *s_elements)
Definition: Pointing.cc:393
gcp::util::Axis::Type getAxes()
Definition: Pointing.cc:154
void setSrcName(char *name)
Definition: Pointing.cc:60
void packUtc(unsigned *u_elements)
Definition: Pointing.cc:331
void packHorizMount(signed *s_elements)
Definition: Pointing.cc:417
void setRefraction(double refraction)
Definition: Pointing.cc:186
void setAxes(gcp::util::Axis::Type axes)
Definition: Pointing.cc:146
Definition: Position.h:35
void packSourceName(unsigned *u_elements, int nel)
Definition: Pointing.cc:365
void reset()
Definition: Pointing.cc:25
void setDist(double dist)
Definition: Pointing.cc:178
void setupForTrack()
Definition: Pointing.cc:467
void setRa(double ra)
Definition: Pointing.cc:162
double getUtc()
Definition: Pointing.cc:340
Definition: Tracker.h:49
void setupForHalt(SpecificShare *share)
Definition: Pointing.cc:425
Definition: PmacAxis.h:28
unsigned char * getScanName()
Definition: Pointing.cc:86
void setRates(double az, double el, double pa)
Definition: Pointing.cc:136
void setScanName(char *name)
Definition: Pointing.cc:77
void packScanName(unsigned *u_elements, int nel)
Definition: Pointing.cc:374
bool includesAxis(gcp::util::Axis::Type axis)
Definition: Pointing.cc:242
void setTime(double utc)
Definition: Pointing.cc:94
Definition: Pointing.h:35
void resetAngles()
Definition: Pointing.cc:126
void setupForSlew(SpecificShare *share, TrackerMsg *msg)
Definition: Pointing.cc:475
gcp::antenna::control::Position * Position(PositionType type)
Definition: Pointing.cc:250
bool isCenter()
Definition: Pointing.h:226
void setDec(double dec)
Definition: Pointing.cc:170
unsigned char * getSrcName()
Definition: Pointing.cc:69
void setupForReboot(SpecificShare *share)
Definition: Pointing.cc:446
void convertMountToEncoder(Encoder *encoder, PmacAxis *axis, int current)
Definition: Pointing.cc:194
void packHorizTopo(signed *s_elements)
Definition: Pointing.cc:401
void packEquatGeoc(signed *s_elements)
Definition: Pointing.cc:383
void setAngles(double az, double el, double pa)
Definition: Pointing.cc:113
PositionType
Definition: Pointing.h:42
Definition: RegDate.h:19
void computeGeocentricPosition(double lst, PointingCorrections *f)
Definition: Pointing.cc:282
Definition: TrackerMsg.h:33
Type
Definition: Axis.h:24
Definition: Encoder.h:24
gcp::util::RegDate getDate()
Definition: Pointing.cc:348
Pointing()
Definition: Pointing.cc:17
double getRefraction()
Definition: Pointing.cc:357
Definition: PointingCorrections.h:22