source: Sophya/trunk/Poubelle/archTOI.old/gondolageom.cc@ 612

Last change on this file since 612 was 612, checked in by ansari, 26 years ago

fin de fichier, start

File size: 5.4 KB
Line 
1// gondolageom.cc
2// Eric Aubourg CEA/DAPNIA/SPP octobre 1999
3
4#include <math.h>
5#include "gondolageom.h"
6
7
8extern "C" {
9#include "aa_hadec.h"
10}
11
12#ifndef M_PI
13#define M_PI 3.1415926535
14#endif
15
16double GondolaGeom::elevFPC = 41;
17double GondolaGeom::azFPC = 0;
18double GondolaGeom::elevSST0 = 39.6567;
19double GondolaGeom::sstPixelHeight = 0.031359;
20
21 // ;
22 // ; /\ 4 2
23 // ; elevation || positive scanning, clockwise
24 // ; || 6 1 5 ---------->
25 // ; || == positive azimut
26 // ; || x 3
27 // |----| = 0.78 deg / cos(elev)
28 // bol 1 = 41° elevation
29
30
31GondolaGeom::GondolaGeom()
32: fit(200, 2)
33{
34 azPend = 0;
35 angPend = 0;
36
37 nstars = -1;
38}
39
40void GondolaGeom::setEarthPos(double lon, double lat) {
41 this->lon = lon;
42 this->lat = lat;
43}
44
45void GondolaGeom::setTSid(double ts) {
46 this->ts = ts;
47}
48
49void GondolaGeom::setPendulation(double azimuth, double ampl) {
50 azPend = azimuth;
51 angPend = ampl;
52}
53
54void GondolaGeom::addStar(double deltasn, double az, double elv, double /*diod*/) {
55 if (nstars<0) {
56 nstars = 0;
57 fit.clear();
58 }
59
60 nstars++;
61 double azCor = (az - angPend * cos((az - azPend) * M_PI/180) * tan(elv * M_PI/180));
62 if (nstars == 1) {
63 az0 = azCor;
64 }
65 if (azCor - az0 > 180) azCor -= 360;
66 if (azCor - az0 < -180) azCor += 360;
67
68 fit.addData(deltasn, azCor);
69}
70
71// $CHECK$ do a higher order fit ?
72int GondolaGeom::solveStars() {
73 if (nstars<2) return -1;
74 fit.doFit();
75 azimut = fit.value(0);
76
77 if (azimut > 360) azimut -= 360;
78 if (azimut < 0) azimut += 360;
79
80 nstars = -1;
81
82 return 0;
83}
84
85void GondolaGeom::getPointing(double elv, double az, double& trueElv, double& trueAz) {
86 trueElv = elv - angPend * sin((az - azPend) * M_PI/180);
87 trueAz = az + angPend * cos((az - azPend) * M_PI/180) * tan(elv * M_PI/180);
88}
89
90void GondolaGeom::getSkyPointing(double elv, double az, double& ra, double& dec) {
91 double trueElv, trueAz;
92 getPointing(elv, az, trueElv, trueAz);
93
94 double ha;
95 aa_hadec (lat * M_PI/180, elv * M_PI/180, az * M_PI/180, &ha, &dec);
96 ra = - (ha * 180. / M_PI / 15) + (ts/3600.);
97 while (ra>24) ra -= 24;
98 while (ra<0) ra += 24;
99 dec = dec * 180. / M_PI;
100}
101
102double GondolaGeom::getAzimutSST() {
103 double elv, az;
104 getPointing(elevSST0, azimut, elv, az);
105 return az;
106}
107
108double GondolaGeom::getElvSST() {
109 double elv, az;
110 getPointing(elevSST0, azimut, elv, az);
111 return elv;
112}
113
114double GondolaGeom::getAlphaSST() {
115 double ra, dec;
116 getSkyPointing(elevSST0, azimut, ra, dec);
117 return ra;
118}
119
120double GondolaGeom::getDeltaSST() {
121 double ra, dec;
122 getSkyPointing(elevSST0, azimut, ra, dec);
123 return dec;
124}
125
126void GondolaGeom::getAltAzBolo(int ibolo, double& elv, double& az) { // azimut relative to SST.
127 double delElv = 0;
128 double delAz = 0; // relative to ch1-bolo1
129 switch (ibolo) {
130 case 11:
131 delElv = 0;
132 delAz = 0;
133 break;
134 case 8:
135 delElv = 0.78 * sqrt(3.)/2.;
136 delAz = 0.78 * 1./2.;
137 break;
138 case 13:
139 delElv = - 0.78 * sqrt(3.)/2.;
140 delAz = 0.78 * 1./2.;
141 break;
142 case 9:
143 delElv = 0.78 * sqrt(3.)/2.;
144 delAz = - 0.78 * 1./2.;
145 break;
146 case 4:
147 delElv = 0.;
148 delAz = 0.78;
149 break;
150 case 15:
151 delElv = 0.;
152 delAz = - 0.78;
153 break;
154 default:
155 return;
156 }
157 elv = elevFPC + delElv;
158 delAz /= cos(elv * M_PI/180);
159 az = azFPC + delAz;
160 return;
161}
162
163double GondolaGeom::getAzimutBolo(int ibolo) {
164 double elv, az;
165 getAltAzBolo(ibolo, elv, az);
166 double trueelv, trueaz;
167 getPointing(elv, az, trueelv, trueaz);
168 return trueaz;
169}
170
171double GondolaGeom::getElvBolo(int ibolo) {
172 double elv, az;
173 getAltAzBolo(ibolo, elv, az);
174 double trueelv, trueaz;
175 getPointing(elv, az, trueelv, trueaz);
176 return trueelv;
177}
178
179
180double GondolaGeom::getAlphaBolo(int ibolo) {
181 double elv, az;
182 getAltAzBolo(ibolo, elv, az);
183 double ra, dec;
184 getSkyPointing(elv, az, ra, dec);
185 return ra;
186}
187
188
189double GondolaGeom::getDeltaBolo(int ibolo) {
190 double elv, az;
191 getAltAzBolo(ibolo, elv, az);
192 double ra, dec;
193 getSkyPointing(elv, az, ra, dec);
194 return dec;
195}
196
197
198double GondolaGeom::getAlphaCenter() {
199 return getAlphaBolo(11);
200}
201
202double GondolaGeom::getDeltaCenter() {
203 return getDeltaBolo(11);
204}
205
206double GondolaGeom::getAzimutCenter() {
207 return getAzimutBolo(11);
208}
209
210double GondolaGeom::getElvCenter() {
211 return getElvBolo(11);
212}
213
214double GondolaGeom::getAzimutAxis() {
215 return azPend;
216}
217
218double GondolaGeom::getElvAxis() {
219 return 90-angPend;
220}
221
222double GondolaGeom::getAlphaAxis() {
223 double elv = getElvAxis();
224 double az = getAzimutAxis();
225 double ha;
226 double ra, dec;
227 aa_hadec (lat * M_PI/180, elv * M_PI/180, az * M_PI/180, &ha, &dec);
228 ra = - (ha * 180. / M_PI / 15) + (ts/3600.);
229 while (ra>24) ra -= 24;
230 while (ra<0) ra += 24;
231 dec = dec * 180. / M_PI;
232 return ra;
233}
234
235double GondolaGeom::getDeltaAxis() {
236 double elv = getElvAxis();
237 double az = getAzimutAxis();
238 double ha;
239 double ra, dec;
240 aa_hadec (lat * M_PI/180, elv * M_PI/180, az * M_PI/180, &ha, &dec);
241 ra = - (ha * 180. / M_PI / 15) + (ts/3600.);
242 while (ra>24) ra -= 24;
243 while (ra<0) ra += 24;
244 dec = dec * 180. / M_PI;
245 return dec;
246}
Note: See TracBrowser for help on using the repository browser.