Changeset 350 in Sophya for trunk/Poubelle/archTOI.old/toiiter.cc
- Timestamp:
- Aug 4, 1999, 4:10:06 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Poubelle/archTOI.old/toiiter.cc
r342 r350 1 // toiiter.cc 2 // Eric Aubourg CEA/DAPNIA/SPP juillet 1999 3 4 1 5 #include "toiiter.h" 2 6 #include "toiinterpolator.h" … … 13 17 file = NULL; 14 18 directory = ""; 15 fileName = "";16 19 17 20 files.clear(); … … 26 29 tBlock0 = -1; 27 30 perEch = -1; 31 // Values for Trapani 99 = default values 32 tBlock0 = 1376.8358818; 33 perEch = 0.005836818076; 28 34 29 35 trigMask = 0; … … 37 43 TOIIter::TOIIter(TOIIter const& x) { 38 44 directory = x.directory; 39 fileName = x.fileName;40 45 files = x.files; 41 46 // curFile = x.curFile; // $CHECK$ DANGER !! … … 82 87 83 88 void TOIIter::Init() { 84 // On a soit un repertoire, soit un fichier, soit une liste de fichiers....89 // On a soit un repertoire, soit une liste de fichiers.... 85 90 if (directory == "") { 86 if (files.empty()) { // un seul fichier 87 file = new ArcheopsFile(fileName); 91 if (files.empty()) { // Ni repertoire, ni fichiers 92 cerr << "toiiter : pas de repertoire, pas de fichiers" << endl; 93 exit(-1); 88 94 } else { 89 curFile = files.begin(); 90 file = new ArcheopsFile((*curFile).c_str()); 95 // On a deja une liste de fichiers 91 96 } 92 97 } else { // On a un repertoire a explorer … … 123 128 } 124 129 } else if (isOnBoardRecorder) { 125 if (strncmp(ent->d_name, "ARK", 3) ) continue;130 if (strncmp(ent->d_name, "ARK", 3) && strncmp(ent->d_name, "ark", 3)) continue; 126 131 char * sfx = ent->d_name + strlen(ent->d_name) - 4; 127 if (strcmp(sfx, ".DAT") ) continue;132 if (strcmp(sfx, ".DAT") && strcmp(sfx, ".dat")) continue; 128 133 files.insert(directory + ent->d_name); 129 134 } … … 131 136 } 132 137 closedir(dir); 133 curFile = files.begin(); 134 file = new ArcheopsFile((*curFile).c_str()); 135 } 138 } 139 140 ScanFiles(); 141 142 curFile = files.begin(); 143 file = new ArcheopsFile((*curFile).c_str()); 144 cout << "opening file " << (*curFile).c_str() << endl; 136 145 137 146 // On avance jusqu'a avoir au moins un bloc param et un bloc reglage, … … 139 148 // Si on a des donnees de l'enregistreur de vol, pas de bloc param, et 140 149 // on en simule un 150 double oldTStart = tStart; 151 tStart = -9.e99; // pour init, on accepte des blocs avant tstart.... 152 141 153 if (!file->lastParam()) { 142 154 if (isOnBoardRecorder) { … … 170 182 file->popMark(); 171 183 } 184 tStart = oldTStart; // on restaure 172 185 173 186 if (perEch < 0) … … 200 213 trigMask |= block_sst_mask; 201 214 break; 202 case sst Signal:215 case sstDiode: 203 216 file->needSSTProcessMask(SSTHandler::rmveOffset); 204 217 trigMask |= block_sst_mask; 205 218 break; 206 case sst Raw:219 case sstChannel: 207 220 trigMask |= block_sst_mask; 208 221 break; … … 234 247 } 235 248 delete file; file = NULL; // on ne travaille plus sur le fichier directement... 249 } 250 } 251 252 void TOIIter::ScanFiles() { 253 file1stSamp.clear(); 254 cout << "Scanning all files" << endl; 255 // Petite astuce pour les STL non conformes comme celles de digital 256 // qui ne supportent pas files.erase(i) suivi de i++.... 257 set<string> copy = files; 258 for (set<string>::iterator i = copy.begin(); i != copy.end(); i++) { 259 ArcheopsFile fich((*i).c_str()); 260 if (fich.nextBlock()) { 261 file1stSamp[*i] = fich.blockNum()*72; // premier numsample 262 cout << "File " << *i << " 1st sample = " << fich.blockNum()*72 << endl; 263 } else { 264 cout << "File " << *i << " unrecoverable, skipping" << endl; 265 files.erase(*i); 266 } 267 } 268 cout << "Scan done" << endl; 269 270 // Et maintenant, on ne garde que ceux qui tombent dans l'intervalle... 271 copy = files; 272 string prev=""; 273 for (set<string>::iterator i = copy.begin(); i != copy.end(); i++) { 274 double smp = file1stSamp[*i]; 275 double t = tBlock0 + smp * perEch/86400.; 276 if (t>tEnd) { // premier echantillon apres tEnd 277 files.erase(*i); 278 prev = ""; 279 continue; 280 } 281 if (t<tStart) { // premier echantillon avant tStart -> on vire le precedent si existe 282 if (prev != "") { 283 files.erase(prev); 284 } 285 } 286 prev = *i; 236 287 } 237 288 } … … 256 307 } 257 308 309 258 310 bool TOIIter::Next() { 311 while (1) { 312 if (!NextSample()) return false; // end of files 313 double t = tBlock0+(file->blockNum() * file->nEchBlock() + imes) * perEch/86400.; 314 if (t < tStart) continue; 315 if (t > tEnd) return false; 316 return true; 317 } 318 } 319 320 bool TOIIter::NextSample() { 259 321 if (rawIter) { // Delegation pour interpolation 260 322 // Trouve prochain sample disponible … … 324 386 case sampleNum: 325 387 case internalTime: 326 case utc:388 case mjd: 327 389 return true; 328 390 case boloTens: … … 331 393 case boloRaw: 332 394 return file->lastBolo() != NULL; 333 case sst Signal:334 case sst Raw:395 case sstDiode: 396 case sstChannel: 335 397 return file->lastSST() != NULL; 336 398 case sstStarZ: … … 370 432 //return (file->blockNum() * file->nEchBlock() + imes) * file->perEchant(); 371 433 return (file->blockNum() * file->nEchBlock() + imes) * perEch; 372 case utc:373 /* printf(" utc: %d %d %g %g %g\n",file->blockNum(),434 case mjd: 435 /* printf("mjd: %d %d %g %g %g\n",file->blockNum(), 374 436 (file->blockNum() * file->nEchBlock() + imes), 375 437 file->perEchant(), … … 382 444 case boloRaw: 383 445 return file->getRawBolo(index, imes); 384 case sst Signal:446 case sstDiode: 385 447 return file->getSSTSignal(index, imes); 386 case sst Raw:448 case sstChannel: 387 449 return file->getSSTRawSignal(index, imes); 388 450 case sstStarZ: … … 419 481 case sampleNum: 420 482 case internalTime: 421 case utc:483 case mjd: 422 484 return true; 423 485 case boloTens: … … 425 487 case boloRaw: 426 488 return file->blockNum() == file->getBoloBlockNum(); 427 case sst Raw:428 case sst Signal:489 case sstChannel: 490 case sstDiode: 429 491 case sstStarZ: 430 492 case sstStarF:
Note:
See TracChangeset
for help on using the changeset viewer.