| [649] | 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 | } | 
|---|