Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.apo.nmsu.edu/Telescopes/TCC/html/basic_mount_from_obs_8cc_source.html
Дата изменения: Tue Sep 15 02:25:37 2015
Дата индексирования: Sun Apr 10 04:31:57 2016
Кодировка:
lsst.tcc: src/basicMountFromObs.cc Source File
lsst.tcc  1.2.2-3-g89ecb63
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
basicMountFromObs.cc
Go to the documentation of this file.
1 #include <cmath>
2 #include <iomanip>
3 #include <iostream>
4 #include <sstream>
5 #include <stdexcept>
6 #include <boost/tr1/array.hpp> // so array works with old and new compilers
7 #include "slalib.h"
8 #include "tcs.h"
9 #include "tcssys.h" // for MAXAUX,though it sneaks in via earth.h
10 #include "coordConv/coordConv.h"
11 #include "tcc/basics.h"
12 #include "tcc/telConst.h"
13 #include "tcc/tcsShim.h"
14 #include "tcc/tcsAstrom.h"
15 #include "tcc/tcsPOrig.h"
16 #include "tcc/tcsSite.h"
17 #include "tcc/tcsTScope.h"
18 #include "tcc/basicMountFromObs.h"
19 
20 const float DELTA_ANGLE_DEG = 1.0e-7 / coordConv::RadPerDeg;
21 const double MAX_MOUNT_ERR_RAD = 5e-8; // maximum mount error (rad) when iterating computeMount
22 
23 namespace {
24 
42  double computeObjAzInstAng(
43  double objInstX,
44  double objInstY,
45  tcc::Inst const &inst,
46  TSCOPE &tscope,
47  ASTROM &ast,
48  double ga,
49  double gb,
50  double roll,
51  double pitch,
52  double rot
53  ) {
54  tcc::TcsPOrig tcsPOrig0(objInstX - DELTA_ANGLE_DEG, objInstY, inst);
55  tcc::TcsPOrig tcsPOrig1(objInstX + DELTA_ANGLE_DEG, objInstY, inst);
56 
57  // Scale the pointing-origin into radians.
58  double porX0, porY0, porX1, porY1;
59  tcsQpor(&tcsPOrig0.porig, &tscope, &porX0, &porY0);
60  tcsQpor(&tcsPOrig1.porig, &tscope, &porX1, &porY1);
61 
62  // Transform both points into the coordinate system specified in ast
63  double astEquat0, astPolar0, astEquat1, astPolar1;
64  tcsVTsky(roll, pitch, &ast, rot, porX0, porY0, &tscope, ga, gb, &astEquat0, &astPolar0);
65 
66  tcsVTsky(roll, pitch, &ast, rot, porX1, porY1, &tscope, ga, gb, &astEquat1, &astPolar1);
67 
68  return -90 - (slaDbear(astEquat0, astPolar0, astEquat1, astPolar1) / coordConv::RadPerDeg);
69  }
70 
71  /***
72  Call TCSpk routines to compute mount position
73 
74  @param[out] roll roll angle (azimuth) (radians)
75  @param[out] pitch pitch angle (elevation) (radians)
76  @param[out] rot rotator angle (radians)
77  @param[in] tcsTScope telescope info
78  @param[in] tcsAstrom astrometry info at desired date
79  @param[in] targ target info at desired date
80  @param[in] porig pointing origin at desired date
81  @param[in] fldor field orientation at desired date
82  @param[in] ga guiding correction in azimuth (radians)
83  @param[in] gb guiding correction in elevation (radians)
84  @param[in] predRoll predicted roll (radians)
85  @param[in] predPitch predicted pitch (radians)
86  @param[in] predRot predicted rotator angle (radians)
87  */
88  void computeMount(
89  double &roll, double &pitch, double &rot,
90  tcc::TcsTScope &tcsTScope,
91  tcc::TcsAstrom &tcsAstrom,
92  TARG &targ,
93  PORIG &porig,
94  FLDOR &fldor,
95  double ga, double gb,
96  double predRoll, double predPitch, double predRot
97  ) {
98  double duma, dumb; // roll and pitch for a case that doesn't apply
99  double aimx, aimy, aimz; // aim vector
100  double pox = porig.p[0] / tcsTScope.tel.fl; // pointing origin x in units of focal length
101  double poy = porig.p[1] / tcsTScope.tel.fl; // pointing origin y in units of focal length
102  int stat = tcsTrack(
103  targ.op0[0], targ.op0[1],
104  &tcsAstrom.m_ast,
105  predRot, predRoll, predPitch,
106  pox, poy,
107  &tcsTScope.tel,
108  ga, gb,
109  &aimx, &aimy, &aimz,
110  &roll, &pitch, &duma, &dumb);
111  if (stat != 0) {
112  if (stat == 1) {
113  throw std::runtime_error("Too near pole (should not happen)");
114  } else {
115  std::cerr << "*** tcsTrack error: could not compute roll and pitch; here are the inputs and outputs:" << std::endl;
116  std::cerr << "targ.op0=" << targ.op0[0] << ", " << targ.op0[1] << std::endl;
117  std::cerr << "tcsAstrom (only .m_ast is used)=" << tcsAstrom << std::endl;
118  std::cerr << "predRot=" << predRot << std::endl;
119  std::cerr << "predRoll=" << predPitch << std::endl;
120  std::cerr << "pox=" << pox << std::endl;
121  std::cerr << "poy=" << poy << std::endl;
122  std::cerr << "tcsTScope (only .tel is used)=" << tcsTScope << std::endl;
123  std::cerr << "ga=" << ga << std::endl;
124  std::cerr << "gb=" << gb << std::endl;
125  throw std::runtime_error("Could not compute roll and pitch");
126  }
127  }
128 
129  stat = tcsRotator(
130  aimx, aimy, aimz,
131  predRot, roll, pitch,
133  pox, poy,
134  &tcsTScope.tel,
135  ga, gb,
136  &fldor,
137  &tcsAstrom.r_ast,
138  &rot);
139  if (stat != 0) {
140  throw std::runtime_error("Could not compute rotator angle");
141  }
142  }
143 
144 }
145 
146 namespace tcc {
147 
149  Obj &obj,
150  Inst const &inst,
151  TelMod const &telMod,
152  double tai
153  ) {
154  FOPT JF = FIELDO; // field optimization: SLITO = 1D (slit), FIELDO or else = 2D (field)
155  // the value doesn't matter because coordConv handles refraction
156 
157  // create TCSpk structs and fill them
158  TcsSite tcsSite;
159  tcsSite.update(tai, obj.site);
160 
161  // make non-const references to const inputs so I can call non-const-correct TCSpk code
162  TPMOD &tmod = const_cast<TPMOD&>(telMod._model);
163 
164  TcsTScope tcsTScope(tcsSite, inst.instPos);
165 
166  TcsAstrom tcsAstrom(obj.site.wavelen);
167 
168  coordConv::PVT netGuideOff[3];
169  for (int i = 0; i < 3; ++i) {
170  netGuideOff[i] = obj.guideOff.at(i) + obj.calibOff.at(i);
171  }
172 
173  bool computeOrientFromRotPhys = false;
174  if (!inst.hasRotator()) {
175  // no instrument rotator; rotPhys = inst.rot_fixed_phys
176  obj.rotPhys = coordConv::PVT(inst.rot_fixed_phys, 0.0, tai);
177  obj.targetMount.at(2).invalidate(tai);
178  computeOrientFromRotPhys = true;
179  } else if (obj.rotType == RotType_Mount) {
180  // mount rotation; set rot mount to rot user and compute rot phys
181  coordConv::PVT const rotMount = obj.rotUser.copy(tai);
182  obj.targetMount.at(2) = rotMount;
183  obj.rotPhys = wrapCtr((rotMount - inst.rot_offset) / inst.rot_scale);
184  computeOrientFromRotPhys = true;
185  } else if (obj.rotType == RotType_None) {
186  // user specifies no rotation; do the best you can
187  // (can't set rotPhys to NaN because TCSpk needs something)
188  if (obj.actMount[2].isfinite()) {
189  obj.rotPhys = (obj.actMount[2] - inst.rot_offset) / inst.rot_scale;
190  } else {
191  obj.rotPhys = coordConv::PVT(inst.rot_fixed_phys, 0.0, tai);
192  }
193  obj.targetMount.at(2).invalidate(tai);
194  computeOrientFromRotPhys = true;
195  }
196 
197  // Compute mount position at time tai and tai + DeltaTForVel (a small delta-time)
198  FLDOR fldor; // TCSpk field origin
199  TARG targ; // TCSpk target
200  double stat; // return code from TCSpk routines
201  double dumv; // dummy velocity argument
202  double rollArr[2], pitchArr[2], rotPhysArr[2], objAzInstAngArr[2];
203  for (int tInd = 0; tInd < 2; ++tInd) {
204  double tempTAI = tai + (static_cast<double>(tInd) * DeltaTForVel);
205  double tempTAIDays = tempTAI / coordConv::SecPerDay;
206 
207  tcsAstrom.initTarget(targ, obj.obsPos, tempTAI);
208 
209  /*
210  IPA is the position angle: angle of instrument with respect to observed coords
211  (because Az/Alt is the coordinate system used as input to TCSpk):
212  0 if instrument y axis = alt axis; pi/2 if instrument y axis = az axis
213  i.e. 0 if az axis = instrument x axis, pi/2 if az axis = instrument y axis
214  The corresponding TCC angle is obj.objAzInstAng: 0 if az axis = instrument x axis; 90 if az axis = inst Y
215  IPA = obj.rotUser * RadPerDeg
216 
217  IAA = angle of instrument Y axis in rotator coordinate frame:
218  0 if instrument Y is along rotator Y; pi/2 if instrument Y is along rotator X.
219  The corresponding TCC angle is -inst.rot_inst_ang: 0 if rot X = inst X; 90 if rot X = inst Y
220  */
221  double iaa = inst.rot_inst_ang * coordConv::RadPerDeg;
222  double ipa;
223  tcspk::tcsFromPVT(ipa, dumv, obj.objAzInstAng, tempTAI);
224 
225  stat = tcsIfld(
226  iaa, /* IAA */
227  ipa, /* IPA */
228  JF, /* field-optimized */
229  &fldor);
230  if (stat != 0) {
231  std::ostringstream os;
232  os << "tcsIfld error: " << stat;
233  throw std::runtime_error(os.str());
234  }
235 
236  /*
237  Compute porXY: pointing origin in the rotator frame (rad)
238  from objInstXY: pointing origin in the instrument frame (deg)
239  rot_inst_xy is the position of the center of the rotator frame in the instrument frame (deg)
240  rot_inst_ang is the angle of the rotator frame with respect to the instrument frame (deg)
241  */
242 
243  TcsPOrig tcsPOrig(
244  obj.objInstXY.at(0).getPos(tempTAI),
245  obj.objInstXY.at(1).getPos(tempTAI),
246  inst);
247 
248  tcspk::tcsFromPVT(ipa, dumv, obj.rotUser, tempTAI); // instrument position-angle
249 
250  // ga and gb (TCKSpk guide correction roll and pitch) have the opposite sign of netGuideOff
251  double ga, gb;
252  tcspk::tcsFromPVT(ga, dumv, -netGuideOff[0], tempTAI);
253  tcspk::tcsFromPVT(gb, dumv, -netGuideOff[1], tempTAI);
254 
255  double predRot = 0;
256  if ((tInd == 0) || computeOrientFromRotPhys) {
257  // initial estimate of rot is based on rotPhys,
258  // or if computeOrientFromRotPhys then rot is precisely computed from rotPhys
259  double predRotPhys = inst.rot_fixed_phys;
260  if (obj.rotPhys.isfinite()) {
261  predRotPhys = obj.rotPhys.getPos(tempTAI);
262  } else if (obj.actMount[2].isfinite()) {
263  predRotPhys = (obj.actMount[2].getPos(tempTAI) - inst.rot_offset) / inst.rot_scale;
264  }
265  predRot = tcspk::rotTcsFromPhys(predRotPhys, inst.instPos);
266  }
267 
268  double predPitch, predRoll;
269  if (tInd == 0) {
270  // initial estimated roll, pitch are the last commanded values
271  // but next time use the previous computed values
272  // TO DO: base on actual mount if cmd mount unknown; meanwhile use 0
273  tcspk::tcsFromPVT(predRoll, dumv, obj.targetMount.at(0), tempTAI);
274  tcspk::tcsFromPVT(predPitch, dumv, obj.targetMount.at(1), tempTAI);
275 
276  // call tcsMedium just once (but after targ is set)
277  // tel, m_ast and r_ast are updated; everything else is an input
278 
279  double *auxPtr = const_cast<double *>(tcsSite.aux.data());
280 
281  stat = tcsMedium(tempTAIDays, predRoll, predPitch, tcspk::JBP, auxPtr,
282  &tcsSite.tsite, &tmod, &targ, &tcsTScope.tel, &tcsAstrom.m_ast, &tcsAstrom.r_ast);
283  if (stat != 0) {
284  std::ostringstream os;
285  os << "tcsMedium error: " << stat;
286  throw std::runtime_error(os.str());
287  }
288  }
289 
290  // we probably only need to iterate for the first of the two nearby times,
291  // but the code is simpler and safer this way
292 
293  int const MaxIter = 10;
294  double roll, pitch, rot;
295  bool didConverge = false;
296  for (int iter=0; iter < MaxIter; ++iter) {
297  // iterate to get a good estimate of roll, pitch and (especially) rot
298  computeMount(roll, pitch, rot,
299  tcsTScope, tcsAstrom, targ, tcsPOrig.porig, fldor, ga, gb, predRoll, predPitch, predRot);
300 
301  // std::cout << "computeMount iter=" << iter
302  // << "; rotErrAS=" << slaDrange(rot - predRot) * 3600.0 / coordConv::RadPerDeg
303  // << "; rollErrAS=" << slaDrange(roll - predRoll) * 3600.0 / coordConv::RadPerDeg
304  // << "; pitchErrAS=" << slaDrange(pitch - predPitch) * 3600.0 / coordConv::RadPerDeg
305  // << "; maxErrAS=" << MAX_MOUNT_ERR_RAD * 3600.0 / coordConv::RadPerDeg
306  // << std::endl;
307  if (computeOrientFromRotPhys) {
308  // rotator angle is known
309  rot = predRot;
310  }
311 
312  if (std::fabs(slaDrange(rot - predRot)) < MAX_MOUNT_ERR_RAD
313  && std::fabs(slaDrange(roll - predRoll)) < MAX_MOUNT_ERR_RAD
314  && std::fabs(slaDrange(pitch - predPitch)) < MAX_MOUNT_ERR_RAD) {
315  didConverge = true;
316  // std::cout << "computeMount iteration converged in " << iter + 1 << " iterations" << std::endl;
317  break;
318  }
319  predRoll = roll;
320  predPitch = pitch;
321  predRot = rot;
322  }
323  if (!didConverge) {
324  std::ostringstream os;
325  os << "computeMount iteration did not converge in " << MaxIter << " iterations"
326  << "; predRot=" << predRot << "; rot=" << rot
327  << "; predRoll=" << predRoll << "; roll=" << roll
328  << "; predPitch=" << predPitch << "; pitch=" << pitch;
329  throw std::runtime_error(os.str());
330  }
331  rollArr[tInd] = roll;
332  pitchArr[tInd] = pitch;
333 
334  // std::cout << std::setprecision(12)
335  // << "after computeMount: ind=" << tInd
336  // << "; taiDays=" << tempTAIDays
337  // << "; ga=" << ga
338  // << "; gb=" << gb
339  // << "; roll=" << rollArr[tInd]
340  // << "; pitch=" << pitchArr[tInd]
341  // << "; rota=" << rot
342  // << std::endl;
343  // std::cout << tcsSite.tsite;
344  // std::cout << tcsTScope.tel;
345  // std::cout << targ;
346  // std::cout << tcsPOrig;
347  // std::cout << fldor;
348  // std::cout << "m_ast=" << tcsAstrom.m_ast;
349  // std::cout << "r_ast=" << tcsAstrom.r_ast;
350 
351  if (computeOrientFromRotPhys) {
352  // The rotation angle computed above cannot be used because the rotator is not tracking
353  // the sky or horizon. Compute orientation angles from obj.rotPhys, instead.
354  rotPhysArr[tInd] = obj.rotPhys.getPos(tempTAI);
355  objAzInstAngArr[tInd] = computeObjAzInstAng(
356  obj.objInstXY.at(0).getPos(tempTAI),
357  obj.objInstXY.at(1).getPos(tempTAI),
358  inst,
359  tcsTScope.tel,
360  tcsAstrom.m_ast,
361  ga, gb,
362  rollArr[tInd], pitchArr[tInd], predRot);
363  } else {
364  // TCSpk has computed the rotator angle we need
365  rotPhysArr[tInd] = tcspk::rotPhysFromTcs(rot, inst.instPos);
366  }
367  }
368 
369  // for (int tInd = 0; tInd < 2; ++tInd) {
370  // std::cout << "at end of mountFromObs: ind=" << tInd << "; roll=" << rollArr[tInd] << "; pitch="
371  // << pitchArr[tInd] << "; tcsRotPhys=" << rotPhysArr[tInd] << std::endl;
372  // }
373 
374  // update object block, without wrap; note that roll (mount azimuth)
375  // already uses the TCC's convention of 0 south, pi/2 east, so do NOT set the isAz flag true
376  tcspk::pvtFromTCS(obj.targetMount.at(0), rollArr, tai, DeltaTForVel);
377  tcspk::pvtFromTCS(obj.targetMount.at(1), pitchArr, tai, DeltaTForVel);
378 
379  if (computeOrientFromRotPhys) {
380  // use objAzInstAngArr to compute objAzInstAng and objUserInstAng
381  // note that obj.rotPhys and obj.targetMount[2] are already set
382  obj.objAzInstAng.setFromPair(objAzInstAngArr, tai, DeltaTForVel, true);
383  obj.objUserInstAng = coordConv::wrapCtr(obj.objUserObjAzAng + obj.objAzInstAng);
384 
385  // diagnostic print for a mysterious problem
386  if (std::abs(obj.objUserInstAng.vel) > 1.0) {
387  std::cerr << "basicMountFromObs warning: obj.objUserInstAng=" << obj.objUserInstAng
388  << "; obj.objUserObjAzAng=" << obj.objUserObjAzAng
389  << "; obj.objAzInstAng=" << obj.objAzInstAng
390  << "; objAzInstAngArr=" << objAzInstAngArr[0] << ", " << objAzInstAngArr[1]
391  << std::endl;
392  }
393  } else if (obj.rotType == RotType_None) {
394  // no rotation desired; unknown orientation
395  obj.rotPhys.invalidate(tai);
396  obj.targetMount.at(2).invalidate(tai);
397  obj.objAzInstAng.invalidate(tai);
398  obj.objUserInstAng.invalidate(tai);
399  } else if (obj.rotType == RotType_Mount) {
400  throw std::runtime_error("Bug: computeOrientFromRotPhys false for RotType_Mount");
401  } else {
402  // rotate with sky or horizon; rot phys = rotator angle computed by TCSpk
403  obj.rotPhys.setFromPair(rotPhysArr, tai, DeltaTForVel, true);
404  // include guide correction when computing rotator mount (az and alt guide correction is handled as ga, gb above)
405  obj.targetMount.at(2) = (obj.rotPhys * inst.rot_scale) + inst.rot_offset + netGuideOff[2].getPos(tai);
406  }
407 
408  /*
409  Compute additional orientation angles: rotAzObjAzAng, rotAzRotAng and spiderInstAng
410 
411  spiderInstAng is defined as the angle from instrument x to increasing azimuth at the center of the rotator
412  spiderInstAng = rotAzInstAng-at-center-of-rot
413 
414  by offsetting observed coordinates from object (at boresight) to center of rotator
415  along a vector rotObjInstXY in the focal plane, we get:
416  distance = length of rotObjInstXY vector
417  fromDir is the direction of offset in az/alt frame at object
418  fromDir = rotObjInstDir - objAzInstAng
419  toDir is the direction of the offset in the az/alt frame at the center of the rotator
420  toDir = rotObjInstDir - rotAzInstAng-at-center-of-rot
421  = rotObjInstDir - spiderInstAng
422  spiderInst = rotObjInstDir - toDir
423 
424  rotAzRotAng = rotAzInstAng-at-center-of-rot - rotInstAng
425  = spiderInstAng - rotInstAng
426  = (rotObjInstDir - toDir) - rotInstAng
427  = (rotObjInstDir - rotInstAng) - toDir
428 
429  rotAzObjAzAng = rotAzInstAng-at-center-of-rot - objAzInstAng
430  = spiderInstAng - objAzInstAng
431  = (rotObjInstDir - toDir) - objAzInstAng
432  = (rotObjInstDir - objAzInstAng) - toDir
433  = fromDir - toDir
434 
435  note: the offset also computes the az/alt at the center of the instrument, but we don't need it so don't save it
436  */
438  for (int i = 0; i < 2; ++i) {
439  objRotInstXY[i] = obj.objInstXY[i] - inst.rot_inst_xy[i];
440  }
441  coordConv::PVT rotObjInstDir, rotObjDist; // direction is from rotator center to object, in instrument frame
442  coordConv::polarFromXY(rotObjDist, rotObjInstDir, -objRotInstXY.at(0), -objRotInstXY.at(1), tai);
443  coordConv::PVT fromDir = rotObjInstDir - obj.objAzInstAng;
444  coordConv::PVT toDir;
445  coordConv::PVTCoord obsInstPos = obj.obsPos.offset(toDir, fromDir, rotObjDist);
446  obj.rotAzObjAzAng = coordConv::wrapCtr(fromDir - toDir);
447  obj.spiderInstAng = coordConv::wrapCtr(rotObjInstDir - toDir);
448  obj.rotAzRotAng = coordConv::wrapCtr(obj.spiderInstAng - inst.rot_inst_ang);
449  }
450 
451 }
bool tcsFromPVT(double &pos, double &vel, coordConv::PVT const &pvt, double tai, bool isAz=false)
Definition: tcsShim.cc:12
bool hasRotator() const
Definition: inst.h:196
coordConv::PVT objAzInstAng
Definition: obj.h:96
coordConv::PVT rotUser
Definition: obj.h:52
TPMOD _model
Definition: telMod.h:142
std::tr1::array< double, MAXAUX > aux
auxiliary data for pointing model terms
Definition: tcsSite.h:40
coordConv::PVT rotAzRotAng
Definition: obj.h:99
std::tr1::array< coordConv::PVT, NAxes > actMount
Definition: obj.h:110
double rot_fixed_phys
rotator ID, or 0 if no rotator
Definition: inst.h:112
TSCOPE tel
telescope information
Definition: tcsTScope.h:32
std::tr1::array< coordConv::PVT, 2 > objInstXY
Definition: obj.h:74
double rot_scale
rotator mount offset (mount units)
Definition: inst.h:117
ASTROM r_ast
rotator astrometry information
Definition: tcsAstrom.h:32
Definition: inst.h:41
ASTROM m_ast
mount astrometry information
Definition: tcsAstrom.h:31
const double MAX_MOUNT_ERR_RAD
SITE tsite
site information
Definition: tcsSite.h:39
std::tr1::array< coordConv::PVT, NAxes > targetMount
Definition: obj.h:105
void basicMountFromObs(Obj &obj, Inst const &inst, TelMod const &telMod, double tai)
std::tr1::array< double, 2 > rot_inst_xy
focus (secondary piston) offset due to instrument (um)
Definition: inst.h:102
coordConv::PVT rotAzObjAzAng
Definition: obj.h:98
PORIG porig
pointing origin
Definition: tcsPOrig.h:35
int const JBP
false: the telescope never goes below the horizon or beyond 90 alt
Definition: tcsShim.h:52
void pvtFromTCS(coordConv::PVT &pvt, double posArr[2], double tai, double deltaTAI, bool isAz=false)
Definition: tcsShim.cc:28
InstPosition instPos
Definition: inst.h:48
const double DeltaTForVel
Definition: basics.h:17
double rot_inst_ang
position of the center of the rotator in instrument frame (x,y deg)
Definition: inst.h:103
Definition: obj.h:40
coordConv::PVT objUserObjAzAng
Definition: obj.h:95
coordConv::PVT spiderInstAng
Definition: obj.h:100
double rot_offset
mount pos = offet + (scale * physical pos)
Definition: inst.h:116
coordConv::PVT objUserInstAng
Definition: obj.h:97
const float DELTA_ANGLE_DEG
double rotTcsFromPhys(double rotPhys, tcc::InstPosition const &instPos)
Definition: tcsShim.h:85
coordConv::PVTCoord obsPos
Definition: obj.h:94
void initTarget(TARG &tar, coordConv::PVTCoord const &obsPos, double tai) const
Definition: tcsAstrom.cc:40
coordConv::Site site
Definition: obj.h:60
std::tr1::array< coordConv::PVT, NAxes > calibOff
Definition: obj.h:76
void update(double tai, coordConv::Site const &site)
Definition: tcsSite.cc:37
double tai()
Definition: tai.cc:7
coordConv::PVT rotPhys
Definition: obj.h:102
RotTypeEnum rotType
Definition: obj.h:51
std::tr1::array< coordConv::PVT, NAxes > guideOff
Definition: obj.h:75
double rotPhysFromTcs(double rotTcs, tcc::InstPosition const &instPos)
Definition: tcsShim.h:92
reference at(size_type __n)