source: Sophya/trunk/Poubelle/archTOI.old/templocator.cc@ 435

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

toto

File size: 5.1 KB
Line 
1#include "templocator.h"
2#include <math.h>
3extern "C" {
4#include "aa_hadec.h"
5}
6
7#include "fitsio.h"
8#include "plgalcross.h"
9
10#ifndef M_PI
11#define M_PI 3.14159265358979323846
12#endif
13
14TempLocator tempLocator;
15
16TempLocator::TempLocator()
17{
18 lon = lat = ts = 0;
19 ra = dec = -99999;
20 xSampleNum = -99999;
21 fitsfile* fptr;
22 int status=0;
23 fits_open_file(&fptr, "samplenum_gal_cross.fits", READONLY, &status);
24 int simple, bitpix, naxis;
25 long naxes;
26 long pcount, gcount;
27 int extend;
28 fits_read_imghdr(fptr, 1, &simple, &bitpix, &naxis, &naxes, &pcount, &gcount, &extend, &status);
29 nGalCross = naxes;
30 crossings = new long[nGalCross];
31 int anynul;
32 fits_read_img_lng(fptr, 0, 1, nGalCross, 0, crossings, &anynul, &status);
33 fits_close_file(fptr, &status);
34 fits_report_error(stderr, status); /* print out any error messages */
35}
36
37
38void TempLocator::setEarthPos(double lon, double lat) {
39 if (this->lon == lon && this->lat == lat) return;
40 this->lon = lon;
41 this->lat = lat;
42 ra = dec = -99999; xSampleNum = -99999;
43}
44
45void TempLocator::setTSid(double ts) {
46 if (this->ts == ts) return;
47 this->ts = ts;
48 ra = dec = -99999; xSampleNum = -99999;
49}
50
51void TempLocator::ComputeZenith() {
52 double ha;
53 aa_hadec (lat * M_PI/180, .5 * M_PI, 0, &ha, &dec);
54 ra = - (ha * 180. / M_PI / 15) + (ts/3600.);
55 dec = dec * 180. / M_PI;
56}
57
58double TempLocator::getAlphaZenith() {
59 if (ra < -100) ComputeZenith();
60 return ra;
61}
62
63double TempLocator::getDeltaZenith() {
64 if (dec < -100) ComputeZenith();
65 return dec;
66}
67
68void TempLocator::findGeomFromGC(int sampleNum) // pour le bolo qui voit les xing
69{
70 if (sampleNum == xSampleNum) return;
71 if (dec < -100) ComputeZenith();
72
73 azimBolGC = -9999;
74
75 // On trouve les croisements juste avant et juste apres notre sampleNum
76 int icross;
77 for (icross=0; icross<nGalCross; icross++) {
78 if (crossings[icross] > sampleNum) break;
79 }
80 if (icross == 0 || icross >= nGalCross) return;
81
82 // On trouve l'azimut du croisement principal pour notre position actuelle
83 double alpG = 12. + 51./60. + 30./3600.;
84 double delG = 27. + 07./60. + 42./3600.;
85 double azCr1, azCr2;
86 int rc = PlGalCross(ts/3600., lat, (90. - 41.), alpG, delG, azCr1, azCr2);
87 if (rc != 0) return; // pas deux points d'intersection
88
89 // Il faut determiner le croisement principal, ie le plus proche
90 // du centre galactique. Pendant le vol de Trapani, c'etait celui
91 // le plus proche de 220° d'azimut.
92
93 double azCross = azCr1;
94 if (fabs(azCr2-220) < fabs(azCr1-220)) azCross = azCr2;
95
96 double rotSpeed = 360./(crossings[icross] - crossings[icross-1]); // °/sample
97
98 azimBolGC = azCross - (sampleNum - (crossings[icross-1]+12))*rotSpeed;
99 // azimut du bolo 1 (central) pour sampleNum
100 if (azimBolGC > 360) azimBolGC -= 360;
101}
102
103void TempLocator::getAltAzBolo(int sampleNum, int ibolo, double& elv, double& az) {
104 findGeomFromGC(sampleNum);
105 double delElv = 0;
106 double delAz = 0; // relative to ch1-bolo1
107 elv = -99999;
108 az = -99999;
109 switch (ibolo) {
110 case 11:
111 delElv = 0;
112 delAz = 0;
113 break;
114 case 8:
115 delElv = 0.78 * sqrt(3.)/2.;
116 delAz = 0.78 * 1./2.;
117 break;
118 case 13:
119 delElv = - 0.78 * sqrt(3.)/2.;
120 delAz = 0.78 * 1./2.;
121 break;
122 case 9:
123 delElv = - 0.78 * sqrt(3.)/2.;
124 delAz = 0.78 * 1./2.;
125 break;
126 case 4:
127 delElv = 0.;
128 delAz = 0.78;
129 break;
130 case 15:
131 delElv = 0.;
132 delAz = - 0.78;
133 break;
134 default:
135 return;
136 }
137 delAz /= cos(41 * M_PI/180);
138 elv = 41. + delElv;
139 az = azimBolGC + delAz;
140 return;
141}
142
143double TempLocator::getAzimutBolo(int sampleNum, int ibolo) {
144 double elv, az;
145 getAltAzBolo(sampleNum, ibolo, elv, az);
146 return az;
147}
148
149double TempLocator::getElvBolo(int sampleNum, int ibolo) {
150 double elv, az;
151 getAltAzBolo(sampleNum, ibolo, elv, az);
152 return elv;
153}
154
155double TempLocator::getAlphaBolo(int sampleNum, int ibolo) {
156 double elv, az;
157 getAltAzBolo(sampleNum, ibolo, elv, az);
158 double ha;
159 aa_hadec (lat * M_PI/180, elv * M_PI/180, az * M_PI/180, &ha, &dec);
160 ra = - (ha * 180. / M_PI / 15) + (ts/3600.);
161 dec = dec * 180. / M_PI;
162 return ra;
163}
164
165double TempLocator::getDeltaBolo(int sampleNum, int ibolo) {
166 double elv, az;
167 getAltAzBolo(sampleNum, ibolo, elv, az);
168 double ha;
169 aa_hadec (lat * M_PI/180, elv * M_PI/180, az * M_PI/180, &ha, &dec);
170 ra = - (ha * 180. / M_PI / 15) + (ts/3600.);
171 dec = dec * 180. / M_PI;
172 return dec;
173}
174
175double TempLocator::getAlphaCenter(int sampleNum) {
176 return getAlphaBolo(sampleNum, 11);
177}
178
179double TempLocator::getDeltaCenter(int sampleNum) {
180 return getDeltaBolo(sampleNum, 11);
181}
182
183
184
185
186 // ;
187 // ; /\ 4 2
188 // ; elevation || positive scanning, clockwise
189 // ; || 6 1 5 ---------->
190 // ; || == positive azimut
191 // ; || x 3
192 // |----| = 0.78 deg / cos(elev)
193 // bol 1 = 41° elevation
194
Note: See TracBrowser for help on using the repository browser.