[3308] | 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 | */
|
---|