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