| [3308] | 1 |  | 
|---|
|  | 2 | #include <stdlib.h> | 
|---|
|  | 3 | #include <stdio.h> | 
|---|
|  | 4 | #include <ctype.h> | 
|---|
|  | 5 | #include <math.h> | 
|---|
|  | 6 | #include <iostream> | 
|---|
|  | 7 | #include <typeinfo> | 
|---|
|  | 8 |  | 
|---|
|  | 9 | #include "machdefs.h" | 
|---|
|  | 10 |  | 
|---|
|  | 11 | #include "fmath.h" | 
|---|
|  | 12 |  | 
|---|
|  | 13 | #include "fsvcache.h" | 
|---|
|  | 14 | #include "timing.h" | 
|---|
|  | 15 |  | 
|---|
|  | 16 | #include "fsvst.h" | 
|---|
|  | 17 |  | 
|---|
|  | 18 | #include "pexceptions.h"  // SOPHYA Exceptions | 
|---|
|  | 19 |  | 
|---|
|  | 20 | #include "histats.h"  // SOPHYA HiStats module include files | 
|---|
|  | 21 | #include "sopnamsp.h"  // using SOPHYA namespace | 
|---|
|  | 22 |  | 
|---|
|  | 23 | #include "machdefs.h" | 
|---|
|  | 24 |  | 
|---|
|  | 25 | #include "tvector.h" | 
|---|
|  | 26 | #include "srandgen.h" | 
|---|
|  | 27 | #include "fioarr.h" | 
|---|
|  | 28 | #include "sopemtx.h" | 
|---|
|  | 29 | #include "pexceptions.h" | 
|---|
|  | 30 | #include "matharr.h" | 
|---|
|  | 31 |  | 
|---|
|  | 32 | #include "sambainit.h" | 
|---|
|  | 33 |  | 
|---|
|  | 34 | #include "lcproc.h"  // declaration of LightCurveProc class | 
|---|
|  | 35 |  | 
|---|
|  | 36 |  | 
|---|
|  | 37 | DataTable  dtclum(int numet, int nmes, TIMEINFO *tminf, MESUREU *mesu); | 
|---|
|  | 38 | DataTable dttimeinfo(int nmes, TIMEINFO *tminf); | 
|---|
|  | 39 | DataTable createdtmes(int nmes); | 
|---|
|  | 40 | void dtmes(DataTable& dtmes, int nmes, STARINFO *sti, MESUREU *mesu); | 
|---|
|  | 41 |  | 
|---|
|  | 42 |  | 
|---|
|  | 43 | struct resolution | 
|---|
|  | 44 | { | 
|---|
|  | 45 | int nbin; | 
|---|
|  | 46 | float xmin, xmax, dxbin; | 
|---|
|  | 47 | int *nst, *nstr; | 
|---|
|  | 48 | float *fmoy, *fmoyr; | 
|---|
|  | 49 | float *dflx, *sflx, *dflxe, *sflxe; | 
|---|
|  | 50 | }; | 
|---|
|  | 51 |  | 
|---|
|  | 52 | typedef struct resolution  SRESOL; | 
|---|
|  | 53 |  | 
|---|
|  | 54 |  | 
|---|
|  | 55 | SRESOL *resolinit(int nmes, int nbin, float xmin, float xmax); | 
|---|
|  | 56 | int resolst(SRESOL *sres, int nmes, STARINFO *sti, MESUREU *mesu); | 
|---|
|  | 57 | int resolend(SRESOL *sres, int nmes); | 
|---|
|  | 58 |  | 
|---|
|  | 59 |  | 
|---|
|  | 60 |  | 
|---|
|  | 61 |  | 
|---|
|  | 62 | /* ------------------------------------------------------------------- */ | 
|---|
|  | 63 |  | 
|---|
|  | 64 |  | 
|---|
|  | 65 |  | 
|---|
| [3572] | 66 | const char *Pgnm = "hanafsv"; | 
|---|
| [3308] | 67 |  | 
|---|
|  | 68 | int main(int narg, char *arg[] ) | 
|---|
|  | 69 | { | 
|---|
|  | 70 | char strg[128],*svf; | 
|---|
|  | 71 | SUIVIFIP *sfip; | 
|---|
|  | 72 | int numes1,numes2; | 
|---|
|  | 73 | int numet1, numet2, incn; | 
|---|
|  | 74 | float xmin, xmax; | 
|---|
|  | 75 | float ymin, ymax; | 
|---|
|  | 76 |  | 
|---|
|  | 77 | int i,k,jt,rc,dnp,fgq; | 
|---|
|  | 78 | int  nbstar,nbmes; | 
|---|
|  | 79 | int nstar, nmes; | 
|---|
|  | 80 |  | 
|---|
|  | 81 | int prtl,prfg,clfg,ntfg; | 
|---|
|  | 82 |  | 
|---|
|  | 83 | int nbin; | 
|---|
|  | 84 | float minlog,maxlog; | 
|---|
|  | 85 |  | 
|---|
|  | 86 |  | 
|---|
|  | 87 | GLOBINFO glinf; | 
|---|
|  | 88 | STARINFO  star; | 
|---|
|  | 89 | TIMEINFO *tminf, *tmi; | 
|---|
|  | 90 |  | 
|---|
|  | 91 | TIMEINFOU *tminu; | 
|---|
|  | 92 | MESURE *mes; | 
|---|
|  | 93 | MESUREU *mesu; | 
|---|
|  | 94 |  | 
|---|
|  | 95 | double *TStart; | 
|---|
|  | 96 |  | 
|---|
|  | 97 | SRESOL *sres; | 
|---|
|  | 98 |  | 
|---|
|  | 99 | /* ...................................................  */ | 
|---|
|  | 100 |  | 
|---|
|  | 101 | InitTim(); | 
|---|
|  | 102 |  | 
|---|
|  | 103 | if (narg > 1) | 
|---|
|  | 104 | if (strcmp(arg[1],"-h") == 0) | 
|---|
|  | 105 | { | 
|---|
|  | 106 | printf("Usage: %s [-Flag] NomSuivi\n",Pgnm); | 
|---|
|  | 107 | puts  ("  -inq : Marque une pause apres lecture TimeInfo "); | 
|---|
|  | 108 | puts  ("  -act prfg,clfg,ntfg : Flags de controle "); | 
|---|
|  | 109 | puts  ("  -prt prtl : Niveau d'impression (0->3)"); | 
|---|
|  | 110 | puts  ("  -his nbin,MinLog,MaxLog : Binning histo resolution"); | 
|---|
|  | 111 | puts  ("  -mes m1-m2 : Traitement des mesures m1 a m2 "); | 
|---|
|  | 112 | puts  ("  -numet n1-n2,incn : Traitement des etoiles n1 a n2 (C1)"); | 
|---|
|  | 113 | puts  ("  -xpos min-max : Coupure min <= XPosEtoile <= max (C2)"); | 
|---|
|  | 114 | puts  ("  -ypos min-max : Coupure min <= YPosEtoile <= max (C3)"); | 
|---|
|  | 115 | puts  ("  On fait C1 & C2 & C3, Valeur par defaut = Tout"); | 
|---|
|  | 116 | puts  ("  prfg (PrintFlag) : 0 , 1= Glob+TimeInfo"); | 
|---|
|  | 117 | puts  ("     2= +StarInfo, 3= +MesuresU (=default), 4= +Mesures"); | 
|---|
|  | 118 | puts  ("  clfg (Flag Courbe de lumiere) : 0(=defaut),1"); | 
|---|
|  | 119 | puts  ("  ntfg (Bits Flag Ntuple): B0(=defaut) TimeInfo, B1 Resol, B2 Mesures\n"); | 
|---|
|  | 120 | return(0); | 
|---|
|  | 121 | } | 
|---|
|  | 122 |  | 
|---|
|  | 123 | /*    Decodage des arguments   */ | 
|---|
|  | 124 | numes1 = 1;  numes2 = 9999999; | 
|---|
|  | 125 | numet1 = 1;  numet2 = 9999999;  incn = 1; | 
|---|
|  | 126 | xmin = -9.e19;  xmax = 9.e19; | 
|---|
|  | 127 | ymin = -9.e19;  ymax = 9.e19; | 
|---|
|  | 128 | prtl = 0;  prfg = 3; | 
|---|
|  | 129 | clfg = 0;  ntfg = 1; | 
|---|
|  | 130 | nbin = 30; | 
|---|
|  | 131 | minlog = 2.0;  maxlog = 5.0; | 
|---|
|  | 132 | fgq = 0;   /* On continue jusqu'au bout par defaut */ | 
|---|
|  | 133 |  | 
|---|
|  | 134 | if (narg < 2) goto PbArg; | 
|---|
|  | 135 | k = 1; | 
|---|
|  | 136 | while (*(arg[k]) == '-') | 
|---|
|  | 137 | { | 
|---|
|  | 138 | if ( strcmp(arg[k],"-inq") == 0)  fgq = 1; | 
|---|
|  | 139 | else if ( strcmp(arg[k],"-mes") == 0) | 
|---|
|  | 140 | { if (k == narg-1)  goto PbArg; | 
|---|
|  | 141 | sscanf(arg[k+1],"%d-%d",&numes1,&numes2);   k++; } | 
|---|
|  | 142 | else if ( strcmp(arg[k],"-numet") == 0) | 
|---|
|  | 143 | { if (k == narg-1)  goto PbArg; | 
|---|
|  | 144 | sscanf(arg[k+1],"%d-%d,%d",&numet1,&numet2,&incn);   k++; } | 
|---|
|  | 145 | else if ( strcmp(arg[k],"-xpos") == 0) | 
|---|
|  | 146 | { if (k == narg-1)  goto PbArg; | 
|---|
|  | 147 | sscanf(arg[k+1],"%g-%g",&xmin,&xmax);   k++; } | 
|---|
|  | 148 | else if ( strcmp(arg[k],"-ypos") == 0) | 
|---|
|  | 149 | { if (k == narg-1)  goto PbArg; | 
|---|
|  | 150 | sscanf(arg[k+1],"%g-%g",&ymin,&ymax);   k++; } | 
|---|
|  | 151 | else if ( strcmp(arg[k],"-prt") == 0) | 
|---|
|  | 152 | { if (k == narg-1)  goto PbArg; | 
|---|
|  | 153 | sscanf(arg[k+1],"%d",&prtl);   k++; } | 
|---|
|  | 154 | else if ( strcmp(arg[k],"-act") == 0) | 
|---|
|  | 155 | { if (k == narg-1)  goto PbArg; | 
|---|
|  | 156 | sscanf(arg[k+1],"%d,%d,%d",&prfg,&clfg,&ntfg);   k++; } | 
|---|
|  | 157 | else if ( strcmp(arg[k],"-his") == 0) | 
|---|
|  | 158 | { if (k == narg-1)  goto PbArg; | 
|---|
|  | 159 | sscanf(arg[k+1],"%d,%g,%g",&nbin,&minlog,&maxlog);   k++; } | 
|---|
|  | 160 |  | 
|---|
|  | 161 | if (++k >= narg)  break; | 
|---|
|  | 162 | } | 
|---|
|  | 163 |  | 
|---|
|  | 164 | if (k < narg)  goto Suite; | 
|---|
|  | 165 | PbArg: | 
|---|
|  | 166 | printf("%s_Erreur : Pb. arguments ( %s -h pour aide) \n", Pgnm, Pgnm); | 
|---|
|  | 167 | return(1); | 
|---|
|  | 168 |  | 
|---|
|  | 169 | Suite: | 
|---|
|  | 170 | svf = arg[k]; | 
|---|
|  | 171 |  | 
|---|
|  | 172 | cout << " hanafsv: Args decoded, starting suivi processing ..." << endl; | 
|---|
|  | 173 | SophyaInit(); | 
|---|
|  | 174 | sfip = NULL;  rc = 0; | 
|---|
|  | 175 | try { | 
|---|
|  | 176 |  | 
|---|
|  | 177 | POutPersist po("LCInfo.ppf"); | 
|---|
|  | 178 | POutPersist po2("TimInfo.ppf"); | 
|---|
|  | 179 | POutPersist po3("Mesu.ppf"); | 
|---|
|  | 180 |  | 
|---|
|  | 181 | if ( (sfip = SuiviOpen(svf,SUOF_RO_MEM2)) == NULL )   return(5); | 
|---|
|  | 182 |  | 
|---|
|  | 183 | nbstar = SuiviGetNbStars(sfip); | 
|---|
|  | 184 | nbmes = SuiviGetNbMesures(sfip); | 
|---|
|  | 185 |  | 
|---|
|  | 186 | if (numes1 < 1)  numes1 = 1; | 
|---|
|  | 187 | if (numes2 < 1)  numes2 = 1; | 
|---|
|  | 188 | if (numes2 > nbmes)  numes2 = nbmes; | 
|---|
|  | 189 | if (numes2 < numes1) numes1 = numes2; | 
|---|
|  | 190 | nmes = numes2-numes1+1; | 
|---|
|  | 191 | if (numet1 < 1)  numet1 = 1; | 
|---|
|  | 192 | if (numet2 < 1)  numet2 = 1; | 
|---|
|  | 193 | if (numet2 > nbstar)  numet2 = nbstar; | 
|---|
|  | 194 | if (numet2 < numet1) numet1 = numet2; | 
|---|
|  | 195 | nstar = numet2 - numet1 +1; | 
|---|
|  | 196 |  | 
|---|
|  | 197 | //--> new  tminf = (TIMEINFO *)malloc(nmes*sizeof(TIMEINFO)); | 
|---|
|  | 198 | tminf = new TIMEINFO[nmes]; | 
|---|
|  | 199 | //--> new  tminu = (TIMEINFOU *)malloc(nmes*sizeof(TIMEINFOU)); | 
|---|
|  | 200 | tminu = new TIMEINFOU[nmes]; | 
|---|
|  | 201 | //  mes = (MESURE *)malloc(nmes*sizeof(MESURE)); | 
|---|
|  | 202 | mes = new MESURE[nmes]; | 
|---|
|  | 203 | //--> new  mesu = (MESUREU *)malloc(nmes*sizeof(MESUREU)); | 
|---|
|  | 204 | mesu = new MESUREU[nmes]; | 
|---|
|  | 205 | //-> new TStart = (double *) malloc(nmes*sizeof(double)); | 
|---|
|  | 206 | TStart = new double[nmes]; | 
|---|
|  | 207 | if ( (tminf == NULL) || (tminu == NULL) || (mes == NULL) || | 
|---|
|  | 208 | (mesu == NULL) || (TStart == NULL)) | 
|---|
|  | 209 | { puts("hanafsv_Erreur : Pb allocation");  return(7); } | 
|---|
|  | 210 |  | 
|---|
|  | 211 | DataTable dtm = createdtmes(nmes); | 
|---|
|  | 212 |  | 
|---|
|  | 213 | LightCurveProc mylcp("lcproc.ppf");  // mylcp("lcproc.ppf", 512); | 
|---|
|  | 214 |  | 
|---|
|  | 215 | printf("\n ====> hanafsv : Lecture du fichier de suivi %s \n", svf); | 
|---|
|  | 216 | printf("  %d <= NumMes <= %d   %d <= NumEt <= %d (mod %d)\n", | 
|---|
|  | 217 | numes1, numes2, numet1, numet2, incn); | 
|---|
|  | 218 | printf("  %g <= XPosRef <= %g  ET  %g <= YPosRef <= %g \n\n", | 
|---|
|  | 219 | xmin,xmax,ymin,ymax); | 
|---|
|  | 220 | printf("PrtFg= %d (Level=%d)  ClFg= %d  NtFg= %d   Nbin,Min,MaxLog= %d %g %g \n", | 
|---|
|  | 221 | prfg, prtl, clfg, ntfg, nbin, minlog, maxlog); | 
|---|
|  | 222 |  | 
|---|
|  | 223 |  | 
|---|
|  | 224 |  | 
|---|
|  | 225 | sres = NULL; | 
|---|
|  | 226 | sres =  resolinit(nmes, nbin, minlog, maxlog); | 
|---|
|  | 227 | if (sres == NULL)  { puts("hanafsv_Erreur : Pb resolinit !"); goto Fin; } | 
|---|
|  | 228 |  | 
|---|
|  | 229 |  | 
|---|
|  | 230 | /*  Lecture GlobInfo   */ | 
|---|
|  | 231 | SuiviReadGlobInfo(sfip, (char *)(&glinf)); | 
|---|
|  | 232 | if (prfg > 0)  PrtGlobInfo(&glinf, prtl); | 
|---|
|  | 233 |  | 
|---|
|  | 234 | /*  Boucle lecture mesure */ | 
|---|
|  | 235 | for(jt=0; jt<nmes; jt++) | 
|---|
|  | 236 | { | 
|---|
|  | 237 | tmi = tminf+jt; | 
|---|
|  | 238 | rc = SuiviReadTimeInfo(sfip,jt+numes1,jt+numes1,(char *)tmi); | 
|---|
|  | 239 | if (rc != 0) | 
|---|
|  | 240 | { printf("hanafsv_Erreur: Pb SuiviReadTimeInfo( , %d, ...) \n", jt+numes1); | 
|---|
|  | 241 | return(10); } | 
|---|
|  | 242 | DecodeTim(tminf+jt, tminu+jt); | 
|---|
|  | 243 | TStart[jt] = (double)tmi->TStart / (double)86400; | 
|---|
|  | 244 | if (prfg > 0)  PrtTimeInfo(tmi, jt+numes1, prtl); | 
|---|
|  | 245 | if ((tminu+jt)->FgCalib < 1) | 
|---|
|  | 246 | { | 
|---|
|  | 247 | (mesu+jt)->Xi2 = -1.; | 
|---|
|  | 248 | (mesu+jt)->Flux = (mesu+jt)->FluxB = 0.; | 
|---|
|  | 249 | (mesu+jt)->ErrFlux = (mesu+jt)->ErrFluxB = 99999.0; | 
|---|
|  | 250 | } | 
|---|
|  | 251 | } // fin de boucle for(jt) - boucle de lecture des TimeInfo | 
|---|
|  | 252 |  | 
|---|
|  | 253 | mylcp.TimeInfo(nmes, tminf); | 
|---|
|  | 254 |  | 
|---|
|  | 255 | if (ntfg&1)  { | 
|---|
|  | 256 | DataTable TimInf =  dttimeinfo(nmes, tminf); | 
|---|
|  | 257 | cout << " Writing TimInf to po2 (TimInfo.ppf) ... " << endl; | 
|---|
|  | 258 | po2 << PPFNameTag("dttimeinfo") << TimInf ; | 
|---|
|  | 259 | } | 
|---|
|  | 260 |  | 
|---|
|  | 261 |  | 
|---|
|  | 262 | if (fgq) { | 
|---|
|  | 263 | puts("\n\n  =====> <CR> pour continuer, <q><CR> pour stop ..."); | 
|---|
|  | 264 | gets(strg); | 
|---|
|  | 265 | if (toupper(strg[0]) == 'Q')  return(0); | 
|---|
|  | 266 | } | 
|---|
|  | 267 |  | 
|---|
|  | 268 | dnp = numet2-numet1; | 
|---|
|  | 269 | if (dnp > 20)  dnp /= 10; | 
|---|
|  | 270 | else dnp = 1; | 
|---|
|  | 271 |  | 
|---|
|  | 272 | for (i=numet1; i<=numet2; i+=incn )  /*  Loop over stars in suivi file */ | 
|---|
|  | 273 | { | 
|---|
|  | 274 |  | 
|---|
|  | 275 | if (((i-numet1)%dnp) == 0) | 
|---|
|  | 276 | { sprintf(strg,"LectureStar[%d] ",i);  PrtTim(strg); } | 
|---|
|  | 277 |  | 
|---|
|  | 278 | rc = SuiviReadStarInfo(sfip,i,(char *)(&star)); | 
|---|
|  | 279 |  | 
|---|
|  | 280 | if (rc != 0)  return(10); | 
|---|
|  | 281 |  | 
|---|
|  | 282 | if ( (star.XPos < xmin) || (star.XPos > xmax) || | 
|---|
|  | 283 | (star.YPos < ymin) || (star.YPos > ymax) )   continue; | 
|---|
|  | 284 |  | 
|---|
|  | 285 | if (prfg > 1) | 
|---|
|  | 286 | { | 
|---|
|  | 287 | printf(" --------- StarInfo/Mesures Etoile [%d] ----------\n",i); | 
|---|
|  | 288 | PrtStarInfo(&star, i, prtl); | 
|---|
|  | 289 | } | 
|---|
|  | 290 | if (star.NumEt <  0)  continue; | 
|---|
|  | 291 | if (star.FgRef == 0)  continue; | 
|---|
|  | 292 |  | 
|---|
|  | 293 |  | 
|---|
|  | 294 | for (jt=0; jt<nmes; jt++) | 
|---|
|  | 295 | { | 
|---|
|  | 296 | rc = SuiviReadMesures(sfip,i,jt+numes1,jt+numes1, | 
|---|
|  | 297 | (char *)(mes+jt)); | 
|---|
|  | 298 | if (rc != 0) | 
|---|
|  | 299 | { | 
|---|
|  | 300 | printf("Erreur: Star[%d] Pb lecture Mesure[%d]  (Rc=%d) \n", | 
|---|
|  | 301 | i+1,jt+1,rc); | 
|---|
|  | 302 | return(15); | 
|---|
|  | 303 | } | 
|---|
|  | 304 | if ((tminu+jt)->FgCalib > 0) | 
|---|
|  | 305 | { | 
|---|
|  | 306 | DecodeMes(mes+jt, mesu+jt); | 
|---|
|  | 307 | Calibre_F_E(mesu+jt, tminu+jt); | 
|---|
|  | 308 | if (prfg > 3)  PrtMesure(mes+jt, jt+numes1, prtl); | 
|---|
|  | 309 | if (prfg > 2)  PrtMesureU(mesu+jt, jt+numes1, prtl); | 
|---|
|  | 310 | } | 
|---|
|  | 311 | else if (prfg > 2) | 
|---|
|  | 312 | PrtMesure(mes+jt, jt+numes1, prtl); | 
|---|
|  | 313 |  | 
|---|
|  | 314 | }     /*  Fin de boucle sur les mesures   */ | 
|---|
|  | 315 |  | 
|---|
|  | 316 |  | 
|---|
|  | 317 | // a star with all its measured fluxes is ready here to be processed | 
|---|
|  | 318 | // We process our light-curve | 
|---|
|  | 319 | mylcp.ProcessLC(i, nmes, &star, tminf, mesu); | 
|---|
|  | 320 |  | 
|---|
|  | 321 | if (clfg > 0){ | 
|---|
|  | 322 | DataTable LiCu = dtclum(i, nmes, tminf, mesu); | 
|---|
|  | 323 | char tagbuf[32]; | 
|---|
|  | 324 | sprintf(tagbuf,"cl%d",i); | 
|---|
|  | 325 | po << PPFNameTag(tagbuf) << LiCu ; | 
|---|
|  | 326 | } | 
|---|
|  | 327 |  | 
|---|
|  | 328 | if (ntfg&2) | 
|---|
|  | 329 | resolst(sres, nmes, &star, mesu); | 
|---|
|  | 330 |  | 
|---|
|  | 331 | if (ntfg&4)  { | 
|---|
|  | 332 | dtmes(dtm, nmes, &star, mesu); | 
|---|
|  | 333 | } | 
|---|
|  | 334 |  | 
|---|
|  | 335 |  | 
|---|
|  | 336 | }   /*  Fin de boucle sur les etoiles  */ | 
|---|
|  | 337 |  | 
|---|
|  | 338 | Fin: | 
|---|
|  | 339 |  | 
|---|
|  | 340 | cout << " Writing dtmes to file po3 Mesu.ppf  , dtm: \n" << dtm << endl; | 
|---|
|  | 341 | po3 << PPFNameTag("dtmes") << dtm ; | 
|---|
|  | 342 | SuiviClose(sfip); | 
|---|
|  | 343 |  | 
|---|
|  | 344 | cout << "---- End Of Loop over stars, LightCurveProc.getDTS() : \n" << mylcp.getDTS() << endl; | 
|---|
|  | 345 |  | 
|---|
|  | 346 | if ((ntfg&2) && (sres != NULL)) | 
|---|
|  | 347 | resolend(sres,nmes); | 
|---|
|  | 348 | rc = 0; | 
|---|
|  | 349 | } | 
|---|
|  | 350 | catch (PThrowable & pex) { | 
|---|
|  | 351 | cerr << " hanafsv/Error - Exception catched " << (string)typeid(pex).name() | 
|---|
|  | 352 | << " - Msg= " << pex.Msg() << endl; | 
|---|
|  | 353 | rc = 98; | 
|---|
|  | 354 | } | 
|---|
|  | 355 | catch ( ... ) | 
|---|
|  | 356 | { | 
|---|
|  | 357 | cerr << " hanafsv/Error - Exception ... catched " << endl; | 
|---|
|  | 358 | rc = 99; | 
|---|
|  | 359 | } | 
|---|
|  | 360 |  | 
|---|
|  | 361 |  | 
|---|
|  | 362 |  | 
|---|
|  | 363 | return(rc); | 
|---|
|  | 364 | } | 
|---|
|  | 365 |  | 
|---|
|  | 366 |  | 
|---|
|  | 367 |  | 
|---|
|  | 368 |  | 
|---|
|  | 369 | ///////////////////////// DataTabale dtclum /////////////////////////// | 
|---|
|  | 370 | DataTable  dtclum(int numet, int nmes, TIMEINFO *tminf, MESUREU *mesu) | 
|---|
|  | 371 | { | 
|---|
|  | 372 | int idc,jt; | 
|---|
|  | 373 |  | 
|---|
|  | 374 | DataTable dt(100); | 
|---|
|  | 375 | dt.AddFloatColumn("TStart"); | 
|---|
|  | 376 | dt.AddFloatColumn("Flux"); | 
|---|
|  | 377 | dt.AddFloatColumn("Xi2"); | 
|---|
|  | 378 | dt.AddFloatColumn("Fond"); | 
|---|
|  | 379 | dt.AddFloatColumn("ErrFlux"); | 
|---|
|  | 380 | dt.AddFloatColumn("SigX"); | 
|---|
|  | 381 | dt.AddFloatColumn("SugY"); | 
|---|
|  | 382 | dt.AddFloatColumn("Rho"); | 
|---|
|  | 383 | dt.AddFloatColumn("DelX"); | 
|---|
|  | 384 | dt.AddFloatColumn("DelY"); | 
|---|
|  | 385 | dt.AddFloatColumn("X"); | 
|---|
|  | 386 | dt.AddFloatColumn("Y"); | 
|---|
|  | 387 |  | 
|---|
|  | 388 | double xnt[15]; | 
|---|
|  | 389 |  | 
|---|
|  | 390 | idc = numet; | 
|---|
|  | 391 |  | 
|---|
|  | 392 | for(jt=0; jt<nmes; jt++) | 
|---|
|  | 393 | { | 
|---|
|  | 394 | xnt[0] = tminf[jt].TStart/86400.; | 
|---|
|  | 395 | xnt[1] = (double) mesu[jt].Flux; | 
|---|
|  | 396 | xnt[2] = (double) mesu[jt].Xi2; | 
|---|
|  | 397 | xnt[3] = (double) mesu[jt].Fond; | 
|---|
|  | 398 | xnt[4] = (double) mesu[jt].ErrFlux; | 
|---|
|  | 399 | xnt[5] = (double) tminf[jt].SigX; | 
|---|
|  | 400 | xnt[6] = (double) tminf[jt].SigY; | 
|---|
|  | 401 | xnt[7] = (double) tminf[jt].Rho; | 
|---|
|  | 402 | xnt[8] = (double) tminf[jt].DelX; | 
|---|
|  | 403 | xnt[9] = (double) tminf[jt].DelY; | 
|---|
|  | 404 | xnt[10] = (double) mesu[jt].X ; | 
|---|
|  | 405 | xnt[11] = (double) mesu[jt].Y ; | 
|---|
|  | 406 | dt.AddRow(xnt); | 
|---|
|  | 407 | } | 
|---|
|  | 408 |  | 
|---|
|  | 409 | return(dt); | 
|---|
|  | 410 | } | 
|---|
|  | 411 |  | 
|---|
|  | 412 |  | 
|---|
|  | 413 |  | 
|---|
|  | 414 | //////////////////// DataTable dttimeinfo ////////////////////////// | 
|---|
|  | 415 | DataTable dttimeinfo(int nmes, TIMEINFO *tminf) | 
|---|
|  | 416 | { | 
|---|
|  | 417 | int idn,jt,i; | 
|---|
|  | 418 |  | 
|---|
|  | 419 | DataTable dt(10000); | 
|---|
|  | 420 | dt.AddFloatColumn("NumPhoto"); | 
|---|
|  | 421 | dt.AddFloatColumn("TStart"); | 
|---|
|  | 422 | dt.AddFloatColumn("Expose"); | 
|---|
|  | 423 | dt.AddFloatColumn("Nb0kGF"); | 
|---|
|  | 424 | dt.AddFloatColumn("Nb0kPS"); | 
|---|
|  | 425 | dt.AddFloatColumn("Fond"); | 
|---|
|  | 426 | dt.AddFloatColumn("SigFond"); | 
|---|
|  | 427 | dt.AddFloatColumn("SigX"); | 
|---|
|  | 428 | dt.AddFloatColumn("SigY"); | 
|---|
|  | 429 | dt.AddFloatColumn("Rho"); | 
|---|
|  | 430 | dt.AddFloatColumn("SgX"); | 
|---|
|  | 431 | dt.AddFloatColumn("SgY"); | 
|---|
|  | 432 | dt.AddFloatColumn("DelX"); | 
|---|
|  | 433 | dt.AddFloatColumn("DelY"); | 
|---|
|  | 434 | dt.AddFloatColumn("Absorption"); | 
|---|
|  | 435 | dt.AddFloatColumn("Airmass"); | 
|---|
|  | 436 | dt.AddFloatColumn("FgCalib"); | 
|---|
|  | 437 |  | 
|---|
|  | 438 | for(i=0; i<6; i++){ | 
|---|
|  | 439 | char calname[32]; | 
|---|
|  | 440 | sprintf(calname,"Calib%d",i); | 
|---|
|  | 441 | dt.AddFloatColumn(calname); | 
|---|
|  | 442 | } | 
|---|
|  | 443 |  | 
|---|
|  | 444 | for(i=0; i<6; i++) | 
|---|
|  | 445 | for(int j =0; j<3;j++){ | 
|---|
|  | 446 | char name[32]; | 
|---|
|  | 447 | sprintf(name,"Resol%d%d",j,i); | 
|---|
|  | 448 | dt.AddFloatColumn(name); | 
|---|
|  | 449 | } | 
|---|
|  | 450 |  | 
|---|
|  | 451 |  | 
|---|
|  | 452 | double xnt[48]; | 
|---|
|  | 453 |  | 
|---|
|  | 454 | idn = 300; | 
|---|
|  | 455 | for(i=0; i<36; i++)  xnt[i] = 0.; | 
|---|
|  | 456 |  | 
|---|
|  | 457 | for(jt=0; jt<nmes; jt++) | 
|---|
|  | 458 | { | 
|---|
|  | 459 | xnt[0] = tminf[jt].NumPhoto; | 
|---|
|  | 460 | xnt[1] = tminf[jt].TStart/86400.; | 
|---|
|  | 461 | xnt[2] = tminf[jt].Expose; | 
|---|
|  | 462 | xnt[3] = tminf[jt].NbOkGF; | 
|---|
|  | 463 | xnt[4] = tminf[jt].NbOkPS; | 
|---|
|  | 464 | xnt[5] = tminf[jt].Fond; | 
|---|
|  | 465 | xnt[6] = tminf[jt].SigFond; | 
|---|
|  | 466 |  | 
|---|
|  | 467 | xnt[7] = tminf[jt].SigX; | 
|---|
|  | 468 | xnt[8] = tminf[jt].SigY; | 
|---|
|  | 469 | xnt[9] = tminf[jt].Rho; | 
|---|
|  | 470 | xnt[10] = tminf[jt].SgX; | 
|---|
|  | 471 | xnt[11] = tminf[jt].SgY; | 
|---|
|  | 472 | xnt[12] = tminf[jt].DelX; | 
|---|
|  | 473 | xnt[13] = tminf[jt].DelY; | 
|---|
|  | 474 | xnt[14] = tminf[jt].Absorption; | 
|---|
|  | 475 | xnt[15] = tminf[jt].AirMass; | 
|---|
|  | 476 |  | 
|---|
|  | 477 | xnt[16] = tminf[jt].FgCalib; | 
|---|
|  | 478 | for(i=0; i<6; i++) | 
|---|
|  | 479 | { | 
|---|
|  | 480 | xnt[17+i] = tminf[jt].Calib[i]; | 
|---|
|  | 481 | xnt[23+i*3] = tminf[jt].Resol[0][i]; | 
|---|
|  | 482 | xnt[24+i*3] = tminf[jt].Resol[1][i]; | 
|---|
|  | 483 | xnt[25+i*3] = tminf[jt].Resol[2][i]; | 
|---|
|  | 484 | } | 
|---|
|  | 485 | dt.AddRow(xnt); | 
|---|
|  | 486 | } | 
|---|
|  | 487 |  | 
|---|
|  | 488 | return(dt); | 
|---|
|  | 489 | } | 
|---|
|  | 490 |  | 
|---|
|  | 491 |  | 
|---|
|  | 492 |  | 
|---|
|  | 493 | ////////////////// DataTable creatdtmes //////////////////////// | 
|---|
|  | 494 | DataTable createdtmes(int nmes) | 
|---|
|  | 495 |  | 
|---|
|  | 496 | { | 
|---|
|  | 497 |  | 
|---|
|  | 498 | DataTable dt(100); | 
|---|
|  | 499 | dt.AddFloatColumn("NumEt"); | 
|---|
|  | 500 | dt.AddFloatColumn("FluxRef"); | 
|---|
|  | 501 | dt.AddFloatColumn("XPos"); | 
|---|
|  | 502 | dt.AddFloatColumn("YPos"); | 
|---|
|  | 503 | dt.AddFloatColumn("FgRef"); | 
|---|
|  | 504 | dt.AddFloatColumn("NbVois"); | 
|---|
|  | 505 | dt.AddFloatColumn("DisMin"); | 
|---|
|  | 506 | dt.AddFloatColumn("DisM2"); | 
|---|
|  | 507 |  | 
|---|
|  | 508 | if (nmes > 10) nmes = 10; | 
|---|
|  | 509 |  | 
|---|
|  | 510 | char nflux[32]; char nerrflux[32]; char nfluxb[32]; char nerrfluxb[32]; | 
|---|
|  | 511 | char nfond[32]; char nxi2[32]; char nx[32]; char ny[32]; char nsigx[32]; | 
|---|
|  | 512 | char nsigy[32]; char nflx[32]; char nfnd[32]; char nxi[32]; | 
|---|
|  | 513 |  | 
|---|
|  | 514 | for (int k=0; k<nmes; k++) { | 
|---|
|  | 515 | sprintf(nflux,"Flux%d",k); sprintf(nerrflux,"ErrFlux%d",k); | 
|---|
|  | 516 | sprintf(nfluxb,"FluxB%d",k); sprintf(nerrfluxb,"ErrFluxB%d",k); | 
|---|
|  | 517 | sprintf(nfond,"Fond%d",k); sprintf(nxi2,"Xi2%d",k); sprintf(nx,"X%d",k); | 
|---|
|  | 518 | sprintf(ny,"Y%d",k); sprintf(nsigx,"SigX%d",k); sprintf(nsigy,"SigY%d",k); | 
|---|
|  | 519 | sprintf(nflx,"Flx%d",k); sprintf(nfnd,"Fnd%d",k); sprintf(nxi,"Xi%d",k); | 
|---|
|  | 520 |  | 
|---|
|  | 521 | dt.AddFloatColumn(nflux); | 
|---|
|  | 522 | dt.AddFloatColumn(nerrflux); | 
|---|
|  | 523 | dt.AddFloatColumn(nfluxb); | 
|---|
|  | 524 | dt.AddFloatColumn(nerrfluxb); | 
|---|
|  | 525 | dt.AddFloatColumn(nfond); | 
|---|
|  | 526 | dt.AddFloatColumn(nxi2); | 
|---|
|  | 527 | dt.AddFloatColumn(nx); | 
|---|
|  | 528 | dt.AddFloatColumn(ny); | 
|---|
|  | 529 | dt.AddFloatColumn(nsigx); | 
|---|
|  | 530 | dt.AddFloatColumn(nsigy); | 
|---|
|  | 531 | dt.AddFloatColumn(nflx); | 
|---|
|  | 532 | dt.AddFloatColumn(nfnd); | 
|---|
|  | 533 | dt.AddFloatColumn(nxi); | 
|---|
|  | 534 | } | 
|---|
|  | 535 | return dt; | 
|---|
|  | 536 | } | 
|---|
|  | 537 |  | 
|---|
|  | 538 | void dtmes(DataTable& dt, int nmes, STARINFO *sti, MESUREU *mesu) | 
|---|
|  | 539 | { | 
|---|
|  | 540 | int idn,jt,off,sz; | 
|---|
|  | 541 |  | 
|---|
|  | 542 |  | 
|---|
|  | 543 | double xnt[200]; | 
|---|
|  | 544 |  | 
|---|
|  | 545 |  | 
|---|
|  | 546 | //idn = 400; | 
|---|
|  | 547 | if (nmes > 10)  nmes=10; | 
|---|
|  | 548 |  | 
|---|
|  | 549 | xnt[0] = sti->NumEt; | 
|---|
|  | 550 | xnt[1] = sti->FluxRef; | 
|---|
|  | 551 | xnt[2] = sti->XPos; | 
|---|
|  | 552 | xnt[3] = sti->YPos; | 
|---|
|  | 553 | xnt[4] = sti->FgRef; | 
|---|
|  | 554 | xnt[5] = sti->NbVois; | 
|---|
|  | 555 | xnt[6] = sti->DisMin; | 
|---|
|  | 556 | xnt[7] = sti->DisM2; | 
|---|
|  | 557 |  | 
|---|
|  | 558 | off = 7;  sz = 13; | 
|---|
|  | 559 | if (nmes > 10) nmes = 10; | 
|---|
|  | 560 | for(jt=0; jt<nmes; jt++) | 
|---|
|  | 561 | { | 
|---|
|  | 562 | xnt[off+sz*jt+1] = mesu[jt].Flux; | 
|---|
|  | 563 | xnt[off+sz*jt+2] = mesu[jt].ErrFlux; | 
|---|
|  | 564 | xnt[off+sz*jt+3] = mesu[jt].FluxB; | 
|---|
|  | 565 | xnt[off+sz*jt+4] = mesu[jt].ErrFluxB; | 
|---|
|  | 566 | xnt[off+sz*jt+5] = mesu[jt].Fond; | 
|---|
|  | 567 | xnt[off+sz*jt+6] = mesu[jt].Xi2; | 
|---|
|  | 568 | xnt[off+sz*jt+7] = mesu[jt].X; | 
|---|
|  | 569 | xnt[off+sz*jt+8] = mesu[jt].Y; | 
|---|
|  | 570 | xnt[off+sz*jt+9] = mesu[jt].SigX; | 
|---|
|  | 571 | xnt[off+sz*jt+10] = mesu[jt].SigY; | 
|---|
|  | 572 | xnt[off+sz*jt+11] = mesu[jt].Flx0; | 
|---|
|  | 573 | xnt[off+sz*jt+12] = mesu[jt].Fnd0; | 
|---|
|  | 574 | xnt[off+sz*jt+13] = mesu[jt].Xi20; | 
|---|
|  | 575 | } | 
|---|
|  | 576 | dt.AddRow(xnt); | 
|---|
|  | 577 |  | 
|---|
|  | 578 | return; | 
|---|
|  | 579 | } | 
|---|
|  | 580 |  | 
|---|
|  | 581 |  | 
|---|
|  | 582 |  | 
|---|
|  | 583 | /* Nouvelle-Fonction */ | 
|---|
|  | 584 |  | 
|---|
|  | 585 | SRESOL *resolinit(int nmes, int nbin, float xmin, float xmax) | 
|---|
|  | 586 |  | 
|---|
|  | 587 | { | 
|---|
|  | 588 | int i,j; | 
|---|
|  | 589 | SRESOL *sres; | 
|---|
|  | 590 |  | 
|---|
|  | 591 | if (nbin < 1)  return(NULL); | 
|---|
|  | 592 | if (xmax <= xmin)   return(NULL); | 
|---|
|  | 593 |  | 
|---|
|  | 594 | //-> new sres = malloc(nmes*sizeof(SRESOL)); | 
|---|
|  | 595 | sres = new SRESOL[nmes]; | 
|---|
|  | 596 | if (sres == NULL)  return(NULL); | 
|---|
|  | 597 | for(i=0; i<nmes; i++) | 
|---|
|  | 598 | { | 
|---|
|  | 599 | sres[i].nbin = nbin; | 
|---|
|  | 600 | sres[i].xmin = xmin; | 
|---|
|  | 601 | sres[i].xmax = xmax; | 
|---|
|  | 602 | sres[i].dxbin = (xmax-xmin)/(float)nbin; | 
|---|
|  | 603 | //-> new  sres[i].nst = malloc(nbin*sizeof(int)); | 
|---|
|  | 604 | sres[i].nst = new int[nbin]; | 
|---|
|  | 605 | if (sres[i].nst == NULL)   break; | 
|---|
|  | 606 | //-> new  sres[i].nstr = malloc((nbin+2)*sizeof(int)); | 
|---|
|  | 607 | sres[i].nstr = new int[nbin+2]; | 
|---|
|  | 608 | if (sres[i].nstr == NULL) | 
|---|
|  | 609 | { delete[] sres[i].nst;  break; } | 
|---|
|  | 610 | //->new  sres[i].fmoy =  malloc(nbin*sizeof(float)); | 
|---|
|  | 611 | sres[i].fmoy =  new float[nbin]; | 
|---|
|  | 612 | if (sres[i].fmoy == NULL) | 
|---|
|  | 613 | { delete[] sres[i].nst; delete[] sres[i].nstr;  break; } | 
|---|
|  | 614 | //->new  sres[i].fmoyr =  malloc(nbin*sizeof(float)); | 
|---|
|  | 615 | sres[i].fmoyr =  new float[nbin] ; | 
|---|
|  | 616 | if (sres[i].fmoyr == NULL) | 
|---|
|  | 617 | { delete[] sres[i].nst; delete[] sres[i].nstr; | 
|---|
|  | 618 | delete[] sres[i].fmoy; break; } | 
|---|
|  | 619 | //-> new  sres[i].dflx =  malloc(nbin*sizeof(float)); | 
|---|
|  | 620 | sres[i].dflx =  new float[nbin]; | 
|---|
|  | 621 | if (sres[i].dflx == NULL) | 
|---|
|  | 622 | { delete[] sres[i].nst;  delete[] sres[i].nstr; | 
|---|
|  | 623 | delete[] sres[i].fmoy;  delete[] sres[i].fmoyr;  break; } | 
|---|
|  | 624 | //->new  sres[i].sflx =  malloc(nbin*sizeof(float)); | 
|---|
|  | 625 | sres[i].sflx =  new float[nbin]; | 
|---|
|  | 626 | if (sres[i].sflx == NULL) | 
|---|
|  | 627 | { delete[] sres[i].nst; delete[] sres[i].nstr; | 
|---|
|  | 628 | delete[] sres[i].fmoy;  delete[] sres[i].fmoyr; | 
|---|
|  | 629 | delete[] sres[i].dflx;  break; } | 
|---|
|  | 630 | //->new  sres[i].dflxe =  malloc(nbin*sizeof(float)); | 
|---|
|  | 631 | sres[i].dflxe =  new float[nbin]; | 
|---|
|  | 632 | if (sres[i].dflxe == NULL) | 
|---|
|  | 633 | { delete[] sres[i].nst;  delete[] sres[i].nstr; | 
|---|
|  | 634 | delete[] sres[i].fmoy; delete[] sres[i].fmoyr; | 
|---|
|  | 635 | delete[] sres[i].dflx;  delete[] sres[i].sflx;  break; } | 
|---|
|  | 636 | //->new  sres[i].sflxe =  malloc(nbin*sizeof(float)); | 
|---|
|  | 637 | sres[i].sflxe =  new float[nbin]; | 
|---|
|  | 638 | if (sres[i].sflxe == NULL) | 
|---|
|  | 639 | { delete[] sres[i].nst;  delete[] sres[i].nstr; | 
|---|
|  | 640 | delete[] sres[i].fmoy;  delete[] sres[i].fmoyr; | 
|---|
|  | 641 | delete[] sres[i].dflx;  delete[] sres[i].sflx; | 
|---|
|  | 642 | delete[] sres[i].dflxe;  break; } | 
|---|
|  | 643 | } | 
|---|
|  | 644 |  | 
|---|
|  | 645 | if (i != nmes) | 
|---|
|  | 646 | { | 
|---|
|  | 647 | /* BUG REZA ???  puts("resolinit_Erreur : Pb malloc/new  %d %d \n", i, nmes); */ | 
|---|
|  | 648 | printf("resolinit_Erreur : Pb malloc  %d %d \n", i, nmes); | 
|---|
|  | 649 | for(j=0; j<i; j++) | 
|---|
|  | 650 | { | 
|---|
|  | 651 | delete[] sres[j].nst; | 
|---|
|  | 652 | delete[] sres[j].nstr; | 
|---|
|  | 653 | delete[] sres[j].fmoy; | 
|---|
|  | 654 | delete[] sres[j].fmoyr; | 
|---|
|  | 655 | delete[] sres[j].dflx; | 
|---|
|  | 656 | delete[] sres[j].sflx; | 
|---|
|  | 657 | delete[] sres[j].dflxe; | 
|---|
|  | 658 | delete[] sres[j].sflxe; | 
|---|
|  | 659 | } | 
|---|
|  | 660 | delete[] sres; | 
|---|
|  | 661 | return(NULL); | 
|---|
|  | 662 | } | 
|---|
|  | 663 | for(i=0; i<nmes; i++) | 
|---|
|  | 664 | { | 
|---|
|  | 665 | for(j=0; j<nbin; j++) | 
|---|
|  | 666 | { | 
|---|
|  | 667 | sres[i].nst[j] = sres[i].nstr[j] = 0 ; | 
|---|
|  | 668 | sres[i].fmoy[j] = sres[i].fmoyr[j] = 0. ; | 
|---|
|  | 669 | sres[i].dflx[j] = 0. ; | 
|---|
|  | 670 | sres[i].sflx[j] = 0. ; | 
|---|
|  | 671 | sres[i].dflxe[j] = 0. ; | 
|---|
|  | 672 | sres[i].sflxe[j] = 0. ; | 
|---|
|  | 673 | } | 
|---|
|  | 674 | } | 
|---|
|  | 675 |  | 
|---|
|  | 676 | return(sres); | 
|---|
|  | 677 | } | 
|---|
|  | 678 |  | 
|---|
|  | 679 |  | 
|---|
|  | 680 | /* Nouvelle-Fonction */ | 
|---|
|  | 681 |  | 
|---|
|  | 682 | int resolst(SRESOL *sres, int nmes, STARINFO *sti, MESUREU *mesu) | 
|---|
|  | 683 | { | 
|---|
|  | 684 | int i,j,ib; | 
|---|
|  | 685 | float err, flx, flxr; | 
|---|
|  | 686 | float xlg, dx; | 
|---|
|  | 687 |  | 
|---|
|  | 688 | flxr = sti->FluxRef; | 
|---|
|  | 689 | if (flxr < 1.)  return(-1); | 
|---|
|  | 690 | xlg = (float)log10((double)flxr); | 
|---|
|  | 691 |  | 
|---|
|  | 692 | for(j=0; j<nmes; j++) | 
|---|
|  | 693 | { | 
|---|
|  | 694 | ib = (int)((xlg-sres[j].xmin)/sres[j].dxbin); | 
|---|
|  | 695 | if (ib < 0)  sres[j].nstr[sres[j].nbin]++; | 
|---|
|  | 696 | if (ib >= sres[j].nbin)  sres[j].nstr[sres[j].nbin+1]++; | 
|---|
|  | 697 | if ( (ib < 0) || (ib >= sres[j].nbin) )   continue; | 
|---|
|  | 698 | sres[j].nstr[ib]++; | 
|---|
|  | 699 | sres[j].fmoyr[ib] += flxr; | 
|---|
|  | 700 | if (mesu[j].Xi2 < 0.)  continue; | 
|---|
|  | 701 | err = mesu[j].ErrFlux; | 
|---|
|  | 702 | flx = mesu[j].Flux; | 
|---|
|  | 703 | if (err/flxr < 0.01)  err = 0.01*flxr; | 
|---|
|  | 704 | /* if (fabs((double)(err/flx)) > (1./xlg))  continue; */ | 
|---|
|  | 705 | if (fabs((double)((flx-flxr)/err)) > 8.)  continue; | 
|---|
|  | 706 | sres[j].nst[ib]++; | 
|---|
|  | 707 | sres[j].fmoy[ib] += flx; | 
|---|
|  | 708 | dx = flxr-flx; | 
|---|
|  | 709 | sres[j].dflx[ib] += dx; | 
|---|
|  | 710 | sres[j].sflx[ib] += (dx*dx); | 
|---|
|  | 711 | dx /= err; | 
|---|
|  | 712 | sres[j].dflxe[ib] += dx; | 
|---|
|  | 713 | sres[j].sflxe[ib] += (dx*dx); | 
|---|
|  | 714 | } | 
|---|
|  | 715 |  | 
|---|
|  | 716 | return(ib); | 
|---|
|  | 717 | } | 
|---|
|  | 718 |  | 
|---|
|  | 719 | /* Nouvelle-Fonction */ | 
|---|
|  | 720 | int resolend(SRESOL *sres, int nmes) | 
|---|
|  | 721 |  | 
|---|
|  | 722 | { | 
|---|
|  | 723 | int i,j,ib,idn; | 
|---|
|  | 724 | float ns; | 
|---|
|  | 725 | float xnt[10]; | 
|---|
|  | 726 |  | 
|---|
|  | 727 | printf("Resolend_Info: Under/OverFlow  %d %d \n", | 
|---|
|  | 728 | sres[0].nstr[sres[0].nbin], sres[0].nstr[sres[0].nbin+1]); | 
|---|
|  | 729 | for(j=0; j<nmes; j++) | 
|---|
|  | 730 | { | 
|---|
|  | 731 | idn = 501+j; | 
|---|
|  | 732 | for(ib=0; ib<sres[j].nbin; ib++) | 
|---|
|  | 733 | { | 
|---|
|  | 734 | xnt[0] = ib; | 
|---|
|  | 735 | xnt[1] = sres[j].xmin+ib*sres[j].dxbin; | 
|---|
|  | 736 | for(i=2; i<10; i++)  xnt[i] = 0.; | 
|---|
|  | 737 | if (sres[j].nstr[ib] < 1)   goto  Fill; | 
|---|
|  | 738 | sres[j].fmoyr[ib] /= (float)sres[j].nstr[ib]; | 
|---|
|  | 739 | xnt[8] = sres[j].nstr[ib]; | 
|---|
|  | 740 | xnt[9] = sres[j].fmoyr[ib]; | 
|---|
|  | 741 | if (sres[j].nst[ib] < 1)   goto  Fill; | 
|---|
|  | 742 | xnt[2] = ns = sres[j].nst[ib]; | 
|---|
|  | 743 | sres[j].fmoy[ib] /= ns; | 
|---|
|  | 744 | xnt[3] = sres[j].fmoy[ib]; | 
|---|
|  | 745 | sres[j].dflx[ib] /= ns; | 
|---|
|  | 746 | sres[j].sflx[ib] /= ns; | 
|---|
|  | 747 | sres[j].sflx[ib] -= sres[j].dflx[ib]*sres[j].dflx[ib]; | 
|---|
|  | 748 | if (sres[j].sflx[ib] >= 0.) | 
|---|
|  | 749 | sres[j].sflx[ib]  = (float)sqrt((double)sres[j].sflx[ib]); | 
|---|
|  | 750 | xnt[4] = sres[j].dflx[ib]; | 
|---|
|  | 751 | xnt[5] = sres[j].sflx[ib]; | 
|---|
|  | 752 | sres[j].dflxe[ib] /= ns; | 
|---|
|  | 753 | sres[j].sflxe[ib] /= ns; | 
|---|
|  | 754 | sres[j].sflxe[ib] -= sres[j].dflxe[ib]*sres[j].dflxe[ib]; | 
|---|
|  | 755 | if (sres[j].sflxe[ib] >= 0.) | 
|---|
|  | 756 | sres[j].sflxe[ib]  = (float)sqrt((double)sres[j].sflxe[ib]); | 
|---|
|  | 757 | xnt[6] = sres[j].dflxe[ib]; | 
|---|
|  | 758 | xnt[7] = sres[j].sflxe[ib]; | 
|---|
|  | 759 | Fill: | 
|---|
|  | 760 | // --- SOPHYA NTuple fill    hfn_(&idn, xnt); | 
|---|
|  | 761 | printf("Resol[%d,%d]  ns,nsr %d %d fm,df,sf= %g (%g) %g %g \n",j,ib, | 
|---|
|  | 762 | sres[j].nst[ib], sres[j].nstr[ib], | 
|---|
|  | 763 | sres[j].fmoy[ib], sres[j].fmoyr[ib], | 
|---|
|  | 764 | sres[j].dflx[ib], sres[j].sflx[ib]); | 
|---|
|  | 765 | } | 
|---|
|  | 766 | } | 
|---|
|  | 767 |  | 
|---|
|  | 768 | for(j=0; j<nmes; j++) | 
|---|
|  | 769 | { | 
|---|
|  | 770 | delete[] sres[j].nst; | 
|---|
|  | 771 | delete[] sres[j].nstr; | 
|---|
|  | 772 | delete[] sres[j].fmoy; | 
|---|
|  | 773 | delete[] sres[j].fmoyr; | 
|---|
|  | 774 | delete[] sres[j].dflx; | 
|---|
|  | 775 | delete[] sres[j].sflx; | 
|---|
|  | 776 | delete[] sres[j].dflxe; | 
|---|
|  | 777 | delete[] sres[j].sflxe; | 
|---|
|  | 778 | } | 
|---|
|  | 779 | delete[] sres; | 
|---|
|  | 780 |  | 
|---|
|  | 781 | return (0); | 
|---|
|  | 782 |  | 
|---|
|  | 783 | } | 
|---|