1 | #include "diabolo.h"
|
---|
2 | #include "senseur_stellaire.h"
|
---|
3 | #include "recons_sst.h"
|
---|
4 | #include "FindPeri.h"
|
---|
5 | #include "stabilite.h"
|
---|
6 | FILE* f;
|
---|
7 | long nstarcatal,nposaxesimu;
|
---|
8 | struct star {
|
---|
9 | float ra; // en heures dans le catalogue de depart
|
---|
10 | float dec;// en degres dans le catalogue de depart
|
---|
11 | short mag; // mag * 100
|
---|
12 | };
|
---|
13 | #define nstpturn 100
|
---|
14 | struct sstgraph {
|
---|
15 | int netdet; // nombre d'etoiles detectees
|
---|
16 | float raax; // coordonnees equatoriales de l'axe de rotation du telescope
|
---|
17 | float decax;
|
---|
18 | long numcat[nstpturn]; //numero de l'etoile dans le fichier de depart
|
---|
19 | float phase[nstpturn]; //phase de l'etoile (angle/Nord - Est=+90¡ - ds plan perp axe rot ballon)
|
---|
20 | float cosinus[nstpturn]; // de l'angle entre la direction de l'etoile et l'axe de rotation du ballon
|
---|
21 | float fluxcat[nstpturn]; //flux de l'etoile en unites arbitraires
|
---|
22 | int icl[nstpturn]; //ordre de l'etoile pour un classement par phases croissantes
|
---|
23 | };
|
---|
24 | struct star* stars;
|
---|
25 | struct sstgraph* listord;
|
---|
26 | int fichierslus=0;
|
---|
27 | float instant[nmemechant],sfluxvu[nmemechant],barette[nmemechant],phd0[nmemechant];
|
---|
28 | float deltap[nmemechant],rapflx[nmemechant];
|
---|
29 | float deltapcat[nstpturn],rapflxcat[nstpturn];
|
---|
30 | float cases[ncasdiftps];float maxcas;float somcas;
|
---|
31 | float sflxv,maintenant,laplushaute;
|
---|
32 | float tdeb;int flagstar;int flagwind;
|
---|
33 | float separtps,separenz;
|
---|
34 | float Period=10.,NewPeriod;float Phase;int Sens=9999;
|
---|
35 | float WidthCas,StepCas;
|
---|
36 | float tpsminfen,tpsmaxfen;
|
---|
37 | float Liminffen,Limsupfen;
|
---|
38 | double CoupFlux;
|
---|
39 | float Papa,poidsvois;
|
---|
40 | float tauxper;long nstastat,ndsper;
|
---|
41 | int flagChPer,flagvuefiltree;
|
---|
42 | int nptsfenper,nptsfenphs;
|
---|
43 | float somtps,somecartps,somecarz;
|
---|
44 | float memtemps,membar;
|
---|
45 | int ncoups;int statcalcphase[ncasphase];int CasesVides;
|
---|
46 | float pasenphase,ecarmoytps[ncasphase],ecarmoyz[ncasphase];
|
---|
47 | float sini[ncasphase],cosini[ncasphase];
|
---|
48 | float phaseret=-9999;
|
---|
49 | float pluvieux;int nlistevue,numaccro,flcatmin;
|
---|
50 | #define D2R .0174533 //1 degre = D2R radians
|
---|
51 | #define H2R .261799 // 1 heure siderale = H2R radians
|
---|
52 | #define P2 1.570796 // pi sur 2
|
---|
53 | #define PI 3.14159265359 // pi
|
---|
54 | #define DPI 6.2831853 // 2*pi
|
---|
55 | //variables geometriques du senseur stellaire :
|
---|
56 |
|
---|
57 | #define sommetdeg 49. // 1/2 angle d'ouverture du cone moye balay par la barette (en degres)
|
---|
58 | #define ouvertdeg 1.44 // extension de la barette en delta (en degres)
|
---|
59 | float sommet,ouvert; // memes angles en radians
|
---|
60 | float decaxe;
|
---|
61 | float raaxe;
|
---|
62 |
|
---|
63 |
|
---|
64 | void init_recons_sst()
|
---|
65 |
|
---|
66 | //appele au debut par diabolo.c, puis a chaque reset de la fenetre findperiod
|
---|
67 | {
|
---|
68 | int i;
|
---|
69 | double valeur=0;
|
---|
70 | //printf("periode echantillonnage %f",gg->periode_echantillonage);
|
---|
71 | pasenphase=360./(float)(ncasphase);
|
---|
72 | for(i=0;i<nmemechant;i++)
|
---|
73 | {
|
---|
74 | instant[i]=0.;
|
---|
75 | sfluxvu[i]=0.;
|
---|
76 | barette[i]=0.;
|
---|
77 | }
|
---|
78 | for(i=0;i<ncasdiftps;i++)
|
---|
79 | {
|
---|
80 | cases[i]=0;
|
---|
81 | }
|
---|
82 | flagvuefiltree=0;
|
---|
83 | //exec_FindPeriod(fenetre_Find_Period,ouverture,valeur);
|
---|
84 | flagwind=0;
|
---|
85 | maxcas=0;
|
---|
86 | Period=LowSeek;Phase=-9999.;Sens=-9999;
|
---|
87 | somcas=0;
|
---|
88 | tdeb=0;
|
---|
89 | flagstar=0;
|
---|
90 | CoupFlux=10.;
|
---|
91 | if(fenetre(fenetre_Find_Period)) CoupFlux=Rd_CpFl(fenetre_Find_Period);
|
---|
92 | //printf("coupure en flux %d \n",(int)(CoupFlux));
|
---|
93 | tauxper=0.;
|
---|
94 | nstastat=0;
|
---|
95 | ndsper=0;
|
---|
96 | nptsfenper=0;
|
---|
97 | nptsfenphs=0;
|
---|
98 | memtemps=-1.;
|
---|
99 | ncoups=0;
|
---|
100 | somtps=0;somecartps=0;somecarz=0;
|
---|
101 |
|
---|
102 | Liminffen=LowSeek;
|
---|
103 | Limsupfen=HighSeek;
|
---|
104 | Papa=10.;
|
---|
105 | if(fenetre(fenetre_Find_Period))
|
---|
106 | {
|
---|
107 | if(DonnePeriod() != -1)
|
---|
108 | {
|
---|
109 | Liminffen=DonnePeriod()-1;
|
---|
110 | Limsupfen=DonnePeriod()+1;
|
---|
111 | Papa=1.;
|
---|
112 | }
|
---|
113 | flagwind=1;
|
---|
114 | }
|
---|
115 |
|
---|
116 | passargu(Liminffen,Limsupfen,Papa);
|
---|
117 | //nouveauD(fenetre_Find_Period,FindPeriod_id,"FindPeriod",exec_FindPeriod);
|
---|
118 | //nouveauD(fenetre_Phase_SST,phase_id,"phase",exec_phase);
|
---|
119 | //corFC flagwind=0;
|
---|
120 | raz_fen_phase();
|
---|
121 | if (fenetre(fenetre_Find_Period)) {
|
---|
122 | selectgra(fenetre_Find_Period);
|
---|
123 | graph->xmin=Liminffen;
|
---|
124 | graph->xmax=Limsupfen;
|
---|
125 | graph->xpas=Papa;
|
---|
126 | retrace(fenetre_Find_Period);
|
---|
127 | ecritD(fenetre_Find_Period,FP_vperesti," %7.3f",DonnePeriod());
|
---|
128 | }
|
---|
129 |
|
---|
130 | tpsminfen=Liminffen;
|
---|
131 | tpsmaxfen=Limsupfen;
|
---|
132 | StepCas=(HighSeek-LowSeek)/(float)(ncasdiftps);
|
---|
133 | WidthCas=2*StepCas;
|
---|
134 | tabulesincos();
|
---|
135 | CasesVides=ncasphase;
|
---|
136 | //lecture des catalogues STELLAIRES!
|
---|
137 | if(fichierslus==0)
|
---|
138 | {
|
---|
139 | fichierslus=1;
|
---|
140 | printf(" \n");
|
---|
141 | // Catalogue Dominique Yvon
|
---|
142 | {
|
---|
143 | short ref;
|
---|
144 | long n;
|
---|
145 | if (FSOpen("\phyp6HADY.dat",0,&ref)) {
|
---|
146 | printf("***ERREUR*** ouverture hyp6Hammam.dat\n");
|
---|
147 | return;
|
---|
148 | }
|
---|
149 | n = sizeof(long);
|
---|
150 | FSRead(ref, &n, (char*) &nstarcatal);
|
---|
151 | printf("nstarcatal = %d\n", nstarcatal);
|
---|
152 | n = nstarcatal*sizeof(struct star);
|
---|
153 | stars = (struct star*) malloc(n);
|
---|
154 | FSRead(ref, &n, (char*) stars);
|
---|
155 | FSClose(ref);
|
---|
156 | printf("Hyp6DY m<6 : read %d stars\n", nstarcatal);
|
---|
157 | }
|
---|
158 | for(i=0;i<5;i++)
|
---|
159 | {
|
---|
160 | printf("alpha %f,delta %f, mag %d \n",stars[i].ra,stars[i].dec,stars[i].mag);
|
---|
161 | }
|
---|
162 | {
|
---|
163 | short ref;
|
---|
164 | long n;
|
---|
165 | if (FSOpen("\psstgraphs.dat",0,&ref)) {
|
---|
166 | printf("***ERREUR*** ouverture sstgraphs.dat\n");
|
---|
167 | return;
|
---|
168 | }
|
---|
169 | n = sizeof(long);
|
---|
170 | FSRead(ref, &n, (char*) &nposaxesimu);
|
---|
171 | printf("nstarcatal = %d\n", nposaxesimu);
|
---|
172 | n = nposaxesimu*sizeof(struct sstgraph);
|
---|
173 | listord = (struct sstgraph*) malloc(n);
|
---|
174 | FSRead(ref, &n, (char*) listord);
|
---|
175 | FSClose(ref);
|
---|
176 | printf("sstgraph.dat : read %d positions simulees\n", nposaxesimu);
|
---|
177 | }
|
---|
178 | printf("nombre d'etoiles selectionnees %d\n",listord[0].netdet);
|
---|
179 | numaccro=0;flcatmin=1;
|
---|
180 | }
|
---|
181 | }
|
---|
182 |
|
---|
183 | void exec_recons_sst()
|
---|
184 | {
|
---|
185 | int i,icour;
|
---|
186 | int cascour,casper,vudsper;
|
---|
187 | int valid;
|
---|
188 | float delbar,delebarre;
|
---|
189 | float deltan,deltintin;
|
---|
190 | float delcas,pocac;
|
---|
191 | sflxv=0.;
|
---|
192 | if(nfoundstars>0)
|
---|
193 | {
|
---|
194 | if(nfoundstars>MAXFOUNDSTARS) nfoundstars=MAXFOUNDSTARS;
|
---|
195 | laplushaute=0.;
|
---|
196 | for(i=0;i<nfoundstars;i++)
|
---|
197 | {
|
---|
198 | if(mfoundstars[i]>sflxv)
|
---|
199 | {sflxv=mfoundstars[i];
|
---|
200 | laplushaute=zfoundstars[i];
|
---|
201 | }
|
---|
202 | //printf("%d %f %f %f\n",i,tfoundstars[i],zfoundstars[i],mfoundstars[i]);
|
---|
203 | }
|
---|
204 |
|
---|
205 | if(sflxv>CoupFlux)
|
---|
206 | {
|
---|
207 | maintenant=tfoundstars[0];
|
---|
208 | membar=laplushaute;
|
---|
209 | if(flagstar==0)
|
---|
210 | {
|
---|
211 | tdeb=maintenant;
|
---|
212 | flagstar=1;
|
---|
213 | }
|
---|
214 | if(maintenant-tdeb>LowSeek)
|
---|
215 | {
|
---|
216 | vudsper=0;
|
---|
217 | valid=0;
|
---|
218 | delbar=0;
|
---|
219 | delebarre=10000;
|
---|
220 | deltan=0.;
|
---|
221 | deltintin=1.;
|
---|
222 | for(i=0;i<nmemechant;i++)
|
---|
223 | {
|
---|
224 | if(sfluxvu[i]==0.) break;
|
---|
225 | separtps=maintenant-instant[i];
|
---|
226 | separenz=laplushaute-barette[i];
|
---|
227 | if(separtps>LowSeek && fabs(sfluxvu[i]-sflxv)/sflxv<.5)
|
---|
228 | {
|
---|
229 | if(separtps>tpsminfen && separtps<tpsmaxfen)
|
---|
230 | {
|
---|
231 | trace_point(fenetre_Find_Period);
|
---|
232 | nptsfenper++;
|
---|
233 | if(nptsfenper==QuorumRafrai && fenetre(fenetre_Find_Period))
|
---|
234 | { selectgra(fenetre_Find_Period);efface(fenetre_Find_Period);nptsfenper=0;}
|
---|
235 | }
|
---|
236 | // recherche de periode
|
---|
237 | if(separtps<HighSeek)
|
---|
238 | {
|
---|
239 | casper=(int)((Period-LowSeek)/StepCas);
|
---|
240 | cascour=(int)((separtps-LowSeek)/StepCas);
|
---|
241 | delcas=separtps-StepCas*(cascour+.5)-LowSeek;
|
---|
242 | pocac=fabs(delcas/StepCas);
|
---|
243 | // printf("separtps %f delcas %f pocac %f\n",separtps,delcas,pocac);
|
---|
244 |
|
---|
245 |
|
---|
246 | if(cascour>0 && cascour<ncasdiftps-1)
|
---|
247 | {
|
---|
248 | cases[cascour]+=25./separtps*(1.-pocac);
|
---|
249 | if(delcas>0.){cases[cascour+1]+=25./separtps*pocac;}
|
---|
250 | else {cases[cascour-1]+=25./separtps*pocac;}
|
---|
251 | somcas+=25./separtps;
|
---|
252 | if(fabs(cascour-casper)<2)
|
---|
253 | {vudsper++;
|
---|
254 | }
|
---|
255 | if(cases[cascour]>maxcas)
|
---|
256 | {
|
---|
257 | maxcas=cases[cascour];
|
---|
258 | poidsvois=cases[cascour-1]+cases[cascour]+cases[cascour+1];
|
---|
259 | NewPeriod=LowSeek+
|
---|
260 | (cascour+.5+(cases[cascour+1]-cases[cascour-1])/poidsvois)*StepCas;
|
---|
261 | if(poidsvois>5*somcas/ncasdiftps){
|
---|
262 | flagChPer=0;
|
---|
263 | if(fabs(Period-NewPeriod)>1.)
|
---|
264 | {nstastat=0;ndsper=0;tauxper=0.;
|
---|
265 | { if(DonnePeriod() != -1 && fenetre(fenetre_Find_Period))
|
---|
266 | {selectgra(fenetre_Find_Period);efface(fenetre_Find_Period);nptsfenper=0;}}}
|
---|
267 | if(fabs(Period-NewPeriod)>.1) flagChPer=1;
|
---|
268 | if(fabs(Period-NewPeriod)>.010)
|
---|
269 | {raz_fen_phase();}
|
---|
270 | Period=NewPeriod;
|
---|
271 | }
|
---|
272 | // printf("maxcas %f somcas/ncasdiftps %f Periode : %f\n",maxcas,
|
---|
273 | // somcas/(float)(ncasdiftps),Period);
|
---|
274 | }
|
---|
275 | }
|
---|
276 | }
|
---|
277 | delbar=separenz;
|
---|
278 | deltan=separtps-Period;
|
---|
279 | if(DonnePeriod() != -1
|
---|
280 | && fabs(deltan-Period)<FourchTps && fabs(deltan-Period-2*deltintin)<FourchTps
|
---|
281 | && fabs(delebarre-2*delbar)<8 && valid==1)
|
---|
282 | {
|
---|
283 | tracephase();
|
---|
284 | // membar=.3*barette[i]+.7*membar;
|
---|
285 | nptsfenphs++;
|
---|
286 | if(nptsfenphs==RafraiPhase) {raz_fen_phase();}
|
---|
287 | // printf("periode %8.3f phases tpsdiodes %8.1f sens %d\n",DonnePeriod(),DonnePhase(),DonneSens());
|
---|
288 |
|
---|
289 | }
|
---|
290 | if(DonnePeriod() != -1 && fabs(deltan)<FourchTps && fabs(delbar)<8)
|
---|
291 | {valid=1;delebarre=delbar;deltintin=deltan;}
|
---|
292 |
|
---|
293 | }
|
---|
294 | }
|
---|
295 | nstastat++;
|
---|
296 | if(vudsper!=0)ndsper++;
|
---|
297 | if(nstastat>StatValidePeriode)
|
---|
298 | {
|
---|
299 | tauxper=(float)(ndsper)/(float)(nstastat);
|
---|
300 |
|
---|
301 | // printf("efficacite periode %f\n",tauxper);
|
---|
302 | }
|
---|
303 |
|
---|
304 | if(nstastat==50) {nstastat=0;ndsper=0;}
|
---|
305 | if(DonnePeriod()==-1){
|
---|
306 | raz_fen_phase();
|
---|
307 | if(fenetre(fenetre_Find_Period) && tpsminfen != 10.){
|
---|
308 | selectgra(fenetre_Find_Period);
|
---|
309 | graph->xmin=10.;
|
---|
310 | graph->xmax=40.;
|
---|
311 | graph->xpas=10.;
|
---|
312 | Liminffen=graph->xmin;
|
---|
313 | Limsupfen=graph->xmax;
|
---|
314 | tpsminfen=graph->xmin;
|
---|
315 | tpsmaxfen=graph->xmax;
|
---|
316 | passargu(Liminffen,Limsupfen,Papa);
|
---|
317 | efface(fenetre_Find_Period);
|
---|
318 | retrace(fenetre_Find_Period);
|
---|
319 | nptsfenper=0;
|
---|
320 | }
|
---|
321 |
|
---|
322 | } else
|
---|
323 | {
|
---|
324 | if(flagChPer==1){
|
---|
325 | selectgra(fenetre_Find_Period);
|
---|
326 | graph->xmin=DonnePeriod()-1.;
|
---|
327 | graph->xmax=DonnePeriod()+1.;
|
---|
328 | graph->xpas=1.;
|
---|
329 | Liminffen=graph->xmin;
|
---|
330 | Limsupfen=graph->xmax;
|
---|
331 | tpsminfen=graph->xmin;
|
---|
332 | tpsmaxfen=graph->xmax;
|
---|
333 | passargu(Liminffen,Limsupfen,Papa);
|
---|
334 | efface(fenetre_Find_Period);
|
---|
335 | retrace(fenetre_Find_Period);
|
---|
336 | nptsfenper=0;
|
---|
337 | }
|
---|
338 | }
|
---|
339 | if(fenetre(fenetre_Find_Period))
|
---|
340 | {selectgra(fenetre_Find_Period);ecritD(fenetre_Find_Period,FP_vperesti," %7.3f",DonnePeriod());}
|
---|
341 | if(Liminffen==LowSeek && DonnePeriod() != -1 && fenetre(fenetre_Find_Period))
|
---|
342 | {
|
---|
343 | selectgra(fenetre_Find_Period);
|
---|
344 | graph->xmin=DonnePeriod()-1.;
|
---|
345 | graph->xmax=DonnePeriod()+1.;
|
---|
346 | graph->xpas=1.;
|
---|
347 | Liminffen=graph->xmin;
|
---|
348 | Limsupfen=graph->xmax;
|
---|
349 | tpsminfen=graph->xmin;
|
---|
350 | tpsmaxfen=graph->xmax;
|
---|
351 | passargu(Liminffen,Limsupfen,Papa);
|
---|
352 | efface(fenetre_Find_Period);
|
---|
353 | retrace(fenetre_Find_Period);
|
---|
354 |
|
---|
355 | }
|
---|
356 | }
|
---|
357 |
|
---|
358 | icour=0;
|
---|
359 | pluvieux=maintenant;
|
---|
360 | for(i=nmemechant-1;i>0;i--)
|
---|
361 | {
|
---|
362 | icour++;
|
---|
363 | if(sfluxvu[i-1]==0.) continue;
|
---|
364 | if(instant[i]<pluvieux)pluvieux=instant[i];
|
---|
365 | sfluxvu[i]=sfluxvu[i-1];
|
---|
366 | instant[i]=instant[i-1];
|
---|
367 | barette[i]=barette[i-1];
|
---|
368 | phd0[i]=phd0[i-1];
|
---|
369 | if(DonnePeriod()!=-1){if(maintenant-instant[i]>3.*DonnePeriod())
|
---|
370 | {
|
---|
371 | sfluxvu[i]=0.;
|
---|
372 | instant[i]=0.;
|
---|
373 | barette[i]=0.;
|
---|
374 | phd0[i]=0.;
|
---|
375 | }
|
---|
376 | }
|
---|
377 | }
|
---|
378 | sfluxvu[0]=sflxv;
|
---|
379 | instant[0]=maintenant;
|
---|
380 | barette[0]=laplushaute;
|
---|
381 | phd0[i]=0.;
|
---|
382 | {float peri=DonnePeriod();
|
---|
383 | if (peri>0.)phd0[i]=360./peri*(maintenant-peri*(int)(maintenant/peri));
|
---|
384 | }
|
---|
385 | // bloc recherche de l'axe ->identification des etoiles
|
---|
386 | {float difftps=0.;
|
---|
387 |
|
---|
388 | if(DonnePeriod()>0. && (maintenant - pluvieux)>DonnePeriod())
|
---|
389 | {
|
---|
390 | nlistevue=0;
|
---|
391 | for(i=0;i<nmemechant-1;i++)
|
---|
392 | {
|
---|
393 | if(sfluxvu[i]==0. |maintenant-instant[i]>Period) break;
|
---|
394 | difftps=(instant[i]-instant[i+1])*DPI/Period;
|
---|
395 | nlistevue++;
|
---|
396 | deltap[i]=difftps;
|
---|
397 | rapflx[i]=sfluxvu[i+1]/sfluxvu[i];
|
---|
398 | }
|
---|
399 | //printf("%d etoiles detectees par tour\n",nlistevue);
|
---|
400 | if(fenetre(fenetre_Find_Period))
|
---|
401 | {selectgra(fenetre_Find_Period);ecritD(fenetre_Find_Period,Find_net," %d",nlistevue);}
|
---|
402 | numaccro=1;
|
---|
403 | if(numaccro==0) chercheaccro(flcatmin);
|
---|
404 |
|
---|
405 |
|
---|
406 |
|
---|
407 |
|
---|
408 | }}
|
---|
409 | // fin du bloc recherche de l'axe ->identification des etoiles
|
---|
410 |
|
---|
411 | }
|
---|
412 | }
|
---|
413 | }
|
---|
414 | void chercheaccro(int seuil)
|
---|
415 | {
|
---|
416 | /*
|
---|
417 | #define nstpturn 100
|
---|
418 | struct sstgraph {
|
---|
419 | int netdet; // nombre d'etoiles detectees
|
---|
420 | float raax; // coordonnees equatoriales de l'axe de rotation du telescope
|
---|
421 | float decax;
|
---|
422 | long numcat[nstpturn]; //numero de l'etoile dans le fichier de depart
|
---|
423 | float phase[nstpturn]; //phase de l'etoile (angle/Nord - Est=+90¡ - ds plan perp axe rot ballon)
|
---|
424 | float cosinus[nstpturn]; // de l'angle entre la direction de l'etoile et l'axe de rotation du ballon
|
---|
425 | float fluxcat[nstpturn]; //flux de l'etoile en unites arbitraires
|
---|
426 | int icl[nstpturn]; //ordre de l'etoile pour un classement par phases croissantes
|
---|
427 | };
|
---|
428 | */
|
---|
429 | int i,j;int nstartour;float temps[nstpturn],fluxion[nstpturn];
|
---|
430 | nstartour=0;
|
---|
431 | for(i=0;i<nposaxesimu;i++)
|
---|
432 | {
|
---|
433 | for(j=0;j<listord[i].netdet-1;j++)
|
---|
434 | {
|
---|
435 | deltapcat[j]=listord[i].phase[j+1]-listord[i].phase[j];
|
---|
436 | rapflxcat[j]=listord[i].fluxcat[j+1]/listord[i].fluxcat[j];
|
---|
437 | }
|
---|
438 | }
|
---|
439 |
|
---|
440 |
|
---|
441 | }
|
---|
442 | void trace_point(int fen)
|
---|
443 | {
|
---|
444 | if(fenetre(fen)) symbole(fen, separtps, sflxv, 2, rond, 0, bleu);
|
---|
445 | }
|
---|
446 | void tracephase(void)
|
---|
447 | {
|
---|
448 | float tempsplie,tempsmoy;float peri;float ecartps,ecarz;
|
---|
449 | peri=DonnePeriod();
|
---|
450 | if (peri>0.)
|
---|
451 | {
|
---|
452 | tempsplie=360./peri*(maintenant-peri*(int)(maintenant/peri));
|
---|
453 | if(!flagvuefiltree)
|
---|
454 | {
|
---|
455 | if(fenetre(fenetre_Phase_SST))
|
---|
456 | {symbole(fenetre_Phase_SST,tempsplie,separtps-2.*peri, 10, carre, 0, bleu);
|
---|
457 | symbole(fenetre_Phase_SST,tempsplie,.005*(separenz), 10, croix, 0, rouge);}
|
---|
458 | }
|
---|
459 |
|
---|
460 | {
|
---|
461 | if(ncoups==0)memtemps=((int)(tempsplie)/pasenphase)*pasenphase;
|
---|
462 | if(tempsplie-memtemps<pasenphase && tempsplie>=memtemps)
|
---|
463 | {
|
---|
464 | ncoups++;
|
---|
465 | somtps+=tempsplie;
|
---|
466 | somecartps+=separtps-2.*peri;
|
---|
467 | somecarz+=(separenz)*.005;
|
---|
468 | } else
|
---|
469 | {
|
---|
470 | if(ncoups>0)
|
---|
471 | {
|
---|
472 | tempsmoy=somtps/(float)(ncoups);
|
---|
473 | // printf("temps,ecart : %f %f\n",tempsmoy,somecartps/ncoups);
|
---|
474 | ecartps =somecartps/(float)(ncoups);
|
---|
475 | ecarz = somecarz/(float)(ncoups);
|
---|
476 | charge_calc_phase(tempsmoy,ecartps,ecarz);
|
---|
477 | if(fenetre(fenetre_Phase_SST) && flagvuefiltree)
|
---|
478 | { symbole(fenetre_Phase_SST,tempsmoy,ecartps, 10, carre, 0, bleu);
|
---|
479 | symbole(fenetre_Phase_SST,tempsmoy,ecarz, 10, croix, 0, rouge);
|
---|
480 | }
|
---|
481 | ncoups=0;
|
---|
482 | somtps=0;
|
---|
483 | somecartps=0;
|
---|
484 | somecarz=0;
|
---|
485 | memtemps=((int)(tempsplie)/pasenphase)*pasenphase;
|
---|
486 | {
|
---|
487 | ncoups++;
|
---|
488 | somtps+=tempsplie;
|
---|
489 | somecartps+=separtps-2.*peri;
|
---|
490 | somecarz+=(separenz)*.005;
|
---|
491 | }
|
---|
492 | }
|
---|
493 | }
|
---|
494 |
|
---|
495 | }
|
---|
496 | }}
|
---|
497 | float DonnePeriod(void)
|
---|
498 | {
|
---|
499 | if(tauxper>.4){
|
---|
500 | return Period;}
|
---|
501 | else return -1.;
|
---|
502 | }
|
---|
503 | int CpFl(void)
|
---|
504 | {
|
---|
505 | return (int)(CoupFlux);
|
---|
506 | }
|
---|
507 | void raz_fen_phase()
|
---|
508 | {
|
---|
509 | int i;
|
---|
510 | if (fenetre(fenetre_Phase_SST)){selectgra(fenetre_Phase_SST);
|
---|
511 | efface(fenetre_Phase_SST);}
|
---|
512 | memtemps=-1.;ncoups=0;nptsfenphs=0;phaseret=-9999.;Sens=-9999;
|
---|
513 | CasesVides=ncasphase;for(i=0;i<ncasphase;i++) statcalcphase[i]=0;
|
---|
514 |
|
---|
515 | }
|
---|
516 | void charge_calc_phase(float tempsmoy,float ecartps,float ecarz)
|
---|
517 | {
|
---|
518 | int caserne;
|
---|
519 | caserne=(tempsmoy+pasenphase*.5)/pasenphase;
|
---|
520 | if(caserne==ncasphase)caserne=0;
|
---|
521 | if(caserne < ncasphase && caserne >= 0)
|
---|
522 | {
|
---|
523 | if(statcalcphase[caserne]<5 | (fabs(ecarmoytps[caserne]-ecartps)<.02 &&
|
---|
524 | fabs(ecarmoyz[caserne]-ecarz)<3.))
|
---|
525 | {ecarmoytps[caserne]*=statcalcphase[caserne];
|
---|
526 | ecarmoyz[caserne]*=statcalcphase[caserne];
|
---|
527 | ecarmoytps[caserne]+=ecartps;
|
---|
528 | ecarmoyz[caserne]+=ecarz;
|
---|
529 | statcalcphase[caserne]++;
|
---|
530 | ecarmoytps[caserne]/=statcalcphase[caserne];
|
---|
531 | ecarmoyz[caserne]/=statcalcphase[caserne];
|
---|
532 | CasesVides=calc_phase();
|
---|
533 | }}}
|
---|
534 | void tabulesincos(void)
|
---|
535 | {
|
---|
536 | int i;float pasenrad;
|
---|
537 | pasenrad=pasenphase*.01745329;
|
---|
538 | for(i=0;i<ncasphase;i++)
|
---|
539 | {
|
---|
540 | sini[i]=sin(pasenrad*(i));
|
---|
541 | cosini[i]=cos(pasenrad*(i));
|
---|
542 | }
|
---|
543 | }
|
---|
544 | int calc_phase(void)
|
---|
545 | {
|
---|
546 | int i,vides;float cocoz,sisiz,cocotps,sisitps;
|
---|
547 | float phasez,phasetps;float sensrot;
|
---|
548 | static float phasemem;
|
---|
549 | vides =0;
|
---|
550 | for(i=0;i<ncasphase;i++)
|
---|
551 | {
|
---|
552 | if(statcalcphase[i]==0) vides++;
|
---|
553 | }
|
---|
554 |
|
---|
555 | cocoz=0;
|
---|
556 | sisiz=0;
|
---|
557 | cocotps=0;
|
---|
558 | sisitps=0;
|
---|
559 | for(i=0;i<ncasphase;i++)
|
---|
560 | {
|
---|
561 | if(statcalcphase[i]>0)
|
---|
562 | {
|
---|
563 | cocoz+=cosini[i]*ecarmoyz[i];
|
---|
564 | sisiz+=sini[i]*ecarmoyz[i];
|
---|
565 | cocotps+=cosini[i]*ecarmoytps[i];
|
---|
566 | sisitps+=sini[i]*ecarmoytps[i];
|
---|
567 | }
|
---|
568 | }
|
---|
569 | phasez=-atan2(cocoz,sisiz);
|
---|
570 | phasetps=-atan2(cocotps,sisitps);
|
---|
571 | sensrot=phasez-phasetps;
|
---|
572 | if(sensrot>3.14)sensrot-=6.28;
|
---|
573 | if(sensrot<-3.14)sensrot+=6.28;
|
---|
574 | if(sensrot>0.) Sens =1;
|
---|
575 | if(sensrot<=0.) Sens =-1;
|
---|
576 | //arbitraire, ajuste sur la simulation
|
---|
577 | Phase=phasez*57.29577;
|
---|
578 | phaseret=-9999.;
|
---|
579 | if(CasesVides<3 && fabs(Phase-phasemem)<10.){ phaseret=Phase;}
|
---|
580 | if(CasesVides<4) phasemem=Phase;
|
---|
581 | //printf("phases : numdiodes %f, tpsdiodes %f sens %d\n",phasez,phasetps,Sens);
|
---|
582 | return vides;}
|
---|
583 | float DonnePhase(void)
|
---|
584 | {
|
---|
585 | return phaseret;
|
---|
586 | }
|
---|
587 | int DonneSens(void)
|
---|
588 | {
|
---|
589 | if(CasesVides<3){return Sens;}else {return -9999;}
|
---|
590 | } |
---|