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

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

portage cxx en cours

File size: 5.4 KB
RevLine 
[556]1// gondolageom.cc
2// Eric Aubourg CEA/DAPNIA/SPP octobre 1999
3
4#include <math.h>
5#include "gondolageom.h"
6extern "C" {
7#include "aa_hadec.h"
8}
9
10#ifndef M_PI
11#define M_PI 3.1415926535
12#endif
13
14double GondolaGeom::elevFPC = 41;
15double GondolaGeom::azFPC = 0;
16double GondolaGeom::elevSST0 = 39.6567;
17double GondolaGeom::sstHeight = 1.41;
18
19 // ;
20 // ; /\ 4 2
21 // ; elevation || positive scanning, clockwise
22 // ; || 6 1 5 ---------->
23 // ; || == positive azimut
24 // ; || x 3
25 // |----| = 0.78 deg / cos(elev)
26 // bol 1 = 41° elevation
27
28
29GondolaGeom::GondolaGeom() {
30 azPend = 0;
31 angPend = 0;
32
33 nstars = -1;
34}
35
36void GondolaGeom::setEarthPos(double lon, double lat) {
37 this->lon = lon;
38 this->lat = lat;
39}
40
41void GondolaGeom::setTSid(double ts) {
42 this->ts = ts;
43}
44
45void GondolaGeom::setPendulation(double azimuth, double ampl) {
46 azPend = azimuth;
47 angPend = ampl;
48}
49
50void GondolaGeom::addStar(double deltasn, double az, double elv, double /*diod*/) {
51 if (nstars<0) {
52 nstars = 0;
53 saz=staz=st=st2=0;
54 }
55
56 nstars++;
57 double azCor = (az - angPend * cos((az - azPend) * M_PI/180) * tan(elv * M_PI/180));
58 if (nstars == 1) {
59 az0 = azCor;
60 }
61 if (azCor - az0 > 180) azCor -= 360;
62 if (azCor - az0 < -180) azCor += 360;
63 saz += azCor;
64 staz += azCor*deltasn;
65 st += deltasn;
66 st2 += deltasn*deltasn;
67}
68
69void GondolaGeom::solveStars() {
70 staz /= nstars;
71 st /= nstars;
72 saz /= nstars;
73 st2 /= nstars;
74 double a = (staz - st*saz) / (st2 - st*st);
75 double b = saz - a*st;
76
77 nstars = -1;
78
79 azimut = b;
80
81 if (azimut > 360) azimut -= 360;
82 if (azimut < 0) azimut += 360;
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.