1 | /* lecture des fichiers de suivi: cmv 21/12/93 */
|
---|
2 | #include "machdefs.h"
|
---|
3 | #include <stdio.h>
|
---|
4 | #include <stdlib.h>
|
---|
5 | #include <string.h>
|
---|
6 | #include <math.h>
|
---|
7 | #include <signal.h>
|
---|
8 |
|
---|
9 | #include "fsvcache.h"
|
---|
10 | #include "nbtri.h"
|
---|
11 | #include "nbrandom.h"
|
---|
12 | #include "nbmath.h"
|
---|
13 | #include "strutil.h"
|
---|
14 | #include "fsvst.h"
|
---|
15 |
|
---|
16 | // Ne pas changer l'ordre des 3 lignes suivantes!!!
|
---|
17 | #define FLAG_MAIN_NBSREAD
|
---|
18 | #include "nbsread.h"
|
---|
19 | #include "nbgene.h"
|
---|
20 |
|
---|
21 | void INIT_NBSR(void);
|
---|
22 | void OPENSUIV(int ic);
|
---|
23 | void READST(int ic);
|
---|
24 | void READET(int ic);
|
---|
25 | void DATCLEAN(int ic);
|
---|
26 | void DATSORT(int ic);
|
---|
27 |
|
---|
28 | void SELSTAR(void);
|
---|
29 | void GET_STAR_ID(void);
|
---|
30 |
|
---|
31 | int DECODESUIVINAME(char* str);
|
---|
32 | void DECODE_GLOBINFO(GLOBINFO *p);
|
---|
33 | void DECODE_STARINFO(STARINFO *p, int ic);
|
---|
34 | void DECODE_TIMEINFO(TIMEINFO *p, int ic, int imes);
|
---|
35 | void DECODE_MESURE (MESURE *p, int ic, int imes);
|
---|
36 |
|
---|
37 | void DO_MALLOC(void);
|
---|
38 | void DO_FREE(void);
|
---|
39 |
|
---|
40 | GLOBINFO glinf;
|
---|
41 | STARINFO star;
|
---|
42 | TIMEINFO timinf;
|
---|
43 | MESURE mes;
|
---|
44 |
|
---|
45 | /* Pour catcher un CTRL-C ou des time limites */
|
---|
46 | static struct sigaction Nbsread_Action;
|
---|
47 | void Nbsread_SigCatchInit(void);
|
---|
48 | void Nbsread_SigCatch(int s);
|
---|
49 |
|
---|
50 | void usage(int);
|
---|
51 | void usage(int lp) {
|
---|
52 | printf("nbsread\n");
|
---|
53 | printf(" nom du fichier des fichiers de suivi\n");
|
---|
54 | printf(" [-h] help detaille\n");
|
---|
55 | printf(" [-et et1,et2,etinc]\n");
|
---|
56 | printf(" [-prt niv]\n");
|
---|
57 | printf(" [-dbg et1,et2,ccd,niv]\n");
|
---|
58 | printf(" [-kill mes1 mes2 mes3 ...]\n");
|
---|
59 | printf(" [-mc ngenstar]\n");
|
---|
60 | printf(" [-u0 U0MinI,U0MaxI,U0SimI]\n");
|
---|
61 | printf(" [-t0 T0MinI,T0MaxI,T0SimI]\n");
|
---|
62 | printf(" [-tau TauMinI,TauMaxI,TauSimI]\n");
|
---|
63 | printf(" [-tf type(1ou2),UMinI,UMaxI,USimI,Usu0_Cut]\n");
|
---|
64 | printf(" [-bl Blending (1ou2)]\n");
|
---|
65 | printf(" [-seed seed1,seed2,seed3]\n");
|
---|
66 | if(lp<=0) exit(-1);
|
---|
67 | printf("\n");
|
---|
68 | printf("et1,et2,etinc: on utilise les etoiles de et1 a et2 par pas de etinc\n");
|
---|
69 | printf("niv: niveau de print\n");
|
---|
70 | printf("et1,et2,ccd,niv: debug etoiles et1 a et2 ccd ccd (-1=tous) niveau niv\n");
|
---|
71 | printf("mes1 mes2 mes3...: mesure a ne pas considerer dans les cdl\n");
|
---|
72 | printf("ngenstar: nombre de generations montecarlo par etoile\n");
|
---|
73 | printf("U0MinI,U0MaxI,U0SimI: generation du parametre d impact (def=0,0,0)\n");
|
---|
74 | printf(" si U0MinI<U0MaxI on tire u0 plat entre U0MinI,U0MaxI\n");
|
---|
75 | printf(" si U0MinI>=U0MaxI u0 est fixe a U0SimI\n");
|
---|
76 | printf("TauMinI,TauMaxI,TauSimI: generation du parametre tau (def=0.01,365.)\n");
|
---|
77 | printf(" ... meme logique que u0 ...\n");
|
---|
78 | printf("T0MinI,T0MaxI,T0SimI: generation du temps du maximum (def=1,-1,-1)\n");
|
---|
79 | printf(" si T0MinI<T0MaxI on tire t0 plat entre T0MinI,T0MaxI\n");
|
---|
80 | printf(" si T0MinI>=T0MaxI ET T0SimI>0 t0 est fixe a T0SimI\n");
|
---|
81 | printf(" ET T0SimI<0 t0 tout l intervalle du suivi (def)\n");
|
---|
82 | printf("type,UMinI,UMaxI,USimI,Usu0_Cut: pour tirage taille finie (def=0,0,0,0.001)\n");
|
---|
83 | printf(" type = 1 taille finie tirage plat en U = Rs(proj)/Re\n");
|
---|
84 | printf(" 2 taille finie tirage plat en UC (U = UC*Rs)\n");
|
---|
85 | printf(" si UMinI>=UMaxI U est fixe a U0SimI\n");
|
---|
86 | printf(" si UMinI<UMaxI on tire U plat entre UMinI,UMaxI si type=1\n");
|
---|
87 | printf(" entre UMinI*Rs,UMaxI*Rs si type=2\n");
|
---|
88 | printf("Blending = 1 sur l'etoile la + brillante du couple\n");
|
---|
89 | printf(" 2 sur l'etoile la - brillante du couple\n");
|
---|
90 | printf("Il y a possibilite de definir ses propres fct de tirage (cf nbgene.c)\n");
|
---|
91 | printf("seed1,seed2,seed3: initialisation des aleatoires (def=36117,51106,21478)\n");
|
---|
92 | exit(-1);
|
---|
93 | }
|
---|
94 |
|
---|
95 | /*==========================================================================*/
|
---|
96 | int main (int narg, char *arg[])
|
---|
97 | {
|
---|
98 | int_4 i,ic,iet1,iet2,iet0,ietmax,ietinc=1;
|
---|
99 | char str[NBSREAD_LSTR];
|
---|
100 |
|
---|
101 | printf("=====> ");
|
---|
102 | for(i=0;i<narg;i++) printf("%s ",arg[i]);
|
---|
103 | printf("\n");
|
---|
104 |
|
---|
105 | /* printf("main: narg=%d %s\n",narg,arg[0]); */
|
---|
106 | if (narg < 2) usage(0);
|
---|
107 | if( !strcmp(arg[1],"-h") != 0 ) usage(1);
|
---|
108 |
|
---|
109 | /*------------------------------------------*/
|
---|
110 | /*-------- Initialisation variables --------*/
|
---|
111 | /*------------------------------------------*/
|
---|
112 |
|
---|
113 | INIT_NBSR();
|
---|
114 |
|
---|
115 | /*---------------------------------------*/
|
---|
116 | /*-------- Lecture des arguments --------*/
|
---|
117 | /*---------------------------------------*/
|
---|
118 |
|
---|
119 | i=2;
|
---|
120 | while ( i < narg ) {
|
---|
121 | /* printf("arg[%d] %s\n",i,arg[i]); */
|
---|
122 | if( !strcmp(arg[i],"-h") != 0 ) {
|
---|
123 | usage(1);
|
---|
124 | } else if( !strcmp(arg[i],"-et") != 0 ) {
|
---|
125 | i++;
|
---|
126 | sscanf(arg[i],"%d,%d,%d",&ietlim[0],&ietlim[1],&ietinc);
|
---|
127 | if( ietinc<=0 ) ietinc = 1;
|
---|
128 | printf("Etoiles traitees de %d a %d par pas de %d\n"
|
---|
129 | ,ietlim[0],ietlim[1],ietinc);
|
---|
130 | } else if( !strcmp(arg[i],"-prt") != 0 ) {
|
---|
131 | i++;
|
---|
132 | sscanf(arg[i],"%d",&ffprt);
|
---|
133 | printf("Niveau de print %d\n",ffprt);
|
---|
134 | } else if( !strcmp(arg[i],"-dbg") != 0 ) {
|
---|
135 | i++;
|
---|
136 | sscanf(arg[i],"%d,%d,%d,%d",&idebug[0],&idebug[1],&idebug[2],&idebug[3]);
|
---|
137 | printf("Debug de l'et %d a l'et %d ccd %d niveau %d\n"
|
---|
138 | ,idebug[0],idebug[1],idebug[2],idebug[3]);
|
---|
139 | } else if( !strcmp(arg[i],"-mc") != 0 ) {
|
---|
140 | i++;
|
---|
141 | sscanf(arg[i],"%d",&mc.NGenStar);
|
---|
142 | if(mc.NGenStar>0) mc.montecar=1;
|
---|
143 | else {mc.montecar=mc.NGenStar; mc.NGenStar=0;}
|
---|
144 | printf("MonteCarlo actif, %d generations par etoiles\n",mc.NGenStar);
|
---|
145 | } else if( !strcmp(arg[i],"-u0") != 0 ) {
|
---|
146 | i++;
|
---|
147 | sscanf(arg[i],"%f,%f,%f",&mc.U0MinI,&mc.U0MaxI,&mc.U0SimI);
|
---|
148 | printf("U0 generation de %g a %g ou %g\n"
|
---|
149 | ,mc.U0MinI,mc.U0MaxI,mc.U0SimI);
|
---|
150 | } else if( !strcmp(arg[i],"-tau") != 0 ) {
|
---|
151 | i++;
|
---|
152 | sscanf(arg[i],"%f,%f,%f",&mc.TauMinI,&mc.TauMaxI,&mc.TauSimI);
|
---|
153 | printf("Tau generation de %g a %g ou %g\n"
|
---|
154 | ,mc.TauMinI,mc.TauMaxI,mc.TauSimI);
|
---|
155 | } else if( !strcmp(arg[i],"-t0") != 0 ) {
|
---|
156 | i++;
|
---|
157 | sscanf(arg[i],"%lf,%lf,%lf",&mc.T0MinI,&mc.T0MaxI,&mc.T0SimI);
|
---|
158 | printf("T0 generation de %g a %g ou %g\n"
|
---|
159 | ,mc.T0MinI,mc.T0MaxI,mc.T0SimI);
|
---|
160 | } else if( !strcmp(arg[i],"-tf") != 0 ) {
|
---|
161 | i++;
|
---|
162 | sscanf(arg[i],"%d,%f,%f,%f,%f"
|
---|
163 | ,&mc.Taille_Finie,&mc.UMinI,&mc.UMaxI,&mc.USimI,&mc.Usu0_Cut);
|
---|
164 | printf("Taille finie %d generation de U %g a %g ou %g (prec=%g)\n"
|
---|
165 | ,mc.Taille_Finie,mc.UMinI,mc.UMaxI,mc.USimI,mc.Usu0_Cut);
|
---|
166 | } else if( !strcmp(arg[i],"-bl") != 0 ) {
|
---|
167 | i++;
|
---|
168 | sscanf(arg[i],"%d",&mc.Blending);
|
---|
169 | printf("Blending %d\n",mc.Blending);
|
---|
170 | } else if( !strcmp(arg[i],"-seed") != 0 ) {
|
---|
171 | i++;
|
---|
172 | sscanf(arg[i],"%d,%d,%d",&mc.iseed1,&mc.iseed2,&mc.iseed3);
|
---|
173 | printf("Seed %d %d %d\n",mc.iseed1,mc.iseed2,mc.iseed3);
|
---|
174 | } else if( !strcmp(arg[i],"-kill") != 0 ) {
|
---|
175 | i++;
|
---|
176 | while ( i<narg ) {
|
---|
177 | if ( arg[i][0] != '-' ) {
|
---|
178 | if ( nkillms<NKILLMSMX ) {
|
---|
179 | sscanf(arg[i],"%d",&killms[nkillms]);
|
---|
180 | nkillms++;
|
---|
181 | i++;
|
---|
182 | } else {
|
---|
183 | printf("Trop de mesures a tuer! nkillms=%d / %d\n",nkillms,NKILLMSMX);
|
---|
184 | exit(-1);
|
---|
185 | }
|
---|
186 | } else { i--; break;}
|
---|
187 | }
|
---|
188 | printf("Kill: %d mesures a tuer:",nkillms);
|
---|
189 | if(nkillms>0) for(ic=0;ic<nkillms;ic++) printf(" %d",killms[ic]);
|
---|
190 | printf("\n");
|
---|
191 | } else {
|
---|
192 | printf("arguments: cas non prevu: %s\n",arg[i]); usage(0);
|
---|
193 | }
|
---|
194 | i++;
|
---|
195 | }
|
---|
196 | ietlim[0] = ( ietlim[0] <= 0 ) ? 1 : ietlim[0] ;
|
---|
197 | ietlim[1] = ( ietlim[1] < ietlim[0] ) ? IGRAND : ietlim[1] ;
|
---|
198 | printf("Etoiles traitees de %d a %d\n",ietlim[0],ietlim[1]);
|
---|
199 |
|
---|
200 | /*----------------------------------------------------------------*/
|
---|
201 | /*----- Lecture nom de fichier data et selection des etoiles -----*/
|
---|
202 | /*----------------------------------------------------------------*/
|
---|
203 |
|
---|
204 | printf("Fichier de donnees suivi: %s\n",arg[1]);
|
---|
205 | if( (dataccd = fopen(arg[1],"r") ) == 0 ) {
|
---|
206 | printf("impossible d'ouvrir .dataccd\n"); exit(-1);
|
---|
207 | }
|
---|
208 |
|
---|
209 | GET_STAR_ID();
|
---|
210 |
|
---|
211 | /*-----------------------------------------*/
|
---|
212 | /*-------- Initialisation generale --------*/
|
---|
213 | /*-----------------------------------------*/
|
---|
214 |
|
---|
215 | /* initialisation des compteurs et des variables */
|
---|
216 |
|
---|
217 | numccd = nstdeb = netoiles = 0;
|
---|
218 |
|
---|
219 | rewind(dataccd);
|
---|
220 | if( fgets(str,NBSREAD_LSTR,dataccd) == 0 )
|
---|
221 | {printf("fichier dataccd illisible\n"); exit(-1);}
|
---|
222 | nbccd = -1;
|
---|
223 | sscanf(str,"%d",&nbccd);
|
---|
224 | printf("on veut traiter %d ccd\n",nbccd);
|
---|
225 | if( nbccd <= 0 ) exit(-1);
|
---|
226 |
|
---|
227 | /* initialisation USER */
|
---|
228 |
|
---|
229 | Calibration_Absolue = 0;
|
---|
230 | Calibration_Absolue_UParms = 0;
|
---|
231 | UINIT();
|
---|
232 |
|
---|
233 | /* initialisation montecarlo */
|
---|
234 |
|
---|
235 | AMPLML( 1 );
|
---|
236 |
|
---|
237 | /* gestion des interrupts */
|
---|
238 |
|
---|
239 | Nbsread_SigCatchInit();
|
---|
240 |
|
---|
241 | /*-------------------------------------------------------*/
|
---|
242 | /*-------- Boucle sur les CCD (ou paves Plaques) --------*/
|
---|
243 | /*-------------------------------------------------------*/
|
---|
244 |
|
---|
245 | while ( fgets(str,NBSREAD_LSTR,dataccd) != 0 ) { /* While... */
|
---|
246 |
|
---|
247 | strip(str,'B',' ');
|
---|
248 | printf("%s\n",str);
|
---|
249 |
|
---|
250 | if ( strstr(str,"@END") == str ) break;
|
---|
251 |
|
---|
252 | if( strstr(str,"@CCD") == str) {
|
---|
253 |
|
---|
254 | numccd++;
|
---|
255 | sscanf(&str[4],"%d",&ccdnum);
|
---|
256 | printf("Nouveau CCD: c'est le %d ieme, de numero %d\n",numccd,ccdnum);
|
---|
257 | szMXBYTE=0;
|
---|
258 | nbmsMX=0;
|
---|
259 | for (ic=0;ic<NCOULMX;ic++) {
|
---|
260 | nbfil[ic] = iet[ic] = net[ic] = nmes[ic]= 0;
|
---|
261 | for (i=0;i<NBFILMX;i++) nbms[ic][i] = nms1fil[ic][i] = 0;
|
---|
262 | }
|
---|
263 |
|
---|
264 | } else if( strstr(str,"@FINCCD") == str) {
|
---|
265 |
|
---|
266 | for(ic=0;ic<NCOULMX;ic++) {
|
---|
267 | if( nbfil[ic] <= 0 ) continue;
|
---|
268 | /* printf("Main_Debug: lunfil[%d][0]=%ld\n",ic,lunfil[ic][0]); */
|
---|
269 | sztmi[ic] = lunfil[ic][0]->Head.RecSize[3] / lunfil[ic][0]->Head.NItem;
|
---|
270 | szmes[ic] = lunfil[ic][0]->Head.RecSize[4] / lunfil[ic][0]->Head.NItem;
|
---|
271 | if( szMXBYTE < sztmi[ic] ) szMXBYTE = sztmi[ic];
|
---|
272 | if( szMXBYTE < szmes[ic] ) szMXBYTE = szmes[ic];
|
---|
273 | if(ffprt>0) printf("coul=%3d sztmi=%d szmes=%d\n",ic+1,sztmi[ic],szmes[ic]);
|
---|
274 | }
|
---|
275 | if(ffprt>0) printf("szMXBYTE=%d\n",szMXBYTE);
|
---|
276 |
|
---|
277 | DO_MALLOC();
|
---|
278 | for (ic=0;ic<NCOULMX;ic++) OPENSUIV(ic);
|
---|
279 | for (ic=0;ic<NCOULMX;ic++) DATCLEAN(ic);
|
---|
280 | for (ic=0;ic<NCOULMX;ic++) DATSORT (ic); /* fill indexu */
|
---|
281 | TFIRST = Tfirst[0]; TLAST = Tlast[0];
|
---|
282 | for (ic=1;ic<NCOULMX;ic++) {
|
---|
283 | if( Tfirst[ic] != -1. && Tfirst[ic]<TFIRST ) TFIRST = Tfirst[ic];
|
---|
284 | if( Tlast[ic] != -1. && Tlast[ic] >TLAST ) TLAST = Tlast[ic];
|
---|
285 | }
|
---|
286 | if(ffprt>0) printf("Tfirst=%.2f (1=.2%f,2=%.2f) Tlast=%.2f (1=%.2f,2=%.2f)\n"
|
---|
287 | ,TFIRST,Tfirst[0],Tfirst[1],TLAST,Tlast[0],Tlast[1]);
|
---|
288 | UINITCCD();
|
---|
289 | AMPLML( 2 );
|
---|
290 |
|
---|
291 | iet1 = ( ietlim[0] > 0 ) ? ietlim[0] : 1;
|
---|
292 | iet2 = ( ietlim[1] > net[0] ) ? net[0] : ietlim[1];
|
---|
293 |
|
---|
294 | for(iet0=iet1;iet0<=iet2; iet0+=ietinc) { /* boucle sur les etoiles */
|
---|
295 |
|
---|
296 | netoiles++;
|
---|
297 |
|
---|
298 | for (ic=0;ic<NCOULMX;ic++) iet[ic]=iet0;
|
---|
299 |
|
---|
300 | debug=0;
|
---|
301 | if( iet0>=idebug[0] && iet0<=idebug[1] && ( ccdnum==idebug[2] || idebug[2]<0) ) {
|
---|
302 | nstdeb++;
|
---|
303 | debug=idebug[3];
|
---|
304 | }
|
---|
305 | if(debug!=0) printf("\n\n************** DEBUG CCD %d ET %d LUES %d \n"
|
---|
306 | ,ccdnum,iet0,netoiles);
|
---|
307 |
|
---|
308 | /* lecture des starinfos */
|
---|
309 | for (ic=0;ic<NCOULMX;ic++) {
|
---|
310 | if( ic == 0 ) { /*fichier non-composite ou couleur 1*/
|
---|
311 | READST(ic);
|
---|
312 | } else {
|
---|
313 | iet[ic] = staru[0].XRef;
|
---|
314 | READST(ic);
|
---|
315 | }
|
---|
316 | }
|
---|
317 |
|
---|
318 | /* calibration absolue */
|
---|
319 | starcal.Mag_B= starcal.Mag_V= starcal.Mag_R
|
---|
320 | = starcal.Mag_I= starcal.Rstar= -GRAND;
|
---|
321 | starcal.Rtype = -1;
|
---|
322 | if( iet[0]>0 && iet[1]>0 && Calibration_Absolue!=0 )
|
---|
323 | Calibration_Absolue(staru[0].FluxRef,staru[1].FluxRef,
|
---|
324 | &starcal,Calibration_Absolue_UParms);
|
---|
325 |
|
---|
326 | /* on saute l'etoile et la lecture des mesures ? */
|
---|
327 | if(starcut.Mag_B_cut>0 &&
|
---|
328 | (starcal.Mag_B<starcut.Mag_B_min || starcal.Mag_B>starcut.Mag_B_max) ) continue;
|
---|
329 | if(starcut.Mag_V_cut>0 &&
|
---|
330 | (starcal.Mag_V<starcut.Mag_V_min || starcal.Mag_V>starcut.Mag_V_max) ) continue;
|
---|
331 | if(starcut.Mag_R_cut>0 &&
|
---|
332 | (starcal.Mag_R<starcut.Mag_R_min || starcal.Mag_R>starcut.Mag_R_max) ) continue;
|
---|
333 | if(starcut.Mag_I_cut>0 &&
|
---|
334 | (starcal.Mag_I<starcut.Mag_I_min || starcal.Mag_I>starcut.Mag_I_max) ) continue;
|
---|
335 | if(starcut.Rstar_cut>0 &&
|
---|
336 | (starcal.Rstar<starcut.Rstar_min || starcal.Rstar>starcut.Rstar_max) ) continue;
|
---|
337 |
|
---|
338 | if(starcut.Rtype_cut>0 &&
|
---|
339 | (starcal.Rtype<starcut.Rtype_min || starcal.Rtype>starcut.Rtype_max) ) continue;
|
---|
340 |
|
---|
341 | if(starcut.Mag_BV_cut>0 &&
|
---|
342 | (starcal.Mag_B-starcal.Mag_V<starcut.Mag_BV_min ||
|
---|
343 | starcal.Mag_B-starcal.Mag_V>starcut.Mag_BV_max) ) continue;
|
---|
344 | if(starcut.Mag_BR_cut>0 &&
|
---|
345 | (starcal.Mag_B-starcal.Mag_R<starcut.Mag_BR_min ||
|
---|
346 | starcal.Mag_B-starcal.Mag_R>starcut.Mag_BR_max) ) continue;
|
---|
347 | if(starcut.Mag_VR_cut>0 &&
|
---|
348 | (starcal.Mag_V-starcal.Mag_R<starcut.Mag_VR_min ||
|
---|
349 | starcal.Mag_V-starcal.Mag_R>starcut.Mag_VR_max) ) continue;
|
---|
350 | if(starcut.Mag_RI_cut>0 &&
|
---|
351 | (starcal.Mag_R-starcal.Mag_I<starcut.Mag_RI_min ||
|
---|
352 | starcal.Mag_R-starcal.Mag_I>starcut.Mag_RI_max) ) continue;
|
---|
353 |
|
---|
354 | /* l'etoile a t-elle ete selectionnee ? */
|
---|
355 | SELSTAR();
|
---|
356 |
|
---|
357 | /* lecture des mesures */
|
---|
358 | for (ic=0;ic<NCOULMX;ic++) READET(ic);
|
---|
359 |
|
---|
360 | ietmax = (mc.montecar>0 && mc.NGenStar>0) ? mc.NGenStar : 1;
|
---|
361 | ietgen=0;
|
---|
362 | while( ietgen < ietmax ) {
|
---|
363 | if(mc.montecar>0) AMPLML( 3 );
|
---|
364 | UEVT();
|
---|
365 | ietgen++;
|
---|
366 | }
|
---|
367 |
|
---|
368 | } /* fin de boucle sur les etoiles */
|
---|
369 |
|
---|
370 | UENDCCD();
|
---|
371 |
|
---|
372 | printf("on ferme les fichiers de suivi du ccd %d\n",ccdnum);
|
---|
373 | DO_FREE();
|
---|
374 | for(ic=0;ic<NCOULMX;ic++) {
|
---|
375 | printf("Couleur: %d\n",ic+1);
|
---|
376 | for(i=0;i<nbfil[ic];i++) {
|
---|
377 | printf("fichier %d\n",i);
|
---|
378 | SuiviClose(lunfil[ic][i]);
|
---|
379 | } }
|
---|
380 |
|
---|
381 | } else if( strstr(str,"@COUL") == str) {
|
---|
382 |
|
---|
383 | sscanf(&str[5],"%d",&ic);
|
---|
384 | printf("Couleur: %d\n",ic);
|
---|
385 | ic--;
|
---|
386 |
|
---|
387 | } else {
|
---|
388 | str[strlen(str)-1] = ' '; /* lu par fgets() */
|
---|
389 | strip(str,'B',' ');
|
---|
390 | DECODESUIVINAME(str);
|
---|
391 | printf("%s\n",str);
|
---|
392 | strcpy(lunnam[ic][nbfil[ic]], str);
|
---|
393 | printf("lunnam[%d][nbfil[%d]] == lunnam[%d][%d] = %s\n"
|
---|
394 | ,ic,ic,ic,nbfil[ic],lunnam[ic][nbfil[ic]]);
|
---|
395 | if( (lunfil[ic][nbfil[ic]] = SuiviOpen(str,OpenType)) == 0 ) {
|
---|
396 | printf("Impossible d'ouvrir le fichier %s\n",str);
|
---|
397 | exit(-1);
|
---|
398 | }
|
---|
399 | /* lecture du nombre de mesures */
|
---|
400 | nbms[ic][nbfil[ic]] = SuiviGetNbMesures(lunfil[ic][nbfil[ic]]);
|
---|
401 | if(ffprt>1) printf("Ouverture lunfil[%3d][%5d] = %d mes\n"
|
---|
402 | ,ic,nbfil[ic],nbms[ic][nbfil[ic]]);
|
---|
403 | if( nbms[ic][nbfil[ic]] > nbmsMX ) nbmsMX = nbms[ic][nbfil[ic]];
|
---|
404 | /* numero du 1er fichier de l'unite nbfil[ic]: va de 0->nmes */
|
---|
405 | nms1fil[ic][nbfil[ic]] = nmes[ic];
|
---|
406 | nmes[ic] += nbms[ic][nbfil[ic]];
|
---|
407 | nbfil[ic]++;
|
---|
408 |
|
---|
409 | }
|
---|
410 | } /* Fin du While... */
|
---|
411 |
|
---|
412 | UEND();
|
---|
413 | AMPLML( 5 );
|
---|
414 | if( StId1 != 0 ) free(StId1);
|
---|
415 | if( StId2 != 0 ) free(StId2);
|
---|
416 | fclose(dataccd);
|
---|
417 |
|
---|
418 | printf("Nombre total d'etoiles lues %d\n",netoiles);
|
---|
419 |
|
---|
420 | exit(0);
|
---|
421 | }
|
---|
422 |
|
---|
423 | /*==========================================================================*/
|
---|
424 | void INIT_NBSR(void)
|
---|
425 | {
|
---|
426 | int i;
|
---|
427 |
|
---|
428 | OpenType= SUOF_RO_MEM2;
|
---|
429 | GRAND2_KILL = 5. * GRAND2;
|
---|
430 |
|
---|
431 | ietlim[0]= -IGRAND;
|
---|
432 | ietlim[1]= IGRAND;
|
---|
433 | idebug[0]=idebug[1]=idebug[2]=idebug[3]=0;
|
---|
434 | NStId = NSelStId = FgSelSt = 0;
|
---|
435 | StId1 = StId2 = 0;
|
---|
436 | nkillms = 0; for(i=0;i<NKILLMSMX;i++) killms[i]=0;
|
---|
437 | ffprt=0;
|
---|
438 |
|
---|
439 | starcut.Mag_B_cut = 0; starcut.Mag_B_min = starcut.Mag_B_max = 0.;
|
---|
440 | starcut.Mag_V_cut = 0; starcut.Mag_V_min = starcut.Mag_V_max = 0.;
|
---|
441 | starcut.Mag_R_cut = 0; starcut.Mag_R_min = starcut.Mag_R_max = 0.;
|
---|
442 | starcut.Mag_I_cut = 0; starcut.Mag_I_min = starcut.Mag_I_max = 0.;
|
---|
443 | starcut.Mag_BV_cut = 0; starcut.Mag_BV_min = starcut.Mag_BV_max = 0.;
|
---|
444 | starcut.Mag_BR_cut = 0; starcut.Mag_BR_min = starcut.Mag_BR_max = 0.;
|
---|
445 | starcut.Mag_VR_cut = 0; starcut.Mag_VR_min = starcut.Mag_VR_max = 0.;
|
---|
446 | starcut.Mag_RI_cut = 0; starcut.Mag_RI_min = starcut.Mag_RI_max = 0.;
|
---|
447 | starcut.Rstar_cut = 0; starcut.Rstar_min = starcut.Rstar_max = 0.;
|
---|
448 | starcut.Rtype_cut = 0; starcut.Rtype_min = starcut.Rtype_max = 0;
|
---|
449 |
|
---|
450 | mc.montecar=0;
|
---|
451 | mc.Taille_Finie=0;
|
---|
452 | mc.Blending=0;
|
---|
453 | mc.NGenStar=1;
|
---|
454 | mc.Usu0_Cut = 0.001;
|
---|
455 | mc.U0SimI=0.; mc.U0MinI=0.; mc.U0MaxI=0.;
|
---|
456 | mc.TireU0 = 0;
|
---|
457 | mc.T0SimI= -1.; mc.T0MinI=1.; mc.T0MaxI= -1.;
|
---|
458 | mc.TauSimI=0.; mc.TauMinI=0.01; mc.TauMaxI=365.;
|
---|
459 | mc.TireTau = 0;
|
---|
460 | mc.USimI=0.; mc.UMinI=0.; mc.UMaxI=0.;
|
---|
461 | mc.TireU = 0;
|
---|
462 | mc.Get_Par_Blending = 0;
|
---|
463 | mc.coeff_Arec1[0] = mc.coeff_Arec1[1] = 0.;
|
---|
464 | mc.coeff_Arec2[0] = mc.coeff_Arec2[1] = 0.;
|
---|
465 | mc.starcal1.Rstar = mc.starcal2.Rstar = 0.;
|
---|
466 | mc.iseed1 = 36117;
|
---|
467 | mc.iseed2 = 51106;
|
---|
468 | mc.iseed3 = 21478;
|
---|
469 |
|
---|
470 | }
|
---|
471 |
|
---|
472 | /*==========================================================================*/
|
---|
473 | void OPENSUIV(int ic)
|
---|
474 | /* ic = couleur (0 a 1) */
|
---|
475 | {
|
---|
476 | int_4 i,j,rc;
|
---|
477 | int_4 l, i1, i2;
|
---|
478 | int lp;
|
---|
479 |
|
---|
480 | if(ffprt>0) printf("===> OPENSUIV couleur %3d\n",ic+1);
|
---|
481 |
|
---|
482 | if( nbfil[ic] <= 0 ) return;
|
---|
483 |
|
---|
484 | if(nmes[ic]>0 && ffprt>0) {
|
---|
485 | printf("Coul %2d nmes %5d on lit %4d fichiers, nbmsMAX %5d\n"
|
---|
486 | ,ic+1,nmes[ic],nbfil[ic],nbmsMX);
|
---|
487 | if(ffprt>1) {
|
---|
488 | printf("nbms:\n");
|
---|
489 | for(i=0;i<nbfil[ic];i++) {printf(" %6d",nbms[ic][i]); if(i%10==9) printf("\n");}
|
---|
490 | if((nbfil[ic]-1)%10!=9) printf("\n");
|
---|
491 |
|
---|
492 | printf("nms1fil:\n");
|
---|
493 | for(i=0;i<nbfil[ic];i++) {printf(" %6d",nms1fil[ic][i]); if(i%10==9) printf("\n");}
|
---|
494 | if((nbfil[ic]-1)%10!=9) printf("\n");
|
---|
495 | } }
|
---|
496 |
|
---|
497 | for(i=0;i<nbfil[ic];i++) {
|
---|
498 |
|
---|
499 | l = SuiviGetType(lunfil[ic][i]);
|
---|
500 |
|
---|
501 | /* type de fichier de suivi */
|
---|
502 | if( i==0 && ic==0 ) {
|
---|
503 | typsuivi=l;
|
---|
504 | printf("Type du fichier de Suivi: %d\n",typsuivi);
|
---|
505 | } else if ( typsuivi != l ) {
|
---|
506 | printf("couleur %3d fichier de suivi %5d mauvais type %d %d\n"
|
---|
507 | ,ic+1,i+1,l,typsuivi);
|
---|
508 | exit(-1);
|
---|
509 | }
|
---|
510 |
|
---|
511 | /* lecture de global info */
|
---|
512 | if( ( rc=SuiviReadGlobInfo( lunfil[ic][i],(char *) (&glinf) ) ) != 0 ) {
|
---|
513 | printf("Problemes lecture global info coul %3d fichier %d, rc=%d\n",ic+1,i+1,rc);
|
---|
514 | exit(-1);
|
---|
515 | }
|
---|
516 | DECODE_GLOBINFO(&glinf);
|
---|
517 |
|
---|
518 | //if( ffprt>3 || (ffprt>0 && i==0) ) PrtGlobInfo(&glinf,ffprt-3);
|
---|
519 | if( ffprt>3 || (ffprt>0 && i==0) ) PrtGlobInfo(&glinf,99);
|
---|
520 |
|
---|
521 | /* lecture du nombre d'etoiles */
|
---|
522 | l= SuiviGetNbStars(lunfil[ic][i]);
|
---|
523 | if( i==0 ) {
|
---|
524 | net[ic] = SuiviGetNbStars(lunfil[ic][i]);
|
---|
525 | } else if( l !=net[ic] ) {
|
---|
526 | printf("Probleme dans nombre d'etoiles coul %3d fichier %d: %d %d\n"
|
---|
527 | ,ic+1,i+1,l,net[ic]);
|
---|
528 | exit(-1);
|
---|
529 | }
|
---|
530 |
|
---|
531 | }
|
---|
532 |
|
---|
533 | /* REMARQUE
|
---|
534 | lecture de timeinfo:
|
---|
535 | attention: on passe par un buffer intermediaire car quand on definit
|
---|
536 | une structure, la longueur est un nombre entier de fois l'element
|
---|
537 | le plus long de la structure (ici (double)) et donc on a, pour TIMEINFO
|
---|
538 | sizeof(TIMEINFO)=416 au lieu de 412 effectivement ecrit
|
---|
539 | Depuis la version avec gestion du Byte swap entre machine il n'est
|
---|
540 | plus possible de lire directement une serie de timeinfo (meme pb pour mesure),
|
---|
541 | il faut boucler sur toutes les photos! (debug 13/03/98 Reza)
|
---|
542 | Voici le commentaire exact de Reza:
|
---|
543 | "On ne peut plus lire un groupe de mesure ou de timeinfo s'il faut
|
---|
544 | ByteSwaper et si Taille RecSuivi <> sizeof(structure)
|
---|
545 | il faut lire les mesures/timeinfo un a un"
|
---|
546 | Versions CVS ou il y avait encore la lecture par buffer:
|
---|
547 | nbsread.h 1.14 , nbsread.c 1.30
|
---|
548 | */
|
---|
549 |
|
---|
550 | lp = ffprt-2;
|
---|
551 |
|
---|
552 | if(nmes[ic]>0) {
|
---|
553 | for(i=0;i<nbfil[ic];i++) {
|
---|
554 | i2=nbms[ic][i];
|
---|
555 | i1=nms1fil[ic][i];
|
---|
556 | for(j=0;j<i2;j++) {
|
---|
557 | if( (rc=SuiviReadTimeInfo(lunfil[ic][i], j+1, j+1, (char *)(&timinf))) != 0 ) {
|
---|
558 | printf("Problemes lecture timinf info coul %3d fichier %5d, rc=%d\n"
|
---|
559 | ,ic+1,i+1,rc);
|
---|
560 | exit(-1);
|
---|
561 | }
|
---|
562 | l = j+i1;
|
---|
563 | DECODE_TIMEINFO(&timinf,ic,l);
|
---|
564 | indexu[ic][l] = 0;
|
---|
565 | date [ic][l] = (double) timeu[ic][l].TStart / JourSec;
|
---|
566 | ampli [ic][l] = 1.;
|
---|
567 | meslun[ic][l] = i;
|
---|
568 | if( ffprt>1 ) {
|
---|
569 | PrtTimeInfo (&timinf,l,ffprt-2);
|
---|
570 | if( ffprt>5 ) PrtTimeInfoU (&timeu[ic][l],l,1);
|
---|
571 | }
|
---|
572 | }
|
---|
573 | }
|
---|
574 | }
|
---|
575 |
|
---|
576 | /* some prints ? */
|
---|
577 | if(nmes[ic]>0 && ffprt>0) {
|
---|
578 | printf("date:\n");
|
---|
579 | for(i=0;i<nmes[ic];i++) {printf(" %9.2f",date[ic][i]); if(i%10==9) printf("\n");}
|
---|
580 | if((nmes[ic]-1)%10!=9) printf("\n");
|
---|
581 | if(lp>=3) {
|
---|
582 | printf("meslun:\n");
|
---|
583 | for(i=0;i<nmes[ic];i++) {printf(" %9d",meslun[ic][i]); if(i%10==9) printf("\n");}
|
---|
584 | if((nmes[ic]-1)%10!=9) printf("\n");
|
---|
585 | } }
|
---|
586 |
|
---|
587 | }
|
---|
588 |
|
---|
589 | /*==========================================================================*/
|
---|
590 | void READST(int ic)
|
---|
591 | /* ic = couleur (0 a 1) */
|
---|
592 | {
|
---|
593 | int_4 i,rc;
|
---|
594 |
|
---|
595 | staru[ic].XRef=0;
|
---|
596 |
|
---|
597 | if(nmes[ic]>0)
|
---|
598 | for(i=0;i<nmes[ic];i++) mesu[ic][i].Flux=mesu[ic][i].Fond=0.;
|
---|
599 |
|
---|
600 | if(debug>0) printf("READST: coul %3d et %d\n",ic+1,iet[ic]);
|
---|
601 |
|
---|
602 | if( iet[ic]<=0 || iet[ic]>net[ic] ) return;
|
---|
603 |
|
---|
604 | /*lecture de star info sur premier fichier */
|
---|
605 | if((rc=SuiviReadStarInfo(lunfil[ic][0],iet[ic],(char *)(&star))) != 0) {
|
---|
606 | printf("Problemes lecture star info coul %3d etoile %d, rc=%d\n"
|
---|
607 | ,ic+1,iet[ic],rc);
|
---|
608 | exit(-1);
|
---|
609 | }
|
---|
610 |
|
---|
611 | DECODE_STARINFO(&star,ic);
|
---|
612 |
|
---|
613 | if(debug>1) {
|
---|
614 | printf("starinfo: coul %3d nbfil=%5d\n",ic+1,nbfil[ic]);
|
---|
615 | PrtStarInfo(&staru[ic],ic,5);
|
---|
616 | }
|
---|
617 |
|
---|
618 | }
|
---|
619 |
|
---|
620 | /*==========================================================================*/
|
---|
621 | void READET(int ic)
|
---|
622 | /* ic = couleur (0 a 1) */
|
---|
623 | {
|
---|
624 | int_4 i,j,rc;
|
---|
625 | int_4 i1,i2;
|
---|
626 |
|
---|
627 | if( iet[ic]<=0 || iet[ic]>net[ic] ) return;
|
---|
628 | if( nmes[ic]<=0 ) return;
|
---|
629 |
|
---|
630 | /* lecture des mesures: cf lecture expliquee pour timeinfo */
|
---|
631 | for(i=0;i<nbfil[ic];i++) {
|
---|
632 | if(debug>1) printf(" Fichier %5d nbms %5d\n",i,nbms[ic][i]);
|
---|
633 | i2=nbms[ic][i];
|
---|
634 | i1=nms1fil[ic][i];
|
---|
635 | for(j=0;j<i2;j++) {
|
---|
636 | if((rc=SuiviReadMesures(lunfil[ic][i],iet[ic],j+1,j+1,(char *)(&mes))) != 0) {
|
---|
637 | printf("Problemes lecture mes coul %3d etoile %d lim %5d %5d, rc=%d\n"
|
---|
638 | ,ic+1,iet[ic],i1,i2,rc);
|
---|
639 | exit(-1);
|
---|
640 | }
|
---|
641 | DECODE_MESURE(&mes,ic,j+i1);
|
---|
642 | if(debug>5) PrtMesure(&mes,j+i1,5);
|
---|
643 | }
|
---|
644 | }
|
---|
645 |
|
---|
646 |
|
---|
647 | if(debug>3) {
|
---|
648 | if(debug>4) for(i=0;i<nmes[ic];i++) PrtMesureU(&mesu[ic][i],i,5);
|
---|
649 | printf("\nmesu.Flux couleur=%d:\n",ic);
|
---|
650 | for(i=0;i<nmesure[ic];i++) {
|
---|
651 | j=indexu[ic][i];
|
---|
652 | printf(" %12.5g",mesu[ic][j].Flux);
|
---|
653 | if(i%10==9 || i==nmesure[ic]-1) printf("\n");
|
---|
654 | }
|
---|
655 | if(debug>4) {
|
---|
656 | printf("mesu.ErrFlux couleur=%d:\n",ic);
|
---|
657 | for(i=0;i<nmesure[ic];i++) {
|
---|
658 | j=indexu[ic][i]; printf(" %12.5g",mesu[ic][j].ErrFlux);
|
---|
659 | if(i%10==9 || i==nmesure[ic]-1) printf("\n");
|
---|
660 | }
|
---|
661 | printf("mesu.FluxB couleur=%d:\n",ic);
|
---|
662 | for(i=0;i<nmesure[ic];i++) {
|
---|
663 | j=indexu[ic][i]; printf(" %12.5g",mesu[ic][j].FluxB);
|
---|
664 | if(i%10==9 || i==nmesure[ic]-1) printf("\n");
|
---|
665 | }
|
---|
666 | }
|
---|
667 | }
|
---|
668 |
|
---|
669 | }
|
---|
670 |
|
---|
671 | /*==========================================================================*/
|
---|
672 | void DATCLEAN(int ic)
|
---|
673 | /* ic = couleur (0 a 1) */
|
---|
674 | {
|
---|
675 | int_4 i,j,k;
|
---|
676 | double d1,d2;
|
---|
677 |
|
---|
678 | if(ffprt>0) printf("=====> DATCLEAN coul=%3d ccd %5d\n",ic+1,ccdnum);
|
---|
679 |
|
---|
680 | if(nmes[ic]<=0) return;
|
---|
681 |
|
---|
682 | /* on tue selon les criteres utilisateur */
|
---|
683 | UDATCLEAN(ic+1);
|
---|
684 | /* a ce niveau les dates=GRAND2_KILL ne doivent absolument plus servir */
|
---|
685 |
|
---|
686 | /* on tue les mesures 'n' pour chaque fichier de suivi */
|
---|
687 | if( nbfil[ic] > 0 ) {
|
---|
688 | for(i=0;i<nbfil[ic];i++) {
|
---|
689 | if( nbms[ic][i]<= 0 ) continue;
|
---|
690 | for(j=0;j<nbms[ic][i];j++) {
|
---|
691 | if( date[ic][nms1fil[ic][i]+j] >= GRAND2_KILL) continue;
|
---|
692 | for(k=0;k<nkillms;k++) if ( j+1 == killms[k] ) {
|
---|
693 | if(ffprt>1)
|
---|
694 | printf(" Kill: mesure %6d (seq=%6d) du fichier suivi %4d\n"
|
---|
695 | ,j,nms1fil[ic][i]+j,i);
|
---|
696 | date[ic][nms1fil[ic][i]+j] = GRAND2;
|
---|
697 | }
|
---|
698 | }
|
---|
699 | }
|
---|
700 | }
|
---|
701 |
|
---|
702 |
|
---|
703 | /* on tue les temps en double et on prend le dernier */
|
---|
704 | if( nmes[ic]>1 ) {
|
---|
705 | for(i=0;i<nmes[ic]-1;i++) {
|
---|
706 | d1=date[ic][i];
|
---|
707 | if( d1 >= GRAND2 ) continue;
|
---|
708 | for(j=i+1;j<nmes[ic];j++) {
|
---|
709 | d2=date[ic][j];
|
---|
710 | if( d2 >= GRAND2 ) continue;
|
---|
711 | if( fabs(d1-d2) < (double) 0.00000001 ) {
|
---|
712 | if(ffprt>1)
|
---|
713 | printf(" Kill: %5d t=%f car dupliquee avec %5d t=%f soit %f\n"
|
---|
714 | ,i,d1,j,d2,fabs(d1-d2));
|
---|
715 | date[ic][i] = GRAND2;
|
---|
716 | break;
|
---|
717 | }
|
---|
718 | }
|
---|
719 | }
|
---|
720 | }
|
---|
721 |
|
---|
722 | }
|
---|
723 |
|
---|
724 | /*==========================================================================*/
|
---|
725 | void DATSORT(int ic)
|
---|
726 | /* ic = couleur (0 a 1) */
|
---|
727 | {
|
---|
728 | int_4 i,j;
|
---|
729 |
|
---|
730 | if(ffprt>0) printf("DATSORT: coul %3d ccd %5d\n",ic+1,ccdnum);
|
---|
731 |
|
---|
732 | nmesure[ic]=0;
|
---|
733 | Tfirst[ic] = Tlast[ic] = -1.;
|
---|
734 |
|
---|
735 | if(nmes[ic]<=0) return;
|
---|
736 |
|
---|
737 | tri_double (date[ic],indexu[ic],nmes[ic]);
|
---|
738 |
|
---|
739 | for(i=0;i<nmes[ic];i++) if(date[ic][i]<GRAND2) nmesure[ic]++;
|
---|
740 |
|
---|
741 | if(nmesure[ic]>0) {
|
---|
742 | Tfirst[ic]=date[ic][indexu[ic][0]];
|
---|
743 | Tlast[ic]=date[ic][indexu[ic][nmesure[ic]-1]];
|
---|
744 | }
|
---|
745 |
|
---|
746 | if(ffprt>0) {
|
---|
747 | printf("coul %3d nmesure %6d nmes %6d Tint %.3f %.3f\n"
|
---|
748 | ,ic+1,nmesure[ic],nmes[ic],Tfirst[ic],Tlast[ic]);
|
---|
749 | if(ffprt>1) {
|
---|
750 | printf("date:\n");
|
---|
751 | for(i=0;i<nmes[ic];i++)
|
---|
752 | {
|
---|
753 | j=indexu[ic][i];
|
---|
754 | if(date[ic][j]<GRAND2) printf(" %9.2f",date[ic][j]);
|
---|
755 | else printf(" %9.2f",-1.);
|
---|
756 | if(i%10==9) printf("\n");
|
---|
757 | }
|
---|
758 | if((nmes[ic]-1)%10!=9) printf("\n");
|
---|
759 |
|
---|
760 | printf("timeu.NumPhoto:\n");
|
---|
761 | for(i=0;i<nmes[ic];i++) {
|
---|
762 | j=indexu[ic][i]; printf(" %9d",timeu[ic][j].NumPhoto); if(i%10==9) printf("\n");}
|
---|
763 | if((nmes[ic]-1)%10!=9) printf("\n");
|
---|
764 |
|
---|
765 | if(ffprt>2) {
|
---|
766 | printf("indexu:\n");
|
---|
767 | for(i=0;i<nmes[ic];i++) {
|
---|
768 | printf(" %9d",indexu[ic][i]); if(i%10==9) printf("\n");}
|
---|
769 | if((nmes[ic]-1)%10!=9) printf("\n");
|
---|
770 | } } }
|
---|
771 |
|
---|
772 | }
|
---|
773 |
|
---|
774 | /*==========================================================================*/
|
---|
775 | int DECODESUIVINAME(char* str)
|
---|
776 | /*
|
---|
777 | Pour decoder les noms des variables d'environnement dans une chaine de characteres
|
---|
778 | - La chaine "str" est mofifiee (et doit donc etre modifiable)
|
---|
779 | - Variable d'environnement = /home/.../toto/ ou /home/.../toto (avec ou sans / final)
|
---|
780 | - La chaine "str" peut etre:
|
---|
781 | $AAA ${AAA} $(AAA) $AAA/blabla ${AAA}/blabla $(AAA)/blabla /.../$AAA/... etc...
|
---|
782 | Le cas ${AAA}blabla $(AAA)blabla n'est pas traite (/ impose en fin de nom de variable)
|
---|
783 | - Retourne: -1 si echec, 0 si pas de variable a decoder, sinon nombre de variables decodees
|
---|
784 | */
|
---|
785 | {
|
---|
786 | char *str1,*vnam,*cenv;
|
---|
787 | int ls=0,lce,rc=0,i,ip,jp;
|
---|
788 |
|
---|
789 | ls = strlen(str);
|
---|
790 | /* Pas de $ ou chaine trop courte */
|
---|
791 | if(posc(str,'$')<0 || ls<1) return rc;
|
---|
792 | str1 = (char *) malloc((NBSREAD_LSTR+5)*sizeof(char));
|
---|
793 | vnam = (char *) malloc(NBSREAD_LSTR*sizeof(char));
|
---|
794 |
|
---|
795 | i= ip = rc = 0;
|
---|
796 | while( i<ls ) {
|
---|
797 | if(str[i] == ' ') { /* on vire les blancs */
|
---|
798 | i++;
|
---|
799 | } else if(str[i] == '/') { /* on vire les doubles "/" */
|
---|
800 | if(str1[ip]=='/') i++; else {str1[ip] = str[i]; ip++; i++;}
|
---|
801 | } else if(str[i] != '$') { /* pas de variable d'environnement */
|
---|
802 | str1[ip] = str[i]; ip++; i++;
|
---|
803 | } else { /* variable d'environnement */
|
---|
804 | jp = 0;
|
---|
805 | while( i<ls ) {
|
---|
806 | if(str[i]=='/') {i++; break;}
|
---|
807 | else if(str[i]=='$'||str[i]=='{'||str[i]=='}'||str[i]=='('||str[i]==')') i++;
|
---|
808 | else {vnam[jp]=str[i]; jp++; i++;}
|
---|
809 | }
|
---|
810 | vnam[jp] = '\0';
|
---|
811 | if( (cenv=getenv(vnam)) == NULL )
|
---|
812 | {printf("variable inconnue=%s.\n",vnam); free(str1); free(vnam); return -1;}
|
---|
813 | lce = strlen(cenv);
|
---|
814 | rc++;
|
---|
815 | if(lce>0) {
|
---|
816 | jp = 0;
|
---|
817 | while( jp<lce ) {
|
---|
818 | /* on evite TOTO=/home/toto/ et blabla/$TOTO -> blabla//home/toto */
|
---|
819 | if(ip>0) if(jp==0 && cenv[jp]=='/' && str1[ip-1]=='/') {jp++; continue;}
|
---|
820 | str1[ip] = cenv[jp]; ip++; jp++;
|
---|
821 | }
|
---|
822 | /* on evite TOTO=/home/toto/ et $TOTO/blabla -> /home/toto//blabla */
|
---|
823 | if(cenv[lce-1]!='/') {str1[ip] = '/'; ip++;}
|
---|
824 | }
|
---|
825 | }
|
---|
826 | }
|
---|
827 | str1[ip] = '\0';
|
---|
828 | strcpy(str,str1);
|
---|
829 |
|
---|
830 | free(str1); free(vnam);
|
---|
831 | return rc;
|
---|
832 | }
|
---|
833 |
|
---|
834 | /*==========================================================================*/
|
---|
835 | void DECODE_GLOBINFO(GLOBINFO *p)
|
---|
836 | {
|
---|
837 | globu = *p;
|
---|
838 | }
|
---|
839 |
|
---|
840 | /*==========================================================================*/
|
---|
841 | void DECODE_TIMEINFO(TIMEINFO *p, int ic, int imes)
|
---|
842 | /* ic = couleur (0 a 1), imes = mesure (0 a nmes-1) */
|
---|
843 | {
|
---|
844 | DecodeTim( p , &timeu[ic][imes]);
|
---|
845 | }
|
---|
846 |
|
---|
847 | /*==========================================================================*/
|
---|
848 | void DECODE_STARINFO(STARINFO *p, int ic)
|
---|
849 | /* ic = couleur (0 a 1) */
|
---|
850 | {
|
---|
851 | staru[ic] = *p;
|
---|
852 | }
|
---|
853 |
|
---|
854 | /*==========================================================================*/
|
---|
855 | void DECODE_MESURE(MESURE *p, int ic, int imes)
|
---|
856 | /* ic = couleur (0 a 1), imes = mesure (0 a nmes-1) */
|
---|
857 | {
|
---|
858 | if(date[ic][imes]<GRAND2_KILL) {
|
---|
859 | DecodeMes( p , &mesu[ic][imes] );
|
---|
860 | Calibre_F_E( &mesu[ic][imes], &timeu[ic][imes]);
|
---|
861 | } else {
|
---|
862 | Mes_a_zero(&mesu[ic][imes]);
|
---|
863 | }
|
---|
864 | }
|
---|
865 |
|
---|
866 | /*==========================================================================*/
|
---|
867 | void DO_MALLOC(void)
|
---|
868 | {
|
---|
869 | int n,ic;
|
---|
870 | size_t ll,sof, sofM, sofT;
|
---|
871 |
|
---|
872 | if(ffprt>1)
|
---|
873 | printf("DO_MALLOC: nbmsMX=%d szMXBYTE=%d\n",nbmsMX,szMXBYTE);
|
---|
874 |
|
---|
875 | for(ic=0;ic<NCOULMX;ic++) { /* BOUCLE SUR LES COULEURS */
|
---|
876 |
|
---|
877 | n = (nmes[ic] > 0) ? nmes[ic] : 1;
|
---|
878 |
|
---|
879 | sofT = sizeof(TIMEINFOU);
|
---|
880 | ll= n * sofT;
|
---|
881 | if(ffprt>0)
|
---|
882 | printf("timeu: allocation de %5d unites de %d bytes soit %d\n"
|
---|
883 | ,n,(int)sofT,(int)ll);
|
---|
884 | if( ( timeu[ic] = (TIMEINFOU *) malloc(ll) ) == 0 ) {
|
---|
885 | printf("impossible d'allouer *timeu par malloc coul %3d\n",ic+1);
|
---|
886 | exit(-1);
|
---|
887 | }
|
---|
888 |
|
---|
889 | sofM = sizeof(MESUREU);
|
---|
890 | ll= n * sofM;
|
---|
891 | if(ffprt>0)
|
---|
892 | printf("mesu: allocation de %5d unites de %d bytes soit %d\n"
|
---|
893 | ,n,(int)sofM,(int)ll);
|
---|
894 | if( (mesu[ic] = (MESUREU *) malloc(ll) ) == 0 ) {
|
---|
895 | printf("impossible d'allouer *mesu par malloc coul %3d\n",ic+1);
|
---|
896 | exit(-1);
|
---|
897 | }
|
---|
898 |
|
---|
899 | sof = sizeof(int_4);
|
---|
900 | ll= n * sof;
|
---|
901 | if(ffprt>0)
|
---|
902 | printf("indexu: allocation de %5d unites de %d bytes soit %d\n"
|
---|
903 | ,n,(int)sof,(int)ll);
|
---|
904 | if( (indexu[ic] = (int_4 *) malloc(ll) ) == 0 ) {
|
---|
905 | printf("impossible d'allouer *indexu par malloc coul %3d\n",ic+1);
|
---|
906 | exit(-1);
|
---|
907 | }
|
---|
908 |
|
---|
909 | sof = sizeof(unsigned short);
|
---|
910 | ll= n * sof;
|
---|
911 | if(ffprt>0)
|
---|
912 | printf("meslun: allocation de %5d unites de %d bytes soit %d\n"
|
---|
913 | ,n,(int)sof,(int)ll);
|
---|
914 | if( (meslun[ic] = (unsigned short *) malloc(ll) ) == 0 ) {
|
---|
915 | printf("impossible d'allouer *meslun par malloc coul %3d\n",ic+1);
|
---|
916 | exit(-1);
|
---|
917 | }
|
---|
918 |
|
---|
919 | sof = sizeof(double);
|
---|
920 | ll= n * sof;
|
---|
921 | if(ffprt>0)
|
---|
922 | printf("date: allocation de %5d unites de %d bytes soit %d\n"
|
---|
923 | ,n,(int)sof,(int)ll);
|
---|
924 | if( (date[ic] = (double *) malloc(ll) ) == 0 ) {
|
---|
925 | printf("impossible d'allouer *date par malloc coul %3d\n",ic+1);
|
---|
926 | exit(-1);
|
---|
927 | }
|
---|
928 |
|
---|
929 | sof = sizeof(float);
|
---|
930 | ll= n * sof;
|
---|
931 | if(ffprt>0)
|
---|
932 | printf("ampli: allocation de %5d unites de %d bytes soit %d\n"
|
---|
933 | ,n,(int)sof,(int)ll);
|
---|
934 | if( (ampli[ic] = (float *) malloc(ll) ) == 0 ) {
|
---|
935 | printf("impossible d'allouer *ampli par malloc coul %3d\n",ic+1);
|
---|
936 | exit(-1);
|
---|
937 | }
|
---|
938 |
|
---|
939 | } /* BOUCLE SUR LES COULEURS */
|
---|
940 |
|
---|
941 | }
|
---|
942 |
|
---|
943 | /*==========================================================================*/
|
---|
944 | void DO_FREE(void)
|
---|
945 | {
|
---|
946 | int ic;
|
---|
947 | for(ic=0;ic<NCOULMX;ic++) {
|
---|
948 | free(timeu[ic]);
|
---|
949 | free(mesu[ic]);
|
---|
950 | free(indexu[ic]);
|
---|
951 | free(date[ic]);
|
---|
952 | free(ampli[ic]);
|
---|
953 | }
|
---|
954 | }
|
---|
955 |
|
---|
956 | /*==========================================================================*/
|
---|
957 | int read_timeinfo(int ic,int imes,TIMEINFO *tim)
|
---|
958 | /*
|
---|
959 | Lecture de timeinfo pour la couleur ic (0->1), mesure imes (0->nmes[ic]-1)
|
---|
960 | return 0 si OK, <0 si problemes
|
---|
961 | */
|
---|
962 | {
|
---|
963 | int rc,ifil,ime;
|
---|
964 |
|
---|
965 | if ( imes<0 || imes>=nmes[ic] ) return(-1);
|
---|
966 | ifil = meslun[ic][imes];
|
---|
967 | if ( ifil<0 || ifil>=nbfil[ic] ) return(-2);
|
---|
968 | ime = imes-nms1fil[ic][ifil];
|
---|
969 | if ( ime<0 || ime>=nbms[ic][ifil] ) return(-3);
|
---|
970 |
|
---|
971 | rc=SuiviReadTimeInfo(lunfil[ic][ifil], ime+1, ime+1, (char *)(tim));
|
---|
972 | if( rc != 0 ) {
|
---|
973 | printf("read_timeinfo: problemes lecture timinf info coul %3d fichier %5d, rc=%d\n"
|
---|
974 | ,ic+1,imes+1,rc);
|
---|
975 | return(-4);
|
---|
976 | }
|
---|
977 |
|
---|
978 | /*
|
---|
979 | printf("ic=%2d imes=%5d ifil=%4d ime=%5d NumPhoto=%d TStart=%d Expose=%d\n"
|
---|
980 | ,ic,imes,ifil,ime,tim->NumPhoto,tim->TStart,tim->Expose);
|
---|
981 | printf(" Calib=%f %f sig=%f %f %f\n"
|
---|
982 | ,tim->Calib[0][0],tim->Calib[0][1],tim->SigX,tim->SigY,tim->Rho);
|
---|
983 | */
|
---|
984 |
|
---|
985 | return(0);
|
---|
986 | }
|
---|
987 |
|
---|
988 | /*==========================================================================*/
|
---|
989 | void SELSTAR(void)
|
---|
990 | /* selection de l etoile courante ? */
|
---|
991 | {
|
---|
992 | int i;
|
---|
993 | FgSelSt = 0;
|
---|
994 | if( NSelStId <= 0 || NStId <= 0 || StId1 == 0 || StId2 == 0 ) return;
|
---|
995 | for(i=0;i<NSelStId;i++)
|
---|
996 | if( StId1[i]<=iet[0] && iet[0]<=StId2[i] ) {FgSelSt = iet[0]; break;}
|
---|
997 | }
|
---|
998 |
|
---|
999 | /*==========================================================================*/
|
---|
1000 | void GET_STAR_ID(void)
|
---|
1001 | /*
|
---|
1002 | Lecture du fichier dataccd pour identifier les cartes de selection des etoiles.
|
---|
1003 | */
|
---|
1004 | {
|
---|
1005 | char str[NBSREAD_LSTR];
|
---|
1006 | int nallmin = 50, l;
|
---|
1007 |
|
---|
1008 | NStId = NSelStId = FgSelSt = 0;
|
---|
1009 | if( StId1 != 0 ) { free(StId1); StId1 = 0;}
|
---|
1010 | if( StId2 != 0 ) { free(StId2); StId2 = 0;}
|
---|
1011 |
|
---|
1012 | StId1 = (int *)malloc(nallmin*sizeof(int));
|
---|
1013 | StId2 = (int *)malloc(nallmin*sizeof(int));
|
---|
1014 | if( StId1==0 || StId2==0 ) {
|
---|
1015 | printf("GET_STAR_ID: Impossible d allouer StId1/2 pour la premiere fois %d\n"
|
---|
1016 | ,nallmin);
|
---|
1017 | return;
|
---|
1018 | } else NStId = nallmin;
|
---|
1019 |
|
---|
1020 | rewind(dataccd);
|
---|
1021 | while ( fgets(str,NBSREAD_LSTR,dataccd) != 0 ) {
|
---|
1022 | strip(str,'B',' ');
|
---|
1023 | if ( strstr(str,"@SELET") != str ) continue;
|
---|
1024 | if( NSelStId >= NStId ) {
|
---|
1025 | l = NStId + nallmin;
|
---|
1026 | StId1 = (int *)realloc(StId1,l*sizeof(int));
|
---|
1027 | StId2 = (int *)realloc(StId2,l*sizeof(int));
|
---|
1028 | if( StId1==0 || StId2==0 ) {
|
---|
1029 | printf("GET_STAR_ID: Impossible de re-allouer %d pour StId1/2\n",l);
|
---|
1030 | return;
|
---|
1031 | } else {
|
---|
1032 | NStId = l;
|
---|
1033 | /* printf("GET_STAR_ID: reallocation de %d pour StId1/2 reussie\n",NStId); */
|
---|
1034 | }
|
---|
1035 | }
|
---|
1036 | StId1[NSelStId]=StId2[NSelStId]=-1;
|
---|
1037 | sscanf(&str[6],"%d %d",&StId1[NSelStId],&StId2[NSelStId]);
|
---|
1038 | if( StId2[NSelStId]<StId1[NSelStId] ) StId2[NSelStId]=StId1[NSelStId];
|
---|
1039 | NSelStId++;
|
---|
1040 | }
|
---|
1041 |
|
---|
1042 | if(ffprt>0) {
|
---|
1043 | printf("GET_STAR_ID: %d selections d etoiles (lim=%d)\n",NSelStId,NStId);
|
---|
1044 | if(ffprt>5)
|
---|
1045 | for(l=0;l<NSelStId;l++) {
|
---|
1046 | printf(" sel[%d] et %d",l+1,StId1[l]);
|
---|
1047 | if( StId1[l]!=StId2[l] ) printf(" a %d\n",StId2[l]);
|
---|
1048 | else printf("\n");
|
---|
1049 | }
|
---|
1050 | }
|
---|
1051 |
|
---|
1052 | }
|
---|
1053 |
|
---|
1054 | /*==========================================================================*/
|
---|
1055 | void Nbsread_SigCatchInit(void)
|
---|
1056 | {
|
---|
1057 | int rc;
|
---|
1058 | #ifdef OSF1
|
---|
1059 | Nbsread_Action.sa_mask = 0;
|
---|
1060 | Nbsread_Action.sa_flags = SA_RESTART;
|
---|
1061 | #endif
|
---|
1062 | #ifdef HPUX
|
---|
1063 | memset( &(Nbsread_Action.sa_mask), 0, sizeof(sigset_t) );
|
---|
1064 | Nbsread_Action.sa_flags = 0;
|
---|
1065 | #endif
|
---|
1066 | #ifdef Linux
|
---|
1067 | memset( &(Nbsread_Action.sa_mask), 0, sizeof(sigset_t) );
|
---|
1068 | Nbsread_Action.sa_flags = 0;
|
---|
1069 | #endif
|
---|
1070 | Nbsread_Action.sa_handler = Nbsread_SigCatch;
|
---|
1071 |
|
---|
1072 | if( (rc=sigaction(SIGINT, &Nbsread_Action, NULL)) != 0 )
|
---|
1073 | printf("Nbsread_SigCatchInit_Error: signal SIGINT=%d rc=%d\n",SIGINT,rc);
|
---|
1074 | if( (rc=sigaction(SIGUSR1, &Nbsread_Action, NULL)) != 0 )
|
---|
1075 | printf("Nbsread_SigCatchInit_Error: signal SIGUSR1=%d rc=%d\n",SIGUSR1,rc);
|
---|
1076 | if( (rc=sigaction(SIGUSR2, &Nbsread_Action, NULL)) != 0 )
|
---|
1077 | printf("Nbsread_SigCatchInit_Error: signal SIGUSR2=%d rc=%d\n",SIGUSR2,rc);
|
---|
1078 | }
|
---|
1079 |
|
---|
1080 | /*==========================================================================*/
|
---|
1081 | void Nbsread_SigCatch(int s)
|
---|
1082 | {
|
---|
1083 | switch(s) {
|
---|
1084 | case SIGINT :
|
---|
1085 | printf("\n\nNbsread_SigCatch: signal SIGINT=%d catched\n\n",s);
|
---|
1086 | break;
|
---|
1087 | case SIGUSR1 :
|
---|
1088 | printf("n\nNbsread_SigCatch: signal SIGUSR1=%d catched\n\n",s);
|
---|
1089 | break;
|
---|
1090 | case SIGUSR2 :
|
---|
1091 | printf("n\nNbsread_SigCatch: signal SIGUSR2=%d catched\n\n",s);
|
---|
1092 | break;
|
---|
1093 | default :
|
---|
1094 | printf("n\nNbsread_SigCatch: signal 1=%d catched et non traite\n\n",s);
|
---|
1095 | break;
|
---|
1096 | }
|
---|
1097 | printf("UENDCCD is called\n");
|
---|
1098 | UENDCCD();
|
---|
1099 | printf("UEND is called\n");
|
---|
1100 | UEND();
|
---|
1101 | printf("exit is called\n");
|
---|
1102 | exit(-1);
|
---|
1103 | }
|
---|
1104 |
|
---|
1105 |
|
---|
1106 | /*************************************************************************/
|
---|
1107 | /*************************************************************************/
|
---|
1108 | /******************* Commentaire nbsread et nbgene **********************/
|
---|
1109 | /*************************************************************************/
|
---|
1110 | /*************************************************************************/
|
---|
1111 | /*
|
---|
1112 | ++
|
---|
1113 | Module nbsread (C et C++)
|
---|
1114 | Lib libnbsread++.a et libnbsread.a
|
---|
1115 | include nbsread.h nbgene.h
|
---|
1116 | |
|
---|
1117 | *- nbsread*
|
---|
1118 |
|
---|
1119 | C'est un programme qui permet de lire des fichiers de suivi
|
---|
1120 | pour 2 couleurs associees. Il fournit des points d'entrees permettant
|
---|
1121 | a l'utilisateur de piloter une analyse sans devoir s'occuper de
|
---|
1122 | la machinerie relative a la lecture de fichiers de suivis.
|
---|
1123 | | nbsread nbsread.dataccd.Exemple
|
---|
1124 | Les noms des fichiers de suivi a lire doivent etre mis dans un fichier
|
---|
1125 | dont un descriptif est donne dans le fichier
|
---|
1126 | `AnaSuiv/nbsread.dataccd.Exemple'. La lecture de plusieurs fichiers
|
---|
1127 | de suivi pour plusieurs CCD dans 2 couleurs est permise.
|
---|
1128 | Ce fichier permet aussi de selectionner des etoiles par leur
|
---|
1129 | numero ou un intervalle de numeros, le programme renvoie `FgSelSt'
|
---|
1130 | non nulle si l'etoile a ete selectionnee par les datacards.
|
---|
1131 | |
|
---|
1132 | *- Structure des donnees*
|
---|
1133 |
|
---|
1134 | Le programme lit les etoiles les unes apres les autres.
|
---|
1135 | Pour chaque etoile il remplit diverses structure ou tableau
|
---|
1136 | de structures permettant l'analyse de sa courbe de lumiere
|
---|
1137 | (la description des structures se trouve dans `fsvst.h'):
|
---|
1138 | | EXTERN GLOBINFO globu : decodage de GLOBINFO
|
---|
1139 | | EXTERN STARINFO staru[NCOULMX] : decodage de STARINFO
|
---|
1140 | | EXTERN int_4 nmes[NCOULMX] : nombre de mesures pour le CCD courant
|
---|
1141 | | et les couleurs 0 et 1
|
---|
1142 | | EXTERN TIMEINFOU *timeu[NCOULMX] : tableau de structures TIMEINFOU
|
---|
1143 | | EXTERN MESUREU *mesu[NCOULMX] : tableau de structures MESUREU
|
---|
1144 | | EXTERN double *date[NCOULMX] : tableau des dates en jours
|
---|
1145 | | EXTERN float *ampli[NCOULMX] : tableau des amplifications montecarlo
|
---|
1146 | | EXTERN int_4 nmesure[NCOULMX] : nombre de mesure valides
|
---|
1147 | | pour le CCD courant
|
---|
1148 | | EXTERN int_4 *indexu[NCOULMX] : tableau des images valides
|
---|
1149 | | rangees chronologiquement
|
---|
1150 | | EXTERN STARCALU starcal : strucure de magnitude absolue
|
---|
1151 | | EXTERN STARCUTU starcut : structure de coupure sur les magnitudes
|
---|
1152 | | et les couleurs (permet de ne pas lire
|
---|
1153 | | certaines etoiles pour gagner du temps)
|
---|
1154 |
|
---|
1155 | Les tableaux de structures ont `nmes[0] / nmes[1]' elements correspondant
|
---|
1156 | au nombre total d'images pour les couleurs 0 et 1 dans les fichiers
|
---|
1157 | de suivi d'un CCD.
|
---|
1158 | |
|
---|
1159 | *- Les points d'entree utilisateurs et structure de nbsread*
|
---|
1160 |
|
---|
1161 | Ce sont les routine commencant par la lettre `U...()'
|
---|
1162 | ayant un nom en majuscule.
|
---|
1163 |
|
---|
1164 | | Initialisation du job {
|
---|
1165 | |
|
---|
1166 | | void UINIT(void); <*********** USER
|
---|
1167 | | Initialisation montecarlo
|
---|
1168 | |
|
---|
1169 | | Boucle sur les CCD a lire {
|
---|
1170 | |
|
---|
1171 | | ---> Lecture de GLOBINFO et de TIMEINFOU pour un CCD
|
---|
1172 | | void UDATCLEAN(int coul); <*********** USER
|
---|
1173 | | Classement des images valides par dates croissantes
|
---|
1174 | | void UINITCCD(void); <*********** USER
|
---|
1175 | | Initialisation montecarlo pour le CCD courant
|
---|
1176 | |
|
---|
1177 | | Boucle sur les etoiles a lire {
|
---|
1178 | |
|
---|
1179 | | ---> lecture de MESUREU
|
---|
1180 | | Calcul des magnitudes absolues
|
---|
1181 | | Coupure sur les magnitudes absolues et la couleur des etoiles
|
---|
1182 | | Generation montecarlo pour chaque etoile
|
---|
1183 | | (eventuellement plusieurs generation sur la meme etoile)
|
---|
1184 | | void UEVT(void); <*********** USER
|
---|
1185 | |
|
---|
1186 | | } Fin de la boucle sur les etoiles
|
---|
1187 | |
|
---|
1188 | | void UENDCCD(void); <*********** USER
|
---|
1189 | |
|
---|
1190 | | } Fin de la boucle sur les CCD
|
---|
1191 | |
|
---|
1192 | | void UEND(void); <*********** USER
|
---|
1193 | | Fin du montecarlo, impression des statistiques des generations
|
---|
1194 | |
|
---|
1195 | | } Fin du job
|
---|
1196 | |
|
---|
1197 | *- void UINIT(void)*
|
---|
1198 |
|
---|
1199 | Tout ce qui ne doit etre fait qu'une fois par job
|
---|
1200 | definitions de parametres generaux, ouverture hbook etc...
|
---|
1201 | |
|
---|
1202 | *- UDATCLEAN(int icoul)*
|
---|
1203 |
|
---|
1204 | Permet de tuer des images
|
---|
1205 | Si date[icoul][imes] est mise a `GRAND2' l'image correspondante
|
---|
1206 | ne sera pas prise en compte dans la sequence en temps.
|
---|
1207 | Si date[icoul][imes] est mise a `GRAND2_KILL', l'image correspondante
|
---|
1208 | ne sera ni decodee ni prise en compte (structure `MESUREU' mis a zero).
|
---|
1209 | Ceci permet d'eliminer des images ou il y a eu des erreurs de codage
|
---|
1210 | qui conduisent a un core dump.
|
---|
1211 | |
|
---|
1212 | *- Classement et elimination des images*
|
---|
1213 |
|
---|
1214 | Les images sont ensuite rangees chronologiquement en ne tenant pas
|
---|
1215 | compte des images tuees. Pour les images ayant la meme date, seules
|
---|
1216 | celles de plus grand indice sont prises en compte.
|
---|
1217 | Le tableau `indexu[icoul][]' est fournit: il contient les indices des images
|
---|
1218 | valides rangees chronologiquement et sans doublons. L'indice de indexu
|
---|
1219 | varie de `0 a nmesure[icoul]' valeur qui represente le nombre d'images
|
---|
1220 | utilisables pour l'analyse.
|
---|
1221 | Par exemple, l'indice de la 5ieme image valide de la couleur bleue (reference
|
---|
1222 | secondaire) est:
|
---|
1223 | | j = indexu[1][5];
|
---|
1224 | et l'acces au flux brut est donne par:
|
---|
1225 | | fb = mesu[1][j].FluxB;
|
---|
1226 | Toutes les images sont encore accessibles directement, par exemple
|
---|
1227 | le flux brut de la 7ieme image (la 7ieme des fichiers de suivi
|
---|
1228 | sans aucun choix ni classement chronologique) est, pour la reference
|
---|
1229 | primaire (couleur rouge):
|
---|
1230 | | fb = mesu[0][7].FluxB;
|
---|
1231 | |
|
---|
1232 | *- UINITCCD(void)*
|
---|
1233 |
|
---|
1234 | C'est un point d'entree a la fin de l'initialisation
|
---|
1235 | du CCD courant. A ce niveau toutes les informations de `TIMEINFOU',
|
---|
1236 | les notions d'images valides et le classement chronologique sont
|
---|
1237 | connus. Les variables `TFIRST' et `TLAST' representent respectivement
|
---|
1238 | la valeur de `date[][]' la plus petit et la plus grande pour les images
|
---|
1239 | valides. A ce niveau peuvent etre faites des initialisation montecarlo
|
---|
1240 | propres a un CCD.
|
---|
1241 | |
|
---|
1242 | *- Calcul des magnitudes absolues*
|
---|
1243 |
|
---|
1244 | Par defaut, il n'y a pas
|
---|
1245 | de calcul de magnitudes absolues. L'utilisateur peut fournir une
|
---|
1246 | routine de prototype:
|
---|
1247 | | void mycalib(float,float,STARCALU *);
|
---|
1248 | puis la connecter (dans `UINIT' ou `UINITCCD') au prototype:
|
---|
1249 | | void (*Calibration_Absolue)(float,float,STARCALU *, void*);
|
---|
1250 | en ecrivant: `Calibration_Absolue = mycalib;'.
|
---|
1251 | Cette routine sera appelee automatiquement pour chaque etoile
|
---|
1252 | avec les arguments:
|
---|
1253 | | Calibration_Absolue(staru[0].FluxRef,staru[1].FluxRef,&starcal,uparms);
|
---|
1254 | et remplira la structure `starcal'. Dand sa propre routine,
|
---|
1255 | l'utilisateur peut remplir des magnitudes `B,V,R,I' ainsi
|
---|
1256 | que le type de l'etoile (`SP=1 ou GR=2 ou indefini=0') et
|
---|
1257 | son rayon en unites de rayon solaire. Le remplissage de
|
---|
1258 | toutes ces valeurs n'est pas obligatoire, il depend de ce qui
|
---|
1259 | doit etre fait apres, soit par l'utilisateur dans son analyse,
|
---|
1260 | soit par la simulation montecarlo (l'effet de taille finie par
|
---|
1261 | exemple a besoin du rayon de l'etoile).
|
---|
1262 | Pour passer des parametres supplementaires a la fonction,
|
---|
1263 | il faut initialiser le pointeur par l'assignation:
|
---|
1264 | | Calibration_Absolue_UParms = &user_data_block
|
---|
1265 | et l'adresse sera passee comme 4eme argument de Calibration_Absolue.
|
---|
1266 | `user_data_block' doit etre declaree comme variable `globale'
|
---|
1267 | dans le fichier ou comme variable `static' dans la routine
|
---|
1268 | ou est faite l'assignation.
|
---|
1269 | |
|
---|
1270 | *- Coupure sur les magnitudes absolues et la couleur des etoiles*
|
---|
1271 |
|
---|
1272 | Pour des raisons de rapidite, l'utilisateur peut couper sur la
|
---|
1273 | magnitude absolue ou la couleur de l'etoile en remplissant la
|
---|
1274 | structure `starcut'. Le temps de lecture de l'etoile est
|
---|
1275 | economise, et le point d'entree `UEVT()' n'est pas appele.
|
---|
1276 | |
|
---|
1277 | *- Generation montecarlo pour chaque etoile*
|
---|
1278 |
|
---|
1279 | L'effet de microlentille est simule sur chaque etoile
|
---|
1280 | (ou plusieurs fois par etoile). Une description detaillee des
|
---|
1281 | possibilites de simulation est donnee plus loin.
|
---|
1282 | |
|
---|
1283 | *- UEVT(void)*
|
---|
1284 |
|
---|
1285 | C'est l'endroit ou l'utilisateur met le code
|
---|
1286 | d'analyse et de traitement des courbes de lumieres. A ce niveau
|
---|
1287 | les etoiles selectionnees dans le fichier datacard par une carte
|
---|
1288 | `@SELET' sont identifier par le flag `FgSelSt>0'. Les variables
|
---|
1289 | de niveau d'impression, debug, etc... sont accessibles:
|
---|
1290 | | iet[NCOULMX] : numero de l'etoile (ref ou ref sec)
|
---|
1291 | | FgSelSt : flag de selection
|
---|
1292 | | idebug[4] : niveau de debug [iet1,iet2,ccd,niveau de debug]
|
---|
1293 | | ffprt : niveau d'impression
|
---|
1294 | | etc...
|
---|
1295 | |
|
---|
1296 | *- void UENDCCD(void)*
|
---|
1297 |
|
---|
1298 | Point d'entree a la fin du traitement
|
---|
1299 | d'un CCD. Il permet de fermer ou d'imprimer toute structure
|
---|
1300 | relative a un CCD.
|
---|
1301 | |
|
---|
1302 | *- void UEND(void)*
|
---|
1303 |
|
---|
1304 | Point d'entree a la fin du job. C'est l'endroit
|
---|
1305 | pour desallouer les tableaux et pour imprimer les conclusions du job
|
---|
1306 | |
|
---|
1307 | *- Arguments de l'executable*
|
---|
1308 |
|
---|
1309 | | [-h] : help tres tres detaille
|
---|
1310 | | [-et et1,et2,etinc] : numeros des etoiles a traiter
|
---|
1311 | | [-prt niv] : niveau de print
|
---|
1312 | | [-dbg et1,et2,ccd,niv] : debug de certaine etoiles/ccd
|
---|
1313 | | [-kill mes1 mes2 mes3 ...] : pour tuer les images mes1...
|
---|
1314 | -kill permet de tuer les images mes1,mes2,mes3,... de `chaque'
|
---|
1315 | fichier de suivi pour un CCD et une couleur. C'est particulierement
|
---|
1316 | utile si, par exemple, la premiere image de chaque fichier de suivi
|
---|
1317 | est l'images de reference: on s'en debarasse en indiquant:
|
---|
1318 | | -kill 1
|
---|
1319 | |
|
---|
1320 | Pour les arguments de nbsread, conformenent aux conventions prises
|
---|
1321 | pour les routines de lecture de fichiers de suivi,
|
---|
1322 | les numeros d'etoiles et d'images vont de `1 a nmes[]'
|
---|
1323 | (et non pas de `0 a nmes[]-1').
|
---|
1324 | |
|
---|
1325 | *- Comment creer ses propres routines utilisateur*
|
---|
1326 |
|
---|
1327 | Il faut ecrire un fichier dans lequel sont definies
|
---|
1328 | les point d'entree utilisateurs:
|
---|
1329 | `UINIT(), UDATCLEAN(int), UINITCCD(), UEVT(), UENDCCD() et UEND()'.
|
---|
1330 | Le nom du fichier doit obligatoirement s'appeler
|
---|
1331 | | nbsreadu_myroutine.cc (meme si on compile en C)
|
---|
1332 | | nbsreaduF_myroutine.f pour la partie Fortran (si il y a des hbook)
|
---|
1333 | myroutine est un nom choisi librement par l'utilisateur.
|
---|
1334 | La compilation et le link s'effectue en executant:
|
---|
1335 | | make -f Makeus++ nbsread_myroutine (si on travaille en C++)
|
---|
1336 | | make -f Makeus nbsread_myroutine (si on travaille en C )
|
---|
1337 | Un exemple detaille a ete sauve dans la base CVS:
|
---|
1338 | | nbsreadu_squel.cc , nbsreaduF_squel.f
|
---|
1339 | Pour l'executer et regarder ses impressions,
|
---|
1340 | copiez `nbsreadu_squel.cc' et `nbsreaduF_squel.f' dans un de
|
---|
1341 | vos repertoires, et recuperez dans la base CVS `AnaSuiv/Makeus++'
|
---|
1342 | (ou `AnaSuiv/Makeus' si vous voulez compiler et linker en C).
|
---|
1343 | Compilez et linkez:
|
---|
1344 | | make -f Makeus++ nbsread_squel
|
---|
1345 | | (ou make -f Makeus nbsread_squel)
|
---|
1346 | Creez un fichier `fichier.dataccd' contenant des fichiers de suivi.
|
---|
1347 | Executez `nbsreadu_squel' en tapant la ligne de commande suivante:
|
---|
1348 | | nbsreadu_squel fichier.dataccd -prt 1 \
|
---|
1349 | | -mc 2 -u0 0.01,0.5 -t0 1,-1,-1 -tau 2,10,-1 -tf 2,0,2 -bl 1
|
---|
1350 | (cette procedure est egalement decrite aussi dans `nbsreadu_squel.cc')
|
---|
1351 | |
|
---|
1352 | *- Initialisation du montecarlo et generation*
|
---|
1353 |
|
---|
1354 | L'initialisatuon peut etre effectuee, soit par arguments de
|
---|
1355 | l'executable:
|
---|
1356 | | [-mc ngenstar]
|
---|
1357 | | [-u0 U0MinI,U0MaxI,U0SimI]
|
---|
1358 | | [-t0 T0MinI,T0MaxI,T0SimI]
|
---|
1359 | | [-tau TauMinI,TauMaxI,TauSimI]
|
---|
1360 | | [-tf type(1ou2),UMinI,UMaxI,USimI,Usu0_Cut]
|
---|
1361 | | [-bl Blending (1ou2)]
|
---|
1362 | | [-seed seed1,seed2,seed3]
|
---|
1363 | soit en remplissant directement la structure `MONTECARLO mc' dans
|
---|
1364 | UINIT() et eventuellement UINITCCD() pour l'initialisation du `t0'.
|
---|
1365 | `nbsread -h' donne un help online tres detaille sur la facon de piloter
|
---|
1366 | la generation. La description des variables de la structure `mc'
|
---|
1367 | se trouve dans le fichier `nbgene.h'.
|
---|
1368 | La description des possibilites du montecarlo est donnee
|
---|
1369 | ci-apres en fonction des variables de la structure `mc':
|
---|
1370 |
|
---|
1371 | | ----- CHOIX DU TYPE DE SIMULATION -----
|
---|
1372 | | mc.Taille_Finie = 0 : generation taille ponctuelle
|
---|
1373 | | 1 : taille finie tirage plat en U = Rs(proj)/Re
|
---|
1374 | | 2 : taille finie tirage plat en UC (U = UC*Rs)
|
---|
1375 | | mc.Blending = 1 : simulation du "blending" sur l'etoile principale (la + brillante)
|
---|
1376 | | 2 : simulation du "blending" sur l'etoile cachee (la - brillante)
|
---|
1377 | |
|
---|
1378 | | ----- GENERATION PLATE -----
|
---|
1379 | | si max<=min
|
---|
1380 | | - TauSim=TauSimI Tau du phenomene
|
---|
1381 | | - T0Sim=T0SimI instant du maximum si T0SimI>0
|
---|
1382 | | - U0Sim=U0SimI parametre d'impact (en Re) si U0SimI>0
|
---|
1383 | | - USim=USimI projection rayon etoile dans plan naine (en Re) si USimI>0
|
---|
1384 | | si max>min
|
---|
1385 | | - TauSim est engendre avec une loi plate entre TauMinI ET TauMaxI
|
---|
1386 | | - T0Sim est engendre avec une loi plate entre T0MinI ET T0MaxI
|
---|
1387 | | si T0MaxI<T0MinI et T0SimI<0 on prend plat sur toute la periode
|
---|
1388 | | - U0Sim est engendre avec une loi plate entre U0MinI ET U0MaxI
|
---|
1389 | | - USim est engendre avec une loi plate entre UMinI ET UMaxI si mc.Taille_Finie=1
|
---|
1390 | | entre UMinI*Rs ET UMaxI*Rs si mc.Taille_Finie=2
|
---|
1391 | |
|
---|
1392 | | ----- GENERATION SELON UNE LOI DETERMINEE PAR L'UTILISATEUR -----
|
---|
1393 | | l'utilisateur peut fournir la loi de tirage aleatoire pour u0,tau et u:
|
---|
1394 | | - mc.TireU0(float), mc.TireT0(float), mc.TireTau(float) et
|
---|
1395 | | mc.TireU(float) sont 3 pointeurs sur des fonctions
|
---|
1396 | | "float (*TireU0)(float alea)"
|
---|
1397 | | Il sont initialises a 0 dans nbsread.c
|
---|
1398 | | - mise en oeuvre (ex: pour le tirage de tau plat en log):
|
---|
1399 | | 1-/ dans nbsreadu.c, l'utilisateur ecrit les routines de tirage
|
---|
1400 | | ( alea est uniformement distribue entre [0.,1.[ )
|
---|
1401 | | float my_tiretau(float alea)
|
---|
1402 | | {
|
---|
1403 | | float tau;
|
---|
1404 | | tau = log(mc.TauMinI)
|
---|
1405 | | + alea * ( log(mc.TauMaxI) - log(mc.TauMinI) );
|
---|
1406 | | return( (float) exp( (double) tau ) );
|
---|
1407 | | }
|
---|
1408 | | 2-/ dans UINIT (par exemple)
|
---|
1409 | | mc.TireTau = my_tiretau;
|
---|
1410 |
|
---|
1411 | Evidemment dans l'hypothese d'un tirage avec effet de taille finie
|
---|
1412 | le rayon de l'etoile (starcal.Rstar) doit etre rempli
|
---|
1413 | dans la calibration absolue donnee par l'utilisateur.
|
---|
1414 |
|
---|
1415 | Pour une generation avec effet de blending, l'utilisateur doit
|
---|
1416 | une routine de simulation de l'effet de blending et la connecter
|
---|
1417 | au prototype mc.Get_Par_Blending dans UINIT() ou UINITCCD().
|
---|
1418 | | mc.Get_Par_Blending = my_blending_gene
|
---|
1419 |
|
---|
1420 | Pour une simulation avec effet de blending sur l'etoile la plus
|
---|
1421 | brillante du couple, il faut remplir
|
---|
1422 | | mc.coeff_Arec1[ic] pour les 2 couleurs (ic=0,1)
|
---|
1423 | Arec est le coefficient de blending:
|
---|
1424 | | Ampli(blend) = (Ampli-1.)*Arec +1
|
---|
1425 |
|
---|
1426 | Pour une simulation avec effet de blending sur l'etoile la moins
|
---|
1427 | brillante du couple, il faut remplir
|
---|
1428 | | mc.coeff_Arec2[ic] pour les 2 couleurs (ic=0,1)
|
---|
1429 |
|
---|
1430 | Pour une simulation avec effet de blending sur l'etoile la plus
|
---|
1431 | brillante du couple et avec effet de taille finie, il faut remplir
|
---|
1432 | | mc.coeff_Arec1[ic] pour les 2 couleurs (ic=0,1)
|
---|
1433 | | mc.starcal1.Rstar : rayon de l'etoile la plus brillante
|
---|
1434 |
|
---|
1435 | Pour une simulation avec effet de blending sur l'etoile la moins
|
---|
1436 | brillante du couple et avec effet de taille finie, il faut remplir
|
---|
1437 | | mc.coeff_Arec2[ic] pour les 2 couleurs (ic=0,1)
|
---|
1438 | | mc.starcal2.Rstar : rayon de l'etoile la moins brillante
|
---|
1439 | |
|
---|
1440 | *- Initialisation des aleatoires*
|
---|
1441 |
|
---|
1442 | Le generateur utilise est "drand48" standard unix.
|
---|
1443 | Il est prevu 3 variables permettant d'initialiser le generateur:
|
---|
1444 | | mc.iseed1, mc.iseed2, mc.iseed3
|
---|
1445 | A la fin du job l'etat des graines est automatiquement imprime
|
---|
1446 | et permet de redemarrer un autre job pour la suite de la
|
---|
1447 | sequence d'aleatoires.
|
---|
1448 | |
|
---|
1449 | *- Exemple de fichier datacard*
|
---|
1450 |
|
---|
1451 | Cf AnaSuiv/nbsread.dataccd.Exemple
|
---|
1452 | |4 nombre de CCD a traiter
|
---|
1453 | |@CCD 03 numero du 1er CCD a traiter
|
---|
1454 | |@COUL 1 numero de la couleur de reference
|
---|
1455 | |/home/suivi/file1_coul1_ccd03.suivi
|
---|
1456 | |/home/suivi/file2_coul1_ccd03.suivi
|
---|
1457 | |@COUL 2 numero de la couleur secondaire (facultatif)
|
---|
1458 | |/home/suivi/file1_coul2_ccd03.suivi
|
---|
1459 | |/home/suivi/file2_coul2_ccd03.suivi
|
---|
1460 | |/home/suivi/file3_coul2_ccd03.suivi
|
---|
1461 | |@FINCCD carte de fin de CCD
|
---|
1462 | |@CCD 01 numero du 2sd CCD a traiter
|
---|
1463 | |@COUL 1 numero de la couleur de reference
|
---|
1464 | |/home/suivi/file1_coul1_ccd01.suivi
|
---|
1465 | |/home/suivi/file2_coul1_ccd01.suivi
|
---|
1466 | |@COUL 2 numero de la couleur secondaire (facultatif)
|
---|
1467 | |/home/suivi/file1_coul2_ccd01.suivi
|
---|
1468 | |@FINCCD carte de fin de CCD
|
---|
1469 | |@CCD 05 numero du 3ieme CCD a traiter
|
---|
1470 | |@COUL 1 numero de la couleur de reference
|
---|
1471 | |/home/suivi/file1_coul1_ccd05.suivi
|
---|
1472 | |/home/suivi/file2_coul1_ccd05.suivi
|
---|
1473 | |/home/suivi/file3_coul1_ccd05.suivi
|
---|
1474 | |/home/suivi/file4_coul1_ccd05.suivi
|
---|
1475 | |@COUL 2 numero de la couleur secondaire (facultatif)
|
---|
1476 | |/home/suivi/file1_coul2_ccd05.suivi
|
---|
1477 | |/home/suivi/file2_coul2_ccd05.suivi
|
---|
1478 | |/home/suivi/file3_coul2_ccd05.suivi
|
---|
1479 | |@FINCCD carte de fin de CCD
|
---|
1480 | |@CCD 07 numero du 4ieme CCD a traiter
|
---|
1481 | |@COUL 1 numero de la couleur de reference
|
---|
1482 | |/home/suivi/file1_coul1_ccd07.suivi
|
---|
1483 | |/home/suivi/file2_coul1_ccd07.suivi
|
---|
1484 | |/home/suivi/file3_coul1_ccd07.suivi
|
---|
1485 | |@FINCCD carte de fin de CCD
|
---|
1486 | |@END carte de fin de fichier datacard
|
---|
1487 | |
|
---|
1488 | |.... liste d etoiles a selectionner: FgSelSt != 0 dans nbsread.h
|
---|
1489 | |@SELET 1001
|
---|
1490 | |@SELET 1234
|
---|
1491 | |@SELET 2032 2050
|
---|
1492 | |@SELET 5044
|
---|
1493 | |@SELET 10001 10100
|
---|
1494 | |@SELET 6022
|
---|
1495 |
|
---|
1496 | A l'exception de la 1ere carte et des noms de fichiers de suivi
|
---|
1497 | toute carte valide commence par un caractere @.
|
---|
1498 | Il est fournit un moyen de selectionner des etoiles dans le
|
---|
1499 | fichier datacard et de les identifier dans `UEVT()'.
|
---|
1500 | grace au flag `FgSelSt'.
|
---|
1501 | | @SELET 1001 selection de l'etoile 1001 (attention et=[1,...])
|
---|
1502 | | @SELET 1001 2001 selection des etoiles de 1001 a 2001 inclusif
|
---|
1503 | |
|
---|
1504 | *- Commentaire sur les structures des fichers de suivi et de nbsread*
|
---|
1505 |
|
---|
1506 | Dans le fichier de suivi sont codees les structures:
|
---|
1507 | | GLOBINFO STARINFO MESURE TIMEINFO
|
---|
1508 | La description des diverses structures et variables qu'elles
|
---|
1509 | contiennent se trouve dans `fsvst.h'.
|
---|
1510 | Pour gagner de la place, certaines d'entre elles (`TIMEINFO,MESURE')
|
---|
1511 | ont des variables codees de facon non triviale dans les mots
|
---|
1512 | de 16 bits. A la relecture du fichier de suivi, `nbsread'
|
---|
1513 | decode automatiquement les variables pour les ranger en clair
|
---|
1514 | dans des structures utilisateurs (dont le nom se termine par un `U').
|
---|
1515 | Notamment la structure `MESUREU' decode la structure `MESURE' et
|
---|
1516 | renvoit le flux et les erreurs calibrees et tenant compte des
|
---|
1517 | informations codees dans la structure `TIMEINFO'.
|
---|
1518 | | TIMEINFO -> TIMEINFOU (qui ne contient qu'une partie des infos)
|
---|
1519 | | MESURE -> MESUREU
|
---|
1520 | Les routines de decodage sont dans fsvst.h mais ne doivent
|
---|
1521 | en pratique pas etre utilisees directement par
|
---|
1522 | l'utilisateur de `nbsread':
|
---|
1523 | | TIMEINFOU * DecodeTim( TIMEINFO *time, TIMEINFOU *timeu);
|
---|
1524 | | MESUREU * DecodeMes( MESURE *mesc, MESUREU *mesu);
|
---|
1525 | |
|
---|
1526 | *- Routines pratiques utilisables dans nbsread*
|
---|
1527 |
|
---|
1528 | | int read_timeinfo(int ic,int imes,TIMEINFO *tim)
|
---|
1529 | Comme `TIMEINFOU' ne contient qu'une partie des informations
|
---|
1530 | de la structure `TIMEINFO' du fichier de suivi, il peut etre pratique
|
---|
1531 | de pouvoir recuprer `TIMEINFO'. `read_timeinfo' permet de
|
---|
1532 | recuperer `TIMEINFO' pour la couleur `ic (0,1)' et la mesure
|
---|
1533 | `imes (0,nmes[ic]-1)'.
|
---|
1534 | | void PrtGlobInfo (GLOBINFO *glinf, int lp);
|
---|
1535 | | void PrtStarInfo (STARINFO *sti, int n, int lp);
|
---|
1536 | | void PrtMesure (MESURE *mes, int n, int lp);
|
---|
1537 | | void PrtMesureU (MESUREU *mesu, int n, int lp);
|
---|
1538 | | void PrtTimeInfo (TIMEINFO *tim, int n, int lp);
|
---|
1539 | | void PrtTimeInfoU (TIMEINFOU *tim, int n, int lp);
|
---|
1540 | Ces routines permettent d'imprimer les diverses structures
|
---|
1541 | d'un fichiers de suivi. Elles sont dans `fsvst.h'
|
---|
1542 | |
|
---|
1543 | *- Routines de travail avec les transformations*
|
---|
1544 |
|
---|
1545 | Elles permettent, par exemple, de calculer les coordonnees
|
---|
1546 | sur l'image courante a partir des coordonnees de references de STARINFO.
|
---|
1547 | Les rputines se trouvent dans `fsvst.h' et `transfost.h'.
|
---|
1548 | | void GlobInfoToTransf(GLOBINFO *gli, TRANSFO *t1, TRANSFO *t2);
|
---|
1549 | | void TimeInfoToTransf(&timloc,&t1,&t2);
|
---|
1550 | | void CordTransf(double xS, double yS, double *xD, double *yD,
|
---|
1551 | | TRANSFO *transf)
|
---|
1552 | Voici un exemple d'utilisation a mettre dans `UEVT()' pour l'etoile
|
---|
1553 | courante.
|
---|
1554 | | TIMEINFO timloc;
|
---|
1555 | | TRANSFO t1,t2;
|
---|
1556 | | double Xcur[2],Ycur[2],x,y;
|
---|
1557 | | for(ic=0;ic<NCOULMX;ic++) {
|
---|
1558 | | for(k=0;k<nmes[ic];k++) {
|
---|
1559 | | read_timeinfo(ic,k,&timloc);
|
---|
1560 | | TimeInfoToTransf(&timloc,&t1,&t2);
|
---|
1561 | | -- des coordonnees de reference vers les courantes
|
---|
1562 | | x = staru[ic].XPos; y = staru[ic].YPos;
|
---|
1563 | | CordTransf(x,y,&Xcur[ic],&Ycur[ic],&t1);
|
---|
1564 | | PrintTransfo(&t1);
|
---|
1565 | | PrintTransfo(&t2);
|
---|
1566 | | -- des coordonnees courantes vers celles de reference
|
---|
1567 | | CordTransf(Xcur[ic],Ycur[ic],&x,&y,&t2);
|
---|
1568 | | }
|
---|
1569 | | }
|
---|
1570 |
|
---|
1571 | --
|
---|
1572 | */
|
---|