| 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 | 
 | 
|---|
| 66 | char *Pgnm = "hanafsv";
 | 
|---|
| 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 | }
 | 
|---|